Search in sources :

Example 1 with GAV

use of com.qoomon.maven.GAV in project maven-git-versioning-extension by qoomon.

the class VersioningPomReplacementMojo method execute.

@Override
public synchronized void execute() throws MojoExecutionException, MojoFailureException {
    try {
        MavenProject currentProject = mavenSession.getCurrentProject();
        GAV gav = GAV.of(currentProject);
        logger.debug(gav + "remove plugin");
        currentProject.getOriginalModel().getBuild().removePlugin(asPlugin());
        temporaryOverridePomFileFromModel(currentProject);
    } catch (Exception e) {
        throw new MojoExecutionException("Git Versioning Pom Replacement Mojo", e);
    }
}
Also used : MavenProject(org.apache.maven.project.MavenProject) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) GAV(com.qoomon.maven.GAV) IOException(java.io.IOException) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) MojoFailureException(org.apache.maven.plugin.MojoFailureException)

Example 2 with GAV

use of com.qoomon.maven.GAV in project maven-git-versioning-extension by qoomon.

the class VersioningModelProcessor method addBuildPlugin.

private void addBuildPlugin(Model model) {
    GAV projectGav = GAV.of(model);
    logger.debug(projectGav + " temporary add build plugin");
    if (model.getBuild() == null) {
        model.setBuild(new Build());
    }
    Plugin projectPlugin = VersioningPomReplacementMojo.asPlugin();
    PluginExecution execution = new PluginExecution();
    execution.setId(VersioningPomReplacementMojo.GOAL);
    execution.getGoals().add(VersioningPomReplacementMojo.GOAL);
    projectPlugin.getExecutions().add(execution);
    model.getBuild().getPlugins().add(projectPlugin);
}
Also used : PluginExecution(org.apache.maven.model.PluginExecution) Build(org.apache.maven.model.Build) GAV(com.qoomon.maven.GAV) Plugin(org.apache.maven.model.Plugin)

Example 3 with GAV

use of com.qoomon.maven.GAV in project maven-git-versioning-extension by qoomon.

the class VersioningModelProcessor method provisionModel.

private Model provisionModel(Model model, Map<String, ?> options) throws IOException {
    try {
        if (!initialized) {
            initialize();
            initialized = true;
        }
        if (disabled) {
            return model;
        }
        // ---------------- provisioning ----------------
        Source pomSource = (Source) options.get(ModelProcessor.SOURCE);
        File pomFile = new File(pomSource != null ? pomSource.getLocation() : "");
        if (!isProjectPom(pomFile)) {
            // skip unrelated models
            logger.debug("skip unrelated model - source" + pomFile);
            return model;
        }
        GAV projectGav = GAV.of(model);
        // deduce version
        ProjectVersion projectVersion = deduceProjectVersion(projectGav, pomFile.getParentFile());
        // add properties
        if (projectVersion.getBranch() != null) {
            model.addProperty("project.branch", projectVersion.getBranch());
        }
        if (projectVersion.getTag() != null) {
            model.addProperty("project.tag", projectVersion.getTag());
        }
        model.addProperty("project.commit", projectVersion.getCommit());
        // update parent version
        if (model.getParent() != null) {
            File parentPomFile = new File(pomFile.getParentFile(), model.getParent().getRelativePath());
            GAV parentGav = GAV.of(model.getParent());
            if (parentPomFile.exists() && isProjectPom(parentPomFile)) {
                // check if parent pom file match project parent
                Model parentModel = ModelUtil.readModel(parentPomFile);
                GAV parentProjectGav = GAV.of(parentModel);
                if (parentProjectGav.equals(parentGav)) {
                    ProjectVersion parentProjectVersion = deduceProjectVersion(parentGav, parentPomFile.getParentFile());
                    logger.debug(projectGav + " adjust project parent version to " + parentProjectVersion);
                    model.getParent().setVersion(parentProjectVersion.getVersion());
                }
            }
        }
        // update project version
        if (model.getParent() == null || !model.getParent().getVersion().equals(projectVersion.getVersion())) {
            logger.debug(projectGav + " adjust project version to " + projectVersion);
            model.setVersion(projectVersion.getVersion());
        }
        // add plugin
        // has to be removed from model by plugin itself
        addBuildPlugin(model);
        return model;
    } catch (Exception e) {
        throw new IOException("Branch Versioning Model Processor", e);
    }
}
Also used : Model(org.apache.maven.model.Model) IOException(java.io.IOException) File(java.io.File) GAV(com.qoomon.maven.GAV) Source(org.apache.maven.building.Source) ModelParseException(org.apache.maven.model.io.ModelParseException) IOException(java.io.IOException)

