Skip to content

Commit

Permalink
[#4] Force version in commit message - WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
szpak committed Jun 15, 2017
1 parent 916cdfb commit be9ffeb
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import groovy.transform.CompileStatic
import info.solidsoft.gradle.cdeliveryboy.infra.AxionReleaseVersionSetter
import info.solidsoft.gradle.cdeliveryboy.infra.DependantPluginsConfigurer
import info.solidsoft.gradle.cdeliveryboy.infra.EnvironmentVariableReader
import info.solidsoft.gradle.cdeliveryboy.infra.ForcedVersionInCommitMessageDeterminer
import info.solidsoft.gradle.cdeliveryboy.infra.ProjectPropertyReader
import info.solidsoft.gradle.cdeliveryboy.infra.PropertyReader
import info.solidsoft.gradle.cdeliveryboy.infra.ReleaseVersionDeterminer
Expand Down Expand Up @@ -67,8 +68,9 @@ class CDeliveryBoyPlugin implements Plugin<Project> {
CiVariablesConfig ciVariablesConfig = createCiVariablesConfigOrFail(pluginConfig)
PropertyReader envVariableReader = new EnvironmentVariableReader()
ProjectConfig projectConfig = new DefaultProjectConfig(project)
ForcedVersionInCommitMessageDeterminer forcedVersionDeterminer = new ForcedVersionInCommitMessageDeterminer()
BuildConditionEvaluator buildConditionEvaluator = initializeBuildConditionEvaluator(pluginConfig, ciVariablesConfig, envVariableReader,
projectConfig)
projectConfig, forcedVersionDeterminer)
CiVariablesValidator ciVariablesValidator = initializeCiVariablesValidator(envVariableReader, ciVariablesConfig)

ReleaseVersionDeterminer releaseVersionDeterminer = new ReleaseVersionDeterminer(AxionReleaseVersionSetter.forProject(project))
Expand Down Expand Up @@ -105,11 +107,12 @@ class CDeliveryBoyPlugin implements Plugin<Project> {
}

private BuildConditionEvaluator initializeBuildConditionEvaluator(CDeliveryBoyPluginConfig pluginConfig, CiVariablesConfig ciConfig,
PropertyReader envVariableReader, ProjectConfig projectConfig) {
PropertyReader envVariableReader, ProjectConfig projectConfig,
ForcedVersionInCommitMessageDeterminer forcedVersionDeterminer) {
if (buildConditionEvaluatorIntegrationTestingHack != null) { //For integration testing purpose
return buildConditionEvaluatorIntegrationTestingHack
}
return new BuildConditionEvaluator(ciConfig, pluginConfig, envVariableReader, projectConfig)
return new BuildConditionEvaluator(ciConfig, pluginConfig, envVariableReader, projectConfig, forcedVersionDeterminer)
}

private CiVariablesValidator initializeCiVariablesValidator(PropertyReader envVariableReader, CiVariablesConfig ciVariablesConfig) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package info.solidsoft.gradle.cdeliveryboy.infra

import groovy.transform.CompileStatic
import info.solidsoft.gradle.cdeliveryboy.logic.ForcedVersion

@CompileStatic
class ForcedVersionInCommitMessageDeterminer {

ForcedVersion determineForcedVersionInCommitMessage(String commitMessage) {
//TODO: Not implemented yet
return ForcedVersion.noVersionForced()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package info.solidsoft.gradle.cdeliveryboy.logic

import groovy.transform.CompileStatic
import info.solidsoft.gradle.cdeliveryboy.infra.ForcedVersionInCommitMessageDeterminer
import info.solidsoft.gradle.cdeliveryboy.infra.PropertyReader
import info.solidsoft.gradle.cdeliveryboy.logic.config.CDeliveryBoyPluginConfig
import info.solidsoft.gradle.cdeliveryboy.logic.config.CiVariablesConfig
Expand All @@ -13,13 +14,15 @@ class BuildConditionEvaluator {
private final CDeliveryBoyPluginConfig pluginConfig
private final PropertyReader environmentVariableReader
private final ProjectConfig projectConfig
private final ForcedVersionInCommitMessageDeterminer forcedVersionDeterminer

BuildConditionEvaluator(CiVariablesConfig ciConfig, CDeliveryBoyPluginConfig pluginConfig, PropertyReader environmentVariableReader,
ProjectConfig projectConfig) {
ProjectConfig projectConfig, ForcedVersionInCommitMessageDeterminer forcedVersionDeterminer) {
this.ciConfig = ciConfig
this.pluginConfig = pluginConfig
this.environmentVariableReader = environmentVariableReader
this.projectConfig = projectConfig
this.forcedVersionDeterminer = forcedVersionDeterminer
}

boolean isInReleaseBranch() {
Expand All @@ -44,8 +47,8 @@ class BuildConditionEvaluator {
}

ForcedVersion forcedVersion() {
//TODO: Not implemented
return ForcedVersion.noVersionForced()
String commitMessage = environmentVariableReader.findByName(ciConfig.commitMessageName)
return forcedVersionDeterminer.determineForcedVersionInCommitMessage(commitMessage)
}

String getReleaseConditionsAsString() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,13 @@ class ForcedVersion {
static ForcedVersion forcedVersionWithValue(String forcedValue) {
return new ForcedVersion(true, forcedValue)
}

@Override
String toString() {
if (isForced) {
return "forced: $forcedValue"
} else {
return "no-forced-version"
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package info.solidsoft.gradle.cdeliveryboy.logic

import info.solidsoft.gradle.cdeliveryboy.infra.ForcedVersionInCommitMessageDeterminer
import info.solidsoft.gradle.cdeliveryboy.infra.PropertyReader
import info.solidsoft.gradle.cdeliveryboy.logic.config.CDeliveryBoyPluginConfig
import info.solidsoft.gradle.cdeliveryboy.logic.config.CiVariablesConfig
Expand All @@ -8,19 +9,25 @@ import info.solidsoft.gradle.cdeliveryboy.logic.config.TriggerConfig
import spock.lang.Specification
import spock.lang.Subject

import static info.solidsoft.gradle.cdeliveryboy.logic.ForcedVersion.forcedVersionWithValue
import static info.solidsoft.gradle.cdeliveryboy.logic.ForcedVersion.noVersionForced


@SuppressWarnings("GroovyPointlessBoolean")
class BuildConditionEvaluatorSpec extends Specification {

private static final String TEST_CI_COMMIT_MESSAGE_VARIABLE_NAME = "TEST_COMMIT_MSG"
public static final String TEST_RELEASE_COMMAND = "TEST_RELEASE_COMMAND"
public static final String NOT_TRIGGERING_COMMIT_MESSAGE = "any commit message"
public static final String TRIGGERING_COMMIT_MESSAGE = TEST_RELEASE_COMMAND + " and more"
public static final String TEST_SKIP_RELEASE_VARIABLE_NAME = "TEST_SKIP_RELEASE"
private static final String TEST_RELEASE_COMMAND = "TEST_RELEASE_COMMAND"
private static final String NOT_TRIGGERING_COMMIT_MESSAGE = "any commit message"
private static final String TRIGGERING_COMMIT_MESSAGE = TEST_RELEASE_COMMAND + " and more"
private static final String TEST_SKIP_RELEASE_VARIABLE_NAME = "TEST_SKIP_RELEASE"
private static final String SOME_COMMIT_MESSAGE = "anyCommitMessage"

private CiVariablesConfig ciVariablesConfig = Stub()
private CDeliveryBoyPluginConfig pluginConfig = Stub()
private PropertyReader environmentVariableReader = Stub()
private ProjectConfig projectConfig = Stub()
private ForcedVersionInCommitMessageDeterminer forcedVersionDeterminer = Stub()

private TriggerConfig trigger = Stub()

Expand All @@ -29,7 +36,8 @@ class BuildConditionEvaluatorSpec extends Specification {

//TODO: How to test it in a sensible way? Prefabricated dependencies from a test data builder?
void setup() {
buildConditionEvaluator = new BuildConditionEvaluator(ciVariablesConfig, pluginConfig, environmentVariableReader, projectConfig)
buildConditionEvaluator = new BuildConditionEvaluator(ciVariablesConfig, pluginConfig, environmentVariableReader, projectConfig,
forcedVersionDeterminer)
//and
pluginConfig.trigger >> trigger
trigger.onDemandReleaseTriggerCommand >> TEST_RELEASE_COMMAND
Expand Down Expand Up @@ -90,4 +98,14 @@ class BuildConditionEvaluatorSpec extends Specification {
"false" || true
null || true
}

def "should get forced version for commit message if provided (#forcedVersion)"() {
given:
environmentVariableReader.findByName(TEST_CI_COMMIT_MESSAGE_VARIABLE_NAME) >> SOME_COMMIT_MESSAGE
forcedVersionDeterminer.determineForcedVersionInCommitMessage(SOME_COMMIT_MESSAGE) >> forcedVersion
expect:
buildConditionEvaluator.forcedVersion() == forcedVersion
where:
forcedVersion << [forcedVersionWithValue("0.5.0"), noVersionForced()]
}
}

0 comments on commit be9ffeb

Please sign in to comment.