Search in sources :

Example 1 with ReleaseDescriptorBuilder

use of org.apache.maven.shared.release.config.ReleaseDescriptorBuilder in project maven-release by apache.

the class DefaultReleaseManager method branch.

@Override
public void branch(ReleaseBranchRequest branchRequest) throws ReleaseExecutionException, ReleaseFailureException {
    final ReleaseDescriptorBuilder builder = branchRequest.getReleaseDescriptorBuilder();
    ReleaseUtils.copyPropertiesToReleaseDescriptor(branchRequest.getUserProperties(), new ReleaseDescriptorBuilder() {

        public ReleaseDescriptorBuilder addDevelopmentVersion(String key, String value) {
            builder.addDevelopmentVersion(key, value);
            return this;
        }

        public ReleaseDescriptorBuilder addReleaseVersion(String key, String value) {
            builder.addReleaseVersion(key, value);
            return this;
        }
    });
    ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor(builder, branchRequest.getReleaseManagerListener());
    boolean dryRun = BooleanUtils.isTrue(branchRequest.getDryRun());
    Strategy releaseStrategy = getStrategy(releaseDescriptor.getReleaseStrategyId());
    List<String> branchPhases = getGoalPhases(releaseStrategy, "branch");
    goalStart(branchRequest.getReleaseManagerListener(), "branch", branchPhases);
    for (String name : branchPhases) {
        ReleasePhase phase = releasePhases.get(name);
        if (phase == null) {
            throw new ReleaseExecutionException("Unable to find phase '" + name + "' to execute");
        }
        updateListener(branchRequest.getReleaseManagerListener(), name, PHASE_START);
        if (dryRun) {
            phase.simulate(releaseDescriptor, branchRequest.getReleaseEnvironment(), branchRequest.getReactorProjects());
        } else // getDryRun is null or FALSE
        {
            phase.execute(releaseDescriptor, branchRequest.getReleaseEnvironment(), branchRequest.getReactorProjects());
        }
        updateListener(branchRequest.getReleaseManagerListener(), name, PHASE_END);
    }
    if (!dryRun) {
        clean(branchRequest);
    }
    updateListener(branchRequest.getReleaseManagerListener(), "branch", GOAL_END);
}
Also used : Strategy(org.apache.maven.shared.release.strategy.Strategy) ReleasePhase(org.apache.maven.shared.release.phase.ReleasePhase) BuilderReleaseDescriptor(org.apache.maven.shared.release.config.ReleaseDescriptorBuilder.BuilderReleaseDescriptor) ReleaseDescriptor(org.apache.maven.shared.release.config.ReleaseDescriptor) ReleaseDescriptorBuilder(org.apache.maven.shared.release.config.ReleaseDescriptorBuilder)

Example 2 with ReleaseDescriptorBuilder

use of org.apache.maven.shared.release.config.ReleaseDescriptorBuilder in project maven-release by apache.

the class DefaultReleaseManager method prepare.

