aboutsummaryrefslogtreecommitdiffstats
path: root/gradle/release.gradle
blob: 6e3c20e845b598c7fb8278710304d80ec3f1844e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
apply plugin: 'release'

[ uploadIvyLocal: 'uploadLocal', uploadArtifactory: 'artifactoryPublish', buildWithArtifactory: 'build' ].each { key, value ->
    // Call out to compile against internal repository
    task "${key}"(type: GradleBuild) {
        startParameter = project.gradle.startParameter.newInstance()
        doFirst {
            startParameter.projectProperties = [status: project.status, preferredStatus: project.status]
        }
        startParameter.addInitScript( file('gradle/netflix-oss.gradle') )
        startParameter.getExcludedTaskNames().add('check')
        tasks = [ 'build', value ]
    }
}

// Marker task for following code to key in on
task releaseCandidate(dependsOn: release)
task forceCandidate {
    onlyIf { gradle.taskGraph.hasTask(releaseCandidate) }
    doFirst { project.status = 'candidate' }
}
task forceRelease {
    onlyIf { !gradle.taskGraph.hasTask(releaseCandidate) }
    doFirst { project.status = 'release' }
}
release.dependsOn([forceCandidate, forceRelease])

task releaseSnapshot(dependsOn: [uploadArtifactory, uploadMavenCentral])

// Ensure our versions look like the project status before publishing
task verifyStatus << {
    def hasSnapshot = version.contains('-SNAPSHOT')
    if (project.status == 'snapshot' && !hasSnapshot) {
        throw new GradleException("Version (${version}) needs -SNAPSHOT if publishing snapshot")
    }
}
uploadArtifactory.dependsOn(verifyStatus)
uploadMavenCentral.dependsOn(verifyStatus)

// Ensure upload happens before taggging, hence upload failures will leave repo in a revertable state
preTagCommit.dependsOn([uploadArtifactory, uploadMavenCentral])


gradle.taskGraph.whenReady { taskGraph ->
    def hasRelease = taskGraph.hasTask('commitNewVersion')
    def indexOf = { return taskGraph.allTasks.indexOf(it) }

    if (hasRelease) {
        assert indexOf(build) < indexOf(unSnapshotVersion), 'build target has to be after unSnapshotVersion'
        assert indexOf(uploadMavenCentral) < indexOf(preTagCommit), 'preTagCommit has to be after uploadMavenCentral'
        assert indexOf(uploadArtifactory) < indexOf(preTagCommit), 'preTagCommit has to be after uploadArtifactory'
    }
}

// Prevent plugin from asking for a version number interactively
ext.'gradle.release.useAutomaticVersion' = "true"

release {
    git.requireBranch = null
}