Search in sources :

Example 11 with RB

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);
}
Also used : Artifact(org.jreleaser.model.Artifact) StringUtils.isBlank(org.jreleaser.util.StringUtils.isBlank) JReleaserModel(org.jreleaser.model.JReleaserModel) ExtraPropertiesValidator.mergeExtraProperties(org.jreleaser.model.validation.ExtraPropertiesValidator.mergeExtraProperties) Active(org.jreleaser.model.Active) List(java.util.List) Errors(org.jreleaser.util.Errors) Gofish(org.jreleaser.model.Gofish) JReleaserContext(org.jreleaser.model.JReleaserContext) DistributionsValidator.validateArtifactPlatforms(org.jreleaser.model.validation.DistributionsValidator.validateArtifactPlatforms) TemplateValidator.validateTemplate(org.jreleaser.model.validation.TemplateValidator.validateTemplate) Distribution(org.jreleaser.model.Distribution) GitService(org.jreleaser.model.GitService) RB(org.jreleaser.bundle.RB) Gofish(org.jreleaser.model.Gofish) JReleaserModel(org.jreleaser.model.JReleaserModel) GitService(org.jreleaser.model.GitService) Artifact(org.jreleaser.model.Artifact)

Example 12 with RB

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);
        }
    }
}
Also used : Artifact(org.jreleaser.model.Artifact) FileSet(org.jreleaser.model.FileSet) Jlink(org.jreleaser.model.Jlink) Collectors.groupingBy(java.util.stream.Collectors.groupingBy) StringUtils.isBlank(org.jreleaser.util.StringUtils.isBlank) PlatformUtils(org.jreleaser.util.PlatformUtils) StringUtils.isNotBlank(org.jreleaser.util.StringUtils.isNotBlank) Platform(org.jreleaser.model.Platform) Project(org.jreleaser.model.Project) Active(org.jreleaser.model.Active) List(java.util.List) Errors(org.jreleaser.util.Errors) Map(java.util.Map) JReleaserContext(org.jreleaser.model.JReleaserContext) Optional(java.util.Optional) TemplateValidator.validateTemplate(org.jreleaser.model.validation.TemplateValidator.validateTemplate) RB(org.jreleaser.bundle.RB) Platform(org.jreleaser.model.Platform) FileSet(org.jreleaser.model.FileSet) List(java.util.List) Artifact(org.jreleaser.model.Artifact)

Example 13 with RB

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);
        }
    }
}
Also used : Map(java.util.Map) JReleaserContext(org.jreleaser.model.JReleaserContext) JReleaserException(org.jreleaser.util.JReleaserException) Assembler(org.jreleaser.model.Assembler) RB(org.jreleaser.bundle.RB) AssemblerProcessingException(org.jreleaser.model.assembler.spi.AssemblerProcessingException) Assemble(org.jreleaser.model.Assemble) Assemble(org.jreleaser.model.Assemble) Assembler(org.jreleaser.model.Assembler)

Example 14 with RB

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();
}
Also used : MustacheUtils.applyTemplate(org.jreleaser.util.MustacheUtils.applyTemplate) StringUtils.isNotBlank(org.jreleaser.util.StringUtils.isNotBlank) User(org.jreleaser.model.releaser.spi.User) Matcher(java.util.regex.Matcher) Map(java.util.Map) KEY_CHANGELOG_CONTRIBUTORS(org.jreleaser.util.Constants.KEY_CHANGELOG_CONTRIBUTORS) SemVer(org.jreleaser.util.SemVer) JavaRuntimeVersion(org.jreleaser.util.JavaRuntimeVersion) Templates.resolveTemplate(org.jreleaser.util.Templates.resolveTemplate) GitSdk.extractTagName(org.jreleaser.sdk.git.GitSdk.extractTagName) GitAPIException(org.eclipse.jgit.api.errors.GitAPIException) StringUtils.normalizeRegexPattern(org.jreleaser.util.StringUtils.normalizeRegexPattern) StringUtils.stripMargin(org.jreleaser.util.StringUtils.stripMargin) Set(java.util.Set) Constants(org.eclipse.jgit.lib.Constants) StringUtils(org.jreleaser.util.StringUtils) Collectors(java.util.stream.Collectors) Project(org.jreleaser.model.Project) Objects(java.util.Objects) Gitlab(org.jreleaser.model.Gitlab) List(java.util.List) Ref(org.eclipse.jgit.lib.Ref) Optional(java.util.Optional) Pattern(java.util.regex.Pattern) GitService(org.jreleaser.model.GitService) RB(org.jreleaser.bundle.RB) CalVer(org.jreleaser.util.CalVer) MustacheUtils.passThrough(org.jreleaser.util.MustacheUtils.passThrough) CollectionUtils(org.jreleaser.util.CollectionUtils) RevCommit(org.eclipse.jgit.revwalk.RevCommit) System.lineSeparator(java.lang.System.lineSeparator) Changelog(org.jreleaser.model.Changelog) KEY_CHANGELOG_CHANGES(org.jreleaser.util.Constants.KEY_CHANGELOG_CHANGES) ChronVer(org.jreleaser.util.ChronVer) Collectors.groupingBy(java.util.stream.Collectors.groupingBy) ComparatorUtils.lessThan(org.jreleaser.util.ComparatorUtils.lessThan) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) StringUtils.toSafeRegexPattern(org.jreleaser.util.StringUtils.toSafeRegexPattern) JReleaserContext(org.jreleaser.model.JReleaserContext) StreamSupport(java.util.stream.StreamSupport) LinkedHashSet(java.util.LinkedHashSet) IOException(java.io.IOException) Version(org.jreleaser.util.Version) ObjectId(org.eclipse.jgit.lib.ObjectId) CustomVersion(org.jreleaser.util.CustomVersion) JavaModuleVersion(org.jreleaser.util.JavaModuleVersion) Git(org.eclipse.jgit.api.Git) Comparator(java.util.Comparator) StringUtils.normalizeRegexPattern(org.jreleaser.util.StringUtils.normalizeRegexPattern) Pattern(java.util.regex.Pattern) StringUtils.toSafeRegexPattern(org.jreleaser.util.StringUtils.toSafeRegexPattern) Project(org.jreleaser.model.Project) Ref(org.eclipse.jgit.lib.Ref) JavaRuntimeVersion(org.jreleaser.util.JavaRuntimeVersion) Version(org.jreleaser.util.Version) CustomVersion(org.jreleaser.util.CustomVersion) JavaModuleVersion(org.jreleaser.util.JavaModuleVersion) ObjectId(org.eclipse.jgit.lib.ObjectId) GitService(org.jreleaser.model.GitService)

