All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.lucapino.jira.CreateNewVersionMojo Maven / Gradle / Ivy

/*
 * Copyright 2012 George Gastaldi
 * Copyright 2013-2017 Luca Tagliani
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.lucapino.jira;

import com.atlassian.jira.rest.client.api.domain.Project;
import com.atlassian.jira.rest.client.api.domain.Version;
import com.atlassian.jira.rest.client.api.domain.input.VersionInput;
import com.github.lucapino.jira.helpers.RemoteVersionComparator;
import java.util.Comparator;
import org.apache.commons.lang.WordUtils;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Execute;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

/**
 * Goal that creates a version in a JIRA project.
 *
 * @author George Gastaldi
 * @author Luca Tagliani
 */
@Mojo(name = "create-new-jira-version")
@Execute(goal = "create-new-jira-version", phase = LifecyclePhase.DEPLOY)
public class CreateNewVersionMojo extends AbstractJiraMojo {

    /**
     * Next Development Version
     */
    @Parameter(defaultValue = "${project.version}", required = true)
    String developmentVersion;
    /**
     * Final name
     */
    @Parameter(defaultValue = "${project.build.finalName}")
    String finalName;
    /**
     * Whether the final name is to be used for the version; defaults to false.
     */
    @Parameter(defaultValue = "false")
    boolean finalNameUsedForVersion;
    /**
     * Comparator for discovering the latest release
     */
    Comparator remoteVersionComparator = new RemoteVersionComparator();

    @Override
    public void doExecute() throws Exception {
        Log log = getLog();

        Project jiraProject = jiraClient.getRestClient().getProjectClient().getProject(jiraProjectKey).claim();
        Iterable versions = jiraProject.getVersions();
        String newDevVersion;

        if (finalNameUsedForVersion) {
            newDevVersion = finalName;
        } else {
            newDevVersion = developmentVersion;
        }

        // Removing -SNAPSHOT suffix for safety and sensible formatting
        newDevVersion = WordUtils.capitalize(newDevVersion.replace(
                "-SNAPSHOT", "").replace("-", " "));

        boolean versionExists = isVersionAlreadyPresent(versions, newDevVersion);

        if (!versionExists) {

            VersionInput newVersion = new VersionInput(jiraProjectKey, newDevVersion, null, null, false, false);
            log.debug("New Development version in JIRA is: " + newDevVersion);
            jiraClient.getRestClient().getVersionRestClient().createVersion(newVersion).claim();

            log.info("Version created in JIRA for project key "
                    + jiraProjectKey + " : " + newDevVersion);
        } else {
            log.warn(String.format(
                    "Version %s is already created in JIRA. Nothing to do.",
                    newDevVersion));
        }

    }

    /**
     * Check if version is already present on array
     *
     * @param versions
     * @param newDevVersion
     * @return
     */
    boolean isVersionAlreadyPresent(Iterable versions,
            String newDevVersion) {
        boolean versionExists = false;

        if (versions != null) {
            // Creating new Version (if not already created)
            for (Version remoteVersion : versions) {
                if (remoteVersion.getName().equalsIgnoreCase(newDevVersion)) {
                    versionExists = true;
                    break;
                }
            }
        }

        // existant
        return versionExists;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy