Skip to content

Commit 8f289b7

Browse files
author
Justin Ryan
committed
Release plugin
1 parent a85e196 commit 8f289b7

6 files changed

Lines changed: 79 additions & 24 deletions

File tree

build.gradle

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Establish version and status
2-
ext.releaseVersion = '1.1.3' // TEMPLATE: Set to latest release
3-
ext.githubProjectName = rootProject.name // TEMPLATE: change to match github project, if it doesn't match project name
2+
ext.githubProjectName = rootProject.name // Change if github project name is not the same as the root project's name
43

54
buildscript {
65
repositories { mavenCentral() }
@@ -11,11 +10,11 @@ allprojects {
1110
repositories { mavenCentral() }
1211
}
1312

14-
//apply from: file('gradle/release.gradle') // Not fully tested
1513
apply from: file('gradle/convention.gradle')
1614
apply from: file('gradle/maven.gradle')
1715
apply from: file('gradle/check.gradle')
1816
apply from: file('gradle/license.gradle')
17+
apply from: file('gradle/release.gradle')
1918

2019
subprojects {
2120
// Closure to configure all the POM with extra info, common to all projects

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
version=1.4-SNAPSHOT

gradle/buildscript.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
// Executed in context of buildscript
2+
repositories {
3+
ivy {
4+
name = 'gradle_release'
5+
artifactPattern 'http://launchpad.net/[organization]/trunk/[revision]/+download/[artifact]-[revision].jar'
6+
}
7+
}
28
dependencies {
39
classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.6.0'
410
classpath 'com.mapvine:gradle-cobertura-plugin:0.1'
11+
classpath 'gradle-release:gradle-release:1.0pre'
512
}

gradle/convention.gradle

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11

2-
ext.performingRelease = project.hasProperty('release') && Boolean.parseBoolean(project.release)
3-
def versionPostfix = performingRelease?'':'-SNAPSHOT'
4-
version = "${releaseVersion}${versionPostfix}"
5-
status = performingRelease?'release':'snapshot'
2+
// For Artifactory
3+
rootProject.status = version.contains('-SNAPSHOT')?'snapshot':'release'
64

7-
subprojects
8-
{
5+
subprojects { project ->
96
apply plugin: 'java' // Plugin as major conventions
107

118
version = rootProject.version
129

1310
sourceCompatibility = 1.6
1411

1512
// GRADLE-2087 workaround, perform after java plugin
16-
status = rootProject.status
13+
status = version.contains('-SNAPSHOT')?'snapshot':'release'
1714

1815
task sourcesJar(type: Jar, dependsOn:classes) {
1916
classifier = 'sources'

gradle/maven.gradle

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,16 @@ subprojects {
33
apply plugin: 'maven' // Java plugin has to have been already applied for the conf2scope mappings to work
44
apply plugin: 'signing'
55

6-
if (gradle.startParameter.taskNames.contains("uploadMavenCentral")) {
7-
signing {
8-
required true
9-
sign configurations.archives
10-
}
11-
} else {
12-
task signArchives {
13-
// do nothing
14-
}
6+
signing {
7+
required { gradle.taskGraph.hasTask(uploadMavenCentral) }
8+
sign configurations.archives
159
}
1610

1711
/**
1812
* Publishing to Maven Central example provided from http://jedicoder.blogspot.com/2011/11/automated-gradle-project-deployment-to.html
1913
*/
20-
task uploadMavenCentral(type:Upload) {
14+
task uploadMavenCentral(type:Upload, dependsOn: signArchives) {
2115
configuration = configurations.archives
22-
dependsOn 'signArchives'
2316
doFirst {
2417
repositories.mavenDeployer {
2518
beforeDeployment { org.gradle.api.artifacts.maven.MavenDeployment deployment -> signing.signPom(deployment) }

gradle/release.gradle

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,64 @@
1-
buildscript {
2-
dependencies { classpath group: 'no.entitas.gradle', name: 'gradle-release-plugin', version: '1.11' }
1+
2+
apply plugin: 'release'
3+
4+
// Ignore release plugin's task because it calls out via GradleBuild. This is a good place to put an email to send out
5+
task release(overwrite: true, dependsOn: commitNewVersion) << {
6+
// This is a good place to put an email to send out
7+
}
8+
commitNewVersion.dependsOn updateVersion
9+
updateVersion.dependsOn createReleaseTag
10+
createReleaseTag.dependsOn preTagCommit
11+
def buildTasks = tasks.matching { it.name =~ /:build/ }
12+
preTagCommit.dependsOn buildTasks
13+
preTagCommit.dependsOn checkSnapshotDependencies
14+
//checkSnapshotDependencies.dependsOn confirmReleaseVersion // Introduced in 1.0, forces readLine
15+
//confirmReleaseVersion.dependsOn unSnapshotVersion
16+
checkSnapshotDependencies.dependsOn unSnapshotVersion // Remove once above is fixed
17+
unSnapshotVersion.dependsOn checkUpdateNeeded
18+
checkUpdateNeeded.dependsOn checkCommitNeeded
19+
checkCommitNeeded.dependsOn initScmPlugin
20+
21+
// Call out to compile against internal repository
22+
task uploadArtifactory(type: GradleBuild) {
23+
startParameter = project.gradle.startParameter.newInstance()
24+
startParameter.addInitScript( file('gradle/netflix-oss.gradle') )
25+
startParameter.getExcludedTaskNames().add('check')
26+
tasks = [ 'build', 'artifactoryPublish' ]
327
}
428

5-
apply plugin: no.entitas.gradle.git.GitReleasePlugin // 'gitrelease'
29+
task buildWithArtifactory(type: GradleBuild) {
30+
startParameter = project.gradle.startParameter.newInstance()
31+
startParameter.addInitScript( file('gradle/netflix-oss.gradle') )
32+
startParameter.getExcludedTaskNames().add('check')
33+
tasks = [ 'build' ]
34+
}
635

36+
// Ensure upload happens before taggging but after all pre-checks
37+
uploadArtifactory.dependsOn checkSnapshotDependencies
38+
createReleaseTag.dependsOn uploadArtifactory
39+
gradle.taskGraph.whenReady { taskGraph ->
40+
if ( taskGraph.hasTask(uploadArtifactory) && !taskGraph.hasTask(':release') ) {
41+
throw new GradleException('"release" task has to be run before uploading to Artifactory')
42+
}
43+
}
44+
subprojects.each { project ->
45+
project.uploadMavenCentral.dependsOn rootProject.checkSnapshotDependencies
46+
rootProject.createReleaseTag.dependsOn project.uploadMavenCentral
47+
48+
gradle.taskGraph.whenReady { taskGraph ->
49+
if ( taskGraph.hasTask(project.uploadMavenCentral) && !taskGraph.hasTask(':release') ) {
50+
throw new GradleException('"release" task has to be run before uploading to Maven Central')
51+
}
52+
}
53+
}
54+
55+
// Prevent plugin from asking for a version number interactively
56+
ext.'gradle.release.useAutomaticVersion' = "true"
57+
58+
release {
59+
// http://tellurianring.com/wiki/gradle/release
60+
failOnCommitNeeded=false
61+
failOnPublishNeeded=false
62+
failOnUnversionedFiles=false
63+
failOnUpdateNeeded=false
64+
}

0 commit comments

Comments
 (0)