diff --git a/.circleci/config.yml b/.circleci/config.yml
index 9788a59..6c0190e 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1,3 +1,4 @@
+version: 2
defaults: &defaults
working_directory: ~/repo
docker:
@@ -7,8 +8,6 @@ defaults: &defaults
TERM: dumb
CI: true
-version: 2.0
-
jobs:
build_gradle:
<<: *defaults
diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml
new file mode 100644
index 0000000..f1ac387
--- /dev/null
+++ b/.github/workflows/gradle.yml
@@ -0,0 +1,19 @@
+name: Java CI with Gradle
+
+on: [push, pull_request, workflow_dispatch]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up JDK 1.8
+ uses: actions/setup-java@v1
+ with:
+ java-version: 1.8
+ - name: Grant execute permission for gradlew
+ run: chmod +x gradlew
+ - name: Test with Gradle
+ run: ./gradlew check
diff --git a/.gitignore b/.gitignore
index a78c5c2..f007981 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,32 +1,14 @@
+.vscode/*
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/settings.json
!.vscode/tasks.json
-!gradle-wrapper.jar
+
+__pycache__
.classpath
.DS_Store
.gradle
.history
-.idea_modules/
-.idea/**/contentModel.xml
-.idea/**/dataSources.ids
-.idea/**/dataSources.local.xml
-.idea/**/dataSources/
-.idea/**/dbnavigator.xml
-.idea/**/dictionaries
-.idea/**/dynamic.xml
-.idea/**/gradle.xml
-.idea/**/libraries
-.idea/**/mongoSettings.xml
-.idea/**/shelf
-.idea/**/sqlDataSources.xml
-.idea/**/tasks.xml
-.idea/**/uiDesigner.xml
-.idea/**/usage.statistics.xml
-.idea/**/workspace.xml
-.idea/caches/build_file_checksums.ser
-.idea/httpRequests
-.idea/replstate.xml
.kobalt
.mtj.tmp/
.mvn/timing.properties
@@ -35,20 +17,39 @@
.project
.scannerwork
.settings
-.vscode/*
*.class
*.code-workspace
*.ctxt
-*.ear
*.iws
-*.jar
*.log
*.nar
*.rar
*.sublime-*
*.tar.gz
-*.war
*.zip
+/**/.idea_modules/
+/**/.idea/**/caches/build_file_checksums.ser
+/**/.idea/**/contentModel.xml
+/**/.idea/**/dataSources.ids
+/**/.idea/**/dataSources.local.xml
+/**/.idea/**/dataSources/
+/**/.idea/**/dbnavigator.xml
+/**/.idea/**/dictionaries
+/**/.idea/**/dynamic.xml
+/**/.idea/**/gradle.xml
+/**/.idea/**/httpRequests
+/**/.idea/**/libraries
+/**/.idea/**/mongoSettings.xml
+/**/.idea/**/replstate.xml
+/**/.idea/**/shelf
+/**/.idea/**/shelf/
+/**/.idea/**/sqlDataSources.xml
+/**/.idea/**/tasks.xml
+/**/.idea/**/uiDesigner.xml
+/**/.idea/**/usage.statistics.xml
+/**/.idea/**/workspace.xml
+/**/.idea/$CACHE_FILE$
+/**/.idea/$PRODUCT_WORKSPACE_FILE$
atlassian-ide-plugin.xml
bin/
build/
@@ -80,3 +81,4 @@ release.properties
target/
test-output
Thumbs.db
+venv
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..26820aa
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,31 @@
+image: gradle:alpine
+
+variables:
+ GRADLE_OPTS: "-Dorg.gradle.daemon=false"
+
+before_script:
+ - export GRADLE_USER_HOME=`pwd`/.gradle
+
+stages:
+ - build
+ - test
+
+build:
+ stage: build
+ script: ./gradlew --build-cache assemble
+ cache:
+ key: "$CI_COMMIT_REF_NAME"
+ policy: push
+ paths:
+ - build
+ - .gradle
+
+test:
+ stage: test
+ script: ./gradlew check
+ cache:
+ key: "$CI_COMMIT_REF_NAME"
+ policy: pull
+ paths:
+ - build
+ - .gradle
diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml
new file mode 100644
index 0000000..95c433c
--- /dev/null
+++ b/.idea/checkstyle-idea.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..d91f848
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/Erik_s_Copyright_Notice.xml b/.idea/copyright/Erik_s_Copyright_Notice.xml
index 935baa1..914713f 100644
--- a/.idea/copyright/Erik_s_Copyright_Notice.xml
+++ b/.idea/copyright/Erik_s_Copyright_Notice.xml
@@ -1,5 +1,6 @@
+
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..98b5537
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 82f5b1f..692822a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..4c5218b
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/Copyright.xml b/.idea/scopes/Copyright.xml
index edcac0e..5acbcdb 100644
--- a/.idea/scopes/Copyright.xml
+++ b/.idea/scopes/Copyright.xml
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index 25b785f..4a40469 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,5 @@
language: java
-
-env:
- global:
- - CI=true
+dist: trusty
jdk:
- oraclejdk8
@@ -28,6 +25,6 @@ cache:
after_success:
- |
- if [ "${TRAVIS_TEST_RESULT}" == 0 ]; then
- ./gradlew sonarqube
- fi
+ if [ "${TRAVIS_TEST_RESULT}" == 0 ]; then
+ ./gradlew sonarqube
+ fi
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..14c8942
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,68 @@
+# Change Log
+
+## [1.0.4](https://github.com/ethauvin/semver-gradle/tree/1.0.4) (2019-07-26)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/1.0.3-beta...1.0.4)
+
+**Implemented enhancements:**
+
+- Access semver version properties in Gradle build file. [\#8](https://github.com/ethauvin/semver-gradle/issues/8)
+
+## [1.0.3-beta](https://github.com/ethauvin/semver-gradle/tree/1.0.3-beta) (2019-07-25)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/1.0.2...1.0.3-beta)
+
+**Closed issues:**
+
+- Thanks! [\#7](https://github.com/ethauvin/semver-gradle/issues/7)
+
+## [1.0.2](https://github.com/ethauvin/semver-gradle/tree/1.0.2) (2019-05-24)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/1.0.1...1.0.2)
+
+**Implemented enhancements:**
+
+- version.properties write issue when using NetBeans on Windows. [\#6](https://github.com/ethauvin/semver-gradle/issues/6)
+
+## [1.0.1](https://github.com/ethauvin/semver-gradle/tree/1.0.1) (2019-05-24)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/1.0.0...1.0.1)
+
+## [1.0.0](https://github.com/ethauvin/semver-gradle/tree/1.0.0) (2019-04-23)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/0.9.9-beta...1.0.0)
+
+**Implemented enhancements:**
+
+- Optionally save version properties [\#1](https://github.com/ethauvin/semver-gradle/issues/1)
+- Set prerelease from commandline [\#3](https://github.com/ethauvin/semver-gradle/issues/3)
+
+**Merged pull requests:**
+
+- Extended existing tests to include semver property [\#5](https://github.com/ethauvin/semver-gradle/pull/5) ([rveede](https://github.com/rveede))
+- Include full semver version in version.properties [\#4](https://github.com/ethauvin/semver-gradle/pull/4) ([rveede](https://github.com/rveede))
+
+## [0.9.9-beta](https://github.com/ethauvin/semver-gradle/tree/0.9.9-beta) (2018-12-20)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/0.9.8-beta...0.9.9-beta)
+
+**Merged pull requests:**
+
+- Add option for disabling saves every project evaluation [\#2](https://github.com/ethauvin/semver-gradle/pull/2) ([lewismorgan](https://github.com/lewismorgan))
+
+## [0.9.8-beta](https://github.com/ethauvin/semver-gradle/tree/0.9.8-beta) (2018-07-14)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/0.9.7-beta...0.9.8-beta)
+
+## [0.9.7-beta](https://github.com/ethauvin/semver-gradle/tree/0.9.7-beta) (2018-07-13)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/0.9.6-beta...0.9.7-beta)
+
+## [0.9.6-beta](https://github.com/ethauvin/semver-gradle/tree/0.9.6-beta) (2018-07-10)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/0.9.5-beta...0.9.6-beta)
+
+## [0.9.5-beta](https://github.com/ethauvin/semver-gradle/tree/0.9.5-beta) (2018-07-07)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/0.9.4-beta...0.9.5-beta)
+
+## [0.9.4-beta](https://github.com/ethauvin/semver-gradle/tree/0.9.4-beta) (2018-07-03)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/0.9.3-beta...0.9.4-beta)
+
+## [0.9.3-beta](https://github.com/ethauvin/semver-gradle/tree/0.9.3-beta) (2018-07-02)
+[Full Changelog](https://github.com/ethauvin/semver-gradle/compare/0.9.2-beta...0.9.3-beta)
+
+## [0.9.2-beta](https://github.com/ethauvin/semver-gradle/tree/0.9.2-beta) (2018-07-01)
+
+
+\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
\ No newline at end of file
diff --git a/LICENSE.TXT b/LICENSE.TXT
index 8ad4ca5..7345551 100644
--- a/LICENSE.TXT
+++ b/LICENSE.TXT
@@ -1,4 +1,4 @@
-Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
index 805dc0e..681d9b4 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[](http://opensource.org/licenses/BSD-3-Clause) [](https://sonarcloud.io/dashboard?id=ethauvin_semver-gradle) [](https://travis-ci.org/ethauvin/semver-gradle) [](https://circleci.com/gh/ethauvin/semver-gradle/tree/master) [](https://plugins.gradle.org/plugin/net.thauvin.erik.gradle.semver)
+[](http://opensource.org/licenses/BSD-3-Clause) [](https://sonarcloud.io/dashboard?id=ethauvin_semver-gradle) [](https://travis-ci.com/ethauvin/semver-gradle) [](https://circleci.com/gh/ethauvin/semver-gradle/tree/master) [](https://plugins.gradle.org/plugin/net.thauvin.erik.gradle.semver)
# Semantic Version Plugin for Gradle
@@ -244,6 +244,57 @@ 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 {
+ doFirst {
+ 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.
+
+## Version is "unspecified"
+
+This is a common problem stemming from the configuration and build phases in Gradle.
+
+It is always preferable to access to version during the execution stage, in a `doFirst` or `doLast` closure within your tasks:
+
+```gradle
+task foo() {
+ doFirst {
+ println project.version
+ }
+}
+```
+
+or if absolutely necessary, at the end of the configuration stage in a `project.afterEvaluate` block:
+
+```gradle
+foo {
+ project.afterEvaluate {
+ println project.version
+ }
+}
+```
+
## 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/bitbucket-pipelines.yml b/bitbucket-pipelines.yml
new file mode 100644
index 0000000..7d98402
--- /dev/null
+++ b/bitbucket-pipelines.yml
@@ -0,0 +1,9 @@
+image: openjdk:8
+
+pipelines:
+ default:
+ - step:
+ caches:
+ - gradle
+ script:
+ - bash ./gradlew check
diff --git a/build.gradle.kts b/build.gradle.kts
index 6c68d39..5d51035 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -2,24 +2,26 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
`java-gradle-plugin`
- `kotlin-dsl`
`maven-publish`
jacoco
- id("com.github.ben-manes.versions") version "0.21.0"
- id("com.gradle.build-scan") version "2.2.1"
- id("com.gradle.plugin-publish") version "0.10.1"
- id("io.gitlab.arturbosch.detekt") version "1.0.0-RC14"
- id("org.jlleitschuh.gradle.ktlint") version "7.3.0"
- id("org.sonarqube") version "2.7"
+ kotlin("jvm") version "1.3.72"
+ id("com.github.ben-manes.versions") version "0.36.0"
+ id("com.gradle.plugin-publish") version "0.12.0"
+ id("io.gitlab.arturbosch.detekt") version "1.14.2"
+ id("org.gradle.kotlin.kotlin-dsl") version "1.3.6"
+ id("org.sonarqube") version "3.0"
}
-version = "1.0.0"
+version = "1.0.5-beta"
group = "net.thauvin.erik.gradle"
-var github = "https://github.com/ethauvin/semver-gradle"
-var packageName = "net.thauvin.erik.gradle.semver"
+object VersionInfo {
+ const val spek = "2.0.13"
+}
+val versions: VersionInfo by extra { VersionInfo }
-var spek_version = "2.0.2"
+val github = "https://github.com/ethauvin/semver-gradle"
+val packageName = "net.thauvin.erik.gradle.semver"
repositories {
jcenter()
@@ -28,12 +30,15 @@ repositories {
dependencies {
implementation(gradleApi())
+ implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
+ implementation(kotlin("stdlib"))
testImplementation(kotlin("reflect"))
testImplementation(kotlin("test"))
+
testImplementation(gradleTestKit())
- testImplementation("org.spekframework.spek2:spek-dsl-jvm:$spek_version")
- testRuntimeOnly("org.spekframework.spek2:spek-runner-junit5:$spek_version")
+ testImplementation("org.spekframework.spek2:spek-dsl-jvm:${versions.spek}")
+ testRuntimeOnly("org.spekframework.spek2:spek-runner-junit5:${versions.spek}")
}
tasks {
@@ -56,28 +61,14 @@ tasks {
}
}
- "check" {
- dependsOn("ktlintCheck")
- }
-
"sonarqube" {
dependsOn("jacocoTestReport")
}
}
-buildScan {
- link("GitHub", "https://github.com/ethauvin/semver-gradle/tree/master")
- if ("true" == System.getenv("CI")) {
- publishOnFailure()
- tag("CI")
- }
- termsOfServiceUrl = "https://gradle.com/terms-of-service"
- termsOfServiceAgree = "yes"
-}
-
detekt {
- input = files("src/main/kotlin", "src/test/kotlin")
- filters = ".*/resources/.*,.*/build/.*"
+ // input = files("src/main/kotlin", "src/test/kotlin")
+ // filters = ".*/resources/.*,.*/build/.*"
baseline = project.rootDir.resolve("detekt-baseline.xml")
}
diff --git a/detekt-baseline.xml b/detekt-baseline.xml
index ffcc67e..52cc674 100644
--- a/detekt-baseline.xml
+++ b/detekt-baseline.xml
@@ -1,13 +1,12 @@
-
-
- ComplexMethod:Utils.kt$Utils$fun loadProperties(file: File): Properties
+
+
MagicNumber:Utils.kt$Utils$3
MagicNumber:Utils.kt$Utils$4
- MaxLineLength:SemverPlugin.kt$net.thauvin.erik.gradle.semver.SemverPlugin.kt
+ MagicNumber:Utils.kt$Utils$5
NestedBlockDepth:Utils.kt$Utils$fun loadProperties(file: File): Properties
- NestedBlockDepth:Utils.kt$Utils$fun parseSemVer(input: String, version: Version): String
- NestedBlockDepth:Utils.kt$Utils$fun saveProperties(config: SemverConfig, version: Version)
-
-
\ No newline at end of file
+ NestedBlockDepth:Utils.kt$Utils$fun parseSemVer(input: String?, version: Version): Boolean
+ NestedBlockDepth:Utils.kt$Utils$fun saveProperties(projectDir: File, config: SemverConfig, version: Version)
+
+
diff --git a/examples/annotation-processor/java/build.gradle b/examples/annotation-processor/java/build.gradle
index 74eb072..b343869 100644
--- a/examples/annotation-processor/java/build.gradle
+++ b/examples/annotation-processor/java/build.gradle
@@ -1,8 +1,8 @@
plugins {
id 'java'
id 'application'
- id 'net.thauvin.erik.gradle.semver' version '0.9.9-beta'
- id 'com.github.ben-manes.versions' version '0.21.0'
+ id 'net.thauvin.erik.gradle.semver' version '1.0.4'
+ id 'com.github.ben-manes.versions' version '0.28.0'
}
// ./gradlew
@@ -14,13 +14,16 @@ mainClassName = 'com.example.Example'
defaultTasks 'run'
-compileJava.options.annotationProcessorGeneratedSourcesDirectory = file("${projectDir}/src/generated/java")
-
def semverProcessor = "net.thauvin.erik:semver:1.2.0"
dependencies {
annotationProcessor semverProcessor
- compileOnly semverProcessor
+ implementation semverProcessor
+}
+
+tasks.withType(JavaCompile) {
+ options.annotationProcessorGeneratedSourcesDirectory = file("${projectDir}/src/generated/java")
+ options.compilerArgs += [ "-Asemver.project.dir=$projectDir" ]
}
repositories {
diff --git a/examples/annotation-processor/java/gradle/wrapper/gradle-wrapper.jar b/examples/annotation-processor/java/gradle/wrapper/gradle-wrapper.jar
index 5c2d1cf..f3d88b1 100644
Binary files a/examples/annotation-processor/java/gradle/wrapper/gradle-wrapper.jar and b/examples/annotation-processor/java/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/examples/annotation-processor/java/gradle/wrapper/gradle-wrapper.properties b/examples/annotation-processor/java/gradle/wrapper/gradle-wrapper.properties
index 5f1b120..a2bf131 100644
--- a/examples/annotation-processor/java/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/annotation-processor/java/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/examples/annotation-processor/java/gradlew b/examples/annotation-processor/java/gradlew
index b0d6d0a..2fe81a7 100755
--- a/examples/annotation-processor/java/gradlew
+++ b/examples/annotation-processor/java/gradlew
@@ -7,7 +7,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -125,8 +125,8 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
@@ -154,19 +154,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $i + 1`
done
case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@@ -175,14 +175,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
-APP_ARGS=$(save "$@")
+APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
exec "$JAVACMD" "$@"
diff --git a/examples/annotation-processor/java/gradlew.bat b/examples/annotation-processor/java/gradlew.bat
index 9991c50..62bd9b9 100644
--- a/examples/annotation-processor/java/gradlew.bat
+++ b/examples/annotation-processor/java/gradlew.bat
@@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
diff --git a/examples/annotation-processor/java/src/generated/java/com/example/GeneratedVersion.java b/examples/annotation-processor/java/src/generated/java/com/example/GeneratedVersion.java
index da0842c..5010897 100644
--- a/examples/annotation-processor/java/src/generated/java/com/example/GeneratedVersion.java
+++ b/examples/annotation-processor/java/src/generated/java/com/example/GeneratedVersion.java
@@ -2,6 +2,7 @@
* This file is automatically generated.
* Do not modify! -- ALL CHANGES WILL BE ERASED!
*/
+
package com.example;
import java.util.Date;
@@ -12,17 +13,17 @@ import java.util.Date;
* @author Semantic Version Annotation Processor
*/
public final class GeneratedVersion {
- public final static String PROJECT = "Java Example";
- public final static Date BUILDDATE = new Date(1556045173358L);
- public final static int MAJOR = 2;
- public final static int MINOR = 8;
- public final static int PATCH = 0;
- public final static String PRERELEASE = "";
- public final static String PRERELEASE_PREFIX = "-";
- public final static String BUILDMETA = "";
- public final static String BUILDMETA_PREFIX = "+";
- public final static String SEPARATOR = ".";
- public final static String VERSION = "2.8.0";
+ public static final String PROJECT = "Java Example";
+ public static final Date BUILDDATE = new Date(1564027571537L);
+ public static final int MAJOR = 2;
+ public static final int MINOR = 10;
+ public static final int PATCH = 0;
+ public static final String PRERELEASE = "";
+ public static final String PRERELEASE_PREFIX = "-";
+ public static final String BUILDMETA = "";
+ public static final String BUILDMETA_PREFIX = "+";
+ public static final String SEPARATOR = ".";
+ public static final String VERSION = "2.10.0";
/**
* Disables the default constructor.
diff --git a/examples/annotation-processor/java/version.properties b/examples/annotation-processor/java/version.properties
index a2c1662..fc54733 100644
--- a/examples/annotation-processor/java/version.properties
+++ b/examples/annotation-processor/java/version.properties
@@ -1,8 +1,9 @@
#Generated by the Semver Plugin for Gradle
-#Tue Apr 23 11:46:10 PDT 2019
+#Wed Jul 24 21:06:09 PDT 2019
version.buildmeta=
version.major=2
-version.minor=8
+version.minor=10
version.patch=0
version.prerelease=
version.project=Java Example
+version.semver=2.10.0
diff --git a/examples/annotation-processor/kotlin/build.gradle.kts b/examples/annotation-processor/kotlin/build.gradle.kts
index 2b688e4..78cd80b 100644
--- a/examples/annotation-processor/kotlin/build.gradle.kts
+++ b/examples/annotation-processor/kotlin/build.gradle.kts
@@ -1,9 +1,9 @@
plugins {
- kotlin("jvm").version("1.3.30")
+ kotlin("jvm").version("1.3.61")
application
- id("org.jetbrains.kotlin.kapt").version("1.3.30")
- id("net.thauvin.erik.gradle.semver").version("0.9.9-beta")
- id("com.github.ben-manes.versions").version("0.21.0")
+ id("org.jetbrains.kotlin.kapt").version("1.3.61")
+ id("net.thauvin.erik.gradle.semver").version("1.0.4")
+ id("com.github.ben-manes.versions").version("0.28.0")
}
// ./gradlew
@@ -17,7 +17,7 @@ var semverProcessor = "net.thauvin.erik:semver:1.2.0"
dependencies {
kapt(semverProcessor)
- compileOnly(semverProcessor)
+ implementation(semverProcessor)
implementation(kotlin("stdlib"))
}
diff --git a/examples/annotation-processor/kotlin/gradle/wrapper/gradle-wrapper.jar b/examples/annotation-processor/kotlin/gradle/wrapper/gradle-wrapper.jar
index 5c2d1cf..f3d88b1 100644
Binary files a/examples/annotation-processor/kotlin/gradle/wrapper/gradle-wrapper.jar and b/examples/annotation-processor/kotlin/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/examples/annotation-processor/kotlin/gradle/wrapper/gradle-wrapper.properties b/examples/annotation-processor/kotlin/gradle/wrapper/gradle-wrapper.properties
index 5f1b120..a2bf131 100644
--- a/examples/annotation-processor/kotlin/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/annotation-processor/kotlin/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/examples/annotation-processor/kotlin/gradlew b/examples/annotation-processor/kotlin/gradlew
index b0d6d0a..2fe81a7 100755
--- a/examples/annotation-processor/kotlin/gradlew
+++ b/examples/annotation-processor/kotlin/gradlew
@@ -7,7 +7,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -125,8 +125,8 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
@@ -154,19 +154,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $i + 1`
done
case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@@ -175,14 +175,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
-APP_ARGS=$(save "$@")
+APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
exec "$JAVACMD" "$@"
diff --git a/examples/annotation-processor/kotlin/gradlew.bat b/examples/annotation-processor/kotlin/gradlew.bat
index 9991c50..62bd9b9 100644
--- a/examples/annotation-processor/kotlin/gradlew.bat
+++ b/examples/annotation-processor/kotlin/gradlew.bat
@@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
diff --git a/examples/annotation-processor/kotlin/version.properties b/examples/annotation-processor/kotlin/version.properties
index f7d4a9d..8da5e3a 100644
--- a/examples/annotation-processor/kotlin/version.properties
+++ b/examples/annotation-processor/kotlin/version.properties
@@ -1,8 +1,9 @@
#Generated by the Semver Plugin for Gradle
-#Tue Apr 23 11:46:40 PDT 2019
+#Wed Jul 24 21:06:46 PDT 2019
version.buildmeta=
version.major=14
-version.minor=1
+version.minor=3
version.patch=0
version.prerelease=
version.project=Kotlin Example
+version.semver=14.3.0
diff --git a/examples/java/build.gradle b/examples/java/build.gradle
index 7bc9f49..e841b08 100644
--- a/examples/java/build.gradle
+++ b/examples/java/build.gradle
@@ -1,8 +1,8 @@
plugins {
id 'java'
id 'application'
- id 'net.thauvin.erik.gradle.semver' version '0.9.9-beta'
- id 'com.github.ben-manes.versions' version '0.21.0'
+ id 'net.thauvin.erik.gradle.semver' version '1.0.4'
+ id 'com.github.ben-manes.versions' version '0.36.0'
}
// ./gradlew
@@ -10,14 +10,14 @@ plugins {
// ./gradlew incrementMinor run
// ./gradlew incrementMajor run
// ./gradlew incrementBuildMeta run
+// ./gradlew echoVersion
-mainClassName = 'App'
defaultTasks 'run'
dependencies {
- testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.0-M1'
- testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.0-M1'
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}
repositories {
@@ -28,6 +28,13 @@ test {
useJUnitPlatform()
}
+application {
+ mainClassName = 'App'
+// project.afterEvaluate {
+// println "Version: $version"
+// }
+}
+
semver {
// properties = "example.properties"
// keysPrefix = "example."
@@ -44,9 +51,14 @@ incrementBuildMeta {
run {
doFirst {
+// println "Version: ${-> version}"
println "Version: $version"
}
// args = ['example.properties']
args = ['version.properties']
}
+
+task echoVersion(type:Exec) {
+ commandLine 'echo', "${-> project.version}"
+}
diff --git a/examples/java/gradle/wrapper/gradle-wrapper.jar b/examples/java/gradle/wrapper/gradle-wrapper.jar
index 5c2d1cf..e708b1c 100644
Binary files a/examples/java/gradle/wrapper/gradle-wrapper.jar and b/examples/java/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/examples/java/gradle/wrapper/gradle-wrapper.properties b/examples/java/gradle/wrapper/gradle-wrapper.properties
index 5f1b120..be52383 100644
--- a/examples/java/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/java/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/examples/java/gradlew b/examples/java/gradlew
index b0d6d0a..4f906e0 100755
--- a/examples/java/gradlew
+++ b/examples/java/gradlew
@@ -7,7 +7,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -82,6 +82,7 @@ esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -125,10 +126,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
@@ -154,19 +156,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $i + 1`
done
case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@@ -175,14 +177,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
-APP_ARGS=$(save "$@")
+APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
exec "$JAVACMD" "$@"
diff --git a/examples/java/gradlew.bat b/examples/java/gradlew.bat
index 9991c50..107acd3 100644
--- a/examples/java/gradlew.bat
+++ b/examples/java/gradlew.bat
@@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -51,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -61,28 +64,14 @@ echo location of your Java installation.
goto fail
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/examples/java/src/main/java/App.java b/examples/java/src/main/java/App.java
index f1550d6..32b2431 100644
--- a/examples/java/src/main/java/App.java
+++ b/examples/java/src/main/java/App.java
@@ -17,4 +17,4 @@ public class App {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/examples/java/src/test/java/AppTest.java b/examples/java/src/test/java/AppTest.java
index e5e3dd6..b214b69 100644
--- a/examples/java/src/test/java/AppTest.java
+++ b/examples/java/src/test/java/AppTest.java
@@ -9,4 +9,4 @@ class AppTest {
assertAll("app should have a main method.",
() -> classUnderTest.getClass().getMethod("main", String[].class));
}
-}
\ No newline at end of file
+}
diff --git a/examples/java/version.properties b/examples/java/version.properties
index 3f24455..f5bf6aa 100644
--- a/examples/java/version.properties
+++ b/examples/java/version.properties
@@ -1,7 +1,8 @@
#Generated by the Semver Plugin for Gradle
-#Tue Apr 23 11:43:18 PDT 2019
-version.buildmeta=20190423114318
+#Fri Sep 25 17:38:33 PDT 2020
+version.buildmeta=20200925173833
version.major=1
-version.minor=1
-version.patch=8
-version.prerelease=alpha
+version.minor=0
+version.patch=0
+version.prerelease=
+version.semver=1.0.0+20200925173833
diff --git a/examples/kotlin/build.gradle.kts b/examples/kotlin/build.gradle.kts
index 1a0a06f..d54e882 100644
--- a/examples/kotlin/build.gradle.kts
+++ b/examples/kotlin/build.gradle.kts
@@ -4,10 +4,10 @@ import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
plugins {
- kotlin("jvm").version("1.3.30")
+ kotlin("jvm").version("1.4.10")
application
- id("net.thauvin.erik.gradle.semver").version("0.9.9-beta")
- id("com.github.ben-manes.versions").version("0.21.0")
+ id("net.thauvin.erik.gradle.semver").version("1.0.4")
+ id("com.github.ben-manes.versions").version("0.36.0")
}
// ./gradlew
@@ -20,7 +20,7 @@ defaultTasks(ApplicationPlugin.TASK_RUN_NAME)
dependencies {
implementation(kotlin("stdlib"))
- testImplementation("org.testng:testng:6.14.3")
+ testImplementation("org.testng:testng:7.3.0")
}
repositories {
@@ -29,6 +29,9 @@ repositories {
application {
mainClassName = "com.example.MainKt"
+// project.afterEvaluate {
+// println("Version: $version")
+// }
}
semver {
diff --git a/examples/kotlin/gradle/wrapper/gradle-wrapper.jar b/examples/kotlin/gradle/wrapper/gradle-wrapper.jar
index 5c2d1cf..e708b1c 100644
Binary files a/examples/kotlin/gradle/wrapper/gradle-wrapper.jar and b/examples/kotlin/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/examples/kotlin/gradle/wrapper/gradle-wrapper.properties b/examples/kotlin/gradle/wrapper/gradle-wrapper.properties
index 5f1b120..be52383 100644
--- a/examples/kotlin/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/kotlin/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/examples/kotlin/gradlew b/examples/kotlin/gradlew
index b0d6d0a..4f906e0 100755
--- a/examples/kotlin/gradlew
+++ b/examples/kotlin/gradlew
@@ -7,7 +7,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -82,6 +82,7 @@ esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -125,10 +126,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
@@ -154,19 +156,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $i + 1`
done
case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@@ -175,14 +177,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
-APP_ARGS=$(save "$@")
+APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
exec "$JAVACMD" "$@"
diff --git a/examples/kotlin/gradlew.bat b/examples/kotlin/gradlew.bat
index 9991c50..107acd3 100644
--- a/examples/kotlin/gradlew.bat
+++ b/examples/kotlin/gradlew.bat
@@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -51,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -61,28 +64,14 @@ echo location of your Java installation.
goto fail
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/examples/kotlin/src/main/kotlin/com/example/Main.kt b/examples/kotlin/src/main/kotlin/com/example/Main.kt
index 4ef488b..caaa0c1 100644
--- a/examples/kotlin/src/main/kotlin/com/example/Main.kt
+++ b/examples/kotlin/src/main/kotlin/com/example/Main.kt
@@ -13,4 +13,4 @@ fun main(args: Array) {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/examples/kotlin/src/test/kotlin/com/example/MainTest.kt b/examples/kotlin/src/test/kotlin/com/example/MainTest.kt
index 96458e9..e49aac0 100644
--- a/examples/kotlin/src/test/kotlin/com/example/MainTest.kt
+++ b/examples/kotlin/src/test/kotlin/com/example/MainTest.kt
@@ -5,4 +5,4 @@ import org.testng.annotations.Test
class ExampleTest {
@Test
fun f() = println("Running test")
-}
\ No newline at end of file
+}
diff --git a/examples/kotlin/version.properties b/examples/kotlin/version.properties
index 325a878..98e937a 100644
--- a/examples/kotlin/version.properties
+++ b/examples/kotlin/version.properties
@@ -1,7 +1,8 @@
#Generated by the Semver Plugin for Gradle
-#Tue Apr 23 11:45:33 PDT 2019
-version.buildmeta=20190423114533
+#Mon Nov 09 21:24:16 PST 2020
+version.buildmeta=20201109212416
version.major=1
version.minor=2
version.patch=4
version.prerelease=beta
+version.semver=1.2.4-beta+20201109212416
diff --git a/examples/test/build.gradle b/examples/test/build.gradle
index 65879f0..9813e76 100644
--- a/examples/test/build.gradle
+++ b/examples/test/build.gradle
@@ -1,9 +1,10 @@
buildscript {
repositories {
mavenLocal()
+ mavenCentral()
}
dependencies {
- classpath "net.thauvin.erik.gradle:semver:1.0.0"
+ classpath "net.thauvin.erik.gradle:semver:1.0.5-beta"
}
}
@@ -13,7 +14,7 @@ apply plugin: 'net.thauvin.erik.gradle.semver'
mainClassName = 'App'
-version = 1.0
+//version = 1.0
def f = new File("version.properties")
@@ -29,6 +30,13 @@ repositories {
jcenter()
}
+application {
+ println(project.version)
+ project.afterEvaluate {
+ println(project.version)
+ }
+}
+
incrementBuildMeta {
doFirst {
@@ -39,13 +47,17 @@ incrementBuildMeta {
run {
doFirst {
- println("Version: $version")
+ println("Version: $semver.major$semver.separator$semver.minor$semver.separator$semver.patch$semver.preReleasePrefix$semver.preRelease$semver.buildMetaPrefix$semver.buildMeta")
args = [f.name]
}
}
+task echoVersion(type:Exec) {
+ commandLine "echo", "${-> version}"
+}
+
semver {
- properties = "$projectDir/${f.name}"
+ properties = "${f.name}"
keysPrefix = f.name.substring(0, f.name.indexOf(".") + 1)
buildMetaKey = "meta"
semverKey = "fullversion"
diff --git a/examples/test/gradle/wrapper/gradle-wrapper.properties b/examples/test/gradle/wrapper/gradle-wrapper.properties
index ea13fdf..4b7e1f3 100644
--- a/examples/test/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/test/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.3.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/examples/test/gradlew b/examples/test/gradlew
index b0d6d0a..8e25e6c 100755
--- a/examples/test/gradlew
+++ b/examples/test/gradlew
@@ -7,7 +7,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/examples/test/gradlew.bat b/examples/test/gradlew.bat
index 9991c50..9618d8d 100644
--- a/examples/test/gradlew.bat
+++ b/examples/test/gradlew.bat
@@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/examples/test/locked b/examples/test/locked
new file mode 100644
index 0000000..e69de29
diff --git a/examples/test/locked.properties b/examples/test/locked.properties
new file mode 100644
index 0000000..03fc5bd
--- /dev/null
+++ b/examples/test/locked.properties
@@ -0,0 +1,8 @@
+#Generated by the Semver Plugin for Gradle
+#Fri Apr 19 13:31:37 PDT 2019
+version.fullversion=11.0.0-alpha+20190419133137
+version.major=11
+version.meta=20190419133137
+version.minor=0
+version.patch=0
+version.prerelease=alpha
diff --git a/examples/test/src/test/java/AppTest.java b/examples/test/src/test/java/AppTest.java
deleted file mode 100644
index 7bd2702..0000000
--- a/examples/test/src/test/java/AppTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * This Java source file was generated by the Gradle 'init' task.
- */
-
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class AppTest {
- @Test
- public void testAppHasAGreeting() {
- App classUnderTest = new App();
- assertNotNull("app should have a greeting", classUnderTest.getGreeting());
- }
-}
diff --git a/examples/version.properties b/examples/version.properties
new file mode 100644
index 0000000..e60c0e6
--- /dev/null
+++ b/examples/version.properties
@@ -0,0 +1,8 @@
+#Generated by the Semver Plugin for Gradle
+#Thu May 23 22:24:06 PDT 2019
+version.fullversion=1.0.0
+version.major=1
+version.meta=
+version.minor=0
+version.patch=0
+version.prerelease=
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 5c2d1cf..e708b1c 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 5f1b120..be52383 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index b0d6d0a..4f906e0 100755
--- a/gradlew
+++ b/gradlew
@@ -7,7 +7,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# http://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -82,6 +82,7 @@ esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -125,10 +126,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
@@ -154,19 +156,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $i + 1`
done
case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@@ -175,14 +177,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
-APP_ARGS=$(save "$@")
+APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
-if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
- cd "$(dirname "$0")"
-fi
-
exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
index 9991c50..107acd3 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -5,7 +5,7 @@
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
-@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -51,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -61,28 +64,14 @@ echo location of your Java installation.
goto fail
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/preflightcheck.sh b/preflightcheck.sh
index 27af677..f95e229 100644
--- a/preflightcheck.sh
+++ b/preflightcheck.sh
@@ -22,7 +22,7 @@ gradle_opts="--console=plain --no-build-cache --no-daemon"
maven_args="compile exec:java"
#
-# Version: 1.1.2
+# Version: 1.1.3
#
if [ "$java8" = true ]
@@ -102,6 +102,7 @@ checkDeps() {
read -p "Check Examples depencencies? [y/n] " cont
clear
case $cont in
+ [Nn] ) return ;;
* ) for ex in "${!examples[@]}"
do
runGradle $(echo "${examples[ex]}" | cut -d " " -f 1) dU
@@ -117,7 +118,6 @@ checkDeps() {
esac
fi
done ;;
- [Nn] ) return ;;
esac
}
@@ -191,7 +191,7 @@ showMenu() {
echo " 6. Check Everything"
}
-readOptions(){
+readOptions() {
local choice
read -p "Enter choice [1-6]: " choice
case $choice in
diff --git a/settings.gradle.kts b/settings.gradle.kts
index f9f14c5..e9b895f 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1 +1,17 @@
+plugins {
+ id("com.gradle.enterprise").version("3.3.4")
+}
+
+gradleEnterprise {
+ buildScan {
+ link("GitHub", "https://github.com/ethauvin/semver-gradle/tree/master")
+ if ("true" == System.getenv("CI")) {
+ publishOnFailure()
+ tag("CI")
+ }
+ termsOfServiceUrl = "https://gradle.com/terms-of-service"
+ termsOfServiceAgree = "yes"
+ }
+}
+
rootProject.name = "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..06a8f7b 100644
--- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverConfig.kt
+++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverConfig.kt
@@ -1,7 +1,7 @@
/*
* SemverConfig.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -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
+ // Extension 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/SemverIncrementBuildMetaTask.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementBuildMetaTask.kt
index a48e5d7..7463ba0 100644
--- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementBuildMetaTask.kt
+++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementBuildMetaTask.kt
@@ -1,7 +1,7 @@
/*
* SemverIncrementBuildMetaTask.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -59,7 +59,7 @@ open class SemverIncrementBuildMetaTask @Inject constructor(
version.buildMeta = buildMeta
project.version = version.semver
logger.lifecycle("Version: ${project.version}")
- Utils.saveProperties(config, version)
+ Utils.saveProperties(project.projectDir, config, version)
}
}
}
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 090580f..9e5af44 100644
--- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt
+++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverIncrementTask.kt
@@ -1,7 +1,7 @@
/*
* SemverIncrementTask.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -54,9 +54,10 @@ 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(config, 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 0508fc7..1e137e7 100644
--- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt
+++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SemverPlugin.kt
@@ -1,7 +1,7 @@
/*
* SemverPlugin.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,7 +36,6 @@ import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.util.GradleVersion
-import java.io.File
class SemverPlugin : Plugin {
private val simpleName = SemverPlugin::class.simpleName
@@ -47,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 {
@@ -59,22 +58,27 @@ class SemverPlugin : Plugin {
}
private fun afterEvaluate(project: Project) {
- val propsFile = File(config.properties)
+ val propsFile = Utils.getPropertiesFile(project.projectDir, config.properties)
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)
@@ -89,7 +93,7 @@ class SemverPlugin : Plugin {
if (!hasReqProps || !isFile) {
project.logger.info("[$simpleName] Saving version properties to `$absoluteFile`.")
- Utils.saveProperties(config, version)
+ Utils.saveProperties(project.projectDir, config, version)
}
}
}
diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/SortedProperties.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/SortedProperties.kt
index 388c91d..1a99d15 100644
--- a/src/main/kotlin/net/thauvin/erik/gradle/semver/SortedProperties.kt
+++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/SortedProperties.kt
@@ -1,7 +1,7 @@
/*
* SortedProperties.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt
index e6e1489..e7cd681 100644
--- a/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt
+++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt
@@ -1,7 +1,7 @@
/*
* Utils.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,7 @@ import org.gradle.api.GradleException
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
+import java.io.IOException
import java.util.Properties
/**
@@ -50,11 +51,6 @@ object Utils {
return canRead() && isFile
}
- private fun Int.length() = when (this) {
- 0 -> 1
- else -> Math.log10(Math.abs(toDouble())).toInt() + 1
- }
-
private fun Properties.put(key: String, value: String, isValidCondition: Boolean) {
if (isValidCondition) put(key, value)
}
@@ -66,16 +62,24 @@ object Utils {
return true
}
+ fun getPropertiesFile(projectDir: File, propsFile: String): File {
+ return if (File(propsFile).isAbsolute) {
+ File(propsFile)
+ } else {
+ File(projectDir, propsFile)
+ }
+ }
+
fun loadProperties(file: File): Properties {
var isNew = false
val props = Properties()
file.apply {
- if (!exists()) {
- if (!createNewFile()) {
- throw GradleException("Unable to create: `$absoluteFile`")
- } else {
+ try {
+ if (!exists() && createNewFile()) {
isNew = true
}
+ } catch (e: IOException) {
+ throw GradleException("Unable to create: `$absoluteFile`", e)
}
if (canReadFile()) {
FileInputStream(this).reader().use { reader ->
@@ -127,111 +131,92 @@ object Utils {
fun parseSemVer(input: String?, version: Version): Boolean {
if (input.isNullOrBlank()) return false
- var semver = StringBuilder(input)
- var start = semver.indexOf(version.separator)
- var minor = -1
- var major = -1
- var patch = -1
- var preRelease = ""
- var buildMeta = ""
-
try {
- // major
- if (start != -1) {
- major = Math.abs(semver.substring(0, start).toInt())
- semver.delete(0, start + major.length())
- start = semver.indexOf(version.separator)
- // minor
- if (start != -1) {
- minor = Math.abs(semver.substring(0, start).toInt())
- semver = semver.delete(0, start + minor.length())
- start = semver.indexOf(version.preReleasePrefix)
- // patch
- if (start != -1) {
- patch = Math.abs(semver.substring(0, start).toInt())
- semver.delete(0, start + minor.length())
- start = semver.lastIndexOf(version.buildMetaPrefix)
- // pre-release
- if (start != -1) {
- preRelease = semver.substring(0, start)
- semver.delete(0, preRelease.length)
- start = semver.indexOf(version.buildMetaPrefix)
- // build meta
- if (start != -1) {
- buildMeta = semver.substring(version.preReleasePrefix.length)
- semver.clear()
+ val max = 5
+ val min = 3
+
+ val parts = input.split(
+ Regex("[\\Q${version.separator}${version.preReleasePrefix}${version.buildMetaPrefix}\\E]"),
+ max
+ )
+
+ if (parts.size >= min) {
+ version.major = parts[0].toInt()
+ version.minor = parts[1].toInt()
+ version.patch = parts[2].toInt()
+ version.preRelease = ""
+ version.buildMeta = ""
+
+ if (parts.size > min) {
+ when {
+ parts.size == max -> {
+ version.preRelease = parts[3]
+ version.buildMeta = parts[4]
+ }
+ parts.size == 4 -> {
+ if (input.endsWith(version.buildMetaPrefix + parts[3])) {
+ version.buildMeta = parts[3]
+ } else {
+ version.preRelease = parts[3]
}
- } else {
- // no build meta
- preRelease = semver.toString()
- semver.clear()
}
- } else if (semver.isNotEmpty()) {
- // no pre-release
- start = semver.lastIndexOf(version.buildMetaPrefix)
- // patch & build meta
- if (start != -1) {
- patch = semver.substring(0, start).toInt()
- semver.delete(0, start + minor.length())
- buildMeta = semver.toString()
- } else {
- // patch
- patch = semver.toString().toInt()
- }
- semver.clear()
}
}
+ } else {
+ throw NumberFormatException("Not enough parts.")
}
} catch (e: NumberFormatException) {
throw GradleException("Unable to parse version: \"$input\" (${e.message})", e)
}
- if (semver.isNotEmpty()) throw GradleException("Unable to parse version: \"$input\".")
-
- version.major = major
- version.minor = minor
- version.patch = patch
- version.preRelease = preRelease
- version.buildMeta = buildMeta
-
return true
}
- fun saveProperties(config: SemverConfig, version: Version) {
- val propsFile = File(config.properties)
+ fun saveProperties(projectDir: File, config: SemverConfig, version: Version) {
+ val propsFile = getPropertiesFile(projectDir, config.properties)
SortedProperties().apply {
- propsFile.apply {
- if (canReadFile()) {
- FileInputStream(this).reader().use { load(it) }
- } else {
- createNewFile()
- }
-
- put(config.semverKey, version.semver)
- put(config.majorKey, version.major.toString())
- put(config.minorKey, version.minor.toString())
- put(config.patchKey, version.patch.toString())
- put(config.preReleaseKey, version.preRelease)
- put(config.buildMetaKey, version.buildMeta)
- put(config.semverKey, version.semver)
-
- put(config.buildMetaPrefixKey, version.buildMetaPrefix,
- version.buildMetaPrefix != Version.DEFAULT_BUILDMETA_PREFIX ||
- containsKey(config.buildMetaPrefixKey))
- put(config.preReleasePrefixKey, version.preReleasePrefix,
- version.preReleasePrefix != Version.DEFAULT_PRERELEASE_PREFIX ||
- containsKey(config.preReleasePrefixKey))
- put(config.separatorKey, version.separator,
- version.separator != Version.DEFAULT_SEPARATOR ||
- containsKey(config.separatorKey))
-
- if (canWrite()) {
- FileOutputStream(this).writer().use {
- store(it, "Generated by the Semver Plugin for Gradle")
+ try {
+ propsFile.apply {
+ if (canReadFile()) {
+ FileInputStream(this).reader().use { load(it) }
+ } else {
+ createNewFile()
+ }
+
+ put(config.semverKey, version.semver)
+ put(config.majorKey, version.major.toString())
+ put(config.minorKey, version.minor.toString())
+ put(config.patchKey, version.patch.toString())
+ put(config.preReleaseKey, version.preRelease)
+ put(config.buildMetaKey, version.buildMeta)
+ put(config.semverKey, version.semver)
+
+ put(
+ config.buildMetaPrefixKey, version.buildMetaPrefix,
+ version.buildMetaPrefix != Version.DEFAULT_BUILDMETA_PREFIX ||
+ containsKey(config.buildMetaPrefixKey)
+ )
+ put(
+ config.preReleasePrefixKey, version.preReleasePrefix,
+ version.preReleasePrefix != Version.DEFAULT_PRERELEASE_PREFIX ||
+ containsKey(config.preReleasePrefixKey)
+ )
+ put(
+ config.separatorKey, version.separator,
+ version.separator != Version.DEFAULT_SEPARATOR ||
+ containsKey(config.separatorKey)
+ )
+
+ if (canWrite()) {
+ FileOutputStream(this).writer().use {
+ store(it, "Generated by the Semver Plugin for Gradle")
+ }
+ } else {
+ throw IOException("Can't write.")
}
- } else {
- throw GradleException("Unable to write version to: `$absoluteFile`")
}
+ } catch (e: IOException) {
+ throw GradleException("Unable to write version to: `${propsFile.absoluteFile}`", e)
}
}
}
diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/Version.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/Version.kt
index 7982615..eedbf38 100644
--- a/src/main/kotlin/net/thauvin/erik/gradle/semver/Version.kt
+++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/Version.kt
@@ -1,7 +1,7 @@
/*
* Version.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
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..45105a0 100644
--- a/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverConfigSpec.kt
+++ b/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverConfigSpec.kt
@@ -1,7 +1,7 @@
/*
* SemverConfigSpec.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -40,8 +40,8 @@ import kotlin.test.assertTrue
@Suppress("unused")
object SemverConfigSpec : Spek({
Feature("SemverConfig") {
+ val config = SemverConfig(Version())
Scenario("Testing configs") {
- val config by memoized { SemverConfig() }
val vars = listOf(
config.semverKey,
config.majorKey,
@@ -90,7 +90,8 @@ object SemverConfigSpec : Spek({
config.preReleasePrefixKey,
config.buildMetaKey,
config.buildMetaPrefixKey,
- config.separatorKey)
+ config.separatorKey
+ )
}
Then("all config keys should start with test.xxxx") {
@@ -98,6 +99,26 @@ object SemverConfigSpec : Spek({
assertTrue(k.startsWith("test."), k)
}
}
+
+ When("checking extension properties") {}
+
+ Then("semver should be defaults") {
+ val defaultSemver =
+ "${Version.DEFAULT_MAJOR}${Version.DEFAULT_SEPARATOR}${Version.DEFAULT_MINOR}${Version.DEFAULT_SEPARATOR}${Version.DEFAULT_PATCH}"
+ assertEquals(config.semver, defaultSemver)
+ assertEquals(
+ "${config.major}${config.separator}${config.minor}${config.separator}${config.patch}",
+ defaultSemver
+ )
+ assertEquals(config.preRelease, Version.DEFAULT_EMPTY)
+ assertEquals(config.buildMeta, Version.DEFAULT_EMPTY)
+ assertEquals(config.preReleasePrefix, Version.DEFAULT_PRERELEASE_PREFIX)
+ assertEquals(config.buildMetaPrefix, Version.DEFAULT_BUILDMETA_PREFIX)
+ }
+
+ Then("semver = version") {
+ assertEquals(config.semver, config.version)
+ }
}
}
})
diff --git a/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverVersionSpec.kt b/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverVersionSpec.kt
index f7becf6..3dc5f1e 100644
--- a/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverVersionSpec.kt
+++ b/src/test/kotlin/net/thauvin/erik/gradle/semver/SemverVersionSpec.kt
@@ -1,7 +1,7 @@
/*
* SemverVersionSpec.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt b/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt
index 698ab7f..3ad050f 100644
--- a/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt
+++ b/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt
@@ -1,7 +1,7 @@
/*
* UtilsSpec.kt
*
- * Copyright (c) 2018-2019, Erik C. Thauvin (erik@thauvin.net)
+ * Copyright (c) 2018-2020, Erik C. Thauvin (erik@thauvin.net)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,140 +32,238 @@
package net.thauvin.erik.gradle.semver
import net.thauvin.erik.gradle.semver.Utils.canReadFile
+import org.gradle.api.GradleException
import org.spekframework.spek2.Spek
import org.spekframework.spek2.style.gherkin.Feature
import java.io.File
-import java.util.Properties
+import java.util.*
import kotlin.test.assertEquals
+import kotlin.test.assertFailsWith
import kotlin.test.assertNull
import kotlin.test.assertTrue
@Suppress("unused")
-object UtilsSpec : Spek({
- Feature("Utils") {
- val version = Version()
- val config = SemverConfig()
- val propsFile = File("test.properties")
- lateinit var props: Properties
+object UtilsSpec : Spek(
+ {
+ Feature("Utils") {
+ val version = Version()
+ val config = SemverConfig(version)
+ val propsFile = File("test.properties")
+ val projectDir = File("./")
+ lateinit var props: Properties
- Scenario("Save/Load Properties") {
- When("saving the property") {
- config.properties = propsFile.name
- Utils.saveProperties(config, version)
+ Scenario("Save/Load Properties") {
+ When("saving the property") {
+ config.properties = propsFile.name
+ Utils.saveProperties(projectDir, config, version)
+ }
+
+ Then("properties file should exists and be readable") {
+ assertEquals(propsFile.canReadFile(), propsFile.canRead() && propsFile.isFile)
+ }
+
+ When("loading the properties file") {
+ props = Utils.loadProperties(propsFile)
+ propsFile.delete()
+ }
+
+ Then("version and properties should be the same.") {
+ assertEquals(props.getProperty(config.majorKey), version.major.toString(), "Major")
+ assertEquals(props.getProperty(config.minorKey), version.minor.toString(), "Minor")
+ assertEquals(props.getProperty(config.patchKey), version.patch.toString(), "Patch")
+ assertEquals(props.getProperty(config.preReleaseKey), version.preRelease, "PreRelease")
+ assertNull(props.getProperty(config.preReleasePrefixKey), "PreRelease Prefix")
+ assertEquals(props.getProperty(config.buildMetaKey), version.buildMeta, "Build Meta")
+ assertNull(props.getProperty(config.buildMetaPrefixKey), "Build Meta Prefix")
+ assertNull(props.getProperty(config.separatorKey), "Separator")
+ assertEquals(props.getProperty(config.semverKey), version.semver, "semver")
+ }
}
- Then("properties file should exists and be readable") {
- assertEquals(propsFile.canReadFile(), propsFile.canRead() && propsFile.isFile)
- }
+ Scenario("System Properties") {
+ lateinit var sysProps: Array>
- When("loading the properties file") {
- props = Utils.loadProperties(propsFile)
- propsFile.delete()
- }
+ Given("new system properties") {
+ sysProps = arrayOf(
+ Pair(config.majorKey, "2"),
+ Pair(config.minorKey, "1"),
+ Pair(config.patchKey, "1"),
+ Pair(config.preReleaseKey, "beta"),
+ Pair(config.buildMetaKey, "007")
+ )
+ }
- Then("version and properties should be the same.") {
- assertEquals(props.getProperty(config.majorKey), version.major.toString(), "Major")
- assertEquals(props.getProperty(config.minorKey), version.minor.toString(), "Minor")
- assertEquals(props.getProperty(config.patchKey), version.patch.toString(), "Patch")
- assertEquals(props.getProperty(config.preReleaseKey), version.preRelease, "PreRelease")
- assertNull(props.getProperty(config.preReleasePrefixKey), "PreRelease Prefix")
- assertEquals(props.getProperty(config.buildMetaKey), version.buildMeta, "Build Meta")
- assertNull(props.getProperty(config.buildMetaPrefixKey), "Build Meta Prefix")
- assertNull(props.getProperty(config.separatorKey), "Separator")
- assertEquals(props.getProperty(config.semverKey), version.semver, "semver")
- }
- }
+ Then("none should already exists") {
+ assertTrue(
+ Utils.isNotSystemProperty(
+ setOf(
+ config.majorKey,
+ config.minorKey,
+ config.patchKey,
+ config.preReleaseKey,
+ config.buildMetaKey
+ )
+ )
+ )
+ }
- Scenario("System Properties") {
- lateinit var sysProps: Array>
-
- Given("new system properties") {
- sysProps = arrayOf(
- Pair(config.majorKey, "2"),
- Pair(config.minorKey, "1"),
- Pair(config.patchKey, "1"),
- Pair(config.preReleaseKey, "beta"),
- Pair(config.buildMetaKey, "007"))
- }
-
- Then("none should already exists") {
- assertTrue(Utils.isNotSystemProperty(setOf(config.majorKey, config.minorKey, config.patchKey, config.preReleaseKey,
- config.buildMetaKey)))
- }
-
- Then("version should match system properties") {
- sysProps.forEach {
- System.getProperties().setProperty(it.first, it.second)
- if (it.first == config.majorKey || it.first == config.minorKey || it.first == config.patchKey) {
- assertEquals(Utils.loadIntProperty(props, it.first, -1), it.second.toInt())
- } else {
- assertEquals(Utils.loadProperty(props, it.first, ""), it.second)
+ Then("version should match system properties") {
+ sysProps.forEach {
+ System.getProperties().setProperty(it.first, it.second)
+ if (it.first == config.majorKey || it.first == config.minorKey || it.first == config.patchKey) {
+ assertEquals(Utils.loadIntProperty(props, it.first, -1), it.second.toInt())
+ } else {
+ assertEquals(Utils.loadProperty(props, it.first, ""), it.second)
+ }
}
}
- }
- When("loading version") {
- Utils.loadVersion(config, version, props)
- }
-
- Then("version should be identical") {
- assertEquals(version.semver, "2.1.1-beta+007")
- }
-
- When("saving properties") {
- Utils.saveProperties(config, version)
- }
-
- lateinit var newProps: Properties
-
- And("loading properties file") {
- newProps = Utils.loadProperties(propsFile)
- }
-
- Then("new properties should validate") {
- sysProps.forEach {
- assertEquals(newProps.getProperty(it.first), it.second, it.second)
+ When("loading version") {
+ Utils.loadVersion(config, version, props)
}
- propsFile.delete()
- }
- When("setting the version as system property") {
- System.getProperties().setProperty(config.semverKey, "3.2.2")
- }
+ Then("version should be identical") {
+ assertEquals(version.semver, "2.1.1-beta+007")
+ }
- And("loading the properties") {
- Utils.loadVersion(config, version, props)
- }
+ When("saving properties") {
+ Utils.saveProperties(projectDir, config, version)
+ }
- Then("versions should match") {
- assertEquals(version.semver, System.getProperty(config.semverKey))
- }
- }
+ lateinit var newProps: Properties
- Scenario("Testing Version Parsing") {
- When("validating version parsing") {
- listOf("1.0.0", "2.1.0-beta", "3.2.1-beta+007", "4.3.2+007").forEach {
- assertTrue(Utils.parseSemVer(it, version), "parsing semver: $it")
- assertEquals(it, version.semver, it)
+ And("loading properties file") {
+ newProps = Utils.loadProperties(propsFile)
+ }
+
+ Then("new properties should validate") {
+ sysProps.forEach {
+ assertEquals(newProps.getProperty(it.first), it.second, it.second)
+ }
+ propsFile.delete()
+ }
+
+ When("setting the version as system property") {
+ System.getProperties().setProperty(config.semverKey, "3.2.2")
+ }
+
+ And("loading the properties") {
+ Utils.loadVersion(config, version, props)
+ }
+
+ Then("versions should match") {
+ assertEquals(version.semver, System.getProperty(config.semverKey))
}
}
- Given("new prefixes") {
- version.preReleasePrefix = "."
- version.buildMetaPrefix = "."
- }
+ Scenario("Version Parsing") {
+ When("validating version parsing") {}
- Then("validating prefixes parsing") {
- listOf("2.1.0.beta.1", "2.1.1.1", "3.2.1.beta.1.007").forEach {
- assertTrue(Utils.parseSemVer(it, version), "parsing semver: $it")
- assertEquals(it, version.semver, it)
+ Then("versions should parse") {
+ listOf(
+ "1.0.0",
+ "2.1.0-beta",
+ "3.2.1-beta+007",
+ "4.3.2+007",
+ "11.11.1",
+ "111.11.11-beta",
+ "1111.111.11-beta+001.12"
+ ).forEach {
+ assertTrue(Utils.parseSemVer(it, version), "parsing semver: $it")
+ assertEquals(it, version.semver, it)
+ }
+ }
+
+ Then("should throw exceptions") {
+ assertFailsWith("2.1.1a") {
+ Utils.parseSemVer("2.1.1a", version)
+ }
+ assertFailsWith("2a.1.1") {
+ Utils.parseSemVer("2a.1.1", version)
+ }
+ assertFailsWith("2.1a.1") {
+ Utils.parseSemVer("2.1a.1", version)
+ }
+ assertFailsWith("2.1") {
+ Utils.parseSemVer("2.1", version)
+ }
+ }
+
+ Given("new prefixes") {
+ version.preReleasePrefix = "."
+ version.buildMetaPrefix = "."
+ }
+
+ Then("prefixes should parse") {
+ listOf("2.1.0.beta.1", "2.1.1.1", "3.2.1.beta.1.007").forEach {
+ assertTrue(Utils.parseSemVer(it, version), "parsing semver: $it")
+ assertEquals(it, version.semver, it)
+ }
+ }
+
+ Then("last pre-release and meta should match") {
+ assertEquals(version.preRelease, "beta")
+ assertEquals(version.buildMeta, "1.007")
}
}
- Then("verifying pre-release and meta") {
- assertEquals(version.preRelease, "beta.1")
- assertEquals(version.buildMeta, "007")
+ Scenario("Load locked properties") {
+ lateinit var locked: File
+
+ Given("the locked location") {
+ locked = File("locked")
+ }
+
+ Then("loading locked properties") {
+ assertFailsWith {
+ Utils.loadProperties(File(locked, propsFile.name))
+ }
+ locked.delete()
+ }
+ }
+
+ Scenario("Save to locked properties") {
+ lateinit var propsLocked: File
+ Given("the locked properties") {
+ propsLocked = File(System.getProperty("user.home") + File.separator + "locked.properties")
+ propsLocked.createNewFile()
+ propsLocked.setReadOnly()
+ config.properties = propsLocked.name
+ }
+
+ Then("saving the locked properties file") {
+ assertFailsWith {
+ Utils.saveProperties(propsLocked.parentFile, config, version)
+ }
+ propsLocked.delete()
+ }
+ }
+
+ Scenario("Save/Load Properties in foo") {
+ lateinit var fooDir: File
+ lateinit var fooProps: File
+ When("saving the foo property") {
+ fooDir = File("foo")
+ fooDir.mkdir()
+ fooProps = File(fooDir, propsFile.name)
+ config.properties = fooProps.absolutePath
+ Utils.saveProperties(projectDir, config, version)
+ }
+
+ Then("foo properties file should exists and be readable") {
+ assertEquals(fooProps.canReadFile(), fooProps.canRead() && fooProps.isFile)
+ }
+
+ When("loading the foo properties file") {
+ props = Utils.loadProperties(fooProps)
+ fooProps.delete()
+ fooDir.delete()
+ }
+
+ Then("version in foo properties should be the same") {
+ assertEquals(props.getProperty(config.semverKey), version.semver)
+ }
}
}
}
-})
+)