use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class GofishValidator method validateGofish.
public static void validateGofish(JReleaserContext context, Distribution distribution, Gofish packager, Errors errors) {
JReleaserModel model = context.getModel();
Gofish parentPackager = model.getPackagers().getGofish();
if (!packager.isActiveSet() && parentPackager.isActiveSet()) {
packager.setActive(parentPackager.getActive());
}
if (!packager.resolveEnabled(context.getModel().getProject(), distribution)) {
packager.disable();
return;
}
GitService service = model.getRelease().getGitService();
if (!service.isReleaseSupported()) {
packager.disable();
return;
}
context.getLogger().debug("distribution.{}.gofish", distribution.getName());
List<Artifact> candidateArtifacts = packager.resolveCandidateArtifacts(context, distribution);
if (candidateArtifacts.size() == 0) {
packager.setActive(Active.NEVER);
packager.disable();
return;
} else if (candidateArtifacts.stream().filter(artifact -> isBlank(artifact.getPlatform())).count() > 1) {
errors.configuration(RB.$("validation_packager_multiple_artifacts", "distribution." + distribution.getName() + ".gofish"));
packager.disable();
return;
}
validateCommitAuthor(packager, parentPackager);
Gofish.GofishRepository repository = packager.getRepository();
repository.resolveEnabled(model.getProject());
validateTap(context, distribution, repository, parentPackager.getRepository(), "gofish.repository");
validateTemplate(context, distribution, packager, parentPackager, errors);
mergeExtraProperties(packager, parentPackager);
validateContinueOnError(packager, parentPackager);
if (isBlank(packager.getDownloadUrl())) {
packager.setDownloadUrl(parentPackager.getDownloadUrl());
}
validateArtifactPlatforms(context, distribution, packager, candidateArtifacts, errors);
}
use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class JlinkValidator method validateJlink.
private static void validateJlink(JReleaserContext context, JReleaserContext.Mode mode, Jlink jlink, Errors errors) {
context.getLogger().debug("jlink.{}", jlink.getName());
if (!jlink.isActiveSet()) {
jlink.setActive(Active.NEVER);
}
if (!jlink.resolveEnabled(context.getModel().getProject()))
return;
if (isBlank(jlink.getName())) {
errors.configuration(RB.$("validation_must_not_be_blank", "jlink.name"));
return;
}
context.getLogger().debug("jlink.{}.java", jlink.getName());
if (!validateJava(context, jlink, errors)) {
return;
}
Platform platform = jlink.getPlatform().merge(context.getModel().getPlatform());
jlink.setPlatform(platform);
if (isBlank(jlink.getImageName())) {
jlink.setImageName(jlink.getJava().getGroupId() + "." + jlink.getJava().getArtifactId() + "-" + context.getModel().getProject().getResolvedVersion());
}
if (isBlank(jlink.getExecutable())) {
jlink.setExecutable(jlink.getName());
}
int i = 0;
for (Artifact targetJdk : jlink.getTargetJdks()) {
validateJdk(context, mode, jlink, targetJdk, i++, errors);
}
// validate jdks.platform is unique
Map<String, List<Artifact>> byPlatform = jlink.getTargetJdks().stream().collect(groupingBy(jdk -> isBlank(jdk.getPlatform()) ? "<nil>" : jdk.getPlatform()));
if (byPlatform.containsKey("<nil>")) {
errors.configuration(RB.$("validation_jlink_jdk_platform", jlink.getName()));
}
// check platforms
byPlatform.forEach((p, jdks) -> {
if (jdks.size() > 1) {
errors.configuration(RB.$("validation_jlink_jdk_multiple_platforms", jlink.getName(), p));
}
});
if (isBlank(jlink.getJdk().getPath())) {
String currentPlatform = PlatformUtils.getCurrentFull();
String javaHome = System.getProperty("java.home");
if (jlink.getTargetJdks().isEmpty()) {
if (isBlank(javaHome)) {
// Can only happen when running as native-image, fail for now
// TODO: native-image
errors.configuration(RB.$("validation_java_home_missing"));
return;
}
// Use current
jlink.getJdk().setPath(javaHome);
jlink.getJdk().setPlatform(currentPlatform);
jlink.addTargetJdk(jlink.getJdk());
} else {
// find a compatible JDK in targets
Optional<Artifact> jdk = jlink.getTargetJdks().stream().filter(j -> PlatformUtils.isCompatible(currentPlatform, j.getPlatform())).findFirst();
if (jdk.isPresent()) {
jlink.setJdk(jdk.get());
} else {
if (isBlank(javaHome)) {
// Can only happen when running as native-image, fail for now
// TODO: native-image
errors.configuration(RB.$("validation_java_home_missing"));
return;
}
// Can't tell if the current JDK will work but might as well use it
jlink.getJdk().setPath(javaHome);
jlink.getJdk().setPlatform(currentPlatform);
}
}
}
if (jlink.getArgs().isEmpty()) {
jlink.getArgs().add("--no-header-files");
jlink.getArgs().add("--no-man-pages");
jlink.getArgs().add("--compress=2");
jlink.getArgs().add("--strip-debug");
}
if (null == jlink.getMainJar()) {
errors.configuration(RB.$("validation_is_null", "jlink." + jlink.getName() + ".mainJar"));
return;
}
if (isBlank(jlink.getMainJar().getPath())) {
errors.configuration(RB.$("validation_must_not_be_null", "jlink." + jlink.getName() + ".mainJar.path"));
}
validateGlobs(context, jlink.getJars(), "jlink." + jlink.getName() + ".jars", errors);
if (mode == JReleaserContext.Mode.ASSEMBLE) {
validateTemplate(context, jlink, errors);
}
if (!jlink.getFileSets().isEmpty()) {
i = 0;
for (FileSet fileSet : jlink.getFileSets()) {
validateFileSet(context, mode, jlink, fileSet, i++, errors);
}
}
}
use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class Assemblers method assemble.
public static void assemble(JReleaserContext context) {
Assemble assemble = context.getModel().getAssemble();
if (!assemble.isEnabled()) {
context.getLogger().info(RB.$("assemblers.not.enabled"));
return;
}
if (!context.getIncludedAssemblers().isEmpty()) {
for (String assemblerType : context.getIncludedAssemblers()) {
// check if the assemblerType is valid
if (!Assemble.supportedAssemblers().contains(assemblerType)) {
context.getLogger().warn(RB.$("ERROR_unsupported_assembler", assemblerType));
continue;
}
Map<String, Assembler> assemblers = assemble.findAssemblersByType(assemblerType);
if (assemblers.isEmpty()) {
context.getLogger().debug(RB.$("assemblers.no.match"), assemblerType);
return;
}
if (!context.getIncludedDistributions().isEmpty()) {
for (String distributionName : context.getIncludedDistributions()) {
if (!assemblers.containsKey(distributionName)) {
context.getLogger().error(RB.$("assemblers.distribution.not.configured"), assemblerType, distributionName);
continue;
}
assemble.findAllAssemblers().stream().filter(a -> distributionName.equals(a.getName())).peek(assembler -> context.getLogger().info(RB.$("assemblers.assemble.distribution.with"), distributionName, assembler.getName())).forEach(assembler -> assemble(context, assembler));
}
} else {
context.getLogger().info(RB.$("assemblers.assemble.all.distributions.with"), assemblerType);
assemblers.values().forEach(assembler -> assemble(context, assembler));
}
}
} else if (!context.getIncludedDistributions().isEmpty()) {
for (String distributionName : context.getIncludedDistributions()) {
context.getLogger().info(RB.$("assemblers.assemble.distribution.with.all"), distributionName);
assemble.findAllAssemblers().stream().filter(a -> distributionName.equals(a.getName())).forEach(assembler -> assemble(context, assembler));
}
} else {
context.getLogger().info(RB.$("assemblers.assemble.all.distributions"));
for (Assembler assembler : assemble.findAllAssemblers()) {
String assemblerType = assembler.getType();
String distributionName = assembler.getName();
if (context.getExcludedAssemblers().contains(assemblerType) || context.getExcludedDistributions().contains(distributionName)) {
context.getLogger().info(RB.$("assemblers.assembler.excluded"), assemblerType, distributionName);
continue;
}
assemble(context, assembler);
}
}
}
use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class ChangelogGenerator method resolveCommits.
protected Iterable<RevCommit> resolveCommits(Git git, JReleaserContext context) throws GitAPIException, IOException {
List<Ref> tags = git.tagList().call();
GitService gitService = context.getModel().getRelease().getGitService();
String effectiveTagName = gitService.getEffectiveTagName(context.getModel());
String tagName = gitService.getConfiguredTagName();
String tagPattern = tagName.replaceAll("\\{\\{.*}}", "\\.\\*");
Pattern vp = Pattern.compile(tagName.replaceAll("\\{\\{.*}}", "\\(\\.\\*\\)"));
if (!tagName.contains("{{")) {
vp = Pattern.compile("(.*)");
}
Pattern versionPattern = vp;
unparseableTags.clear();
tags.sort((tag1, tag2) -> {
Version v1 = version(context, tag1, versionPattern);
Version v2 = version(context, tag2, versionPattern);
return v2.compareTo(v1);
});
ObjectId head = git.getRepository().resolve(Constants.HEAD);
context.getLogger().debug(RB.$("changelog.generator.lookup.tag"), effectiveTagName);
Optional<Ref> tag = tags.stream().filter(ref -> extractTagName(ref).equals(effectiveTagName)).findFirst();
Optional<Ref> previousTag = Optional.empty();
String previousTagName = gitService.getConfiguredPreviousTagName();
if (isNotBlank(previousTagName)) {
context.getLogger().debug(RB.$("changelog.generator.lookup.previous.tag"), previousTagName);
previousTag = tags.stream().filter(ref -> extractTagName(ref).equals(previousTagName)).findFirst();
}
Version currentVersion = context.getModel().getProject().version();
Version defaultVersion = defaultVersion(context);
// tag: early-access
if (context.getModel().getProject().isSnapshot()) {
Project.Snapshot snapshot = context.getModel().getProject().getSnapshot();
String effectiveLabel = snapshot.getEffectiveLabel();
if (effectiveLabel.equals(effectiveTagName)) {
if (snapshot.isFullChangelog()) {
tag = Optional.empty();
}
if (!tag.isPresent()) {
if (previousTag.isPresent()) {
tag = previousTag;
}
if (!tag.isPresent()) {
context.getLogger().debug(RB.$("changelog.generator.lookup.matching.tag"), tagPattern, effectiveTagName);
tag = tags.stream().filter(ref -> !extractTagName(ref).equals(effectiveTagName)).filter(ref -> versionPattern.matcher(extractTagName(ref)).matches()).filter(ref -> currentVersion.equalsSpec(version(context, ref, versionPattern, true))).filter(ref -> !defaultVersion.equals(version(context, ref, versionPattern, true))).findFirst();
}
}
if (tag.isPresent()) {
context.getLogger().debug(RB.$("changelog.generator.tag.found"), extractTagName(tag.get()));
ObjectId fromRef = getObjectId(git, tag.get());
return git.log().addRange(fromRef, head).call();
} else {
return git.log().add(head).call();
}
}
}
// tag: latest
if (!tag.isPresent()) {
if (previousTag.isPresent()) {
tag = previousTag;
}
if (!tag.isPresent()) {
context.getLogger().debug(RB.$("changelog.generator.lookup.matching.tag"), tagPattern, effectiveTagName);
tag = tags.stream().filter(ref -> !extractTagName(ref).equals(effectiveTagName)).filter(ref -> versionPattern.matcher(extractTagName(ref)).matches()).filter(ref -> currentVersion.equalsSpec(version(context, ref, versionPattern, true))).filter(ref -> !defaultVersion.equals(version(context, ref, versionPattern, true))).findFirst();
}
if (tag.isPresent()) {
context.getLogger().debug(RB.$("changelog.generator.tag.found"), extractTagName(tag.get()));
ObjectId fromRef = getObjectId(git, tag.get());
return git.log().addRange(fromRef, head).call();
}
return git.log().add(head).call();
}
// tag: somewhere in the middle
if (!previousTag.isPresent()) {
context.getLogger().debug(RB.$("changelog.generator.lookup.before.tag"), effectiveTagName, tagPattern);
previousTag = tags.stream().filter(ref -> extractTagName(ref).matches(tagPattern)).filter(ref -> !defaultVersion.equals(version(context, ref, versionPattern, true))).filter(ref -> lessThan(version(context, ref, versionPattern, true), currentVersion)).findFirst();
}
if (previousTag.isPresent()) {
context.getLogger().debug(RB.$("changelog.generator.tag.found"), extractTagName(previousTag.get()));
ObjectId fromRef = getObjectId(git, previousTag.get());
ObjectId toRef = getObjectId(git, tag.get());
return git.log().addRange(fromRef, toRef).call();
}
ObjectId toRef = getObjectId(git, tag.get());
return git.log().add(toRef).call();
}
use of org.jreleaser.bundle.RB in project jreleaser by jreleaser.
the class Github method findMilestoneByName.
Optional<GHMilestone> findMilestoneByName(String owner, String repo, String milestoneName) throws IOException {
logger.debug(RB.$("git.milestone.lookup"), milestoneName, owner, repo);
GHRepository repository = findRepository(owner, repo);
PagedIterable<GHMilestone> milestones = repository.listMilestones(GHIssueState.OPEN);
return StreamSupport.stream(milestones.spliterator(), false).filter(m -> milestoneName.equals(m.getTitle())).findFirst();
}
Aggregations