Skip to content

Commit 9ffc3d0

Browse files
author
Kirill Nazarov
committed
feat: add snapshotVersion task.
1 parent 9280d4a commit 9ffc3d0

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

src/main/groovy/net/researchgate/release/ReleasePlugin.groovy

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import net.researchgate.release.tasks.InitScmAdapter
2323
import net.researchgate.release.tasks.PreTagCommit
2424
import net.researchgate.release.tasks.PrepareVersions
2525
import net.researchgate.release.tasks.UnSnapshotVersion
26+
import net.researchgate.release.tasks.SnapshotVersion
2627
import net.researchgate.release.tasks.UpdateVersion
2728
import org.gradle.api.GradleException
2829
import org.gradle.api.Plugin
@@ -71,6 +72,7 @@ abstract class ReleasePlugin extends PluginHelper implements Plugin<Project> {
7172
"${p}checkUpdateNeeded" as String,
7273
"${p}checkoutMergeToReleaseBranch" as String,
7374
"${p}unSnapshotVersion" as String,
75+
"${p}snapshotVersion" as String,
7476
"${p}confirmReleaseVersion" as String,
7577
"${p}checkSnapshotDependencies" as String,
7678
"${p}runBuildTasks" as String,
@@ -102,6 +104,7 @@ abstract class ReleasePlugin extends PluginHelper implements Plugin<Project> {
102104
}
103105
}
104106
project.tasks.create('unSnapshotVersion', UnSnapshotVersion.class)
107+
project.tasks.create('snapshotVersion', SnapshotVersion.class)
105108
project.tasks.create('confirmReleaseVersion', ConfirmReleaseVersion.class)
106109
project.tasks.create('checkSnapshotDependencies', CheckSnapshotDependencies.class)
107110
project.tasks.create('runBuildTasks', GradleBuild) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package net.researchgate.release.tasks
2+
3+
4+
import org.gradle.api.GradleException
5+
import org.gradle.api.Project
6+
import org.gradle.api.tasks.TaskAction
7+
8+
class SnapshotVersion extends BaseReleaseTask {
9+
10+
SnapshotVersion() {
11+
super()
12+
description = 'Adds "-SNAPSHOT" to project\'s current version.'
13+
}
14+
15+
@TaskAction
16+
void snapshotVersion() {
17+
checkPropertiesFile(project)
18+
def version = project.version.toString()
19+
20+
if (!version.endsWith(extension.snapshotSuffix.get())) {
21+
version += extension.snapshotSuffix.get()
22+
scmAdapter.updateVersionProperty(version)
23+
}
24+
}
25+
26+
void checkPropertiesFile(Project project) {
27+
File propertiesFile = findPropertiesFile(project)
28+
29+
if (!propertiesFile.canRead() || !propertiesFile.canWrite()) {
30+
throw new GradleException("Unable to update version property. Please check file permissions.")
31+
}
32+
33+
Properties properties = new Properties()
34+
propertiesFile.withReader { properties.load(it) }
35+
36+
assert properties.version, "[$propertiesFile.canonicalPath] contains no 'version' property"
37+
assert extension.versionPatterns.keySet().any { (properties.version =~ it).find() },
38+
"[$propertiesFile.canonicalPath] version [$properties.version] doesn't match any of known version patterns: " +
39+
extension.versionPatterns.keySet()
40+
41+
// set the project version from the properties file if it was not otherwise specified
42+
if (!isVersionDefined()) {
43+
project.version = properties.version
44+
}
45+
}
46+
}

src/test/groovy/net/researchgate/release/ReleasePluginTests.groovy

+13
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
package net.researchgate.release
1212

13+
import net.researchgate.release.tasks.SnapshotVersion
1314
import net.researchgate.release.tasks.UnSnapshotVersion
1415
import net.researchgate.release.tasks.UpdateVersion
1516
import org.gradle.api.plugins.BasePlugin
@@ -103,6 +104,18 @@ class ReleasePluginTests extends Specification {
103104
project.version == '1.4-dev'
104105
}
105106

107+
def 'version is properly snapshoted when using default snapshot suffix'() {
108+
given:
109+
def testVersionPropertyFile = project.file('gradle.properties')
110+
testVersionPropertyFile.withWriter { w ->
111+
w.writeLine 'version=1.3'
112+
}
113+
when:
114+
(project.tasks.snapshotVersion as SnapshotVersion).snapshotVersion()
115+
then:
116+
project.version == '1.3-SNAPSHOT'
117+
}
118+
106119
def 'snapshot version should be updated to new snapshot version with default snapshot suffix'() {
107120
given:
108121
def testVersionPropertyFile = project.file('gradle.properties')

0 commit comments

Comments
 (0)