diff --git a/reckon-gradle/src/compatTest/groovy/org/ajoberstar/reckon/gradle/BaseCompatTest.groovy b/reckon-gradle/src/compatTest/groovy/org/ajoberstar/reckon/gradle/BaseCompatTest.groovy index 5a1b0e1..977ccc0 100644 --- a/reckon-gradle/src/compatTest/groovy/org/ajoberstar/reckon/gradle/BaseCompatTest.groovy +++ b/reckon-gradle/src/compatTest/groovy/org/ajoberstar/reckon/gradle/BaseCompatTest.groovy @@ -61,7 +61,7 @@ task printVersion { result.output.normalize().startsWith('0.1.0-alpha.0.0+') } - def 'if no strategies specified, build fails'() { + def 'if no strategies specified, version is unspecified'() { given: Grgit.clone(dir: projectDir, uri: remote.repository.rootDir) @@ -72,14 +72,43 @@ plugins { task printVersion { doLast { - println project.version + println version } } """ when: - def result = buildAndFail('printVersion', '--configuration-cache') + def result = build('printVersion', '-q', '--configuration-cache') + then: + result.output.contains('unspecified') + } + + def 'if version evaluated before reckon configured, reckon can still be evaluated after'() { + given: + Grgit.clone(dir: projectDir, uri: remote.repository.rootDir) + + buildFile << """ +plugins { + id 'org.ajoberstar.reckon' +} + +println version + +reckon { + scopeFromProp() + stageFromProp('alpha','beta', 'final') +} + +task printVersion { + doLast { + println version + } +} +""" + when: + def result = build('printVersion', '--configuration-cache') then: - result.output.contains('Must provide a scope supplier.') + result.output.contains('unspecified') + result.output.contains('Reckoned version: 1.1.0-alpha.0') } def 'if reckoned version has build metadata no tag created'() { diff --git a/reckon-gradle/src/main/java/org/ajoberstar/reckon/gradle/ReckonPlugin.java b/reckon-gradle/src/main/java/org/ajoberstar/reckon/gradle/ReckonPlugin.java index eef9880..c2ac649 100644 --- a/reckon-gradle/src/main/java/org/ajoberstar/reckon/gradle/ReckonPlugin.java +++ b/reckon-gradle/src/main/java/org/ajoberstar/reckon/gradle/ReckonPlugin.java @@ -7,10 +7,16 @@ import org.ajoberstar.reckon.core.VersionTagWriter; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.logging.Logger; +import org.gradle.api.logging.Logging; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.TaskProvider; +import java.util.concurrent.atomic.AtomicBoolean; + public class ReckonPlugin implements Plugin { + private static Logger logger = Logging.getLogger(ReckonPlugin.class); + public static final String TAG_TASK = "reckonTagCreate"; public static final String PUSH_TASK = "reckonTagPush"; @@ -73,14 +79,24 @@ private TaskProvider createPushTask(Project project, ReckonEx private static class DelayedVersion { private final Provider versionProvider; + private final AtomicBoolean warned; public DelayedVersion(Provider versionProvider) { this.versionProvider = versionProvider; + this.warned = new AtomicBoolean(false); } @Override public String toString() { - return versionProvider.get().toString(); + try { + return versionProvider.get().toString(); + } catch (Exception e) { + if (warned.compareAndSet(false, true)) { + logger.warn("Project version evaluated before reckon was configured. Run with --info to see cause."); + } + logger.info("Project version evaluated before reckon was configured.", e); + return "unspecified"; + } } } }