private void prepare(ReleasePrepareRequest prepareRequest, ReleaseResult result) throws ReleaseExecutionException, ReleaseFailureException {
    final ReleaseDescriptorBuilder builder = prepareRequest.getReleaseDescriptorBuilder();
    // Create a config containing values from the session properties (ie command line properties with cli).
    ReleaseUtils.copyPropertiesToReleaseDescriptor(prepareRequest.getUserProperties(), new ReleaseDescriptorBuilder() {

        public ReleaseDescriptorBuilder addDevelopmentVersion(String key, String value) {
            builder.addDevelopmentVersion(key, value);
            return this;
        }

        public ReleaseDescriptorBuilder addReleaseVersion(String key, String value) {
            builder.addReleaseVersion(key, value);
            return this;
        }

        public ReleaseDescriptorBuilder addDependencyReleaseVersion(String dependencyKey, String version) {
            builder.addDependencyReleaseVersion(dependencyKey, version);
            return this;
        }

        public ReleaseDescriptorBuilder addDependencyDevelopmentVersion(String dependencyKey, String version) {
            builder.addDependencyDevelopmentVersion(dependencyKey, version);
            return this;
        }
    });
    BuilderReleaseDescriptor config;
    if (BooleanUtils.isNotFalse(prepareRequest.getResume())) {
        config = loadReleaseDescriptor(builder, prepareRequest.getReleaseManagerListener());
    } else {
        config = ReleaseUtils.buildReleaseDescriptor(builder);
    }
    Strategy releaseStrategy = getStrategy(config.getReleaseStrategyId());
    List<String> preparePhases = getGoalPhases(releaseStrategy, "prepare");
    goalStart(prepareRequest.getReleaseManagerListener(), "prepare", preparePhases);
    // Later, it would be a good idea to introduce a proper workflow tool so that the release can be made up of a
    // more flexible set of steps.
    String completedPhase = config.getCompletedPhase();
    int index = preparePhases.indexOf(completedPhase);
    for (int idx = 0; idx <= index; idx++) {
        updateListener(prepareRequest.getReleaseManagerListener(), preparePhases.get(idx), PHASE_SKIP);
    }
    if (index == preparePhases.size() - 1) {
        logInfo(result, "Release preparation already completed. You can now continue with release:perform, " + "or start again using the -Dresume=false flag");
    } else if (index >= 0) {
        logInfo(result, "Resuming release from phase '" + preparePhases.get(index + 1) + "'");
    }
    // start from next phase
    for (int i = index + 1; i < preparePhases.size(); i++) {
        String name = preparePhases.get(i);
        ReleasePhase phase = releasePhases.get(name);
        if (phase == null) {
            throw new ReleaseExecutionException("Unable to find phase '" + name + "' to execute");
        }
        updateListener(prepareRequest.getReleaseManagerListener(), name, PHASE_START);
        ReleaseResult phaseResult = null;
        try {
            if (BooleanUtils.isTrue(prepareRequest.getDryRun())) {
                phaseResult = phase.simulate(config, prepareRequest.getReleaseEnvironment(), prepareRequest.getReactorProjects());
            } else {
                phaseResult = phase.execute(config, prepareRequest.getReleaseEnvironment(), prepareRequest.getReactorProjects());
            }
        } finally {
            if (result != null && phaseResult != null) {
                result.appendOutput(phaseResult.getOutput());
            }
        }
        config.setCompletedPhase(name);
        try {
            configStore.get().write(config);
        } catch (ReleaseDescriptorStoreException e) {
            // TODO: rollback?
            throw new ReleaseExecutionException("Error writing release properties after completing phase", e);
        }
        updateListener(prepareRequest.getReleaseManagerListener(), name, PHASE_END);
    }
    updateListener(prepareRequest.getReleaseManagerListener(), "prepare", GOAL_END);
}
Also used : ReleaseDescriptorStoreException(org.apache.maven.shared.release.config.ReleaseDescriptorStoreException) Strategy(org.apache.maven.shared.release.strategy.Strategy) ReleasePhase(org.apache.maven.shared.release.phase.ReleasePhase) ReleaseDescriptorBuilder(org.apache.maven.shared.release.config.ReleaseDescriptorBuilder) BuilderReleaseDescriptor(org.apache.maven.shared.release.config.ReleaseDescriptorBuilder.BuilderReleaseDescriptor)

Example 3 with ReleaseDescriptorBuilder

use of org.apache.maven.shared.release.config.ReleaseDescriptorBuilder in project maven-release by apache.

the class DefaultReleaseManager method loadReleaseDescriptorBuilder.

private ReleaseDescriptorBuilder loadReleaseDescriptorBuilder(ReleaseDescriptorBuilder builder, ReleaseManagerListener listener) throws ReleaseExecutionException {
    try {
        updateListener(listener, "verify-release-configuration", PHASE_START);
        ReleaseDescriptorBuilder result = configStore.get().read(builder);
        updateListener(listener, "verify-release-configuration", PHASE_END);
        return result;
    } catch (ReleaseDescriptorStoreException e) {
        updateListener(listener, e.getMessage(), ERROR);
        throw new ReleaseExecutionException("Error reading stored configuration: " + e.getMessage(), e);
    }
}
Also used : ReleaseDescriptorStoreException(org.apache.maven.shared.release.config.ReleaseDescriptorStoreException) ReleaseDescriptorBuilder(org.apache.maven.shared.release.config.ReleaseDescriptorBuilder)

Example 4 with ReleaseDescriptorBuilder

use of org.apache.maven.shared.release.config.ReleaseDescriptorBuilder in project maven-release by apache.

the class DefaultReleaseManager method updateVersions.

@Override
public void updateVersions(ReleaseUpdateVersionsRequest updateVersionsRequest) throws ReleaseExecutionException, ReleaseFailureException {
    final ReleaseDescriptorBuilder builder = updateVersionsRequest.getReleaseDescriptorBuilder();
    // Create a config containing values from the session properties (ie command line properties with cli).
    ReleaseUtils.copyPropertiesToReleaseDescriptor(updateVersionsRequest.getUserProperties(), new ReleaseDescriptorBuilder() {

        public ReleaseDescriptorBuilder addDevelopmentVersion(String key, String value) {
            builder.addDevelopmentVersion(key, value);
            return this;
        }

        public ReleaseDescriptorBuilder addReleaseVersion(String key, String value) {
            builder.addReleaseVersion(key, value);
            return this;
        }
    });
    ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor(builder, updateVersionsRequest.getReleaseManagerListener());
    Strategy releaseStrategy = getStrategy(releaseDescriptor.getReleaseStrategyId());
    List<String> updateVersionsPhases = getGoalPhases(releaseStrategy, "updateVersions");
    goalStart(updateVersionsRequest.getReleaseManagerListener(), "updateVersions", updateVersionsPhases);
    for (String name : updateVersionsPhases) {
        ReleasePhase phase = releasePhases.get(name);
        if (phase == null) {
            throw new ReleaseExecutionException("Unable to find phase '" + name + "' to execute");
        }
        updateListener(updateVersionsRequest.getReleaseManagerListener(), name, PHASE_START);
        phase.execute(releaseDescriptor, updateVersionsRequest.getReleaseEnvironment(), updateVersionsRequest.getReactorProjects());
        updateListener(updateVersionsRequest.getReleaseManagerListener(), name, PHASE_END);
    }
    clean(updateVersionsRequest);
    updateListener(updateVersionsRequest.getReleaseManagerListener(), "updateVersions", GOAL_END);
}
Also used : Strategy(org.apache.maven.shared.release.strategy.Strategy) ReleasePhase(org.apache.maven.shared.release.phase.ReleasePhase) BuilderReleaseDescriptor(org.apache.maven.shared.release.config.ReleaseDescriptorBuilder.BuilderReleaseDescriptor) ReleaseDescriptor(org.apache.maven.shared.release.config.ReleaseDescriptor) ReleaseDescriptorBuilder(org.apache.maven.shared.release.config.ReleaseDescriptorBuilder)

