mirror of
https://github.com/gradle/gradle-build-action.git
synced 2024-11-22 09:02:50 +00:00
Capture failure to publish build scan in results
This commit is contained in:
parent
2335d51128
commit
132237ba05
4 changed files with 61 additions and 4 deletions
|
@ -41,7 +41,8 @@ abstract class BuildResultsRecorder implements BuildService<BuildResultsRecorder
|
||||||
gradleVersion: GradleVersion.current().version,
|
gradleVersion: GradleVersion.current().version,
|
||||||
gradleHomeDir: getParameters().getGradleHomeDir().get(),
|
gradleHomeDir: getParameters().getGradleHomeDir().get(),
|
||||||
buildFailed: buildFailed,
|
buildFailed: buildFailed,
|
||||||
buildScanUri: null
|
buildScanUri: null,
|
||||||
|
buildScanFailed: false
|
||||||
]
|
]
|
||||||
|
|
||||||
def buildResultsDir = new File(System.getenv("RUNNER_TEMP"), ".build-results")
|
def buildResultsDir = new File(System.getenv("RUNNER_TEMP"), ".build-results")
|
||||||
|
|
|
@ -61,7 +61,8 @@ def captureUsingBuildScanPublished(buildScanExtension, rootProject, invocationId
|
||||||
gradleVersion: gradleVersion,
|
gradleVersion: gradleVersion,
|
||||||
gradleHomeDir: gradleHomeDir,
|
gradleHomeDir: gradleHomeDir,
|
||||||
buildFailed: buildFailed,
|
buildFailed: buildFailed,
|
||||||
buildScanUri: buildScanUri
|
buildScanUri: buildScanUri,
|
||||||
|
buildScanFailed: false
|
||||||
]
|
]
|
||||||
|
|
||||||
def buildResultsDir = new File(System.getenv("RUNNER_TEMP"), ".build-results")
|
def buildResultsDir = new File(System.getenv("RUNNER_TEMP"), ".build-results")
|
||||||
|
@ -77,6 +78,30 @@ def captureUsingBuildScanPublished(buildScanExtension, rootProject, invocationId
|
||||||
|
|
||||||
println("::set-output name=build-scan-url::${buildScan.buildScanUri}")
|
println("::set-output name=build-scan-url::${buildScan.buildScanUri}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onError { error ->
|
||||||
|
def buildResults = [
|
||||||
|
rootProjectName: rootProjectName,
|
||||||
|
rootProjectDir: rootProjectDir,
|
||||||
|
requestedTasks: requestedTasks,
|
||||||
|
gradleVersion: gradleVersion,
|
||||||
|
gradleHomeDir: gradleHomeDir,
|
||||||
|
buildFailed: buildFailed,
|
||||||
|
buildScanUri: null,
|
||||||
|
buildScanFailed: true
|
||||||
|
]
|
||||||
|
|
||||||
|
def buildResultsDir = new File(System.getenv("RUNNER_TEMP"), ".build-results")
|
||||||
|
buildResultsDir.mkdirs()
|
||||||
|
def buildResultsFile = new File(buildResultsDir, System.getenv("GITHUB_ACTION") + invocationId + ".json")
|
||||||
|
|
||||||
|
// Overwrite any contents written by buildFinished or build service, since this result is a superset.
|
||||||
|
if (buildResultsFile.exists()) {
|
||||||
|
buildResultsFile.text = groovy.json.JsonOutput.toJson(buildResults)
|
||||||
|
} else {
|
||||||
|
buildResultsFile << groovy.json.JsonOutput.toJson(buildResults)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +114,8 @@ def captureUsingBuildFinished(gradle, invocationId) {
|
||||||
gradleVersion: GradleVersion.current().version,
|
gradleVersion: GradleVersion.current().version,
|
||||||
gradleHomeDir: gradle.gradleHomeDir.absolutePath,
|
gradleHomeDir: gradle.gradleHomeDir.absolutePath,
|
||||||
buildFailed: result.failure != null,
|
buildFailed: result.failure != null,
|
||||||
buildScanUri: null
|
buildScanUri: null,
|
||||||
|
buildScanFailed: false
|
||||||
]
|
]
|
||||||
|
|
||||||
def buildResultsDir = new File(System.getenv("RUNNER_TEMP"), ".build-results")
|
def buildResultsDir = new File(System.getenv("RUNNER_TEMP"), ".build-results")
|
||||||
|
|
|
@ -45,6 +45,7 @@ class BaseInitScriptTest extends Specification {
|
||||||
static final String PUBLIC_BUILD_SCAN_ID = 'i2wepy2gr7ovw'
|
static final String PUBLIC_BUILD_SCAN_ID = 'i2wepy2gr7ovw'
|
||||||
static final String DEFAULT_SCAN_UPLOAD_TOKEN = 'scan-upload-token'
|
static final String DEFAULT_SCAN_UPLOAD_TOKEN = 'scan-upload-token'
|
||||||
static final String ROOT_PROJECT_NAME = 'test-init-script'
|
static final String ROOT_PROJECT_NAME = 'test-init-script'
|
||||||
|
boolean failScanUpload = false
|
||||||
|
|
||||||
File settingsFile
|
File settingsFile
|
||||||
File buildFile
|
File buildFile
|
||||||
|
@ -59,6 +60,10 @@ class BaseInitScriptTest extends Specification {
|
||||||
|
|
||||||
handlers {
|
handlers {
|
||||||
post('in/:gradleVersion/:pluginVersion') {
|
post('in/:gradleVersion/:pluginVersion') {
|
||||||
|
if (failScanUpload) {
|
||||||
|
context.response.status(401).send()
|
||||||
|
return
|
||||||
|
}
|
||||||
def scanUrlString = "${mockScansServer.address}s/$PUBLIC_BUILD_SCAN_ID"
|
def scanUrlString = "${mockScansServer.address}s/$PUBLIC_BUILD_SCAN_ID"
|
||||||
def body = [
|
def body = [
|
||||||
id : PUBLIC_BUILD_SCAN_ID,
|
id : PUBLIC_BUILD_SCAN_ID,
|
||||||
|
@ -72,6 +77,10 @@ class BaseInitScriptTest extends Specification {
|
||||||
}
|
}
|
||||||
prefix('scans/publish') {
|
prefix('scans/publish') {
|
||||||
post('gradle/:pluginVersion/token') {
|
post('gradle/:pluginVersion/token') {
|
||||||
|
if (failScanUpload) {
|
||||||
|
context.response.status(401).send()
|
||||||
|
return
|
||||||
|
}
|
||||||
def pluginVersion = context.pathTokens.pluginVersion
|
def pluginVersion = context.pathTokens.pluginVersion
|
||||||
def scanUrlString = "${mockScansServer.address}s/$PUBLIC_BUILD_SCAN_ID"
|
def scanUrlString = "${mockScansServer.address}s/$PUBLIC_BUILD_SCAN_ID"
|
||||||
def body = [
|
def body = [
|
||||||
|
@ -85,6 +94,10 @@ class BaseInitScriptTest extends Specification {
|
||||||
.send(jsonWriter.writeValueAsBytes(body))
|
.send(jsonWriter.writeValueAsBytes(body))
|
||||||
}
|
}
|
||||||
post('gradle/:pluginVersion/upload') {
|
post('gradle/:pluginVersion/upload') {
|
||||||
|
if (failScanUpload) {
|
||||||
|
context.response.status(401).send()
|
||||||
|
return
|
||||||
|
}
|
||||||
context.request.getBody(1024 * 1024 * 10).then {
|
context.request.getBody(1024 * 1024 * 10).then {
|
||||||
context.response
|
context.response
|
||||||
.contentType('application/vnd.gradle.scan-upload-ack+json')
|
.contentType('application/vnd.gradle.scan-upload-ack+json')
|
||||||
|
|
|
@ -118,7 +118,23 @@ class TestBuildResultRecorder extends BaseInitScriptTest {
|
||||||
testGradleVersion << CONFIGURATION_CACHE_VERSIONS
|
testGradleVersion << CONFIGURATION_CACHE_VERSIONS
|
||||||
}
|
}
|
||||||
|
|
||||||
void assertResults(String task, TestGradleVersion testGradleVersion, boolean hasFailure, boolean hasBuildScan) {
|
def "produces build results file for failing build on #testGradleVersion when build scan publish fails"() {
|
||||||
|
assumeTrue testGradleVersion.compatibleWithCurrentJvm
|
||||||
|
|
||||||
|
when:
|
||||||
|
declareGePluginApplication(testGradleVersion.gradleVersion)
|
||||||
|
addFailingTaskToBuild()
|
||||||
|
failScanUpload = true
|
||||||
|
runAndFail(['expectFailure'], initScript, testGradleVersion.gradleVersion)
|
||||||
|
|
||||||
|
then:
|
||||||
|
assertResults('expectFailure', testGradleVersion, true, false, true)
|
||||||
|
|
||||||
|
where:
|
||||||
|
testGradleVersion << ALL_VERSIONS
|
||||||
|
}
|
||||||
|
|
||||||
|
void assertResults(String task, TestGradleVersion testGradleVersion, boolean hasFailure, boolean hasBuildScan, boolean scanUploadFailed = false) {
|
||||||
def results = new JsonSlurper().parse(buildResultFile)
|
def results = new JsonSlurper().parse(buildResultFile)
|
||||||
assert results['rootProjectName'] == ROOT_PROJECT_NAME
|
assert results['rootProjectName'] == ROOT_PROJECT_NAME
|
||||||
assert results['rootProjectDir'] == testProjectDir.canonicalPath
|
assert results['rootProjectDir'] == testProjectDir.canonicalPath
|
||||||
|
@ -127,6 +143,7 @@ class TestBuildResultRecorder extends BaseInitScriptTest {
|
||||||
assert results['gradleHomeDir'] != null
|
assert results['gradleHomeDir'] != null
|
||||||
assert results['buildFailed'] == hasFailure
|
assert results['buildFailed'] == hasFailure
|
||||||
assert results['buildScanUri'] == (hasBuildScan ? "${mockScansServer.address}s/${PUBLIC_BUILD_SCAN_ID}" : null)
|
assert results['buildScanUri'] == (hasBuildScan ? "${mockScansServer.address}s/${PUBLIC_BUILD_SCAN_ID}" : null)
|
||||||
|
assert results['buildScanFailed'] == scanUploadFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
private File getBuildResultFile() {
|
private File getBuildResultFile() {
|
||||||
|
|
Loading…
Reference in a new issue