package hudson.plugins.jira; import hudson.model.BuildListener; import hudson.model.Result; import hudson.model.Run; import hudson.model.TaskListener; import hudson.plugins.jira.model.JiraVersion; import java.util.List; import static ch.lambdaj.Lambda.filter; import static hudson.plugins.jira.JiraVersionMatcher.hasName; import static org.hamcrest.Matchers.equalTo; /** * used by JiraReleaseVersionUpdaterBuilder to mark a version as released */ public class VersionReleaser { static boolean perform(JiraSite site, String jiraProjectKey, String jiraRelease, Run<?, ?> run, TaskListener listener) { String realRelease = "NOT_SET"; String realProjectKey = null; try { realRelease = run.getEnvironment(listener).expand(jiraRelease); realProjectKey = run.getEnvironment(listener).expand(jiraProjectKey); if (realRelease == null || realRelease.isEmpty()) { throw new IllegalArgumentException("Release is Empty"); } if (realProjectKey == null || realProjectKey.isEmpty()) { throw new IllegalArgumentException("No project specified"); } List<JiraVersion> sameNamedVersions = filter( hasName(equalTo(realRelease)), site.getVersions(realProjectKey)); if (sameNamedVersions.size() == 1 && sameNamedVersions.get(0).isReleased()) { listener.getLogger().println(Messages.VersionReleaser_AlreadyReleased(realRelease, realProjectKey)); } else { listener.getLogger().println(Messages.VersionReleaser_MarkingReleased(realRelease, realProjectKey)); site.releaseVersion(realProjectKey, realRelease); } } catch (Exception e) { e.printStackTrace(listener.fatalError( "Unable to release jira version %s/%s: %s", realRelease, realProjectKey, e)); if(listener instanceof BuildListener) ((BuildListener)listener).finished(Result.FAILURE); return false; } return true; } }