[assemble] let generated artifacts be transformed. Resolves #281

This commit is contained in:
Andres Almiray
2021-07-10 19:01:45 +02:00
parent ecf1719435
commit 5b5d720e6f
15 changed files with 111 additions and 15 deletions

View File

@@ -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);
}
}
}

View File

@@ -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 {

View File

@@ -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("{{")) {

View File

@@ -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);

View File

@@ -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<>();

View File

@@ -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();

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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()

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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()

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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());