Record build failure for task failure in included build

This commit is contained in:
daz 2025-02-25 20:56:11 -08:00
parent d9e39adac8
commit b9c6da94c2
No known key found for this signature in database
4 changed files with 40 additions and 6 deletions

View File

@ -41,7 +41,7 @@ abstract class BuildResultsRecorder implements BuildService<BuildResultsRecorder
// Got EVALUATE SETTINGS event: not a config-cache hit" // Got EVALUATE SETTINGS event: not a config-cache hit"
configCacheHit = false configCacheHit = false
} }
if (buildOperation.details in RunRootBuildWorkBuildOperationType.Details) { if (buildOperation.metadata == BuildOperationCategory.RUN_WORK) {
if (finishEvent.failure != null) { if (finishEvent.failure != null) {
buildFailed = true buildFailed = true
} }

View File

@ -25,13 +25,13 @@ if (isTopLevelBuild) {
def atLeastGradle3 = version >= GradleVersion.version("3.0") def atLeastGradle3 = version >= GradleVersion.version("3.0")
def atLeastGradle6 = version >= GradleVersion.version("6.0") def atLeastGradle6 = version >= GradleVersion.version("6.0")
def atLeastGradle7 = version >= GradleVersion.version("7.0")
def invocationId = "-${System.currentTimeMillis()}" def invocationId = "-${System.currentTimeMillis()}"
if (atLeastGradle6) { if (atLeastGradle6) {
// By default, use standard mechanisms to capture build results // Use BuildService for modern Gradle versions
def useBuildService = version >= GradleVersion.version("6.6") if (atLeastGradle7) {
if (useBuildService) {
captureUsingBuildService(invocationId) captureUsingBuildService(invocationId)
} else { } else {
captureUsingBuildFinished(gradle, invocationId, resultsWriter) captureUsingBuildFinished(gradle, invocationId, resultsWriter)

View File

@ -23,7 +23,6 @@ class BaseInitScriptTest extends Specification {
static final TestGradleVersion GRADLE_4_X = new TestGradleVersion(GradleVersion.version('4.10.3'), 7, 10) static final TestGradleVersion GRADLE_4_X = new TestGradleVersion(GradleVersion.version('4.10.3'), 7, 10)
static final TestGradleVersion GRADLE_5_X = new TestGradleVersion(GradleVersion.version('5.6.4'), 8, 12) static final TestGradleVersion GRADLE_5_X = new TestGradleVersion(GradleVersion.version('5.6.4'), 8, 12)
static final TestGradleVersion GRADLE_6_0 = new TestGradleVersion(GradleVersion.version('6.0.1'), 8, 13) static final TestGradleVersion GRADLE_6_0 = new TestGradleVersion(GradleVersion.version('6.0.1'), 8, 13)
static final TestGradleVersion GRADLE_6_NO_BUILD_SERVICE = new TestGradleVersion(GradleVersion.version('6.5.1'), 8, 14)
static final TestGradleVersion GRADLE_6_X = new TestGradleVersion(GradleVersion.version('6.9.4'), 8, 15) static final TestGradleVersion GRADLE_6_X = new TestGradleVersion(GradleVersion.version('6.9.4'), 8, 15)
static final TestGradleVersion GRADLE_7_1 = new TestGradleVersion(GradleVersion.version('7.1.1'), 8, 16) static final TestGradleVersion GRADLE_7_1 = new TestGradleVersion(GradleVersion.version('7.1.1'), 8, 16)
static final TestGradleVersion GRADLE_7_X = new TestGradleVersion(GradleVersion.version('7.6.2'), 8, 19) static final TestGradleVersion GRADLE_7_X = new TestGradleVersion(GradleVersion.version('7.6.2'), 8, 19)
@ -35,7 +34,6 @@ class BaseInitScriptTest extends Specification {
GRADLE_4_X, GRADLE_4_X,
GRADLE_5_X, GRADLE_5_X,
GRADLE_6_0, GRADLE_6_0,
GRADLE_6_NO_BUILD_SERVICE, // Last version without build service support
GRADLE_6_X, GRADLE_6_X,
GRADLE_7_1, GRADLE_7_1,
GRADLE_7_X, GRADLE_7_X,

View File

@ -34,6 +34,42 @@ class TestBuildResultRecorder extends BaseInitScriptTest {
testGradleVersion << ALL_VERSIONS testGradleVersion << ALL_VERSIONS
} }
def "produces build results file for build that fails in included build with #testGradleVersion"() {
assumeTrue testGradleVersion.compatibleWithCurrentJvm
when:
def includedBuildRoot = new File(testProjectDir, 'included-build')
includedBuildRoot.mkdir()
def includedSettings = new File(includedBuildRoot, 'settings.gradle')
def includedBuild = new File(includedBuildRoot, 'build.gradle')
includedSettings << """
rootProject.name = 'included-build'
"""
includedBuild << '''
task expectFailure {
doLast {
throw new RuntimeException("Expected to fail in included build")
}
}
'''
settingsFile << """
includeBuild('included-build')
"""
buildFile << """
task expectFailure {
dependsOn(gradle.includedBuild('included-build').task(':expectFailure'))
}
"""
runAndFail(testGradleVersion.gradleVersion)
then:
assertResults('expectFailure', testGradleVersion, true)
where:
testGradleVersion << ALL_VERSIONS
}
def "produces build results file for build with --configuration-cache on #testGradleVersion"() { def "produces build results file for build with --configuration-cache on #testGradleVersion"() {
assumeTrue testGradleVersion.compatibleWithCurrentJvm assumeTrue testGradleVersion.compatibleWithCurrentJvm