Example 4 with GAV

use of com.qoomon.maven.GAV in project maven-git-versioning-extension by qoomon.

the class VersioningModelProcessor method deduceProjectVersion.

private ProjectVersion deduceProjectVersion(GAV gav, File gitDir) throws IOException {
    FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder().findGitDir(gitDir);
    logger.debug(gav + "git directory " + repositoryBuilder.getGitDir());
    try (Repository repository = repositoryBuilder.build()) {
        final String headCommit = getHeadCommit(repository);
        String projectBranchName = null;
        String projectTagName = null;
        VersionFormatDescription projectVersionFormatDescription = null;
        Map<String, String> projectVersionDataMap = buildCommonVersionDataMap(headCommit, gav);
        if (!configuration.getTagVersionDescriptions().isEmpty()) {
            final List<String> headTags = getHeadTags(repository);
            if (!headTags.isEmpty()) {
                for (VersionFormatDescription versionFormatDescription : configuration.getTagVersionDescriptions()) {
                    String tagName = headTags.stream().sequential().filter(tag -> tag.matches(versionFormatDescription.pattern)).sorted((versionLeft, versionRight) -> {
                        DefaultArtifactVersion tagVersionLeft = new DefaultArtifactVersion(removePrefix(versionLeft, versionFormatDescription.prefix));
                        DefaultArtifactVersion tagVersionRight = new DefaultArtifactVersion(removePrefix(versionRight, versionFormatDescription.prefix));
                        // -1 revert sorting, latest version first
                        return tagVersionLeft.compareTo(tagVersionRight) * -1;
                    }).findFirst().orElse(null);
                    if (tagName != null) {
                        projectTagName = tagName;
                        projectVersionFormatDescription = versionFormatDescription;
                        projectVersionDataMap.put("tag", removePrefix(projectTagName, projectVersionFormatDescription.prefix));
                        projectVersionDataMap.putAll(getRegexGroupValueMap(projectVersionFormatDescription.pattern, projectTagName));
                        break;
                    }
                }
            }
        }
        if (projectTagName == null) {
            final String branchName = getHeadBranch(repository).orElseThrow(() -> new ModelParseException(gitDir + ": No Branch Name provided in Detached HEAD state. See documentation.", 0, 0));
            projectBranchName = branchName;
            projectVersionFormatDescription = configuration.getBranchVersionDescriptions().stream().filter(versionFormatDescription -> branchName.matches(versionFormatDescription.pattern)).findFirst().orElseThrow(() -> new ModelParseException(gitDir + ": No version format for branch '" + branchName + "' found.", 0, 0));
            projectVersionDataMap.put("branch", removePrefix(projectBranchName, projectVersionFormatDescription.prefix));
            projectVersionDataMap.putAll(getRegexGroupValueMap(projectVersionFormatDescription.pattern, projectBranchName));
        }
        String version = StrSubstitutor.replace(projectVersionFormatDescription.versionFormat, projectVersionDataMap);
        ProjectVersion projectVersion = new ProjectVersion(escapeVersion(version), headCommit, projectBranchName, projectTagName);
        logger.info(gav.getArtifactId() + ":" + gav.getVersion() + (projectVersion.getTag() != null ? " - tag: " + projectVersion.getTag() : "") + (projectVersion.getTag() != null ? " - branch: " + projectVersion.getBranch() : "") + " -> version: " + projectVersion.getVersion());
        return projectVersion;
    }
}
Also used : ModelParseException(org.apache.maven.model.io.ModelParseException) PluginExecution(org.apache.maven.model.PluginExecution) java.util(java.util) DefaultArtifactVersion(org.apache.maven.artifact.versioning.DefaultArtifactVersion) VersionFormatDescription(com.qoomon.maven.extension.gitversioning.config.model.VersionFormatDescription) Component(org.codehaus.plexus.component.annotations.Component) Build(org.apache.maven.model.Build) Inject(javax.inject.Inject) Matcher(java.util.regex.Matcher) ModelProcessor(org.apache.maven.model.building.ModelProcessor) ModelUtil(com.qoomon.maven.ModelUtil) Source(org.apache.maven.building.Source) StrSubstitutor(org.apache.commons.lang3.text.StrSubstitutor) DefaultModelProcessor(org.apache.maven.model.building.DefaultModelProcessor) FileRepositoryBuilder(org.eclipse.jgit.storage.file.FileRepositoryBuilder) MavenSession(org.apache.maven.execution.MavenSession) Constants(org.eclipse.jgit.lib.Constants) IOException(java.io.IOException) Reader(java.io.Reader) SessionScopeUtil(com.qoomon.maven.extension.gitversioning.SessionScopeUtil) Collectors(java.util.stream.Collectors) File(java.io.File) ObjectId(org.eclipse.jgit.lib.ObjectId) GAV(com.qoomon.maven.GAV) Plugin(org.apache.maven.model.Plugin) SessionScope(org.apache.maven.session.scope.internal.SessionScope) Stream(java.util.stream.Stream) BuildProperties(com.qoomon.maven.BuildProperties) VersioningConfigurationProvider(com.qoomon.maven.extension.gitversioning.config.VersioningConfigurationProvider) Logger(org.codehaus.plexus.logging.Logger) Pattern(java.util.regex.Pattern) VersioningConfiguration(com.qoomon.maven.extension.gitversioning.config.VersioningConfiguration) Repository(org.eclipse.jgit.lib.Repository) Model(org.apache.maven.model.Model) InputStream(java.io.InputStream) Repository(org.eclipse.jgit.lib.Repository) ModelParseException(org.apache.maven.model.io.ModelParseException) DefaultArtifactVersion(org.apache.maven.artifact.versioning.DefaultArtifactVersion) VersionFormatDescription(com.qoomon.maven.extension.gitversioning.config.model.VersionFormatDescription) FileRepositoryBuilder(org.eclipse.jgit.storage.file.FileRepositoryBuilder)

Aggregations

GAV (com.qoomon.maven.GAV)4 IOException (java.io.IOException)3 File (java.io.File)2 Source (org.apache.maven.building.Source)2 Build (org.apache.maven.model.Build)2 Model (org.apache.maven.model.Model)2 Plugin (org.apache.maven.model.Plugin)2 PluginExecution (org.apache.maven.model.PluginExecution)2 ModelParseException (org.apache.maven.model.io.ModelParseException)2 BuildProperties (com.qoomon.maven.BuildProperties)1 ModelUtil (com.qoomon.maven.ModelUtil)1 SessionScopeUtil (com.qoomon.maven.extension.gitversioning.SessionScopeUtil)1 VersioningConfiguration (com.qoomon.maven.extension.gitversioning.config.VersioningConfiguration)1 VersioningConfigurationProvider (com.qoomon.maven.extension.gitversioning.config.VersioningConfigurationProvider)1 VersionFormatDescription (com.qoomon.maven.extension.gitversioning.config.model.VersionFormatDescription)1 InputStream (java.io.InputStream)1 Reader (java.io.Reader)1 java.util (java.util)1 Matcher (java.util.regex.Matcher)1 Pattern (java.util.regex.Pattern)1