|
1 | 1 | apply plugin: 'release' |
2 | 2 |
|
3 | | -// Ignore release plugin's task because it calls out via GradleBuild. This is a good place to put an email to send out |
4 | | -task release(overwrite: true, dependsOn: commitNewVersion) << { |
5 | | - // This is a good place to put an email to send out |
6 | | -} |
7 | | -commitNewVersion.dependsOn updateVersion |
8 | | -updateVersion.dependsOn createReleaseTag |
9 | | -createReleaseTag.dependsOn preTagCommit |
10 | | -preTagCommit.dependsOn build |
11 | | -preTagCommit.dependsOn buildWithArtifactory |
12 | | -preTagCommit.dependsOn checkSnapshotDependencies |
13 | | -checkSnapshotDependencies.dependsOn confirmReleaseVersion |
14 | | -confirmReleaseVersion.dependsOn unSnapshotVersion |
15 | | -unSnapshotVersion.dependsOn checkUpdateNeeded |
16 | | -checkUpdateNeeded.dependsOn checkCommitNeeded |
17 | | -checkCommitNeeded.dependsOn initScmPlugin |
18 | | - |
19 | | -[ |
20 | | - uploadIvyLocal: 'uploadLocal', |
21 | | - uploadArtifactory: 'artifactoryPublish', // Call out to compile against internal repository |
22 | | - buildWithArtifactory: 'build' // Build against internal repository |
23 | | -].each { key, value -> |
| 3 | +[ uploadIvyLocal: 'uploadLocal', uploadArtifactory: 'artifactoryPublish', buildWithArtifactory: 'build' ].each { key, value -> |
24 | 4 | // Call out to compile against internal repository |
25 | 5 | task "${key}"(type: GradleBuild) { |
26 | 6 | startParameter = project.gradle.startParameter.newInstance() |
| 7 | + doFirst { |
| 8 | + startParameter.projectProperties = [status: project.status] |
| 9 | + } |
27 | 10 | startParameter.addInitScript( file('gradle/netflix-oss.gradle') ) |
28 | 11 | startParameter.getExcludedTaskNames().add('check') |
29 | 12 | tasks = [ 'build', value ] |
30 | 13 | } |
31 | 14 | } |
32 | | -task releaseArtifactory(dependsOn: [preTagCommit, uploadArtifactory]) |
| 15 | + |
| 16 | +// Marker task for following code to key in on |
| 17 | +task releaseCandidate(dependsOn: release) |
| 18 | +task forceCandidate { |
| 19 | + onlyIf { gradle.taskGraph.hasTask(releaseCandidate) } |
| 20 | + doFirst { project.status = 'candidate' } |
| 21 | +} |
| 22 | +release.dependsOn(forceCandidate) |
| 23 | + |
| 24 | +task releaseSnapshot(dependsOn: [uploadArtifactory, uploadMavenCentral]) |
| 25 | + |
| 26 | +// Ensure our versions look like the project status before publishing |
| 27 | +task verifyStatus << { |
| 28 | + def hasSnapshot = version.contains('-SNAPSHOT') |
| 29 | + if (project.status == 'snapshot' && !hasSnapshot) { |
| 30 | + throw new GradleException("Version (${version}) needs -SNAPSHOT if publishing snapshot") |
| 31 | + } |
| 32 | +} |
| 33 | +uploadArtifactory.dependsOn(verifyStatus) |
| 34 | +uploadMavenCentral.dependsOn(verifyStatus) |
33 | 35 |
|
34 | 36 | // Ensure upload happens before taggging but after all pre-checks |
35 | | -createReleaseTag.dependsOn releaseArtifactory |
| 37 | +createReleaseTag.dependsOn([uploadArtifactory, uploadMavenCentral]) |
36 | 38 |
|
37 | | -subprojects.each { project -> |
38 | | - project.uploadMavenCentral.dependsOn rootProject.preTagCommit |
39 | | - rootProject.createReleaseTag.dependsOn project.uploadMavenCentral |
| 39 | +gradle.taskGraph.whenReady { taskGraph -> |
| 40 | + def hasRelease = taskGraph.hasTask('commitNewVersion') |
| 41 | + def indexOf = { return taskGraph.allTasks.indexOf(it) } |
40 | 42 |
|
41 | | - gradle.taskGraph.whenReady { taskGraph -> |
42 | | - if ( rootProject.status == 'release' && !taskGraph.hasTask(':release') ) { |
43 | | - throw new GradleException('"release" task has to be run before uploading a release') |
44 | | - } |
| 43 | + if (hasRelease) { |
| 44 | + assert indexOf(build) < indexOf(unSnapshotVersion), 'build target has to be after unSnapshotVersion' |
| 45 | + assert indexOf(uploadMavenCentral) < indexOf(preTagCommit), 'preTagCommit has to be after uploadMavenCentral' |
| 46 | + assert indexOf(uploadArtifactory) < indexOf(preTagCommit), 'preTagCommit has to be after uploadArtifactory' |
45 | 47 | } |
46 | 48 | } |
47 | 49 |
|
48 | 50 | // Prevent plugin from asking for a version number interactively |
49 | 51 | ext.'gradle.release.useAutomaticVersion' = "true" |
50 | 52 |
|
51 | 53 | release { |
52 | | - failOnCommitNeeded=true |
53 | | - failOnPublishNeeded=true |
54 | | - failOnSnapshotDependencies=true |
55 | | - failOnUnversionedFiles=true |
56 | | - failOnUpdateNeeded=true |
57 | | - includeProjectNameInTag=true |
58 | | - revertOnFail=true |
59 | | - requireBranch = null |
| 54 | + git.requireBranch = null |
60 | 55 | } |
0 commit comments