|
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