semver-git icon indicating copy to clipboard operation
semver-git copied to clipboard

nextVersion and snapshotSuffix ignored when using new plugin syntax

Open colindean opened this issue 9 years ago • 12 comments

This is likely user error, as I'm still pretty new to Gradle.

My incredibly pared down build.gradle, untested in this context:

plugins {
  id 'scala'
  id "com.cinnober.gradle.semver-git" version "2.2.2" // semantic versioning from git
}
apply plugin: 'scala'
ext {
  nextVersion = "patch"
  snapshotSuffix = "-dev-<count>-g<sha>"
}
apply plugin: "com.cinnober.gradle.semver-git"
task printVersion << {
  println project.ext.properties.containsKey("nextVersion")
  println project.ext.properties.get("nextVersion")
  println project.ext.nextVersion
  println project.ext.snapshotSuffix
  println project.version
}

I have a tag I created with git tag -a 99.9.9 -m "Test tag for testing". I have one commit more on top of it.

I expect the output of ./gradlew printVersion to contain 99.9.10-dev-1-gd34db33f or something similar. It instead prints something like this:

:printVersion
true
patch
patch
-dev-<count>-g<sha>
99.10.0-SNAPSHOT

I pretty certain that I have ext in the right place, but it appears not to be effective. What do I need to change?

I'm on Gradle 2.10.

colindean avatar Apr 08 '16 22:04 colindean

Strange. You usage is more or less exactly how we use semver-git internally. You could try to apply semver-git with:

allprojects {
    ext.nextVersion = 'patch'
    ext.snapshotSuffix = "-dev-<count>-g<sha>"
    apply plugin: "com.cinnober.gradle.semver-git"
}

since that is how it is generally applied here, though it seems to me that your build file should work.

mojocinn avatar Apr 11 '16 06:04 mojocinn

Unfortunately, that still doesn't work. I'm going to try a barebones project and see what I can make happen. It's entirely possible that something else in our build.gradle is acting up.

colindean avatar Apr 11 '16 16:04 colindean

I'm able to reproduce it with the barebones config.

mkdir gradlewtf && cd gradlewtf
atom build.gradle

Put this in build.gradle:

plugins {
  id 'scala'
  id "com.cinnober.gradle.semver-git" version "2.2.2" // semantic versioning from git
}
apply plugin: 'scala'
ext {
  nextVersion = "patch"
  snapshotSuffix = "-dev-<count>-g<sha>"
}
apply plugin: "com.cinnober.gradle.semver-git"

Some exploration to try:

gw showVersion # behavior undefined, since we're not yet in a git repo
gw --version
git init .
git add build.gradle
git commit -m "Initial commit"
git tag -a 1.0.0 -m "Initial"
git describe
gw showVersion # 1.0.0 expected
echo ".gradle" >> .gitignore
git add .gitignore
git commit -av -m "Adds gitignore"
gw showVersion # 1.0.1-dev-1-gd34db33f or other hash expected

My output:

[13:22:25 cdean@lusankya /tmp ]
$ mkdir gradlewtf && cd gradlewtf
[13:22:26 cdean@lusankya /tmp/gradlewtf ]
$ atom build.gradle
[13:22:28 cdean@lusankya /tmp/gradlewtf ]
$ gw showVersion
No gradlew set up for this project; consider setting one up:
http://gradle.org/docs/current/userguide/gradle_wrapper.html

Using gradle at '/usr/local/bin/gradle' to run buildfile '/tmp/gradlewtf/build.gradle':

:showVersion
Version: 0.1.0-SNAPSHOT

BUILD SUCCESSFUL

Total time: 0.599 secs
[13:22:46 cdean@lusankya /tmp/gradlewtf ]
$ gw --version
No gradlew set up for this project; consider setting one up:
http://gradle.org/docs/current/userguide/gradle_wrapper.html

Using gradle at '/usr/local/bin/gradle' to run buildfile '/tmp/gradlewtf/build.gradle':


------------------------------------------------------------
Gradle 2.11
------------------------------------------------------------

Build time:   2016-02-08 07:59:16 UTC
Build number: none
Revision:     584db1c7c90bdd1de1d1c4c51271c665bfcba978

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_66 (Oracle Corporation 25.66-b17)
OS:           Mac OS X 10.10.5 x86_64

