-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathbuild-release.gradle
104 lines (85 loc) · 3.26 KB
/
build-release.gradle
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
buildscript {
repositories {
maven {
url 'https://repo1.maven.org/maven2'
}
}
dependencies {
classpath 'org.ajoberstar:grgit:1.3.0'
}
}
rootProject.ext.version_props = new Properties();
version_props.load(file("version.properties").newReader())
// version parts
rootProject.ext.version_major = version_props.major
rootProject.ext.version_minor = version_props.minor
rootProject.ext.version_patch = version_props.patch
rootProject.ext.version_qualifier = version_props.qualifier
rootProject.ext.is_build_server = System.getenv('bamboo_bitbucket_user') ? true : false
// git
import org.ajoberstar.grgit.Grgit
rootProject.ext.repo = Grgit.open(dir: rootProject.file('.'))
if (is_build_server) {
println "Building under bamboo, setting up repository url..."
try {
// only required the first time?
repo.remote.add(name: 'mainline', url: 'git@bitbucket.org:eyeris/i2web.git')
}
catch(e) { }
}
def loadBuild() {
return new File("${buildFile}").text;
}
def writeVersion(major, minor, patch, qualifier) {
def versionFile = file("version.properties")
def text = versionFile.text
text = text.replace("major=${version_major}", "major=${major}")
text = text.replace("minor=${version_minor}", "minor=${minor}")
text = text.replace("patch=${version_patch}", "patch=${patch}")
text = text.replace("qualifier=${version_qualifier}", "qualifier=${qualifier}")
versionFile.write(text)
def version = "${major}.${minor}.${patch}${qualifier}"
repo.add(patterns: ["version.properties"])
def commit = repo.commit(message: "Updating build version to ${version}")
println "Committed version update to ${version}: ${commit.abbreviatedId}"
}
def push(tags) {
if(is_build_server) {
println "Pushing changes..."
repo.push(remote: 'mainline', tags: tags ? true : false)
}
else {
System.err.println "Not on the build server, changes won't be pushed automatically"
}
}
task branchRelease {
doLast {
def oldBranch = repo.branch.current.fullName
def newBranch = "release-${version_major}.${version_minor}"
// create a branch at the current point
println "Creating branch ${newBranch} at version ${version_major}.${version_minor}.${version_patch}..."
repo.checkout(branch: newBranch as String, startPoint: oldBranch, createBranch: true)
writeVersion(version_major, version_minor, version_patch, "")
push()
// back to master
println "Updating ${oldBranch} to version ${version_major}.${Integer.parseInt(version_minor) + 1}.${version_patch}${version_qualifier}..."
repo.checkout(branch: oldBranch)
writeVersion(version_major, Integer.parseInt(version_minor) + 1, version_patch, version_qualifier)
push()
}
}
task tagRelease {
doLast {
if (!repo.branch.getCurrent().fullName.contains("release-")) {
println "Not currently on a release branch, won't tag release..."
return
}
println("Tagging release as ${version}...")
repo.tag.add(name: "v${version}", message: "Release v${version}", force: true)
push(true)
println("Bumping version...")
// update for next build
writeVersion(version_major, version_minor, Integer.parseInt(version_patch) + 1, version_qualifier)
push()
}
}