mirror of
https://github.com/jlengrand/jreleaser.git
synced 2026-03-10 08:31:24 +00:00
[assemble] let generated artifacts be transformed. Resolves #281
This commit is contained in:
@@ -92,7 +92,11 @@ public class JlinkAssemblerProcessor extends AbstractAssemblerProcessor<Jlink> {
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Na
|
||||
installNativeImage(graalPath);
|
||||
|
||||
// run native-image
|
||||
nativeImage(assembleDirectory, graalPath, jars);
|
||||
Artifact image = nativeImage(assembleDirectory, graalPath, jars);
|
||||
if (isNotBlank(assembler.getImageNameTransform())) {
|
||||
image.setTransform(assembler.getImageNameTransform() + "-" + assembler.getGraal().getPlatform() + ".zip");
|
||||
image.getEffectivePath(context);
|
||||
}
|
||||
}
|
||||
|
||||
private void installNativeImage(Path graalPath) throws AssemblerProcessingException {
|
||||
|
||||
@@ -34,6 +34,7 @@ import java.util.stream.Collectors;
|
||||
import static java.nio.file.Files.exists;
|
||||
import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES;
|
||||
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
|
||||
import static org.jreleaser.model.util.Artifacts.copyFile;
|
||||
import static org.jreleaser.util.MustacheUtils.applyTemplate;
|
||||
import static org.jreleaser.util.StringUtils.isBlank;
|
||||
import static org.jreleaser.util.StringUtils.isNotBlank;
|
||||
@@ -122,17 +123,6 @@ public class Artifact implements Domain, ExtraProperties {
|
||||
return tp;
|
||||
}
|
||||
|
||||
private 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));
|
||||
}
|
||||
}
|
||||
|
||||
private Path getResolvedPath(JReleaserContext context) {
|
||||
if (null == resolvedPath) {
|
||||
if (path.contains("{{")) {
|
||||
|
||||
@@ -25,6 +25,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.jreleaser.util.MustacheUtils.applyTemplate;
|
||||
import static org.jreleaser.util.StringUtils.isBlank;
|
||||
import static org.jreleaser.util.StringUtils.isNotBlank;
|
||||
|
||||
/**
|
||||
@@ -42,6 +43,7 @@ public class Jlink extends AbstractAssembler {
|
||||
private final List<Glob> 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<String, Object> 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<String, Object> props) {
|
||||
props.put("imageName", imageName);
|
||||
props.put("imageNameTransform", imageNameTransform);
|
||||
props.put("moduleName", moduleName);
|
||||
props.put("moduleNames", moduleNames);
|
||||
props.put("args", args);
|
||||
|
||||
@@ -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<Glob> 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<String, Object> 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<String, Object> props) {
|
||||
props.put("imageName", imageName);
|
||||
props.put("imageNameTransform", imageNameTransform);
|
||||
props.put("graal", graal.asMap(full));
|
||||
props.put("args", args);
|
||||
Map<String, Map<String, Object>> mappedJars = new LinkedHashMap<>();
|
||||
|
||||
@@ -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<Artifact> resolveFiles(JReleaserContext context) throws JReleaserException {
|
||||
Files files = context.getModel().getFiles();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,8 @@ import org.gradle.api.provider.SetProperty
|
||||
interface Jlink extends Assembler {
|
||||
Property<String> getImageName()
|
||||
|
||||
Property<String> getImageNameTransform()
|
||||
|
||||
Property<String> getModuleName()
|
||||
|
||||
SetProperty<String> getModuleNames()
|
||||
|
||||
@@ -31,6 +31,8 @@ import org.gradle.api.provider.Property
|
||||
interface NativeImage extends Assembler {
|
||||
Property<String> getImageName()
|
||||
|
||||
Property<String> getImageNameTransform()
|
||||
|
||||
ListProperty<String> getArgs()
|
||||
|
||||
void addArg(String arg)
|
||||
|
||||
@@ -45,6 +45,7 @@ import static org.jreleaser.util.StringUtils.isNotBlank
|
||||
class JlinkImpl extends AbstractAssembler implements Jlink {
|
||||
String name
|
||||
final Property<String> imageName
|
||||
final Property<String> imageNameTransform
|
||||
final Property<String> moduleName
|
||||
final ListProperty<String> args
|
||||
final SetProperty<String> 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<String>) moduleNames.getOrElse([] as Set)
|
||||
for (ArtifactImpl artifact : targetJdks) {
|
||||
|
||||
@@ -44,6 +44,7 @@ import static org.jreleaser.util.StringUtils.isNotBlank
|
||||
class NativeImageImpl extends AbstractAssembler implements NativeImage {
|
||||
String name
|
||||
final Property<String> imageName
|
||||
final Property<String> imageNameTransform
|
||||
final ListProperty<String> 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<String>) args.getOrElse([])
|
||||
nativeImage.graal = graal.toModel()
|
||||
nativeImage.mainJar = mainJar.toModel()
|
||||
|
||||
@@ -38,11 +38,13 @@ public class Jlink extends AbstractAssembler {
|
||||
private final List<Glob> 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;
|
||||
}
|
||||
|
||||
@@ -32,10 +32,12 @@ public class NativeImage extends AbstractAssembler {
|
||||
private final List<Glob> 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;
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user