Skip to content

Commit

Permalink
[#4] Force version in commit message - incrementer enforcer
Browse files Browse the repository at this point in the history
  • Loading branch information
szpak committed Jun 28, 2017
1 parent 85d71ed commit f43f6ff
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,45 @@ import pl.allegro.tech.build.axion.release.domain.VersionIncrementerContext
@CompileStatic
class AxionReleaseVersionSetter implements ReleaseVersionSetter {

@CompileStatic
private enum SemVerIncrementer {

PATCH, MINOR, MAJOR, PRERELEASE

String toAxionIncrementerName() {
return "increment${name().toLowerCase().capitalize()}"
}

static boolean isSupported(String incrementer) {
try {
valueOf(incrementer)
return true
} catch (IllegalArgumentException ignored) {
return false
}
}
}

private final VersionConfig axionConfig

private AxionReleaseVersionSetter(VersionConfig axionConfig) {
this.axionConfig = axionConfig
}

/**
* Sets release version using Axion incrementer.
*
* Expects an one of supported incrementers or a Semantic Versioning compilant version number.
*
* @param forcedVersion forced version to use
*/
@Override
void setReleaseVersion(String forcedVersion) {
if (SemVerIncrementer.isSupported(forcedVersion)) {
axionConfig.versionIncrementer(SemVerIncrementer.valueOf(forcedVersion).toAxionIncrementerName())
return
}

axionConfig.versionIncrementer = { VersionIncrementerContext context ->
return Version.valueOf(forcedVersion)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,19 @@ class ForcedVersionInCommitMessageDeterminer {
//https://github.com/mojombo/semver/issues/232
private static final Pattern SEM_VER_PATTERN = Pattern.compile("\\[#((0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)" +
"(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?)\\]")
private static final Pattern INCREMENTER_PATTERN = Pattern.compile("\\[#(MAJOR|MINOR|PATCH|PRERELEASE)\\]")

ForcedVersion determineForcedVersionInCommitMessage(String commitMessage) {
Matcher matcher = SEM_VER_PATTERN.matcher(commitMessage)
if (matcher.find()) {
return forcedVersionWithValue(matcher.group(1))
} else {
return noVersionForced()
}

Matcher incrementerMatcher = INCREMENTER_PATTERN.matcher(commitMessage)
if (incrementerMatcher.find()) {
return forcedVersionWithValue(incrementerMatcher.group(1))
}

return noVersionForced()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,24 @@ class OverriddenVersionITSpec extends BasicProjectBuilderITSpec {
when:
String releaseVersion = triggerEvaluateAndReturnReleaseVersion()
then:
buildConditionEvaluatorStub.forcedVersion() >> forcedVersionWithValue(forcedVersion) //in then to override previous stubbing
buildConditionEvaluatorStub.forcedVersion() >> forcedVersionWithValue(forcedVersion) //in "then" to override previous stubbing
releaseVersion == forcedVersion
}

@PendingFeature
def "should use version number incrementer configured in commit message"() {
def "should use version number incrementer (#forcedIncrementerName) configured in commit message"() {
when:
String releaseVersion = triggerEvaluateAndReturnReleaseVersion()
then:
buildConditionEvaluatorStub.forcedVersion() >> forcedVersionWithValue(forcedIncrementerName) //in "then" to override previous stubbing
versionIncrementerContextStub.currentVersion >> Version.valueOf("0.5.1-beta1")
and:
releaseVersion == expectedVersion
where:
forcedIncrementerName || expectedVersion
"MAJOR" || "1.0.0"
"MINOR" || "0.6.0"
"PATCH" || "0.5.2"
"PRERELEASE" || "0.5.1-beta2"
}
private String triggerEvaluateAndReturnReleaseVersion() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,40 @@ class ForcedVersionInCommitMessageDeterminerSpec extends Specification {
then:
determinedForcedVersion == ForcedVersion.forcedVersionWithValue(expectedVersion)
where:
commitMessage || expectedVersion
"[#0.1.5-beta]" || "0.1.5-beta"
"[#1.0.0-alpha1]" || "1.0.0-alpha1"
commitMessage || expectedVersion
"[#0.1.5-beta]" || "0.1.5-beta"
"[#1.0.0-alpha1]" || "1.0.0-alpha1"
"[#1.0.0-alpha-1]" || "1.0.0-alpha-1"
}
def "should find incrementer name in commit message (#commitMessage)"() {
when:
ForcedVersion determinedForcedVersion = forcedVersionDeterminer.determineForcedVersionInCommitMessage(commitMessage)
then:
determinedForcedVersion == ForcedVersion.forcedVersionWithValue(expectedVersion)
where:
commitMessage || expectedVersion
"[#MAJOR]" || "MAJOR"
"[#MINOR]" || "MINOR"
"[#PATCH]" || "PATCH"
"[#PRERELEASE]" || "PRERELEASE"
}
def "should ignore unknown incrementers in commit message"() {
when:
ForcedVersion determinedForcedVersion = forcedVersionDeterminer.determineForcedVersionInCommitMessage("[#UNKNOWN]")
then:
determinedForcedVersion == ForcedVersion.noVersionForced()
}
def "should prefer exact version over incrementer in commit message (#commitMessage)"() {
when:
ForcedVersion determinedForcedVersion = forcedVersionDeterminer.determineForcedVersionInCommitMessage(commitMessage)
then:
determinedForcedVersion == ForcedVersion.forcedVersionWithValue(expectedVersion)
where:
commitMessage || expectedVersion
"[#MAJOR][#1.2.6]" || "1.2.6"
"[#0.0.1][#MINOR]" || "0.0.1"
}
}

0 comments on commit f43f6ff

Please sign in to comment.