Browse Source

Throw `VerificationException` for build verification failures

Verification failures are generally failures which verify correctness,
e.g., failures caused by test, compilation, linting, etc.
Non-verification failures are generally failures related to the
build toolchain, e.g., failures caused by dependency resolution, build
configuration, etc.

Develocity attempts to classify failures based on context, but it
doesn't always classify correctly. By default, most failures are
classified as non-verification. By explicitly throwing a
`VerificationException` for verification task failures, the failures
will be appropriately classified.

See gh-45187

See also: https://docs.gradle.com/develocity/failure-classification

Signed-off-by: Eric Haag <ehaag@gradle.com>
pull/45202/head
Eric Haag 8 months ago committed by Phillip Webb
parent
commit
579bdea431
  1. 4
      buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java
  2. 4
      buildSrc/src/main/java/org/springframework/boot/build/bom/CheckBom.java
  3. 6
      buildSrc/src/main/java/org/springframework/boot/build/context/properties/CheckAdditionalSpringConfigurationMetadata.java
  4. 6
      buildSrc/src/main/java/org/springframework/boot/build/context/properties/CheckSpringConfigurationMetadata.java
  5. 4
      buildSrc/src/main/java/org/springframework/boot/build/springframework/CheckFactoriesFile.java

4
buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureCheck.java

@ -31,7 +31,6 @@ import com.tngtech.archunit.core.importer.ClassFileImporter; @@ -31,7 +31,6 @@ import com.tngtech.archunit.core.importer.ClassFileImporter;
import com.tngtech.archunit.lang.ArchRule;
import com.tngtech.archunit.lang.EvaluationResult;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.Task;
import org.gradle.api.Transformer;
import org.gradle.api.file.DirectoryProperty;
@ -49,6 +48,7 @@ import org.gradle.api.tasks.PathSensitive; @@ -49,6 +48,7 @@ import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SkipWhenEmpty;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException;
/**
* {@link Task} that checks for architecture problems.
@ -86,7 +86,7 @@ public abstract class ArchitectureCheck extends DefaultTask { @@ -86,7 +86,7 @@ public abstract class ArchitectureCheck extends DefaultTask {
File outputFile = getOutputDirectory().file("failure-report.txt").get().getAsFile();
writeViolationReport(violations, outputFile);
if (!violations.isEmpty()) {
throw new GradleException("Architecture check failed. See '" + outputFile + "' for details.");
throw new VerificationException("Architecture check failed. See '" + outputFile + "' for details.");
}
}

4
buildSrc/src/main/java/org/springframework/boot/build/bom/CheckBom.java

@ -34,7 +34,6 @@ import org.apache.maven.artifact.versioning.DefaultArtifactVersion; @@ -34,7 +34,6 @@ import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.artifact.versioning.Restriction;
import org.apache.maven.artifact.versioning.VersionRange;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.dsl.DependencyHandler;
import org.gradle.api.file.RegularFile;
@ -44,6 +43,7 @@ import org.gradle.api.tasks.InputFile; @@ -44,6 +43,7 @@ import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException;
import org.springframework.boot.build.bom.Library.Group;
import org.springframework.boot.build.bom.Library.ImportedBom;
@ -94,7 +94,7 @@ public abstract class CheckBom extends DefaultTask { @@ -94,7 +94,7 @@ public abstract class CheckBom extends DefaultTask {
System.out.println();
errors.forEach(System.out::println);
System.out.println();
throw new GradleException("Bom check failed. See previous output for details.");
throw new VerificationException("Bom check failed. See previous output for details.");
}
}

6
buildSrc/src/main/java/org/springframework/boot/build/context/properties/CheckAdditionalSpringConfigurationMetadata.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -31,7 +31,6 @@ import java.util.Map; @@ -31,7 +31,6 @@ import java.util.Map;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.gradle.api.GradleException;
import org.gradle.api.file.FileTree;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.tasks.InputFiles;
@ -40,6 +39,7 @@ import org.gradle.api.tasks.PathSensitive; @@ -40,6 +39,7 @@ import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SourceTask;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException;
/**
* {@link SourceTask} that checks additional Spring configuration metadata files.
@ -70,7 +70,7 @@ public abstract class CheckAdditionalSpringConfigurationMetadata extends SourceT @@ -70,7 +70,7 @@ public abstract class CheckAdditionalSpringConfigurationMetadata extends SourceT
File reportFile = getReportLocation().get().getAsFile();
Files.write(reportFile.toPath(), report, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
if (report.hasProblems()) {
throw new GradleException(
throw new VerificationException(
"Problems found in additional Spring configuration metadata. See " + reportFile + " for details.");
}
}

6
buildSrc/src/main/java/org/springframework/boot/build/context/properties/CheckSpringConfigurationMetadata.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -30,7 +30,6 @@ import com.fasterxml.jackson.core.JsonParseException; @@ -30,7 +30,6 @@ import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.tasks.Input;
@ -40,6 +39,7 @@ import org.gradle.api.tasks.PathSensitive; @@ -40,6 +39,7 @@ import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SourceTask;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException;
/**
* {@link SourceTask} that checks {@code spring-configuration-metadata.json} files.
@ -70,7 +70,7 @@ public abstract class CheckSpringConfigurationMetadata extends DefaultTask { @@ -70,7 +70,7 @@ public abstract class CheckSpringConfigurationMetadata extends DefaultTask {
File reportFile = getReportLocation().get().getAsFile();
Files.write(reportFile.toPath(), report, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
if (report.hasProblems()) {
throw new GradleException(
throw new VerificationException(
"Problems found in Spring configuration metadata. See " + reportFile + " for details.");
}
}

4
buildSrc/src/main/java/org/springframework/boot/build/springframework/CheckFactoriesFile.java

@ -31,7 +31,6 @@ import java.util.Map; @@ -31,7 +31,6 @@ import java.util.Map;
import java.util.Properties;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.Task;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.FileCollection;
@ -43,6 +42,7 @@ import org.gradle.api.tasks.PathSensitive; @@ -43,6 +42,7 @@ import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SkipWhenEmpty;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException;
import org.gradle.language.base.plugins.LifecycleBasePlugin;
import org.springframework.core.io.support.SpringFactoriesLoader;
@ -112,7 +112,7 @@ public abstract class CheckFactoriesFile extends DefaultTask { @@ -112,7 +112,7 @@ public abstract class CheckFactoriesFile extends DefaultTask {
File outputFile = getOutputDirectory().file("failure-report.txt").get().getAsFile();
writeReport(factoriesFile, problems, outputFile);
if (!problems.isEmpty()) {
throw new GradleException("%s check failed. See '%s' for details".formatted(this.path, outputFile));
throw new VerificationException("%s check failed. See '%s' for details".formatted(this.path, outputFile));
}
}

Loading…
Cancel
Save