View Javadoc

1   package org.apache.maven.continuum.release;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.continuum.model.release.ReleaseListenerSummary;
23  import org.apache.continuum.model.repository.LocalRepository;
24  import org.apache.continuum.taskqueue.manager.TaskQueueManagerException;
25  import org.apache.maven.continuum.model.project.Project;
26  import org.apache.maven.shared.release.config.ReleaseDescriptor;
27  import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor;
28  
29  import java.io.File;
30  import java.util.Map;
31  import java.util.Properties;
32  
33  /**
34   * The Continuum Release Manager is responsible for performing releases based on a release descriptor
35   * that has been received by the Maven Release Plugin.
36   *
37   * @author Jason van Zyl
38   * @version $Id: ContinuumReleaseManager.java 1392390 2012-10-01 15:25:24Z brett $
39   */
40  public interface ContinuumReleaseManager
41  {
42      String ROLE = ContinuumReleaseManager.class.getName();
43  
44      /**
45       * Prepare a project for release
46       *
47       * @param project
48       * @param releaseProperties
49       * @param releaseVersions
50       * @param developmentVersions
51       * @param listener
52       * @param workingDirectory
53       * @return
54       * @throws ContinuumReleaseException
55       */
56      String prepare( Project project, Properties releaseProperties, Map<String, String> releaseVersions,
57                      Map<String, String> developmentVersions, ContinuumReleaseManagerListener listener,
58                      String workingDirectory )
59          throws ContinuumReleaseException;
60  
61      /**
62       * Prepare a project for release
63       *
64       * @param project
65       * @param releaseProperties
66       * @param releaseVersions
67       * @param developmentVersions
68       * @param listener
69       * @param workingDirectory
70       * @param environments
71       * @param executable
72       * @return
73       * @throws ContinuumReleaseException
74       */
75      String prepare( Project project, Properties releaseProperties, Map<String, String> releaseVersions,
76                      Map<String, String> developmentVersions, ContinuumReleaseManagerListener listener,
77                      String workingDirectory, Map<String, String> environments, String executable )
78          throws ContinuumReleaseException;
79  
80      /**
81       * Perform a release based on a given releaseId
82       *
83       * @param releaseId
84       * @param buildDirectory
85       * @param goals
86       * @param useReleaseProfile
87       * @param listener
88       * @throws ContinuumReleaseException
89       * @deprecated to remove as not used anymore
90       */
91      void perform( String releaseId, File buildDirectory, String goals, String arguments, boolean useReleaseProfile,
92                    ContinuumReleaseManagerListener listener )
93          throws ContinuumReleaseException;
94  
95      /**
96       * Perform a release based on a release descriptor received by the Maven Release Plugin.
97       *
98       * @param releaseId
99       * @param workingDirectory
100      * @param buildDirectory
101      * @param goals
102      * @param useReleaseProfile
103      * @param listener
104      * @throws ContinuumReleaseException
105      * @deprecated to remove as not used anymore
106      */
107     void perform( String releaseId, String workingDirectory, File buildDirectory, String goals, String arguments,
108                   boolean useReleaseProfile, ContinuumReleaseManagerListener listener )
109         throws ContinuumReleaseException;
110 
111 
112     /**
113      * FIXME use a bean to replace such very huge parameter number (ContinuumReleaseRequest)
114      *
115      * @param releaseId
116      * @param buildDirectory
117      * @param goals
118      * @param arguments
119      * @param useReleaseProfile
120      * @param listener
121      * @param repository
122      * @throws ContinuumReleaseException
123      */
124     void perform( String releaseId, File buildDirectory, String goals, String arguments, boolean useReleaseProfile,
125                   ContinuumReleaseManagerListener listener, LocalRepository repository )
126         throws ContinuumReleaseException;
127 
128     /**
129      * Rollback changes made by a previous release.
130      *
131      * @param releaseId
132      * @param workingDirectory
133      * @param listener
134      * @throws ContinuumReleaseException
135      */
136     void rollback( String releaseId, String workingDirectory, ContinuumReleaseManagerListener listener )
137         throws ContinuumReleaseException;
138 
139     Map<String, ReleaseDescriptor> getPreparedReleases();
140 
141     Map<String, String> getPreparedReleasesForProject( String groupId, String artifactId );
142 
143     Map getReleaseResults();
144 
145     Map getListeners();
146 
147 
148     /**
149      * Clean up the tagname to respect the scm provider policy.
150      *
151      * @param scmUrl  The scm url
152      * @param tagName The tag name
153      * @return The cleaned tag name
154      */
155     String sanitizeTagName( String scmUrl, String tagName )
156         throws Exception;
157 
158     /**
159      * @param releaseId
160      * @return
161      */
162     ReleaseListenerSummary getListener( String releaseId );
163 
164     /**
165      * Determines if there is an ongoing release
166      *
167      * @return true if there is an ongoing release; false otherwise
168      * @throws Exception if unable to determine if release is ongoing
169      */
170     boolean isExecutingRelease()
171         throws Exception;
172 
173     /**
174      * Retrieve the Release TaskQueueExecutor instance
175      *
176      * @return Release TaskQueueExecutor instance
177      * @throws TaskQueueManagerException if unable to retrieve the Release TaskQueueExecutor instance
178      */
179     TaskQueueExecutor getPerformReleaseTaskQueueExecutor()
180         throws TaskQueueManagerException;
181 
182     /**
183      * Retrieve the PrepareRelease TaskQueueExecutor instance
184      *
185      * @return PrepareRelease TaskQueueExecutor instance
186      * @throws TaskQueueManagerException if unable to retrieve the PrepareRelease TaskQueueExecutor instance
187      */
188     TaskQueueExecutor getPrepareReleaseTaskQueueExecutor()
189         throws TaskQueueManagerException;
190 
191     /**
192      * Retrieve the RollbackRelease TaskQueueExecutor instance
193      *
194      * @return RollbackRelease TaskQueueExecutor instance
195      * @throws TaskQueueManagerException if unable to retrieve the RollbackRelease TaskQueueExecutor instance
196      */
197     TaskQueueExecutor getRollbackReleaseTaskQueueExecutor()
198         throws TaskQueueManagerException;
199 }