gradle-build-action/src/execution.ts

43 lines
1.3 KiB
TypeScript
Raw Normal View History

import * as core from '@actions/core'
2020-06-13 19:44:30 +08:00
import * as exec from '@actions/exec'
import fs from 'fs'
import path from 'path'
import * as gradlew from './gradlew'
2019-09-21 22:01:53 +08:00
export async function executeGradleBuild(executable: string | undefined, root: string, args: string[]): Promise<void> {
2020-06-13 19:44:30 +08:00
let buildScanUrl: string | undefined
2019-09-21 22:01:53 +08:00
const buildScanFile = path.resolve(root, 'gradle-build-scan.txt')
if (fs.existsSync(buildScanFile)) {
fs.unlinkSync(buildScanFile)
}
// Use the provided executable, or look for a Gradle wrapper script to run
const toExecute = executable ?? gradlew.locateGradleWrapperScript(root)
verifyIsExecutableScript(toExecute)
const status: number = await exec.exec(toExecute, args, {
2019-09-21 22:01:53 +08:00
cwd: root,
ignoreReturnCode: true
2020-06-13 19:44:30 +08:00
})
2019-09-21 22:01:53 +08:00
if (fs.existsSync(buildScanFile)) {
buildScanUrl = fs.readFileSync(buildScanFile, 'utf-8')
}
if (status !== 0) {
if (buildScanUrl) {
core.setFailed(`Gradle build failed: ${buildScanUrl}`)
} else {
core.setFailed(`Gradle build failed: process exited with status ${status}`)
}
}
2019-09-21 22:01:53 +08:00
}
function verifyIsExecutableScript(toExecute: string): void {
try {
fs.accessSync(toExecute, fs.constants.X_OK)
} catch (err) {
throw new Error(`Gradle script '${toExecute}' is not executable.`)
}
}