From 8a4d35bccffb2585f4e6831f45edbd53d2e7727d Mon Sep 17 00:00:00 2001 From: Hunter Mellema <124718352+hpmellema@users.noreply.github.com> Date: Mon, 18 Mar 2024 16:12:14 -0600 Subject: [PATCH] Add severity option for validators (#131) Adds a severity option to the build and validate tasks to allow setting a minimum validation event severity --- .../smithy/gradle/tasks/BaseSmithyTask.java | 10 ++++++++ .../smithy/gradle/tasks/SmithyBuildTask.java | 7 ++++++ .../gradle/tasks/SmithyValidateTask.java | 23 +++++++++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/smithy-base/src/main/java/software/amazon/smithy/gradle/tasks/BaseSmithyTask.java b/smithy-base/src/main/java/software/amazon/smithy/gradle/tasks/BaseSmithyTask.java index 669aaf2..3a648af 100644 --- a/smithy-base/src/main/java/software/amazon/smithy/gradle/tasks/BaseSmithyTask.java +++ b/smithy-base/src/main/java/software/amazon/smithy/gradle/tasks/BaseSmithyTask.java @@ -127,6 +127,16 @@ Provider getCliExecutionClasspath() { @Optional public abstract Property getShowStackTrace(); + /** + * Set the minimum reported validation severity. + * + *

This value should be one of: NOTE, WARNING [default], DANGER, ERROR. + * + * @return minimum validator severity + */ + @Input + @Optional + public abstract Property getSeverity(); @Internal WorkerExecutor getExecutor() { diff --git a/smithy-base/src/main/java/software/amazon/smithy/gradle/tasks/SmithyBuildTask.java b/smithy-base/src/main/java/software/amazon/smithy/gradle/tasks/SmithyBuildTask.java index 6e0d377..f04a6b5 100644 --- a/smithy-base/src/main/java/software/amazon/smithy/gradle/tasks/SmithyBuildTask.java +++ b/smithy-base/src/main/java/software/amazon/smithy/gradle/tasks/SmithyBuildTask.java @@ -25,6 +25,7 @@ import org.gradle.api.tasks.TaskAction; import software.amazon.smithy.cli.BuildParameterBuilder; import software.amazon.smithy.gradle.SmithyUtils; +import software.amazon.smithy.model.validation.Severity; /** * Executes the Smithy CLI {@code build} command. @@ -39,6 +40,7 @@ public SmithyBuildTask(ObjectFactory objectFactory) { super(objectFactory); getSourceProjection().convention("source"); + getSeverity().convention(Severity.WARNING.toString()); getOutputDir().convention(SmithyUtils.getProjectionOutputDirProperty(getProject())); } @@ -149,6 +151,11 @@ public void execute() { // Add extra configuration options for build command List extraArgs = new ArrayList<>(); configureLoggingOptions(extraArgs); + + // Add validator severity option if it exists + extraArgs.add("--severity"); + extraArgs.add(getSeverity().get()); + builder.addExtraArgs(extraArgs.toArray(new String[0])); BuildParameterBuilder.Result result = builder.build(); diff --git a/smithy-jar/src/main/java/software/amazon/smithy/gradle/tasks/SmithyValidateTask.java b/smithy-jar/src/main/java/software/amazon/smithy/gradle/tasks/SmithyValidateTask.java index 1553221..e7cd947 100644 --- a/smithy-jar/src/main/java/software/amazon/smithy/gradle/tasks/SmithyValidateTask.java +++ b/smithy-jar/src/main/java/software/amazon/smithy/gradle/tasks/SmithyValidateTask.java @@ -5,6 +5,8 @@ package software.amazon.smithy.gradle.tasks; +import java.util.ArrayList; +import java.util.List; import javax.inject.Inject; import org.gradle.api.file.FileCollection; import org.gradle.api.model.ObjectFactory; @@ -15,7 +17,7 @@ import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.TaskAction; -import software.amazon.smithy.utils.ListUtils; +import software.amazon.smithy.model.validation.Severity; /** @@ -35,6 +37,7 @@ public SmithyValidateTask(ObjectFactory objectFactory) { super(objectFactory); getAllowUnknownTraits().convention(false); getDisableModelDiscovery().convention(false); + getSeverity().convention(Severity.ERROR.toString()); setDescription(DESCRIPTION); } @@ -67,6 +70,17 @@ public SmithyValidateTask(ObjectFactory objectFactory) { @Optional public abstract Property getDisableModelDiscovery(); + /** + * Set the minimum reported validation severity. + * + *

This value should be one of: NOTE, WARNING, DANGER, ERROR [default]. + * + * @return minimum validator severity + */ + @Input + @Optional + public abstract Property getSeverity(); + /** * Gets the classpath to use when executing the Smithy CLI. * @@ -86,8 +100,13 @@ Provider getCliExecutionClasspath() { public void execute() { writeHeading("Running smithy validate"); + // Add validator severity settings + List extraArgs = new ArrayList<>(); + extraArgs.add("--severity"); + extraArgs.add(getSeverity().get()); + // Set models to an empty collection so source models are not included in validation path. - executeCliProcess("validate", ListUtils.of(), + executeCliProcess("validate", extraArgs, getJarToValidate().get(), getDisableModelDiscovery().get() );