From e1891c47af347f38a899af465a9210c2428d6976 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 25 Jul 2019 01:51:04 -0700 Subject: [PATCH] Added version extension properties. --- README.md | 26 +++++++++++ .../erik/gradle/semver/SemverConfig.kt | 43 +++++++++++++++++-- .../erik/gradle/semver/SemverIncrementTask.kt | 3 +- .../erik/gradle/semver/SemverPlugin.kt | 14 +++--- .../erik/gradle/semver/SemverConfigSpec.kt | 2 +- 5 files changed, 78 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 805dc0e..3ab8853 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,32 @@ test.semver=1.0.0 - __Examples__: [Java](https://github.com/ethauvin/semver-gradle/tree/master/examples/java), [Kotlin](https://github.com/ethauvin/semver-gradle/tree/master/examples/kotlin) +### Semver Extension Properties + +The values stored in the version properties file can individually be accessed using the `semver` extension, for example: + +```gradle + fooTask { + println "Build: $semver.buildMeta" + } +``` + +The semver extension properties are: + +Property | Description +:-------------------------|:---------------------------- +`semver.semver` | The full semantic version. +`semver.version` | Same as `semver.semver`. +`semver.major` | The major version. +`semver.minor` | The minor version. +`semver.patch` | The patch version. +`semver.preRelease` | The pre-release version +`semver.preReleasePrefix` | The pre-release prefix +`semver.buildMeta` | The build metatdata version +`semver.buildMetaPrefix` | The build metadata prefix +`semver.separator` | The version separator. + + ## Source Code Generation If you'd like to incorporate the version number data into your source code, please have a look at the [__Semantic Version Annotation Processor__](https://github.com/ethauvin/semver). diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverConfig.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverConfig.kt index 7327356..c530d4f 100644 --- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverConfig.kt +++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverConfig.kt @@ -32,7 +32,11 @@ package net.thauvin.erik.gradle.semver -open class SemverConfig { +import javax.inject.Inject + +open class SemverConfig @Inject constructor( + private val semVersion: Version +) { companion object { const val DEFAULT_KEYS_PREFIX = "version." const val DEFAULT_PROPERTIES = "${DEFAULT_KEYS_PREFIX}properties" @@ -48,6 +52,8 @@ open class SemverConfig { } var properties = DEFAULT_PROPERTIES + + // Keys var semverKey = DEFAULT_SEMVER_KEY get() = "$keysPrefix$field" var majorKey = DEFAULT_MAJOR_KEY @@ -68,10 +74,32 @@ open class SemverConfig { get() = "$keysPrefix$field" var keysPrefix = DEFAULT_KEYS_PREFIX + // Properties + val semver: String + get() = semVersion.semver + val version: String + get() = semVersion.semver + val major: Int + get() = semVersion.major + val minor: Int + get() = semVersion.minor + val patch: Int + get() = semVersion.patch + val preRelease: String + get() = semVersion.preRelease + val buildMeta: String + get() = semVersion.buildMeta + val preReleasePrefix: String + get() = semVersion.preReleasePrefix + val buildMetaPrefix: String + get() = semVersion.buildMetaPrefix + val separator: String + get() = semVersion.separator + override fun toString(): String { return "SemverConfig(" + "properties='$properties', " + - "semver='$semverKey', " + + "semverKey='$semverKey', " + "majorKey='$majorKey', " + "minorKey='$minorKey', " + "patchKey='$patchKey', " + @@ -80,7 +108,16 @@ open class SemverConfig { "buildMetaKey='$buildMetaKey', " + "buildMetaPrefixKey='$buildMetaPrefixKey', " + "separator='$separatorKey', " + - "keysPrefix='$keysPrefix')" + + "keysPrefix='$keysPrefix', " + + "semver='$semver', " + + "major='$major', " + + "minor='$minor', " + + "patch='$patch', " + + "preRelease='$preRelease', " + + "buildMeta='$buildMeta', " + + "preReleasePrefix='$preReleasePrefix', " + + "buildMetaPrefix='$buildMetaPrefix', " + + "separator='$separator'" + ')' } } diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt index 24cb10c..0fbb622 100644 --- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt +++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt @@ -54,7 +54,8 @@ open class SemverIncrementTask @Inject constructor( version.increment( isMajor = type == SemverConfig.DEFAULT_MAJOR_KEY, isMinor = type == SemverConfig.DEFAULT_MINOR_KEY, - isPatch = type == SemverConfig.DEFAULT_PATCH_KEY) + isPatch = type == SemverConfig.DEFAULT_PATCH_KEY + ) project.version = version.semver logger.lifecycle("Version: ${project.version}") Utils.saveProperties(project.projectDir, config, version) diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt index d346cb7..f591ecd 100644 --- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt +++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt @@ -46,7 +46,7 @@ class SemverPlugin : Plugin { if (GradleVersion.current() < GradleVersion.version("4.8.1")) { throw GradleException("The $simpleName plugin requires Gradle version 4.8.1 or greater.") } - config = project.extensions.create("semver", SemverConfig::class.java) + config = project.extensions.create("semver", SemverConfig::class.java, version) project.afterEvaluate(this::afterEvaluate) project.tasks.apply { @@ -62,18 +62,22 @@ class SemverPlugin : Plugin { if (project.version != "unspecified") { project.logger.warn( - "Please specify the version in ${propsFile.name} and remove it from ${project.buildFile.name}") + "Please specify the version in ${propsFile.name} and remove it from ${project.buildFile.name}" + ) } propsFile.apply { val isNew = !exists() project.logger.info( - "[$simpleName] Attempting to read properties from: `$absoluteFile`. [exists: $isNew, isFile: $isFile, canRead: ${propsFile.canRead()}]") + "[$simpleName] Attempting to read properties from: `$absoluteFile`. [exists: $isNew, isFile: $isFile, canRead: ${canRead()}]" + ) val props = Utils.loadProperties(this) - val requiredProps = setOf(config.semverKey, config.majorKey, config.minorKey, config.patchKey, - config.preReleaseKey, config.buildMetaKey) + val requiredProps = setOf( + config.semverKey, config.majorKey, config.minorKey, config.patchKey, + config.preReleaseKey, config.buildMetaKey + ) val hasReqProps = !isNew && props.stringPropertyNames().containsAll(requiredProps) && Utils.isNotSystemProperty(requiredProps) diff --git a/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverConfigSpec.kt b/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverConfigSpec.kt index 99221e8..c487bcd 100644 --- a/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverConfigSpec.kt +++ b/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverConfigSpec.kt @@ -41,7 +41,7 @@ import kotlin.test.assertTrue object SemverConfigSpec : Spek({ Feature("SemverConfig") { Scenario("Testing configs") { - val config by memoized { SemverConfig() } + val config by memoized { SemverConfig(Version()) } val vars = listOf( config.semverKey, config.majorKey,