From 77699bae74fcfcf7dbe2095af457475d9cb6e9f4 Mon Sep 17 00:00:00 2001 From: daz Date: Mon, 11 Dec 2023 20:18:58 -0700 Subject: [PATCH] Handle failure writing build-results file Fixes #866 --- ...build-result-capture-service.plugin.groovy | 16 +++++++----- ...ld-action.build-result-capture.init.gradle | 25 +++++++++++-------- .../TestBuildResultRecorder.groovy | 17 +++++++++++++ 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/resources/init-scripts/gradle-build-action.build-result-capture-service.plugin.groovy b/src/resources/init-scripts/gradle-build-action.build-result-capture-service.plugin.groovy index 68bd380..bcfc28f 100644 --- a/src/resources/init-scripts/gradle-build-action.build-result-capture-service.plugin.groovy +++ b/src/resources/init-scripts/gradle-build-action.build-result-capture-service.plugin.groovy @@ -50,12 +50,16 @@ abstract class BuildResultsRecorder implements BuildService ${e.getLocalizedMessage()}" } } } diff --git a/src/resources/init-scripts/gradle-build-action.build-result-capture.init.gradle b/src/resources/init-scripts/gradle-build-action.build-result-capture.init.gradle index 141a453..cfb15eb 100644 --- a/src/resources/init-scripts/gradle-build-action.build-result-capture.init.gradle +++ b/src/resources/init-scripts/gradle-build-action.build-result-capture.init.gradle @@ -121,18 +121,23 @@ class BuildResults { if (!runnerTempDir || !githubActionStep) { return } - - def buildResultsDir = new File(runnerTempDir, ".build-results") - buildResultsDir.mkdirs() - def buildResultsFile = new File(buildResultsDir, githubActionStep + invocationId + ".json") - // Overwrite any contents written by buildFinished or build service, since this result is a superset. - if (buildResultsFile.exists()) { - if (overwrite) { - buildResultsFile.text = groovy.json.JsonOutput.toJson(buildResults) + try { + def buildResultsDir = new File(runnerTempDir, ".build-results") + buildResultsDir.mkdirs() + def buildResultsFile = new File(buildResultsDir, githubActionStep + invocationId + ".json") + + // Overwrite any contents written by buildFinished or build service, since this result is a superset. + if (buildResultsFile.exists()) { + if (overwrite) { + buildResultsFile.text = groovy.json.JsonOutput.toJson(buildResults) + } + } else { + buildResultsFile << groovy.json.JsonOutput.toJson(buildResults) } - } else { - buildResultsFile << groovy.json.JsonOutput.toJson(buildResults) + + } catch (Exception e) { + println "\ngradle-build-action failed to write build-results file. Will continue.\n> ${e.getLocalizedMessage()}" } } } diff --git a/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestBuildResultRecorder.groovy b/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestBuildResultRecorder.groovy index e49c5d0..b26034f 100644 --- a/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestBuildResultRecorder.groovy +++ b/test/init-scripts/src/test/groovy/com/gradle/gradlebuildaction/TestBuildResultRecorder.groovy @@ -148,6 +148,23 @@ class TestBuildResultRecorder extends BaseInitScriptTest { testGradleVersion << ALL_VERSIONS } + def "produces no build results file when RUNNER_TEMP dir is not a writable directory with #testGradleVersion"() { + assumeTrue testGradleVersion.compatibleWithCurrentJvm + + when: + def invalidDir = new File(testProjectDir, 'invalid-runner-temp') + invalidDir.createNewFile() + + run(['help'], initScript, testGradleVersion.gradleVersion, [], [RUNNER_TEMP: invalidDir.absolutePath]) + + then: + def buildResultsDir = new File(testProjectDir, '.build-results') + assert !buildResultsDir.exists() + + where: + testGradleVersion << ALL_VERSIONS + } + def "produces build results file with build scan when GE plugin is applied in settingsEvaluated"() { assumeTrue testGradleVersion.compatibleWithCurrentJvm