From 5b5d720e6fe19400104bf606547fed374d43ec06 Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Sat, 10 Jul 2021 19:01:45 +0200 Subject: [PATCH] [assemble] let generated artifacts be transformed. Resolves #281 --- .../assemblers/JlinkAssemblerProcessor.java | 6 +++++- .../NativeImageAssemblerProcessor.java | 7 ++++++- .../java/org/jreleaser/model/Artifact.java | 12 +----------- .../main/java/org/jreleaser/model/Jlink.java | 19 +++++++++++++++++++ .../java/org/jreleaser/model/NativeImage.java | 19 +++++++++++++++++++ .../org/jreleaser/model/util/Artifacts.java | 13 +++++++++++++ .../model/validation/JlinkResolver.java | 9 ++++++++- .../model/validation/NativeImageResolver.java | 9 ++++++++- .../jreleaser/gradle/plugin/dsl/Jlink.groovy | 2 ++ .../gradle/plugin/dsl/NativeImage.groovy | 2 ++ .../plugin/internal/dsl/JlinkImpl.groovy | 3 +++ .../internal/dsl/NativeImageImpl.groovy | 3 +++ .../org/jreleaser/maven/plugin/Jlink.java | 10 ++++++++++ .../jreleaser/maven/plugin/NativeImage.java | 10 ++++++++++ .../internal/JReleaserModelConverter.java | 2 ++ 15 files changed, 111 insertions(+), 15 deletions(-) diff --git a/core/jreleaser-assemblers/src/main/java/org/jreleaser/assemblers/JlinkAssemblerProcessor.java b/core/jreleaser-assemblers/src/main/java/org/jreleaser/assemblers/JlinkAssemblerProcessor.java index ef0a1aba..dae25bb2 100644 --- a/core/jreleaser-assemblers/src/main/java/org/jreleaser/assemblers/JlinkAssemblerProcessor.java +++ b/core/jreleaser-assemblers/src/main/java/org/jreleaser/assemblers/JlinkAssemblerProcessor.java @@ -92,7 +92,11 @@ public class JlinkAssemblerProcessor extends AbstractAssemblerProcessor { // run jlink x jdk String imageName = assembler.getResolvedImageName(context); for (Artifact targetJdk : assembler.getTargetJdks()) { - jlink(assembleDirectory, jdkPath, targetJdk, moduleNames, imageName); + Artifact image = jlink(assembleDirectory, jdkPath, targetJdk, moduleNames, imageName); + if (isNotBlank(assembler.getImageNameTransform())) { + image.setTransform(assembler.getImageNameTransform() + "-" + targetJdk.getPlatform() + ".zip"); + image.getEffectivePath(context); + } } } diff --git a/core/jreleaser-assemblers/src/main/java/org/jreleaser/assemblers/NativeImageAssemblerProcessor.java b/core/jreleaser-assemblers/src/main/java/org/jreleaser/assemblers/NativeImageAssemblerProcessor.java index 0614df3a..920f0eed 100644 --- a/core/jreleaser-assemblers/src/main/java/org/jreleaser/assemblers/NativeImageAssemblerProcessor.java +++ b/core/jreleaser-assemblers/src/main/java/org/jreleaser/assemblers/NativeImageAssemblerProcessor.java @@ -41,6 +41,7 @@ import java.util.Set; import java.util.stream.Collectors; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; +import static org.jreleaser.util.StringUtils.isNotBlank; /** * @author Andres Almiray @@ -73,7 +74,11 @@ public class NativeImageAssemblerProcessor extends AbstractAssemblerProcessor jars = new ArrayList<>(); private String imageName; + private String imageNameTransform; private String moduleName; public Jlink() { @@ -56,6 +58,7 @@ public class Jlink extends AbstractAssembler { void setAll(Jlink jlink) { super.setAll(jlink); this.imageName = jlink.imageName; + this.imageNameTransform = jlink.imageNameTransform; this.moduleName = jlink.moduleName; setJdk(jlink.jdk); setMainJar(jlink.mainJar); @@ -71,6 +74,13 @@ public class Jlink extends AbstractAssembler { return applyTemplate(imageName, props); } + public String getResolvedImageNameTransform(JReleaserContext context) { + if (isBlank(imageNameTransform)) return null; + Map props = context.props(); + props.putAll(props()); + return applyTemplate(imageNameTransform, props); + } + public Artifact getJdk() { return jdk; } @@ -95,6 +105,14 @@ public class Jlink extends AbstractAssembler { this.imageName = imageName; } + public String getImageNameTransform() { + return imageNameTransform; + } + + public void setImageNameTransform(String imageNameTransform) { + this.imageNameTransform = imageNameTransform; + } + public String getModuleName() { return moduleName; } @@ -194,6 +212,7 @@ public class Jlink extends AbstractAssembler { @Override protected void asMap(boolean full, Map props) { props.put("imageName", imageName); + props.put("imageNameTransform", imageNameTransform); props.put("moduleName", moduleName); props.put("moduleNames", moduleNames); props.put("args", args); diff --git a/core/jreleaser-model/src/main/java/org/jreleaser/model/NativeImage.java b/core/jreleaser-model/src/main/java/org/jreleaser/model/NativeImage.java index 449f0d72..ba0190e7 100644 --- a/core/jreleaser-model/src/main/java/org/jreleaser/model/NativeImage.java +++ b/core/jreleaser-model/src/main/java/org/jreleaser/model/NativeImage.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import static org.jreleaser.util.MustacheUtils.applyTemplate; +import static org.jreleaser.util.StringUtils.isBlank; import static org.jreleaser.util.StringUtils.isNotBlank; /** @@ -39,6 +40,7 @@ public class NativeImage extends AbstractAssembler { private final List files = new ArrayList<>(); private String imageName; + private String imageNameTransform; public NativeImage() { super(NAME); @@ -52,6 +54,7 @@ public class NativeImage extends AbstractAssembler { void setAll(NativeImage nativeImage) { super.setAll(nativeImage); this.imageName = nativeImage.imageName; + this.imageNameTransform = nativeImage.imageNameTransform; setGraal(nativeImage.graal); setMainJar(nativeImage.mainJar); setArgs(nativeImage.args); @@ -65,6 +68,13 @@ public class NativeImage extends AbstractAssembler { return applyTemplate(imageName, props); } + public String getResolvedImageNameTransform(JReleaserContext context) { + if (isBlank(imageNameTransform)) return null; + Map props = context.props(); + props.putAll(props()); + return applyTemplate(imageNameTransform, props); + } + public String getImageName() { return imageName; } @@ -73,6 +83,14 @@ public class NativeImage extends AbstractAssembler { this.imageName = imageName; } + public String getImageNameTransform() { + return imageNameTransform; + } + + public void setImageNameTransform(String imageNameTransform) { + this.imageNameTransform = imageNameTransform; + } + public Artifact getGraal() { return graal; } @@ -155,6 +173,7 @@ public class NativeImage extends AbstractAssembler { @Override protected void asMap(boolean full, Map props) { props.put("imageName", imageName); + props.put("imageNameTransform", imageNameTransform); props.put("graal", graal.asMap(full)); props.put("args", args); Map> mappedJars = new LinkedHashMap<>(); diff --git a/core/jreleaser-model/src/main/java/org/jreleaser/model/util/Artifacts.java b/core/jreleaser-model/src/main/java/org/jreleaser/model/util/Artifacts.java index c6283317..9434b6d5 100644 --- a/core/jreleaser-model/src/main/java/org/jreleaser/model/util/Artifacts.java +++ b/core/jreleaser-model/src/main/java/org/jreleaser/model/util/Artifacts.java @@ -40,12 +40,25 @@ import java.util.List; import java.util.Set; import static java.nio.file.FileVisitResult.CONTINUE; +import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES; +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; /** * @author Andres Almiray * @since 0.1.0 */ public class Artifacts { + public static void copyFile(JReleaserContext context, Path src, Path dest) throws JReleaserException { + try { + java.nio.file.Files.createDirectories(dest.getParent()); + java.nio.file.Files.copy(src, dest, REPLACE_EXISTING, COPY_ATTRIBUTES); + } catch (IOException e) { + throw new JReleaserException("Unexpected error copying " + + context.relativizeToBasedir(src) + " to " + + context.relativizeToBasedir(dest)); + } + } + public static Set resolveFiles(JReleaserContext context) throws JReleaserException { Files files = context.getModel().getFiles(); diff --git a/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/JlinkResolver.java b/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/JlinkResolver.java index 787b4b20..2c3c1b00 100644 --- a/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/JlinkResolver.java +++ b/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/JlinkResolver.java @@ -25,6 +25,8 @@ import org.jreleaser.util.Errors; import java.nio.file.Files; import java.nio.file.Path; +import static org.jreleaser.util.StringUtils.isNotBlank; + /** * @author Andres Almiray * @since 0.2.0 @@ -54,7 +56,12 @@ public abstract class JlinkResolver extends Validator { errors.assembly("Missing outputs for " + jlink.getType() + "." + jlink.getName() + ". Distribution " + jlink.getName() + " has not been assembled."); } else { - jlink.addOutput(Artifact.of(image, targetJdk.getPlatform())); + Artifact artifact = Artifact.of(image, targetJdk.getPlatform()); + if (isNotBlank(jlink.getImageNameTransform())) { + artifact.setTransform(jlink.getImageNameTransform() + "-" + targetJdk.getPlatform() + ".zip"); + artifact.getEffectivePath(context); + } + jlink.addOutput(artifact); } } } diff --git a/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/NativeImageResolver.java b/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/NativeImageResolver.java index 922db845..0d8358f9 100644 --- a/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/NativeImageResolver.java +++ b/core/jreleaser-model/src/main/java/org/jreleaser/model/validation/NativeImageResolver.java @@ -25,6 +25,8 @@ import org.jreleaser.util.Errors; import java.nio.file.Files; import java.nio.file.Path; +import static org.jreleaser.util.StringUtils.isNotBlank; + /** * @author Andres Almiray * @since 0.2.0 @@ -50,7 +52,12 @@ public abstract class NativeImageResolver extends Validator { errors.assembly("Missing outputs for " + nativeImage.getType() + "." + nativeImage.getName() + ". Distribution " + nativeImage.getName() + " has not been assembled."); } else { - nativeImage.addOutput(Artifact.of(image, platform)); + Artifact artifact = Artifact.of(image, platform); + if (isNotBlank(nativeImage.getImageNameTransform())) { + artifact.setTransform(nativeImage.getImageNameTransform() + "-" + platform + ".zip"); + artifact.getEffectivePath(context); + } + nativeImage.addOutput(artifact); } } } diff --git a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/Jlink.groovy b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/Jlink.groovy index e6a636a2..ae6bbe2c 100644 --- a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/Jlink.groovy +++ b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/Jlink.groovy @@ -32,6 +32,8 @@ import org.gradle.api.provider.SetProperty interface Jlink extends Assembler { Property getImageName() + Property getImageNameTransform() + Property getModuleName() SetProperty getModuleNames() diff --git a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/NativeImage.groovy b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/NativeImage.groovy index f4174923..4193c0d4 100644 --- a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/NativeImage.groovy +++ b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/dsl/NativeImage.groovy @@ -31,6 +31,8 @@ import org.gradle.api.provider.Property interface NativeImage extends Assembler { Property getImageName() + Property getImageNameTransform() + ListProperty getArgs() void addArg(String arg) diff --git a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/JlinkImpl.groovy b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/JlinkImpl.groovy index 65c5261b..71298071 100644 --- a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/JlinkImpl.groovy +++ b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/JlinkImpl.groovy @@ -45,6 +45,7 @@ import static org.jreleaser.util.StringUtils.isNotBlank class JlinkImpl extends AbstractAssembler implements Jlink { String name final Property imageName + final Property imageNameTransform final Property moduleName final ListProperty args final SetProperty moduleNames @@ -60,6 +61,7 @@ class JlinkImpl extends AbstractAssembler implements Jlink { super(objects) imageName = objects.property(String).convention(Providers.notDefined()) + imageNameTransform = objects.property(String).convention(Providers.notDefined()) moduleName = objects.property(String).convention(Providers.notDefined()) args = objects.listProperty(String).convention(Providers.notDefined()) moduleNames = objects.setProperty(String).convention(Providers.notDefined()) @@ -149,6 +151,7 @@ class JlinkImpl extends AbstractAssembler implements Jlink { jlink.mainJar = mainJar.toModel() jlink.java = java.toModel() if (imageName.present) jlink.imageName = imageName.get() + if (imageNameTransform.present) jlink.imageNameTransform = imageNameTransform.get() if (moduleName.present) jlink.moduleName = moduleName.get() jlink.moduleNames = (Set) moduleNames.getOrElse([] as Set) for (ArtifactImpl artifact : targetJdks) { diff --git a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/NativeImageImpl.groovy b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/NativeImageImpl.groovy index 4a057390..7c9ca2f3 100644 --- a/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/NativeImageImpl.groovy +++ b/plugins/jreleaser-gradle-plugin/src/main/groovy/org/jreleaser/gradle/plugin/internal/dsl/NativeImageImpl.groovy @@ -44,6 +44,7 @@ import static org.jreleaser.util.StringUtils.isNotBlank class NativeImageImpl extends AbstractAssembler implements NativeImage { String name final Property imageName + final Property imageNameTransform final ListProperty args final JavaImpl java @@ -57,6 +58,7 @@ class NativeImageImpl extends AbstractAssembler implements NativeImage { super(objects) imageName = objects.property(String).convention(Providers.notDefined()) + imageNameTransform = objects.property(String).convention(Providers.notDefined()) args = objects.listProperty(String).convention(Providers.notDefined()) java = objects.newInstance(JavaImpl, objects) graal = objects.newInstance(ArtifactImpl, objects) @@ -139,6 +141,7 @@ class NativeImageImpl extends AbstractAssembler implements NativeImage { fillProperties(nativeImage) nativeImage.java = java.toModel() if (imageName.present) nativeImage.imageName = imageName.get() + if (imageNameTransform.present) nativeImage.imageNameTransform = imageNameTransform.get() nativeImage.args = (List) args.getOrElse([]) nativeImage.graal = graal.toModel() nativeImage.mainJar = mainJar.toModel() diff --git a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/Jlink.java b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/Jlink.java index fb0d24de..ac56e068 100644 --- a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/Jlink.java +++ b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/Jlink.java @@ -38,11 +38,13 @@ public class Jlink extends AbstractAssembler { private final List jars = new ArrayList<>(); private String imageName; + private String imageNameTransform; private String moduleName; void setAll(Jlink jlink) { super.setAll(jlink); this.imageName = jlink.imageName; + this.imageNameTransform = jlink.imageNameTransform; this.moduleName = jlink.moduleName; setJava(jlink.java); setJdk(jlink.jdk); @@ -77,6 +79,14 @@ public class Jlink extends AbstractAssembler { this.imageName = imageName; } + public String getImageNameTransform() { + return imageNameTransform; + } + + public void setImageNameTransform(String imageNameTransform) { + this.imageNameTransform = imageNameTransform; + } + public String getModuleName() { return moduleName; } diff --git a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/NativeImage.java b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/NativeImage.java index db010d08..82965b82 100644 --- a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/NativeImage.java +++ b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/NativeImage.java @@ -32,10 +32,12 @@ public class NativeImage extends AbstractAssembler { private final List files = new ArrayList<>(); private String imageName; + private String imageNameTransform; void setAll(NativeImage nativeImage) { super.setAll(nativeImage); this.imageName = nativeImage.imageName; + this.imageNameTransform = nativeImage.imageNameTransform; setGraal(nativeImage.graal); setMainJar(nativeImage.mainJar); setArgs(nativeImage.args); @@ -51,6 +53,14 @@ public class NativeImage extends AbstractAssembler { this.imageName = imageName; } + public String getImageNameTransform() { + return imageNameTransform; + } + + public void setImageNameTransform(String imageNameTransform) { + this.imageNameTransform = imageNameTransform; + } + public Artifact getGraal() { return graal; } diff --git a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/internal/JReleaserModelConverter.java b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/internal/JReleaserModelConverter.java index fb30141d..c24b9c80 100644 --- a/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/internal/JReleaserModelConverter.java +++ b/plugins/jreleaser-maven-plugin/src/main/java/org/jreleaser/maven/plugin/internal/JReleaserModelConverter.java @@ -626,6 +626,7 @@ public final class JReleaserModelConverter { a.setJdk(convertArtifact(jlink.getJdk())); a.setMainJar(convertArtifact(jlink.getMainJar())); a.setImageName(jlink.getImageName()); + a.setImageNameTransform(jlink.getImageNameTransform()); a.setModuleName(jlink.getModuleName()); a.setJars(convertGlobs(jlink.getJars())); return a; @@ -652,6 +653,7 @@ public final class JReleaserModelConverter { a.setGraal(convertArtifact(nativeImage.getGraal())); a.setMainJar(convertArtifact(nativeImage.getMainJar())); a.setImageName(nativeImage.getImageName()); + a.setImageNameTransform(nativeImage.getImageNameTransform()); a.setJars(convertGlobs(nativeImage.getJars())); a.setFiles(convertGlobs(nativeImage.getFiles())); a.setArgs(nativeImage.getArgs());