mirror of
				https://github.com/gradle/gradle-build-action.git
				synced 2025-10-30 06:38:57 +08:00 
			
		
		
		
	Capture failure to publish build scan in results
This commit is contained in:
		| @@ -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() { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user