[13:22:55 cdean@lusankya /tmp/gradlewtf ]
$ git init .
Initialized empty Git repository in /private/tmp/gradlewtf/.git/
[13:23:03 cdean@lusankya /tmp/gradlewtf ]
± (master #%) $ git add build.gradle
[13:23:04 cdean@lusankya /tmp/gradlewtf ]
± (master +) $ git commit -m "Initial commit"
[master (root-commit) 584d2b1] Initial commit
 1 file changed, 10 insertions(+)
 create mode 100644 build.gradle
[13:23:04 cdean@lusankya /tmp/gradlewtf ]
± (master) $ git tag -a 1.0.0 -m "Initial"
[13:23:05 cdean@lusankya /tmp/gradlewtf ]
± (master) $ git describe
1.0.0
[13:23:13 cdean@lusankya /tmp/gradlewtf ]
± (master) $ gw showVersion
No gradlew set up for this project; consider setting one up:
http://gradle.org/docs/current/userguide/gradle_wrapper.html

Using gradle at '/usr/local/bin/gradle' to run buildfile '/tmp/gradlewtf/build.gradle':

:showVersion
Version: 1.0.0

BUILD SUCCESSFUL

Total time: 0.649 secs
[13:23:26 cdean@lusankya /tmp/gradlewtf ]
± (master) $ echo ".gradle" >> .gitignore
[13:23:33 cdean@lusankya /tmp/gradlewtf ]
± (master %) $ git add .gitignore
[13:23:33 cdean@lusankya /tmp/gradlewtf ]
± (master +) $ git commit -av -m "Adds gitignore"
[master 41da2c7] Adds gitignore
 1 file changed, 1 insertion(+)
 create mode 100644 .gitignore
[13:23:34 cdean@lusankya /tmp/gradlewtf ]
± (master) $ git describe
1.0.0-1-g41da2c7
[13:23:38 cdean@lusankya /tmp/gradlewtf ]
± (master) $ gw showVersion
No gradlew set up for this project; consider setting one up:
http://gradle.org/docs/current/userguide/gradle_wrapper.html

Using gradle at '/usr/local/bin/gradle' to run buildfile '/tmp/gradlewtf/build.gradle':

:showVersion
Version: 1.1.0-SNAPSHOT

BUILD SUCCESSFUL

Total time: 0.562 secs
[13:23:45 cdean@lusankya /tmp/gradlewtf ]
± (master) $

As you can see, at the end, it's defaulting to bumping minor and -SNAPSHOT.

I've also tried switching to the java plugin in case the scala plugin does something weird. No difference.

colindean avatar Apr 11 '16 17:04 colindean

Hi Colin,

The project.version is assigned by semver-git when the plugin is applied. This means that the related properties must to be set before that step.

/Mikael

mbrannstrom avatar Apr 11 '16 17:04 mbrannstrom

I reversed the order so that the application of semver-git happens before anything else:

plugins {
  id 'java'
  id "com.cinnober.gradle.semver-git" version "2.2.2" // semantic versioning from git
}
ext {
  nextVersion = "patch"
  snapshotSuffix = "-dev-<count>-g<sha>"
}
apply plugin: "com.cinnober.gradle.semver-git"
apply plugin: 'java'

My configuration is still having no effect.

Thrashing a bit, I tried adding a buildscript block, but apparently that's not a valid approach since buildscript cannot contain a plugins block.

colindean avatar Apr 11 '16 18:04 colindean

I'm not sure what else I can change. @mbrannstrom @mojocinn, what version of Gradle are you using?

colindean avatar Apr 11 '16 19:04 colindean

OK, some progress:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "com.cinnober.gradle:semver-git:2.2.2"
  }
}

plugins {
  id 'java'
//  id "com.cinnober.gradle.semver-git" version "2.2.2" // semantic versioning from git
}

ext.nextVersion = "patch"
ext.snapshotSuffix = "-dev-<count>-g<sha>"

apply plugin: "com.cinnober.gradle.semver-git"
apply plugin: 'java'

This works, and so does this:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'com.cinnober.gradle', name: 'semver-git', version: '2.2.0'
    }
}

plugins {
  id 'java'
//  id "com.cinnober.gradle.semver-git" version "2.2.2" // semantic versioning from git
}

ext.nextVersion = "patch"
ext.snapshotSuffix = "-dev-<count>-g<sha>"

apply plugin: "com.cinnober.gradle.semver-git"
apply plugin: 'java'
[15:10:56 cdean@lusankya /tmp/gradlewtf ]
± (master *) $ gw showVersion
No gradlew set up for this project; consider setting one up:
http://gradle.org/docs/current/userguide/gradle_wrapper.html

Using gradle at '/usr/local/bin/gradle' to run buildfile '/tmp/gradlewtf/build.gradle':

:showVersion
Version: 1.0.1--dev-1-g41da2c7

BUILD SUCCESSFUL

Total time: 0.683 secs

I can't remember exactly, but I think I found semver-git through the Gradle plugins page for semver-git and used the newer syntax. It works when I use the older syntax provided there, or the syntax (with an error fixed, submitting that momentarily) version of what's on this repo's README. I'm thinking that Gradle's newer plugins infrastructure doesn't load the plugin at the right time.

colindean avatar Apr 11 '16 19:04 colindean

Probably the take-away from this is a modification to the README which states NOT to use the newer plugins way of including it.

colindean avatar Apr 11 '16 20:04 colindean

The newer way plugins { id .. } has other problems as well. For example it does not work inside a submodules block, not for any gradle plugin.

It is an experimental feature, and I suggest always using the old buildscript { repositories .. } with apply plugin: ... syntax, because first it will be on the top level, then someone will move it to e.g. a submodules block, and then it won't work.

mbrannstrom avatar Apr 12 '16 05:04 mbrannstrom

Thanks for the insight.

On Apr 12, 2016, 01:48, at 01:48, "Mikael Brännström" [email protected] wrote:

The newer way plugins { id .. } has other problems as well. For example it does not work inside a submodules block, not for any gradle plugin.

It is an experimental feature, and I suggest always using the old buildscript { repositories .. } with apply plugin: ... syntax, because first it will be on the top level, then someone will move it to e.g. a submodules block, and then it won't work.


You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub: https://github.com/cinnober/semver-git/issues/3#issuecomment-208717989

colindean avatar Apr 12 '16 12:04 colindean

I just got bit by this again on a new project. Is there any way to detect that it's running, or perhaps output some debug logging to show what it's doing? I probably burned 30 minutes trying to figure out what was incorrectly configured because someone else did it this time.

colindean avatar May 10 '17 20:05 colindean

@colindean if you move the ext {} into your buildscript {} this should work

If you want a simple debug, try

task version doLast {task -> println "This is $task.project.name $task.project.version" }

deepy avatar May 22 '18 08:05 deepy