From badf8169910056557549c2fa888b65b2a5662a3e Mon Sep 17 00:00:00 2001 From: Antonio Bertucci Date: Wed, 8 Feb 2017 14:02:21 +0100 Subject: [PATCH] Add release script --- .gitignore | 3 ++ build.gradle | 2 + gradle/publish.gradle | 95 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 99 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5cc3c8e..5c9e9e9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ local.properties # Generated files gen/ + +# Properties files +secrets.properties diff --git a/build.gradle b/build.gradle index 808b4a1..f7ca01b 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,8 @@ subprojects { } dependencies { classpath 'com.novoda:bintray-release:0.4.0' + classpath 'com.novoda:gradle-build-properties-plugin:0.2' + classpath 'org.ajoberstar:gradle-git:1.6.0' } } diff --git a/gradle/publish.gradle b/gradle/publish.gradle index 249feb8..6ede685 100644 --- a/gradle/publish.gradle +++ b/gradle/publish.gradle @@ -1,9 +1,102 @@ +version = '0.3.1' +String tag = "v$project.version" +groovydoc.docTitle = 'Static Analysis Plugin' + apply plugin: 'com.novoda.bintray-release' publish { userOrg = 'novoda' groupId = 'com.novoda' artifactId = 'gradle-static-analysis-plugin' - publishVersion = '0.3' + publishVersion = project.version website = 'https://github.com/novoda/gradle-static-analysis-plugin' } +apply plugin: 'com.novoda.build-properties' +buildProperties { + secrets { + file(rootProject.file('secrets.properties'), ''' +This file should contain: +- git.username: the username used to push to the repo +- git.password: the password used to push to the repo + ''') + } +} + +apply plugin: 'org.ajoberstar.grgit' +apply plugin: 'org.ajoberstar.github-pages' + +githubPages { + commitMessage = "Deploy groovydoc for release $tag" + pages { + from groovydoc.destinationDir + into "docs/${project.version}" + } +} + +task prepareGhCredentials { + description = 'Prepare GitHub credentials' + group = 'release' + doLast { + System.properties['org.ajoberstar.grgit.auth.username'] = buildProperties.secrets['git.username'].string + System.properties['org.ajoberstar.grgit.auth.password'] = buildProperties.secrets['git.password'].string + } +} + +prepareGhPages.dependsOn groovydoc +publishGhPages.dependsOn prepareGhCredentials + +task prepareRelease { + description = 'Prepare changelog and tag for release' + group = 'release' + dependsOn prepareGhPages, prepareGhCredentials + doLast { + String changelog = extractChangelog() + grgit.tag.add { + name = tag + message = "Release $tag\n\n$changelog" + } + } +} + +String extractChangelog() { + String fullChangelog = rootProject.file('CHANGELOG.md').text + def latestChangelog = (fullChangelog =~ /Version ${project.version}.*\n-*([\s\S]*?)Version.*\n-*/) + if (latestChangelog.size() > 0) { + return latestChangelog[0][1].trim() + } + + def firstChangelog = (fullChangelog =~ /Version ${project.version}.*\n-*([\s\S]*)/) + if (firstChangelog.size() > 0) { + return firstChangelog[0][1].trim() + } + throw new GradleException("No changelog found for version $project.version") +} + +task publishArtifact { + description = "Publish artifact for plugin version: $tag" + group = 'release' + project.afterEvaluate { dependsOn bintrayUpload } + mustRunAfter prepareRelease +} + +task publishGroovydoc { + description = "Deploy groovydoc for plugin version: $tag" + group = 'release' + dependsOn publishGhPages + mustRunAfter publishArtifact +} + +task publishRelease { + description = "Publish release for plugin version: $tag" + group = 'release' + if (project.hasProperty('dryRun') && project['dryRun'] == 'false') { + dependsOn prepareRelease, publishArtifact, publishGroovydoc + doLast { + grgit.push { + tags = true + } + } + } else { + dependsOn publishArtifact + } +}