From 2019cfaa81899729b66bce2c141215d6700fb9e1 Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Mon, 6 Dec 2021 22:55:56 +0100 Subject: [PATCH] [packagers] handle skipSpec property on artifacts. Resolves #574 --- .../main/java/org/jreleaser/model/Spec.java | 2 ++ .../model/validation/SpecValidator.java | 22 +++++++++++++++++++ .../tools/AbstractToolProcessor.java | 5 +++++ .../jreleaser/tools/SpecToolProcessor.java | 9 +++++++- .../org/jreleaser/bundle/Messages.properties | 1 + 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/core/jreleaser-model/src/main/java/org/jreleaser/model/Spec.java b/core/jreleaser-model/src/main/java/org/jreleaser/model/Spec.java index 7d1167b0b..f167ad660 100644 --- a/core/jreleaser-model/src/main/java/org/jreleaser/model/Spec.java +++ b/core/jreleaser-model/src/main/java/org/jreleaser/model/Spec.java @@ -31,6 +31,8 @@ */ public class Spec extends AbstractRepositoryTool { public static final String NAME = "spec"; + public static final String SKIP_SPEC = "skipSpec"; + private final List requires = new ArrayList<>(); private final SpecRepository repository = new SpecRepository(); diff --git a/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/SpecValidator.java b/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/SpecValidator.java index e2183a3d1..4754a078a 100644 --- a/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/SpecValidator.java +++ b/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/SpecValidator.java @@ -17,6 +17,9 @@ */ package org.jreleaser.model.validation; +import org.jreleaser.bundle.RB; +import org.jreleaser.model.Active; +import org.jreleaser.model.Artifact; import org.jreleaser.model.Distribution; import org.jreleaser.model.GitService; import org.jreleaser.model.JReleaserContext; @@ -26,11 +29,16 @@ import org.jreleaser.util.Errors; import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import static java.util.stream.Collectors.toList; +import static org.jreleaser.model.Spec.SKIP_SPEC; import static org.jreleaser.model.validation.DistributionsValidator.validateArtifactPlatforms; import static org.jreleaser.model.validation.ExtraPropertiesValidator.mergeExtraProperties; import static org.jreleaser.model.validation.TemplateValidator.validateTemplate; import static org.jreleaser.util.StringUtils.isBlank; +import static org.jreleaser.util.StringUtils.isTrue; /** * @author Andres Almiray @@ -85,5 +93,19 @@ public static void validateSpec(JReleaserContext context, Distribution distribut mergeExtraProperties(tool, parentTool); validateContinueOnError(tool, parentTool); validateArtifactPlatforms(context, distribution, tool, errors); + + List candidateArtifacts = distribution.getArtifacts().stream() + .filter(Artifact::isActive) + .filter(artifact -> tool.getSupportedExtensions().stream().anyMatch(ext -> artifact.getPath().endsWith(ext))) + .filter(artifact -> !isTrue(artifact.getExtraProperties().get(SKIP_SPEC))) + .collect(toList()); + + if (candidateArtifacts.size() == 0) { + tool.setActive(Active.NEVER); + tool.disable(); + } else if(candidateArtifacts.size()> 1) { + errors.configuration(RB.$("validation_spec_multiple_artifacts", "distribution." + distribution.getName() + ".spec")); + tool.disable(); + } } } diff --git a/core/jreleaser-tools/src/main/java/org/jreleaser/tools/AbstractToolProcessor.java b/core/jreleaser-tools/src/main/java/org/jreleaser/tools/AbstractToolProcessor.java index 5e6949274..5e5fa26e4 100644 --- a/core/jreleaser-tools/src/main/java/org/jreleaser/tools/AbstractToolProcessor.java +++ b/core/jreleaser-tools/src/main/java/org/jreleaser/tools/AbstractToolProcessor.java @@ -333,6 +333,7 @@ protected List collectArtifacts(Distribution distribution) { .filter(Artifact::isActive) .filter(artifact -> fileExtensions.stream().anyMatch(ext -> artifact.getPath().endsWith(ext))) .filter(artifact -> tool.supportsPlatform(artifact.getPlatform())) + .filter(artifact -> !isSkipped(artifact)) // sort by platform, then by extension .sorted(Artifact.comparatorByPlatform().thenComparingInt(artifact -> { String ext = "." + StringUtils.getFilenameExtension(artifact.getPath()); @@ -341,6 +342,10 @@ protected List collectArtifacts(Distribution distribution) { .collect(Collectors.toList()); } + protected boolean isSkipped(Artifact artifact) { + return false; + } + protected void info(ByteArrayOutputStream out) { log(out, context.getLogger()::info); } diff --git a/core/jreleaser-tools/src/main/java/org/jreleaser/tools/SpecToolProcessor.java b/core/jreleaser-tools/src/main/java/org/jreleaser/tools/SpecToolProcessor.java index 19bd6f0df..c370d979f 100644 --- a/core/jreleaser-tools/src/main/java/org/jreleaser/tools/SpecToolProcessor.java +++ b/core/jreleaser-tools/src/main/java/org/jreleaser/tools/SpecToolProcessor.java @@ -34,8 +34,10 @@ import java.util.Map; import java.util.Set; +import static org.jreleaser.model.Spec.SKIP_SPEC; import static org.jreleaser.templates.TemplateUtils.trimTplExtension; import static org.jreleaser.util.StringUtils.getFilename; +import static org.jreleaser.util.StringUtils.isTrue; /** * @author Andres Almiray @@ -79,7 +81,7 @@ private void setupJavaBinary(Distribution distribution, Map prop files.add(entry.replace(context.getModel().getProject().getResolvedVersion(), "%{version}") .replace(context.getModel().getProject().getEffectiveVersion(), - "%{version}")); + "%{version}")); }); props.put(Constants.KEY_SPEC_DIRECTORIES, directories); @@ -117,4 +119,9 @@ protected void writeFile(Project project, writeFile(content, outputFile); } + + @Override + protected boolean isSkipped(Artifact artifact) { + return isTrue(artifact.getExtraProperties().get(SKIP_SPEC)); + } } diff --git a/core/jreleaser-utils/src/main/resources/org/jreleaser/bundle/Messages.properties b/core/jreleaser-utils/src/main/resources/org/jreleaser/bundle/Messages.properties index 292998bed..441a4904c 100644 --- a/core/jreleaser-utils/src/main/resources/org/jreleaser/bundle/Messages.properties +++ b/core/jreleaser-utils/src/main/resources/org/jreleaser/bundle/Messages.properties @@ -232,6 +232,7 @@ validation_multiple_assemblers = {} has more than 1 assembler: {} validation_brew_multiple_artifact = {} has more than one {} artifact validation_brew_single_artifact = {} can only have a single matching .dmg, .pkg, or .zip artifact validation_brew_duplicate_definition = {} is defined for more than one distribution: {} +validation_spec_multiple_artifacts = {} has nore than one artifact that may be packaged with spec validation_discussions_enabled = discussions may only be used when releasing to GitHub validation_distributions_java = {} is set to {} but neither {} nor {} have been set validation_distributions_multiple = {} has more than one artifact with {} platform for extension {}