Example 5 with ReleaseDescriptorBuilder

use of org.apache.maven.shared.release.config.ReleaseDescriptorBuilder in project maven-release by apache.

the class AbstractEditModeRewritingReleasePhaseTestCase method testRewriteBasicPomWithEditModeException.

@Test
public void testRewriteBasicPomWithEditModeException() throws Exception {
    // prepare
    List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
    ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, "basic-pom");
    builder.setScmUseEditMode(true);
    mapNextVersion(builder, "groupId:artifactId");
    ScmProvider scmProviderMock = mock(ScmProvider.class);
    when(scmProviderMock.edit(isA(ScmRepository.class), isA(ScmFileSet.class))).thenThrow(new ScmException("..."));
    ScmManagerStub scmManager = new ScmManagerStub();
    DefaultScmRepositoryConfigurator configurator = (DefaultScmRepositoryConfigurator) lookup(ScmRepositoryConfigurator.class, "default");
    configurator.setScmManager(scmManager);
    scmManager.setScmProvider(scmProviderMock);
    // execute
    try {
        phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
        fail("Should have thrown an exception");
    } catch (ReleaseExecutionException e) {
        assertEquals("Check cause", ScmException.class, e.getCause().getClass());
    }
    // verify
    verify(scmProviderMock).edit(isA(ScmRepository.class), isA(ScmFileSet.class));
    verifyNoMoreInteractions(scmProviderMock);
}
Also used : ScmProvider(org.apache.maven.scm.provider.ScmProvider) ScmRepository(org.apache.maven.scm.repository.ScmRepository) ScmFileSet(org.apache.maven.scm.ScmFileSet) ScmException(org.apache.maven.scm.ScmException) MavenProject(org.apache.maven.project.MavenProject) ScmManagerStub(org.apache.maven.scm.manager.ScmManagerStub) DefaultScmRepositoryConfigurator(org.apache.maven.shared.release.scm.DefaultScmRepositoryConfigurator) DefaultReleaseEnvironment(org.apache.maven.shared.release.env.DefaultReleaseEnvironment) ReleaseDescriptorBuilder(org.apache.maven.shared.release.config.ReleaseDescriptorBuilder) DefaultScmRepositoryConfigurator(org.apache.maven.shared.release.scm.DefaultScmRepositoryConfigurator) ScmRepositoryConfigurator(org.apache.maven.shared.release.scm.ScmRepositoryConfigurator) ReleaseExecutionException(org.apache.maven.shared.release.ReleaseExecutionException) Test(org.junit.Test)

Aggregations

ReleaseDescriptorBuilder (org.apache.maven.shared.release.config.ReleaseDescriptorBuilder)422 Test (org.junit.Test)364 DefaultReleaseEnvironment (org.apache.maven.shared.release.env.DefaultReleaseEnvironment)353 MavenProject (org.apache.maven.project.MavenProject)316 ScmManager (org.apache.maven.scm.manager.ScmManager)56 ReleaseFailureException (org.apache.maven.shared.release.ReleaseFailureException)51 File (java.io.File)48 ScmProvider (org.apache.maven.scm.provider.ScmProvider)44 ScmManagerStub (org.apache.maven.shared.release.stubs.ScmManagerStub)44 ScmRepository (org.apache.maven.scm.repository.ScmRepository)42 ScmFileSet (org.apache.maven.scm.ScmFileSet)36 ReleaseExecutionException (org.apache.maven.shared.release.ReleaseExecutionException)34 ScmFile (org.apache.maven.scm.ScmFile)25 ReleaseResult (org.apache.maven.shared.release.ReleaseResult)24 MavenExecutor (org.apache.maven.shared.release.exec.MavenExecutor)17 Prompter (org.codehaus.plexus.components.interactivity.Prompter)17 ReleaseEnvironment (org.apache.maven.shared.release.env.ReleaseEnvironment)15 ReleasePhase (org.apache.maven.shared.release.phase.ReleasePhase)14 Properties (java.util.Properties)13 ScmManagerStub (org.apache.maven.scm.manager.ScmManagerStub)12