Example 15 with RB

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();
}
Also used : HttpURLConnection(java.net.HttpURLConnection) GHRepository(org.kohsuke.github.GHRepository) REFS_TAGS(org.jreleaser.sdk.git.GitSdk.REFS_TAGS) GHDiscussion(org.kohsuke.github.GHDiscussion) URL(java.net.URL) StringUtils.isBlank(org.jreleaser.util.StringUtils.isBlank) GHFileNotFoundException(org.kohsuke.github.GHFileNotFoundException) MediaType(org.apache.tika.mime.MediaType) GitHubBuilder(org.kohsuke.github.GitHubBuilder) JReleaserLogger(org.jreleaser.util.JReleaserLogger) GHMilestone(org.kohsuke.github.GHMilestone) StreamSupport(java.util.stream.StreamSupport) PagedIterable(org.kohsuke.github.PagedIterable) GitHub(org.kohsuke.github.GitHub) Files(java.nio.file.Files) Asset(org.jreleaser.model.releaser.spi.Asset) IOException(java.io.IOException) ImpatientHttpConnector(org.kohsuke.github.extras.ImpatientHttpConnector) GHException(org.kohsuke.github.GHException) GHReleaseBuilder(org.kohsuke.github.GHReleaseBuilder) GHOrganization(org.kohsuke.github.GHOrganization) HttpConnector(org.kohsuke.github.HttpConnector) List(java.util.List) JReleaserVersion(org.jreleaser.model.JReleaserVersion) GHAsset(org.kohsuke.github.GHAsset) GHTeam(org.kohsuke.github.GHTeam) Optional(java.util.Optional) Tika(org.apache.tika.Tika) GHRelease(org.kohsuke.github.GHRelease) RB(org.jreleaser.bundle.RB) GHIssueState(org.kohsuke.github.GHIssueState) GHRepository(org.kohsuke.github.GHRepository) GHMilestone(org.kohsuke.github.GHMilestone)

Aggregations

RB (org.jreleaser.bundle.RB)15 JReleaserContext (org.jreleaser.model.JReleaserContext)13 Map (java.util.Map)12 List (java.util.List)10 StringUtils.isNotBlank (org.jreleaser.util.StringUtils.isNotBlank)10 StringUtils.isBlank (org.jreleaser.util.StringUtils.isBlank)9 Artifact (org.jreleaser.model.Artifact)7 IOException (java.io.IOException)6 Collectors.groupingBy (java.util.stream.Collectors.groupingBy)6 Active (org.jreleaser.model.Active)6 Project (org.jreleaser.model.Project)6 Errors (org.jreleaser.util.Errors)6 PlatformUtils (org.jreleaser.util.PlatformUtils)6 Files (java.nio.file.Files)5 Path (java.nio.file.Path)5 Collectors (java.util.stream.Collectors)5 Distribution (org.jreleaser.model.Distribution)5 ArrayList (java.util.ArrayList)4 TemplateValidator.validateTemplate (org.jreleaser.model.validation.TemplateValidator.validateTemplate)4 LinkedHashSet (java.util.LinkedHashSet)3