1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.shared.release.config;
20
21 import java.util.List;
22
23 import org.apache.maven.model.Scm;
24
25 /**
26 * <p>ReleaseDescriptor interface.</p>
27 *
28 * @author Robert Scholte
29 */
30 public interface ReleaseDescriptor {
31 /**
32 * Get if updateDependencies is false, dependencies version won't be updated to the next development version.
33 *
34 * @return boolean
35 */
36 boolean isUpdateDependencies();
37
38 /**
39 * Get whether to use the release profile that adds sources and javadocs to the released artifact, if appropriate.
40 * If set to true, this will set the property "performRelease" to true.
41 *
42 * @return boolean
43 */
44 boolean isUseReleaseProfile();
45
46 /**
47 * Get whether to use the parent pom version for submodule versions.
48 *
49 * @return boolean
50 */
51 boolean isAutoVersionSubmodules();
52
53 /**
54 * Get whether a SNAPSHOT of the release plugin is allowed.
55 *
56 * @return boolean
57 */
58 boolean isSnapshotReleasePluginAllowed();
59
60 /**
61 * Get the commits must be done by modules or not. Set it to true in case of flat directory structure.
62 *
63 * @return boolean
64 */
65 boolean isCommitByProject();
66
67 /**
68 * Get whether to create a branch instead of do a release.
69 *
70 * @return boolean
71 */
72 boolean isBranchCreation();
73
74 /**
75 * Get whether to update branch POM versions.
76 *
77 * @return boolean
78 */
79 boolean isUpdateBranchVersions();
80
81 /**
82 * Get whether to update working copy POM versions.
83 *
84 * @return boolean
85 */
86 boolean isUpdateWorkingCopyVersions();
87
88 /**
89 * Get whether to suppress a commit of changes to the working copy before a tag or branch is created.
90 *
91 * @return boolean
92 */
93 boolean isSuppressCommitBeforeTagOrBranch();
94
95 /**
96 * Get should timestamped SNAPSHOT dependencies be allowed? Default is to fail when any SNAPSHOT dependency is
97 * found.
98 *
99 * @return boolean
100 */
101 boolean isAllowTimestampedSnapshots();
102
103 /**
104 * Get whether to update branch versions to SNAPSHOT.
105 *
106 * @return boolean
107 */
108 boolean isUpdateVersionsToSnapshot();
109
110 /**
111 * Get nOTE : currently only implemented with svn scm. Enable a workaround to prevent issue due to svn client >
112 * 1.5.0 (https://issues.apache.org/jira/browse/SCM-406).
113 *
114 * @return boolean
115 */
116 boolean isRemoteTagging();
117
118 /**
119 * Get if the scm provider should sign the tag. NOTE: currently only implemented with git-exe.
120 *
121 * @return boolean true if SCM tag should be signed
122 */
123 boolean isScmSignTags();
124
125 /**
126 * Get if the scm provider should use local checkouts via file://${basedir} instead of doing a clean checkout over
127 * the network. This is very helpful for releasing large projects!
128 *
129 * @return boolean
130 */
131 boolean isLocalCheckout();
132
133 /**
134 * Get should distributed changes be pushed to the central repository? For many distributed SCMs like Git, a change
135 * like a commit is only stored in your local copy of the repository. Pushing the change allows your to more easily
136 * share it with other users.
137 *
138 * @return boolean
139 */
140 boolean isPushChanges();
141
142 /**
143 * Get default version to use for new working copy.
144 *
145 * Some SCMs may require a Work Item or a Task to allow the
146 * changes to be pushed or delivered.
147 * This field allows you to specify that Work Item
148 * or Task. It is optional, and only relevant if pushChanges is true.
149 *
150 * @return String
151 */
152 String getWorkItem();
153
154 /**
155 * Get default version to use for new working copy.
156 *
157 * @return String
158 */
159 String getDefaultDevelopmentVersion();
160
161 /**
162 * Get relative path of the project returned by the checkout command.
163 *
164 * @return String
165 */
166 String getScmRelativePathProjectDirectory();
167
168 /**
169 * Get the directory where the tag will be checked out.
170 *
171 * @return String
172 */
173 String getCheckoutDirectory();
174
175 /**
176 * Get the goals to execute in perform phase for the release.
177 *
178 * @return String
179 */
180 String getPerformGoals();
181
182 /**
183 * Get default version to use for the tagged release or the new branch.
184 *
185 * @return String
186 */
187 String getDefaultReleaseVersion();
188
189 /**
190 * Get nOTE : currently only implemented with svn scm. It contains the revision of the committed released pom to
191 * remotely tag the source code with this revision.
192 *
193 * @return String
194 */
195 String getScmReleasedPomRevision();
196
197 /**
198 * Get whether to add the model schema to the top of the rewritten POM if it wasn't there already. If
199 * <code>false</code> then the root element will remain untouched.
200 *
201 * @return boolean
202 */
203 boolean isAddSchema();
204
205 /**
206 * Get whether to generate release POMs.
207 *
208 * @return boolean
209 */
210 boolean isGenerateReleasePoms();
211
212 /**
213 * Get whether the release process is interactive and the release manager should be prompted to confirm values, or
214 * whether the defaults are used regardless.
215 *
216 * @return boolean
217 */
218 boolean isInteractive();
219
220 /**
221 * Get whether to use edit mode when making SCM modifications. This setting is disregarded if the SCM does not
222 * support edit mode, or if edit mode is compulsory for the given SCM.
223 *
224 * @return boolean
225 */
226 boolean isScmUseEditMode();
227
228 /**
229 * <p>getActivateProfiles.</p>
230 *
231 * @return list of profiles to activate
232 */
233 List<String> getActivateProfiles();
234
235 /**
236 * Get the last completed phase.
237 *
238 * @return String
239 */
240 String getCompletedPhase();
241
242 /**
243 * Method getCheckModificationExcludes.
244 *
245 * @return List
246 */
247 List<String> getCheckModificationExcludes();
248
249 /**
250 * Get additional arguments to pass to any executed Maven process.
251 *
252 * @return String
253 */
254 String getAdditionalArguments();
255
256 /**
257 * Get the goals to execute in preparation for the release.
258 *
259 * @return String
260 */
261 String getPreparationGoals();
262
263 /**
264 * Get the goals to execute in on completion of preparation for the release.
265 *
266 * @return String
267 */
268 String getCompletionGoals();
269
270 /**
271 * Get the file name of the POM to pass to any executed Maven process.
272 *
273 * @return String
274 */
275 String getPomFileName();
276
277 /**
278 * Get the prefix of SCM modification messages.
279 *
280 * @return String
281 */
282 String getScmCommentPrefix();
283
284 /**
285 * Get whether to use a shallow clone with no history or a full clone containing the full history during the
286 * release.
287 *
288 * @return boolean
289 * @since 3.0.0-M6
290 */
291 boolean isScmShallowClone();
292
293 /**
294 * Get the SCM commit comment when setting pom.xml to release.
295 *
296 * @return String
297 * @since 3.0.0-M1
298 */
299 String getScmReleaseCommitComment();
300
301 /**
302 * Get the SCM commit comment when setting pom.xml back to development.
303 *
304 * @return String
305 * @since 3.0.0-M1
306 */
307 String getScmDevelopmentCommitComment();
308
309 /**
310 * Get the SCM commit comment when branching.
311 *
312 * @return String
313 * @since 3.0.0-M1
314 */
315 String getScmBranchCommitComment();
316
317 /**
318 * Get the SCM commit comment when rolling back.
319 *
320 * @return String
321 * @since 3.0.0-M1
322 */
323 String getScmRollbackCommitComment();
324
325 /**
326 * Get pass phrase for the private key.
327 *
328 * @return String
329 */
330 String getScmPrivateKeyPassPhrase();
331
332 /**
333 * Get the password for the user interacting with the scm.
334 *
335 * @return String
336 */
337 String getScmPassword();
338
339 /**
340 * Get private key for an SSH based SCM repository.
341 *
342 * @return String
343 */
344 String getScmPrivateKey();
345
346 /**
347 * Get tag or branch name: the identifier for the tag/branch. Example: maven-release-plugin-2.0.
348 *
349 * @return String
350 */
351 String getScmReleaseLabel();
352
353 /**
354 * Get where you are going to put your tagged sources Example https://svn.apache.org/repos/asf/maven/plugins/tags.
355 *
356 * @return String
357 */
358 String getScmTagBase();
359
360 /**
361 * Get where you are going to put your branched sources Example
362 * https://svn.apache.org/repos/asf/maven/plugins/branches.
363 *
364 * @return String
365 */
366 String getScmBranchBase();
367
368 /**
369 * Get the id can be used to get the credentials by the server-id from the settings.xml.
370 *
371 * @return String
372 */
373 String getScmId();
374
375 /**
376 * Get this is a MavenSCM of where you're going to get the sources to make the release with. Example:
377 * scm:svn:https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-release-plugin.
378 *
379 * @return String
380 */
381 String getScmSourceUrl();
382
383 /**
384 * Get the user name to interact with the scm.
385 *
386 * @return String
387 */
388 String getScmUsername();
389
390 /**
391 * Get wait the specified number of seconds before creating a tag.
392 *
393 * @return int
394 */
395 int getWaitBeforeTagging();
396
397 /**
398 * Get the directory where the release is performed.
399 *
400 * @return String
401 */
402 String getWorkingDirectory();
403
404 /**
405 * Get specifies the format for generating a tag name. Property expansion is used with the optional prefix of
406 * project, where properties are delimited with @{ and }.
407 *
408 * @return String
409 */
410 String getScmTagNameFormat();
411
412 /**
413 * Get the role-hint for the NamingPolicy implementation used to calculate the project branch and tag names.
414 *
415 * @return String
416 */
417 String getProjectNamingPolicyId();
418
419 /**
420 * Get the role-hint for the VersionPolicy implementation used to calculate the project versions.
421 *
422 * @return String
423 */
424 String getProjectVersionPolicyId();
425
426 /**
427 * Get the (optional) config for the VersionPolicy implementation used to calculate the project versions.
428 *
429 * @return The parsed XML of the provided config (an instance of PlexusConfiguration) or null.
430 */
431 Object getProjectVersionPolicyConfig();
432
433 /**
434 * Get the role-hint for the release Strategy implementation.
435 *
436 * @return String
437 */
438 String getReleaseStrategyId();
439
440 /**
441 * <p>getDependencyOriginalVersion.</p>
442 *
443 * @return {@code String} The original version for the resolved snapshot dependency.
444 * @param artifactKey the artifact key {@code String}
445 */
446 String getDependencyOriginalVersion(String artifactKey);
447
448 /**
449 * <p>getDependencyReleaseVersion.</p>
450 *
451 * @return {@code String} the release version for the resolved snapshot dependency.
452 * @param artifactKey the artifact key {@code String}
453 */
454 String getDependencyReleaseVersion(String artifactKey);
455
456 /**
457 * <p>getDependencyDevelopmentVersion.</p>
458 *
459 * @return {@code String} the release version for the resolved snapshot dependency.
460 * @param artifactKey the artifact key {@code String}
461 */
462 String getDependencyDevelopmentVersion(String artifactKey);
463
464 /**
465 * <p>getProjectOriginalVersion.</p>
466 *
467 * @param projectKey a {@link java.lang.String} object
468 * @return a {@link java.lang.String} object
469 */
470 String getProjectOriginalVersion(String projectKey);
471
472 /**
473 * <p>getProjectDevelopmentVersion.</p>
474 *
475 * @param projectKey a {@link java.lang.String} object
476 * @return a {@link java.lang.String} object
477 */
478 String getProjectDevelopmentVersion(String projectKey);
479
480 /**
481 * <p>getProjectReleaseVersion.</p>
482 *
483 * @param key a {@link java.lang.String} object
484 * @return a {@link java.lang.String} object
485 */
486 String getProjectReleaseVersion(String key);
487
488 /**
489 * <p>getOriginalScmInfo.</p>
490 *
491 * @param projectKey the project key {@code String}
492 * @return the original {@code Scm} information.
493 */
494 Scm getOriginalScmInfo(String projectKey);
495
496 /**
497 * <p>hasOriginalScmInfo.</p>
498 *
499 * @param projectKey the project key {@code String}
500 * @return has original Scm info.
501 */
502 boolean hasOriginalScmInfo(String projectKey);
503
504 // Modifiable
505 /**
506 * <p>addDependencyOriginalVersion.</p>
507 *
508 * @param versionlessKey a {@link java.lang.String} object
509 * @param string a {@link java.lang.String} object
510 */
511 void addDependencyOriginalVersion(String versionlessKey, String string);
512
513 /**
514 * <p>addDependencyReleaseVersion.</p>
515 *
516 * @param versionlessKey a {@link java.lang.String} object
517 * @param version a {@link java.lang.String} object
518 */
519 void addDependencyReleaseVersion(String versionlessKey, String version);
520
521 /**
522 * <p>addDependencyDevelopmentVersion.</p>
523 *
524 * @param versionlessKey a {@link java.lang.String} object
525 * @param version a {@link java.lang.String} object
526 */
527 void addDependencyDevelopmentVersion(String versionlessKey, String version);
528
529 /**
530 * <p>addReleaseVersion.</p>
531 *
532 * @param projectId a {@link java.lang.String} object
533 * @param nextVersion a {@link java.lang.String} object
534 */
535 void addReleaseVersion(String projectId, String nextVersion);
536
537 /**
538 * <p>addDevelopmentVersion.</p>
539 *
540 * @param projectId a {@link java.lang.String} object
541 * @param nextVersion a {@link java.lang.String} object
542 */
543 void addDevelopmentVersion(String projectId, String nextVersion);
544
545 /**
546 * <p>setScmReleaseLabel.</p>
547 *
548 * @param tag a {@link java.lang.String} object
549 */
550 void setScmReleaseLabel(String tag);
551
552 /**
553 * <p>setScmReleasedPomRevision.</p>
554 *
555 * @param scmRevision a {@link java.lang.String} object
556 */
557 void setScmReleasedPomRevision(String scmRevision);
558
559 /**
560 * <p>setScmRelativePathProjectDirectory.</p>
561 *
562 * @param scmRelativePathProjectDirectory a {@link java.lang.String} object
563 */
564 void setScmRelativePathProjectDirectory(String scmRelativePathProjectDirectory);
565
566 /**
567 * <p>setScmSourceUrl.</p>
568 *
569 * @param scmUrl a {@link java.lang.String} object
570 */
571 void setScmSourceUrl(String scmUrl);
572
573 /**
574 * Returns whether unresolved SNAPSHOT dependencies should automatically be resolved.
575 * If this is set, then this specifies the default answer to be used when unresolved SNAPSHOT
576 * dependencies should automatically be resolved ( 0:All 1:Project Dependencies 2:Plugins
577 * 3:Reports 4:Extensions ). Possible values are:
578 * <ul>
579 * <li>"all" or "0": resolve all kinds of snapshots, ie. project, plugin, report and extension dependencies </li>
580 * <li>"dependencies" or "1": resolve project dependencies</li>
581 * <li>"plugins" or "2": resolve plugin dependencis</li>
582 * <li>"reports" or "3": resolve report dependencies</li>
583 * <li>"extensions" or "4": resolve extension dependencies</li>
584 * </ul>
585 *
586 * @return String
587 */
588 String getAutoResolveSnapshots();
589
590 /**
591 * Get the line separator to use in the pom.xml.
592 *
593 * @return String
594 */
595 String getLineSeparator();
596
597 /**
598 * Determines whether the {@code --pin-externals} option in {@code svn copy} command is enabled
599 * which is new in Subversion 1.9.
600 *
601 * @return boolean
602 */
603 boolean isPinExternals();
604 }