mirror of
https://github.com/jlengrand/jreleaser.git
synced 2026-03-10 08:31:24 +00:00
[model] distributions should have deterministic artifact order. Fixes #315
This commit is contained in:
@@ -20,6 +20,7 @@ package org.jreleaser.model;
|
||||
import org.jreleaser.util.PlatformUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -196,10 +197,11 @@ public class Brew extends AbstractRepositoryTool {
|
||||
|
||||
@Override
|
||||
public Set<String> getSupportedExtensions() {
|
||||
Set<String> extensions = super.getSupportedExtensions();
|
||||
extensions.add(".jar");
|
||||
Set<String> extensions = new LinkedHashSet<>();
|
||||
extensions.add(".dmg");
|
||||
extensions.add(".pkg");
|
||||
extensions.add(".zip");
|
||||
extensions.add(".jar");
|
||||
return extensions;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jreleaser.model.tool.spi.ToolProcessor;
|
||||
import org.jreleaser.util.Algorithm;
|
||||
import org.jreleaser.util.Constants;
|
||||
import org.jreleaser.util.FileUtils;
|
||||
import org.jreleaser.util.StringUtils;
|
||||
import org.zeroturnaround.exec.ProcessExecutor;
|
||||
import org.zeroturnaround.exec.ProcessInitException;
|
||||
|
||||
@@ -33,12 +34,12 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -290,11 +291,17 @@ abstract class AbstractToolProcessor<T extends Tool> implements ToolProcessor<T>
|
||||
}
|
||||
|
||||
protected List<Artifact> collectArtifacts(Distribution distribution) {
|
||||
Set<String> fileExtensions = tool.getSupportedExtensions();
|
||||
List<String> fileExtensions = new ArrayList<>(tool.getSupportedExtensions());
|
||||
|
||||
return distribution.getArtifacts().stream()
|
||||
.filter(Artifact::isActive)
|
||||
.filter(artifact -> fileExtensions.stream().anyMatch(ext -> artifact.getPath().endsWith(ext)))
|
||||
.filter(artifact -> tool.supportsPlatform(artifact.getPlatform()))
|
||||
// sort by platform, then by extension
|
||||
.sorted(Artifact.comparatorByPlatform().thenComparingInt(artifact -> {
|
||||
String ext = "." + StringUtils.getFilenameExtension(artifact.getPath());
|
||||
return fileExtensions.indexOf(ext);
|
||||
}))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
@@ -96,15 +96,18 @@ public class BrewToolProcessor extends AbstractRepositoryToolProcessor<Brew> {
|
||||
|
||||
Cask cask = tool.getCask();
|
||||
if (cask.isEnabled()) {
|
||||
boolean hasPkg = isNotBlank(cask.getPkgName());
|
||||
boolean hasApp = isNotBlank(cask.getAppName());
|
||||
|
||||
props.put(Constants.KEY_BREW_CASK_NAME, cask.getResolvedCaskName(props));
|
||||
props.put(Constants.KEY_BREW_CASK_DISPLAY_NAME, cask.getResolvedDisplayName(props));
|
||||
props.put(Constants.KEY_BREW_CASK_HAS_UNINSTALL, !cask.getUninstallItems().isEmpty());
|
||||
props.put(Constants.KEY_BREW_CASK_HAS_PKG, isNotBlank(cask.getPkgName()));
|
||||
if (isNotBlank(cask.getPkgName())) {
|
||||
props.put(Constants.KEY_BREW_CASK_HAS_PKG, hasPkg);
|
||||
if (hasPkg) {
|
||||
props.put(Constants.KEY_BREW_CASK_PKG, cask.getResolvedPkgName(props));
|
||||
}
|
||||
props.put(Constants.KEY_BREW_CASK_HAS_APP, isNotBlank(cask.getAppName()));
|
||||
if (isNotBlank(cask.getAppName())) {
|
||||
props.put(Constants.KEY_BREW_CASK_HAS_APP, hasApp);
|
||||
if (hasApp) {
|
||||
props.put(Constants.KEY_BREW_CASK_APP, cask.getResolvedAppName(props));
|
||||
}
|
||||
props.put(Constants.KEY_BREW_CASK_UNINSTALL, cask.getUninstallItems());
|
||||
@@ -114,12 +117,14 @@ public class BrewToolProcessor extends AbstractRepositoryToolProcessor<Brew> {
|
||||
props.put(Constants.KEY_BREW_CASK_HAS_APPCAST, isNotBlank(appcast));
|
||||
props.put(Constants.KEY_BREW_CASK_APPCAST, appcast);
|
||||
|
||||
for (Artifact artifact : distribution.getArtifacts()) {
|
||||
if (!artifact.isActive()) continue;
|
||||
if (artifact.getPath().endsWith(".zip") && !isTrue(artifact.getExtraProperties().get("skipBrew"))) {
|
||||
props.put(Constants.KEY_DISTRIBUTION_URL, resolveArtifactUrl(props, artifact));
|
||||
props.put(Constants.KEY_BREW_CASK_HAS_BINARY, true);
|
||||
break;
|
||||
if (!hasApp && !hasPkg) {
|
||||
for (Artifact artifact : distribution.getArtifacts()) {
|
||||
if (!artifact.isActive()) continue;
|
||||
if (artifact.getPath().endsWith(".zip") && !isTrue(artifact.getExtraProperties().get("skipBrew"))) {
|
||||
props.put(Constants.KEY_DISTRIBUTION_URL, resolveArtifactUrl(props, artifact));
|
||||
props.put(Constants.KEY_BREW_CASK_HAS_BINARY, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (tool.isMultiPlatform()) {
|
||||
@@ -153,7 +158,7 @@ public class BrewToolProcessor extends AbstractRepositoryToolProcessor<Brew> {
|
||||
if (multiPlatforms.isEmpty()) {
|
||||
throw new ToolProcessingException("There are no matching multi-platform binaries.");
|
||||
}
|
||||
props.put(Constants.KEY_BREW_MULTIPLATFORM, passThrough(String.join(System.lineSeparator()+" ", multiPlatforms)));
|
||||
props.put(Constants.KEY_BREW_MULTIPLATFORM, passThrough(String.join(System.lineSeparator() + " ", multiPlatforms)));
|
||||
} else if ((distribution.getType() == Distribution.DistributionType.JAVA_BINARY ||
|
||||
distribution.getType() == Distribution.DistributionType.SINGLE_JAR) &&
|
||||
!isTrue(tool.getExtraProperties().get("javaSkip")) &&
|
||||
|
||||
Reference in New Issue
Block a user