mirror of
https://github.com/gradle/actions.git
synced 2025-12-08 17:15:46 +08:00
Capture build results when config-cache is enabled
When enabled, the configuration-cache will cause the build to fail when a `buildFinished` listener is added. Instead, use a BuildService to listen for task failures and to write the results on build completion.
This commit is contained in:
44
src/resources/build-result-capture-service.plugin.groovy
Normal file
44
src/resources/build-result-capture-service.plugin.groovy
Normal file
@@ -0,0 +1,44 @@
|
||||
import org.gradle.tooling.events.*
|
||||
import org.gradle.tooling.events.task.*
|
||||
import org.gradle.util.GradleVersion
|
||||
|
||||
// Can't use settingsEvaluated since this script is applied inside a settingsEvaluated handler
|
||||
// But projectsEvaluated is good enough, since the build service won't catch configuration failures anyway
|
||||
projectsEvaluated {
|
||||
def projectTracker = gradle.sharedServices.registerIfAbsent("gradle-build-action-buildResultsRecorder", BuildResultsRecorder, { spec ->
|
||||
spec.getParameters().getRootProject().set(gradle.rootProject.name);
|
||||
spec.getParameters().getRequestedTasks().set(gradle.startParameter.taskNames.join(" "));
|
||||
})
|
||||
|
||||
gradle.services.get(BuildEventsListenerRegistry).onTaskCompletion(projectTracker)
|
||||
}
|
||||
|
||||
abstract class BuildResultsRecorder implements BuildService<BuildResultsRecorder.Params>, OperationCompletionListener, AutoCloseable {
|
||||
private boolean buildFailed = false
|
||||
interface Params extends BuildServiceParameters {
|
||||
Property<String> getRootProject();
|
||||
Property<String> getRequestedTasks();
|
||||
}
|
||||
|
||||
public void onFinish(FinishEvent finishEvent) {
|
||||
if (finishEvent instanceof TaskFinishEvent && finishEvent.result instanceof TaskFailureResult) {
|
||||
buildFailed = true
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
def buildResults = [
|
||||
rootProject: getParameters().getRootProject().get(),
|
||||
requestedTasks: getParameters().getRequestedTasks().get(),
|
||||
gradleVersion: GradleVersion.current().version,
|
||||
buildFailed: buildFailed,
|
||||
buildScanUri: null
|
||||
]
|
||||
|
||||
def buildResultsDir = new File(System.getenv("RUNNER_TEMP"), ".build-results")
|
||||
buildResultsDir.mkdirs()
|
||||
def buildResultsFile = new File(buildResultsDir, System.getenv("GITHUB_ACTION") + System.currentTimeMillis() + ".json")
|
||||
buildResultsFile << groovy.json.JsonOutput.toJson(buildResults)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user