Skip to content

Commit 587183d

Browse files
committed
fix
1 parent 3a1933f commit 587183d

File tree

1 file changed

+107
-91
lines changed

1 file changed

+107
-91
lines changed

release/build.gradle

Lines changed: 107 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -117,134 +117,138 @@ def pushDocChangesTask = tasks.register( 'pushDocChanges', Exec ) {
117117

118118
def uploadDocumentationTask = tasks.register( 'uploadDocumentation' ) {
119119
description "Upload documentation on the website"
120-
dependsOn pushDocChangesTask
121120
group "Release"
121+
dependsOn pushDocChangesTask
122122

123123
doLast {
124124
logger.lifecycle "Documentation published on '${docPublishRepoUri}' branch '${docPublishBranch}'"
125125
}
126126
}
127127

128-
def createTagTask = tasks.register( 'createTag' ) {
129-
description "Create local tag"
128+
def releaseChecksTask = tasks.register( "releaseChecks" ) {
129+
description 'Checks and preparation for release'
130+
group 'Release'
130131

131132
doFirst {
132-
if ( !project.hasProperty( 'releaseVersion' ) || !project.hasProperty( 'developmentVersion' )
133-
|| !project.hasProperty( 'gitRemote' ) || !project.hasProperty( 'gitBranch' ) ) {
133+
logger.lifecycle("Checking that the working tree is clean...")
134+
String uncommittedFiles = executeGitCommand('status', '--porcelain')
135+
if (!uncommittedFiles.isEmpty()) {
134136
throw new GradleException(
135-
"Task 'createTag' requires all of the following properties to be set:"
136-
+ "'releaseVersion', 'developmentVersion', 'gitRemote' and 'gitBranch'."
137+
"Cannot release because there are uncommitted or untracked files in the working tree.\n" +
138+
"Commit or stash your changes first.\n" +
139+
"Uncommitted files:\n " +
140+
uncommittedFiles
137141
)
138142
}
139-
}
140143

141-
doLast {
144+
String gitBranchLocal = project.hasProperty( 'gitBranch' ) && !project.property( 'gitBranch' ).isEmpty()
145+
? project.property( 'gitBranch' )
146+
: executeGitCommand( 'branch', '--show-current' ).trim()
147+
148+
String gitRemoteLocal
149+
if ( project.hasProperty( 'gitRemote' ) && !project.property( 'gitRemote' ).isEmpty() ) {
150+
gitRemoteLocal = project.property( 'gitRemote' )
151+
}
152+
else {
153+
final String remotes = executeGitCommand( 'remote', 'show' ).trim()
154+
final List<String> tokens = remotes.tokenize()
155+
if ( tokens.size() != 1 ) {
156+
throw new GradleException( "Could not determine `gitRemote` property for `releaseChecks` tasks." )
157+
}
158+
gitRemoteLocal = tokens.get( 0 )
159+
}
160+
161+
project.ext {
162+
gitBranch = gitBranchLocal
163+
gitRemote = gitRemoteLocal
164+
}
165+
142166
logger.lifecycle( "Switching to branch '${project.gitBranch}'..." )
143-
executeGitCommand( 'switch', project.gitBranch )
167+
executeGitCommand( 'checkout', project.gitBranch )
144168

145169
logger.lifecycle( "Checking that all commits are pushed..." )
146170
String diffWithUpstream = executeGitCommand( 'diff', '@{u}' )
147171
if ( !diffWithUpstream.isEmpty() ) {
148-
throw new GradleException( "There are commits on the branch to release that haven't been pushed yet" )
172+
throw new GradleException(
173+
"Cannot perform `ciRelease` tasks because there are un-pushed local commits .\n" +
174+
"Push your commits first."
175+
)
149176
}
177+
}
178+
}
150179

151-
logger.lifecycle( "Commit version update to '${project.releaseVersion}'..." )
152-
project.projectVersionFile.text = "projectVersion=${project.releaseVersion}"
153-
executeGitCommand( 'add', '.' )
154-
executeGitCommand( 'commit', '-m', project.releaseVersion )
180+
def preVerifyReleaseTask = tasks.register( "preVerifyRelease" ) {
181+
group 'Release'
182+
description 'Pre-verifies a release job execution (Run locally before a CI release)'
155183

156-
String tag = project.releaseVersion
157-
if ( tag.endsWith( ".Final" ) ) {
158-
tag = tag.replace( ".Final", "" )
159-
}
160-
logger.lifecycle( "Tagging '${tag}'..." )
161-
executeGitCommand( 'tag', '-a', '-m', "Release ${project.releaseVersion}", tag )
162-
}
184+
dependsOn tasks.clean
185+
dependsOn assembleDocumentationTask
163186
}
164187

165-
def updateVersionsTask = tasks.register( "updateVersions" ) {
166-
description "Update the release and development version, commit the changes, and create the tag"
167-
group "Release"
168-
dependsOn createTagTask
188+
def changeToReleaseVersionTask = tasks.register( 'changeToReleaseVersion' ) {
189+
description 'Updates `gradle/version.properties` file to the specified release-version'
190+
group 'Release'
191+
192+
dependsOn releaseChecksTask
169193

170194
doFirst {
171-
if ( !project.hasProperty( 'releaseVersion' ) || !project.hasProperty( 'developmentVersion' )
172-
|| !project.hasProperty( 'gitRemote' ) || !project.hasProperty( 'gitBranch' ) ) {
173-
throw new GradleException(
174-
"Task 'releasePrepare' requires all of the following properties to be set:"
175-
+ "'releaseVersion', 'developmentVersion', 'gitRemote' and 'gitBranch'."
176-
)
177-
}
195+
logger.lifecycle( "Updating version-file to release-version : `${project.releaseVersion}`" )
196+
updateVersionFile( "${project.releaseVersion}" )
178197
}
198+
}
179199

180-
doLast {
181-
logger.lifecycle( "Checking that the working tree is clean..." )
182-
String uncommittedFiles = executeGitCommand( 'status', '--porcelain' )
183-
if ( !uncommittedFiles.isEmpty() ) {
184-
throw new GradleException(
185-
"Cannot update the version because there are uncommitted changes in the working tree."
186-
+ "\nUncommitted files:\n" + uncommittedFiles
187-
)
188-
}
200+
def gitPreparationForReleaseTask = tasks.register( 'gitPreparationForRelease' ) {
201+
dependsOn releaseChecksTask
202+
dependsOn changeLogFileTask
203+
dependsOn changeToReleaseVersionTask
189204

190-
logger.lifecycle( "Adding commit to update version to '${project.developmentVersion}'..." )
191-
project.projectVersionFile.text = "projectVersion=${project.developmentVersion}"
205+
doLast {
206+
logger.lifecycle( "Performing pre-steps Git commit : `${project.releaseVersion}`" )
192207
executeGitCommand( 'add', '.' )
193-
executeGitCommand( 'commit', '-m', project.developmentVersion )
208+
executeGitCommand( 'commit', '-m', "Pre-steps for release : `${project.ormVersion.fullName}`" )
194209
}
195210
}
196211

197-
def releasePrepareTask = tasks.register( "releasePrepare" ) {
198-
description "On a local checkout, performs all the changes required for the release, website updates included"
199-
group "Release"
200-
dependsOn updateVersionsTask, commitDocChangesTask
212+
def changeToDevelopmentVersionTask = tasks.register( 'changeToDevelopmentVersion' ) {
213+
description 'Updates `gradle/version.properties` file to the specified development-version'
214+
group 'Release'
215+
216+
dependsOn releaseChecksTask
201217

202218
doFirst {
203-
if ( !project.hasProperty( 'releaseVersion' ) || !project.hasProperty( 'developmentVersion' )
204-
|| !project.hasProperty( 'gitRemote' ) || !project.hasProperty( 'gitBranch' ) ) {
205-
throw new GradleException(
206-
"Task 'releasePrepare' requires all of the following properties to be set:"
207-
+ "'releaseVersion', 'developmentVersion', 'gitRemote' and 'gitBranch'."
208-
)
209-
}
219+
logger.lifecycle( "Updating version-file to development-version : `${project.developmentVersion}`" )
220+
updateVersionFile( "${project.developmentVersion}" )
210221
}
211222
}
212223

213-
def pushChangesTask = tasks.register( "pushChanges" ) {
214-
description "Push the changes after preparing the release"
215-
dependsOn releasePrepareTask
216-
217-
doFirst {
218-
if ( !project.hasProperty( 'releaseVersion' ) || !project.hasProperty( 'developmentVersion' )
219-
|| !project.hasProperty( 'gitRemote' ) || !project.hasProperty( 'gitBranch' ) ) {
220-
throw new GradleException(
221-
"Task 'ciRelease' requires all of the following properties to be set:"
222-
+ "'releaseVersion', 'developmentVersion', 'gitRemote' and 'gitBranch'."
223-
)
224-
}
225-
}
224+
def releasePreparePostGitTask = tasks.register( 'gitTasksAfterRelease' ) {
225+
dependsOn changeToDevelopmentVersionTask
226226

227227
doLast {
228-
logger.lifecycle( "Checking that the working tree is clean..." )
229-
String uncommittedFiles = executeGitCommand( 'status', '--porcelain' )
230-
if ( !uncommittedFiles.isEmpty() ) {
231-
throw new GradleException(
232-
"Cannot release because there are uncommitted or untracked files in the working tree."
233-
+ "\nCommit or stash your changes first."
234-
+ "\nUncommitted files:\n" + uncommittedFiles
235-
)
236-
}
237-
String tag = project.releaseVersion
238-
if ( tag.endsWith( ".Final" ) ) {
239-
tag = tag.replace( ".Final", "" )
228+
if ( project.createTag ) {
229+
logger.lifecycle( "Tagging release : `${project.releaseTag}`..." )
230+
executeGitCommand( 'tag', '-a', project.releaseTag, '-m', "Release $project.projectVersion.fullName" )
240231
}
241-
logger.lifecycle( "Pushing branch and tag to remote '${project.gitRemote}'..." )
242-
executeGitCommand( 'push', '--atomic', project.gitRemote, project.gitBranch, tag )
243-
logger.lifecycle( "Done!" )
232+
233+
logger.lifecycle( "Performing post-steps Git commit : `${project.releaseVersion}`" )
234+
executeGitCommand( 'add', '.' )
235+
executeGitCommand( 'commit', '-m', "Post-steps for release : `${project.projectVersion.fullName}`" )
244236
}
245237
}
246238

239+
void updateVersionFile(String version) {
240+
logger.lifecycle( "Updating `gradle/version.properties` version to `${version}`" )
241+
project.projectVersionFile.text = "projectVersion=${version}"
242+
}
243+
244+
def publishReleaseArtifactsTask = tasks.register( 'publishReleaseArtifacts' ) {
245+
mustRunAfter gitPreparationForReleaseTask
246+
247+
dependsOn uploadDocumentationTask
248+
}
249+
247250
def releasePerformPostGitTask = tasks.register( 'gitTasksAfterReleasePerform' ) {
251+
248252
doLast {
249253
if ( project.createTag ) {
250254
logger.lifecycle( "Pushing branch and tag to remote `${project.gitRemote}`..." )
@@ -257,12 +261,21 @@ def releasePerformPostGitTask = tasks.register( 'gitTasksAfterReleasePerform' )
257261
}
258262
}
259263

264+
def releasePrepareTask = tasks.register( "releasePrepare" ) {
265+
description "On a local checkout, performs all the changes required for the release, website updates included"
266+
group "Release"
267+
268+
dependsOn assembleDocumentationTask
269+
dependsOn commitDocChangesTask
270+
271+
finalizedBy releasePreparePostGitTask
272+
}
273+
260274
def releasePerformTask = tasks.register( 'releasePerform' ) {
261275
group 'Release'
262276
description 'Performs a release on local check-out, including updating changelog and '
263277

264-
mustRunAfter releasePrepareTask
265-
dependsOn uploadDocumentationTask
278+
dependsOn publishReleaseArtifactsTask
266279

267280
finalizedBy releasePerformPostGitTask
268281
}
@@ -273,12 +286,15 @@ def releasePerformTask = tasks.register( 'releasePerform' ) {
273286
def releaseTask = tasks.register( 'release' ) {
274287
description 'Performs a release on local check-out'
275288
group 'Release'
276-
dependsOn pushChangesTask
289+
290+
dependsOn releasePrepareTask
291+
dependsOn releasePerformTask
277292
}
278293

279294
def ciReleaseTask = tasks.register( 'ciRelease' ) {
280295
description "Triggers the release on CI: creates commits to change the version (release, then development), creates a tag, pushes everything. Then CI will take over and perform the release."
281296
group "Release"
297+
282298
dependsOn releaseTask
283299
}
284300

@@ -350,12 +366,12 @@ gradle.getTaskGraph().whenReady {tg->
350366
}
351367
}
352368

353-
assert releaseVersionLocal != null && developmentVersionLocal != null;
369+
assert releaseVersionLocal != null && developmentVersionLocal != null
354370

355371
// set up information for the release-related tasks
356372
project.ext {
357-
releaseVersion = releaseVersionLocal;
358-
developmentVersion = developmentVersionLocal;
373+
releaseVersion = releaseVersionLocal
374+
developmentVersion = developmentVersionLocal
359375
createTag = !project.hasProperty('noTag')
360376
releaseTag = project.createTag ? determineReleaseTag(releaseVersionLocal) : ''
361377
}
@@ -365,5 +381,5 @@ gradle.getTaskGraph().whenReady {tg->
365381
static String determineReleaseTag(String releaseVersion) {
366382
return releaseVersion.endsWith( '.Final' )
367383
? releaseVersion.replace( ".Final", "" )
368-
: releaseVersion;
384+
: releaseVersion
369385
}

0 commit comments

Comments
 (0)