Code Monkey home page Code Monkey logo

semver-gradle-plugin's Introduction

Kotlin version MavenCentral Snapshot

Build Coverage Quality Tech debt

Semver Gradle Plugin

Set projects versions based on git tags and following semantic versioning.

Inspired on Reckon but centered on supporting multi-project versions and combine normal stages with snapshot stage.

Apply the plugin

In order to support configuration cache or project isolation the plugin must be applied to each project or using the settings plugin. Avoid using allprojects or subprojects.

// build.gradle.kts
plugins {
    id("com.javiersc.semver") version "$version"
}

It is possible to apply the plugin to all projects if the plugin is applied in the settings.gradle or settings.gradle.kts file:

// settings.gradle.kts
plugins {
    id("com.javiersc.semver") version "$version"
}

Examples

Check documented examples or test examples to understand easily how it works.

Usage

There are three project properties which the plugin uses to detect automatically the current version based on the last tag in the current branch: semver.stage, semver.scope and semver.tagPrefix.

They can be set via CLI, for example:

./gradlew "-Psemver.stage=final" "-Psemver.scope=major" "-Psemver.tagPrefix=v"
  • semver.stage indicates the stage to be changed, for example, alpha
  • semver.scope indicates the scope to be changed, for example, patch
  • semver.tagPrefix is used to know which version is going to be changed based on the tag prefix, for example v. If the projects have different tag prefix, it is necessary to disambiguate which version is going to be bumped.

Default values:

default value Optional
stage auto Yes*
scope auto Yes*
tagPrefix auto Yes*

Depends on the use case*

Plugin extension

semver {
    isEnabled.set(true)
    tagPrefix.set("")
    commitsMaxCount.set(-1)
    gitDir.set(rootDir.resolve(".git"))
}

tasks.register("printLastCommitHash") {
    doLast {
        println(semver.commits.get().last().hash)
    }
}
  • Default values:
default value
isEnabled true
tagPrefix , empty string
commitsMaxCount -1
gitDir rootDir.resolve(".git")
version calculated version based on the last git tag and other inputs

tagPrefix is used to asociate a project version with a tag prefix, and it allows having different versions in multi-project builds.

An example can be setting the extension prefix to v in a specific project A and the last tags in the last commit are: v1.0.0 and w3.0.1. The project A version is v1.0.0. If a project B sets the prefix to w, the project B version is w3.0.1.

In order to improve the performance on large repositories with a lot of commits, it is possible to limit the number of commits to be checked via commitsMaxCount. By default, it is -1 which means that all commits are checked.

semver contains commits: Provider<List<Commit>> to get the commits in the current branch and the associated tags to each one which can be useful in some use cases.

semver.tagPrefix project property via CLI or gradle.properties file

"-Psemver.tagPrefix=v"
semver.tagPrefix=v

If it is necessary to bump the project version, for example to v3.0.2 from v3.0.1, but at same time there are more project with different prefixes, the plugin needs to know which tag prefix is going to be bumped, so semver.tagPrefix property is the solution to that problem.

To get it working:

./gradlew "-Psemver.scope=patch" "-Psemver.tagPrefix=v"

It is possible to set the project tag prefix via Gradle property if some third-party plugin requires the version in configuration phase. This property is:

semver.project.tagPrefix=v

As it can be useful to change the number of commits to be checked, it is possible to set it via properties too:

semver.commitsMaxCount=100

Or in the CLI:

./gradlew "-Psemver.commitsMaxCount=100"
Map the version

The semver extension has a mapVersion function which allows to map the version easily:

// if last tag is v3.0.1, and the Kotlin version is 1.9.0,
// the version will be `v3.0.1+1.9.0`
semver {
    tagPrefix.set("v")
    mapVersion { gradleVersion: GradleVersion ->
        val kotlinVersion: String = getKotlinPluginVersion()
        "${gradleVersion.copy(metadata = kotlinVersion)}"
    }
}
Override the version

If it possible to force an override of the version:

semver {
    version.set("1.0.0")
}
Additional notes
Empty tag prefix for all projects

If all projects are not using a tag prefix, or in other words, the tag prefix is empty, both the property in the extension and the project property via CLI or gradle.properties file are irrelevant.

Same tag prefix for all projects

If all projects share a tag prefix, it is easier to set it in the root project gradle.properties file instead of passing it constantly via CLI.

Version types

The whole format can be:

<major>.<minor>.<patch>[-<stage>.<num>][.<commits number>+<hash>][+<metadata>]

Final

  • Format: <major>.<minor>.<patch>
  • Example: 1.0.0

Significant

  • Format: <major>.<minor>.<patch>[-<stage>.<num>]
  • Example: 1.0.0-alpha.1

Insignificant

  • Format:

    • Clean repository: <major>.<minor>.<patch>[-<stage>.<num>][.<commits number>+<hash>]
    • Dirty repository: <major>.<minor>.<patch>[-<stage>.<num>][.<commits number>+<DIRTY>]
  • Examples:

    • 1.0.0.4+26f0484
    • 1.0.0.4+DIRTY

It is used the DIRTY suffix instead of a timestamp in order to avoid issues with any Gradle cache.

Snapshot

  • Format: <major>.<minor>.<patch>-SNAPSHOT
  • Example: 1.0.0-SNAPSHOT

Stages

To change between stages, use the Gradle project property -Psemver.stage=<stage>

There are reserved stages that can be used to create certain versions:

  • final: It creates a version without a suffix stage, for example, 1.0.1.
  • auto: It calculates automatically the next stage based on the previous stage.
  • snapshot: It generate the next snapshot version, for example, 1.0.1-SNAPSHOT.
# gradle.properties
semver.tagPrefix=v
# Last tag = v1.0.0-alpha.1
./gradlew "-Psemver.stage=alpha" # v1.0.0-alpha.2
./gradlew "-Psemver.stage=beta" # v1.0.0-beta.1
./gradlew "-Psemver.stage=rc" # v1.0.0-rc.1
./gradlew "-Psemver.stage=snapshot" # v1.0.1-SNAPSHOT (uses the next patch version)
./gradlew "-Psemver.stage=final" # v1.0.0
./gradlew "-Psemver.stage=auto" # v1.0.0-alpha.2

# Last tag = v1.0.0
./gradlew "-Psemver.stage=alpha" # v1.0.1-alpha.1
./gradlew "-Psemver.stage=beta" # v1.0.1-beta.1
./gradlew "-Psemver.stage=rc" # v1.0.1-rc.1
./gradlew "-Psemver.stage=snapshot" # v1.0.1-SNAPSHOT (still uses the same patch version)
./gradlew "-Psemver.stage=final" # v1.0.1
./gradlew "-Psemver.stage=auto" # v1.0.1

The stage order is based on the Gradle official rules, some samples are:

  • If both are non-numeric, the parts are compared alphabetically, in a case-sensitive manner: 1.0.0-ALPHA.1 < 1.0.0-BETA.1 < 1.0.0-alpha.1 < 1.0.0-beta.1.
  • dev is considered lower than any non-numeric part: 1.0.0-dev.1 < 1.0.0-ALPHA.1 < 1.0.0-alpha.1 < 1.0.0-rc.1.
  • The strings rc, snapshot, final, ga, release and sp are considered higher than any other string part (sorted in this order): 1.0.0-zeta.1 < 1.0.0-rc.1 < 1.0.0-snapshot < 1.0.0-ga.1 < 1.0.0-release.1 < 1.0.0-sp.1 < 1.0.0.
  • These particular values are NOT case-sensitive, as opposed to regular string parts and do not depend on the separator used around them: 1.0.0-RC.1 == 1.0.0-rc.1.

Gradle's docs can be found here

Scopes

To change between scopes, use the Gradle property -Psemver.scope=<scope>

The scope has to be one of major, minor, patch or auto.

# gradle.properties
semver.tagPrefix=v
# Last tag = v1.0.0-alpha.1
./gradlew "-Psemver.scope=major" # v2.0.0
./gradlew "-Psemver.scope=minor" # v1.1.0
./gradlew "-Psemver.scope=patch" # v1.0.1
./gradlew "-Psemver.scope=auto" # v1.0.0-alpha.2 (uses the next num version)

# Last tag = v1.0.0
./gradlew "-Psemver.scope=major" # v2.0.0
./gradlew "-Psemver.scope=minor" # v1.1.0
./gradlew "-Psemver.scope=patch" # v1.0.1
./gradlew "-Psemver.scope=auto" # v1.0.1 (uses the next patch version)

Combine stages and scopes

# gradle.properties
semver.tagPrefix=v
# Last tag = v1.0.0-alpha.1
./gradlew "-Psemver.stage=alpha" "-Psemver.scope=major" # v2.0.0-alpha.1
./gradlew "-Psemver.stage=beta" "-Psemver.scope=major" # v2.0.0-beta.1
./gradlew "-Psemver.stage=rc" "-Psemver.scope=major" # v2.0.0-rc.1
./gradlew "-Psemver.stage=final" "-Psemver.scope=major" # v2.0.0
./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=major" # v2.0.0-SNAPSHOT
./gradlew "-Psemver.stage=auto" "-Psemver.scope=auto" # v1.0.0-alpha.2

# Last tag = v1.0.0-alpha.1
./gradlew "-Psemver.stage=alpha" "-Psemver.scope=minor" # v1.1.0-alpha.1
./gradlew "-Psemver.stage=beta" "-Psemver.scope=minor" # v1.1.0-beta.1
./gradlew "-Psemver.stage=rc" "-Psemver.scope=minor" # v1.1.0-rc.1
./gradlew "-Psemver.stage=final" "-Psemver.scope=minor" # v1.1.0
./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=minor" # v1.1.0-SNAPSHOT

# Last tag = v1.0.0-alpha.1
./gradlew "-Psemver.stage=alpha" "-Psemver.scope=patch" # v1.0.1-alpha.1
./gradlew "-Psemver.stage=beta" "-Psemver.scope=patch" # v1.0.1-beta.1
./gradlew "-Psemver.stage=rc" "-Psemver.scope=patch" # v1.0.1-rc.1
./gradlew "-Psemver.stage=final" "-Psemver.scope=patch" # v1.0.1
./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=patch" # v1.0.1-SNAPSHOT

# Last tag = v1.0.0-alpha.1
./gradlew "-Psemver.stage=alpha" "-Psemver.scope=auto" # v1.0.0-alpha.2
./gradlew "-Psemver.stage=beta" "-Psemver.scope=auto" # v1.0.1-beta.1
./gradlew "-Psemver.stage=rc" "-Psemver.scope=auto" # v1.0.1-rc.1
./gradlew "-Psemver.stage=final" "-Psemver.scope=auto" # v1.0.1
./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=auto" # v1.0.1-SNAPSHOT

# Last tag = v1.0.0
./gradlew "-Psemver.stage=alpha" "-Psemver.scope=major" # v2.0.0-alpha.1
./gradlew "-Psemver.stage=beta" "-Psemver.scope=major" # v2.0.0-beta.1
./gradlew "-Psemver.stage=rc" "-Psemver.scope=major" # v2.0.0-rc.1
./gradlew "-Psemver.stage=final" "-Psemver.scope=major" # v2.0.0
./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=major" # v2.0.0-SNAPSHOT
./gradlew "-Psemver.stage=auto" "-Psemver.scope=auto" # v1.0.1

# Last tag = v1.0.0
./gradlew "-Psemver.stage=alpha" "-Psemver.scope=minor" # v1.1.0-alpha.1
./gradlew "-Psemver.stage=beta" "-Psemver.scope=minor" # v1.1.0-beta.1
./gradlew "-Psemver.stage=rc" "-Psemver.scope=minor" # v1.1.0-rc.1
./gradlew "-Psemver.stage=final" "-Psemver.scope=minor" # v1.1.0
./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=minor" # v1.1.0-SNAPSHOT

# Last tag = v1.0.0
./gradlew "-Psemver.stage=alpha" "-Psemver.scope=patch" # v1.0.1-alpha.1
./gradlew "-Psemver.stage=beta" "-Psemver.scope=patch" # v1.0.1-beta.1
./gradlew "-Psemver.stage=rc" "-Psemver.scope=patch" # v1.0.1-rc.1
./gradlew "-Psemver.stage=final" "-Psemver.scope=patch" # v1.0.1
./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=patch" # v1.0.1-SNAPSHOT

# Last tag = v1.0.0
./gradlew "-Psemver.stage=alpha" "-Psemver.scope=auto" # v1.0.1-alpha.1
./gradlew "-Psemver.stage=beta" "-Psemver.scope=auto" # v1.0.1-beta.1
./gradlew "-Psemver.stage=rc" "-Psemver.scope=auto" # v1.0.1-rc.1
./gradlew "-Psemver.stage=final" "-Psemver.scope=auto" # v1.0.1
./gradlew "-Psemver.stage=snapshot" "-Psemver.scope=auto" # v1.0.1-SNAPSHOT

Tasks

There are three tasks:

  • printSemver: Prints the tag in CLI and create a file in build/semver/version.txt which has two lines; the version without the tag and the version including the tag.
  • createSemverTag. Creates a git tag.
  • pushSemverTag. Creates and pushes a git tag to the remote.

You can combine them with any semver project properties to ensure the correct tag version is printed, created or pushed.

pushSemverTag can use a specific remote if the Gradle property semver.remote is set. If it is not set, origin is used if it exists, if not, the first remote by name is used. If there is no remote, the task fails.

Samples:

./gradlew createSemverTag

./gradlew createSemverTag "-Psemver.stage=alpha"

./gradlew pushSemverTag

./gradlew pushSemverTag "-Psemver.stage=alpha"

Set versions without DIRTY suffix on dirty repositories

By default, if the repository status is not clean, the version shows the suffix DIRTY but that can be avoided by setting the Gradle property semver.checkClean.

For example, if the last tag is 1.0.0, there are 23 commits between that tag and the last commit and the repo is not clean:

./gradlew "-Psemver.stage=final" "-Psemver.scope=patch"

semver: 1.0.0.23+DIRTY
./gradlew "-Psemver.stage=final" "-Psemver.scope=patch" "-Psemver.checkClean=false"
semver: 1.0.1
./gradlew "-Psemver.checkClean=false"
semver: 1.0.0.23+1a2cd5b2 # 1a2cd5b2 is the last commit hash

License

Copyright 2024 Javier Segovia Cรณrdoba

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   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,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

semver-gradle-plugin's People

Contributors

actions-user avatar javiersegoviacordoba avatar renovate-bot avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

semver-gradle-plugin's Issues

Unable to get the correct tag prefix in configuration phase

It is a bad practice to use eager Gradle APIs, but due to some third-party plugins, sometimes it is necessary to get the tag prefix in the configuration phase.

The only way to fix this is using a Gradle Property, for example semver.project.tagPrefix, instead of getting the prefix from the plugin extension semver.tagPrefix.

Fix docs

Docs say nothing about -dirty and the motivations behind it.

Apply from kotlin Precompiled script plugin fails

I have a pre-compiled Gradle script plugin maintained in build-logic project, which is getting applied to all root and sub projects.

// publishing.gradle.kts
package plugins

plugins {
    `maven-publish`
    signing
    id("com.javiersc.semver.gradle.plugin")
}
semver { tagPrefix = "v" }

The thing is, when com.javiersc.semver.gradle.plugin is getting added, the following is error is thrown

//in root and sub projects 
plugins {
  `java`
  id("plugins.publishing")
}

ERROR

> Task :build-logic:common-plugins:generatePrecompiledScriptPluginAccessors FAILED
semver plugin can't work if there are no commits

FAILURE: Build failed with an exception.

* Where:
Precompiled script plugin '~/code/xxxx/gradle/build-logic/common-plugins/src/main/kotlin/plugins/publishing.gradle.kts' line: 1

* What went wrong:
An exception occurred applying plugin request [id: 'com.javiersc.semver.gradle.plugin']
> Failed to apply plugin 'com.javiersc.semver.gradle.plugin'.
> Failed to create service 'gitTagBuildService'.
> Could not create an instance of type com.javiersc.semver.gradle.plugin.services.GitBuildService.
> Cannot invoke "org.eclipse.jgit.lib.AnyObjectId.hashCode()" because "id" is null

One submodule doesn't get the right version

Noticed something strange in a multi-module project. One of the submodule, doesn't read the version correctly. And it's always fireplace-app

$ ./gradlew printSemver -Psemver.stage=snapshot
Type-safe project accessors is an incubating feature.

> Task :fireplace-swt-experiment-app:printSemver
semver for fireplace-swt-experiment-app: v0.0.1-SNAPSHOT

> Task :fireplace-swing:printSemver
semver for fireplace-swing: v0.0.1-SNAPSHOT

> Task :fireplace-swt-awt-bridge:printSemver
semver for fireplace-swt-awt-bridge: v0.0.1-SNAPSHOT

> Task :fireplace-app:printSemver
semver for fireplace-app: v0.1.0.0+62be628

> Task :printSemver
semver for fireplace: v0.0.1-SNAPSHOT

> Task :fireplace-swing-animation:printSemver
semver for fireplace-swing-animation: v0.0.1-SNAPSHOT

So basically the code is like that

The commit is here: bric3/fireplace@a6e24fc

build.gradle.kts gradle.properties
allprojects {
    group = "io.github.bric3.fireplace"

    apply(plugin = "com.javiersc.semver.gradle.plugin")
    semver {
        tagPrefix.set("v")
    }
}
semver.tagPrefix=v
semver.checkClean=false

Follow Gradle version ordering

Current issues:

  • If both are non-numeric, the parts are compared alphabetically, in a case-sensitive manner: 1.0.0-ALPHA.1 < 1.0.0-BETA.1 < 1.0.0-alpha.1 < 1.0.0-beta.1
  • dev is considered lower than any non-numeric part: 1.0.0-dev.1 < 1.0.0-ALPHA.1 < 1.0.0-alpha.1 < 1.0.0-rc.1.
  • The strings rc, snapshot, final, ga, release and sp are considered higher than any other string part (sorted in this order): 1.0.0-zeta.1 < 1.0.0-rc.1 < 1.0.0-snapshot < 1.0.0-ga.1 < 1.0.0-release.1 < 1.0.0-sp.1 < 1.0.0.
  • These particular values are NOT case sensitive, as opposed to regular string parts and do not depend on the separator used around them: 1.0.0-RC.1 == 1.0.0-rc.1

https://docs.gradle.org/current/userguide/single_versions.html#version_ordering

Configuration cache, project isolation and multi-module refactor

Current behavior

  • The project can be applied in the root project and change the behavior of all projects changing its version.
  • The project version is a string set in the configuration phase which can't be precomputed.
  • In the configuration phase the version is logged and a file with it and its prefix is generated.
  • To have a different version in a project, that project has to have a different semver.tagPrefix property and apply the plugin.
  • To change a specific project version you have to indicate the project name `library:semver.stage=alpha".

Issues with that design

  • As the version can't be precomputed, if the user adds a new commit and the configuration cache is still valid, it will keep the previous hash instead of getting the new one.
  • It uses allprojects which must be avoided to support project isolation.
  • Setting the project name to indicate the version its version has no sense because the prefix tag can be shared with more projects.

New behavior

  • Each project has to apply the plugin
  • The project version is an object which has a lazy Gradle String property so when a task calls toString over that object, it will get the real version even if the user has committed new things.
  • Logging the version and generating the file is now a task and these tasks should depend on it:
    • assemble
    • check
    • All tasks with type Test.
    • All tasks with type Publishing.
  • Syncing the IDE runs that task too.
  • Tag can be set inside an extension and not only from a Gradle property.
  • createSemverTag and pushSemverTag must use a BuildService to ensure only one task is created.
    • The BuildService must set maxParallelUsages.set(1) and task.usesService(service).
    • It must have a flag to avoid creating multiple tags per build run.
  • Remove the current mechanism of passing the project name, instead of that, pass the prefix used to increase the project/s version/s.
  • Project version is set with stage + scope + prefix. All are Gradle properties, prefix can be an extension property.
  • It is possible to access to root project without breaking project isolation.
  • Pass prefix to create or push tag tasks
  • Plugin doesn't need to be applied in the root project

`printSemver -q` outputs nothing

I believe this is because the task uses by default the gradle logger. I think this task should use a regular println instead.

Issues when there are no tags

stage=alpha and scope=auto

Actual: 0.1.0

Expected: 0.1.0-alpha.1

stage=alpha and scope=patch

Actual: 0.1.1-alpha.1

Expected: 0.1.0-alpha.1

Check more cases: beta, rc, SNAPSHOT, and so on.

Option to print sem version only for the root project in a multi module project

Right now for a multi module project, semver is getting printed for all modules

> Task :meta:printSemver
semver for meta: v0.11.0.49+78d8ff2

> Task :web:printSemver
semver for web: v0.11.0.49+78d8ff2

> Task :dep-mgmt:printSemver
semver for dep-mgmt: v0.11.0.49+78d8ff2

> Task :compose:printSemver
semver for compose: v0.11.0.49+78d8ff2

> Task :backend:printSemver
semver for backend: v0.11.0.49+78d8ff2

> Task :meta:ksp:processor:printSemver
semver for processor: v0.11.0.49+78d8ff2

> Task :compose:web:printSemver
semver for web: v0.11.0.49+78d8ff2

> Task :dep-mgmt:bom:printSemver
semver for bom: v0.11.0.49+78d8ff2

> Task :shared:printSemver
semver for shared: v0.11.0.49+78d8ff2

> Task :dep-mgmt:catalog:printSemver
semver for catalog: v0.11.0.49+78d8ff2

This is getting too verbose. So provide an option to print only for root project by default.

strange warning about project not being in a git repository?

doesn't appear to impact anything but does print a warning in this multi-module project

> Task :config-versioning:generatePrecompiledScriptPluginAccessors
semver plugin can't work if the project is not a git repository <============== HERE

> Task :config-versioning:compileKotlin
w: Language version 1.4 is deprecated and its support will be removed in a future version of Kotlin

BUILD SUCCESSFUL in 9s
81 actionable tasks: 40 executed, 41 up-to-date

gradle-plugins on ๎‚  main [!] via โ˜• v11.0.13 via ๐Ÿ…บ on โ˜๏ธ  (us-west-2) on โ˜๏ธ xxx(us-east1) took 9s 
โฏ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   .github/workflows/pushpr.yaml
	modified:   config-versioning/build.gradle.kts
	modified:   config-versioning/src/main/kotlin/com.xxx.gradle.config-versioning.gradle.kts

no changes added to commit (use "git add" and/or "git commit -a")

Adding some APIs

In my build script depending, I wrote some tasks that depends on the computed version, and some on the old version.

Typically choosing the repository to upload artifacts weather the version is a snapshot or a release (alpha, beta, rc, final). In another project I'm working on there's the concept of EAP (early access preview).
Currently I have created my own functions that parse the version. But it would be useful if the plugin could provide those.

E.g.

fun isSnapshot(version: Any) = version.toString().endsWith("-SNAPSHOT") 
        || version.toString().matches(Regex(".*\\.\\d+\\+[0-9a-f]+")) // .54+6a08d70

Another thing that I'm currently doing differently is getting the last tag (and possibly the commit id), which could be used to trigger some tasks.

pushSemverTag fails

> Task :pushSemverTag FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':pushSemverTag'.
> Cannot call Task.dependsOn(Object...) on task ':pushSemverTag' after task has started execution.

`isSnapshot`, `isRC` providers compare equality of project version string versus a `SpecialStage` constant

Using the version providers introduced in #93

I wonder if I'm using it right. Suppose the following task that emit the version 0.0.1-SNAPSHOT

./gradlew publish -Psemver.stage=snapshot

image

This call return false, because the comparison is performing an equality on the String representation of the version.

public val String.isSnapshot: Boolean
    get() = lowercase() == SpecialStage.snapshot

I was able to work around this with my own provider

val isSnapshot = providers.provider { GradleVersion(project.version.toString()).isSnapshot }

Gradle : 8.7
Semver : 0.5.0

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

This repository currently has no open or pending branches.

Detected dependencies

github-actions
.github/workflows/apply-format.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/build-changelog-renovate-bot.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/build-kotlin-dispatcher.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/build-kotlin.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/dump-api.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/fix-checks.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/generate-version-tag.yaml
  • JavierSegoviaCordoba/reusable-workflows main
.github/workflows/publish-kotlin.yaml
  • JavierSegoviaCordoba/reusable-workflows main
gradle
gradle.properties
settings.gradle.kts
build.gradle.kts
gradle/libs.versions.toml
  • com.javiersc.hubdle 0.7.2
gradle-version/build.gradle.kts
semver-gradle-plugin/build.gradle.kts
semver-project-gradle-plugin/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/github-variables/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/github-variables/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/github-variables/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/github-variables/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/android build cache clean v1_0_0/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/gradle-features/android build cache clean v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/android build cache clean v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/android configuration cache clean v1_0_0/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/gradle-features/android configuration cache clean v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/android configuration cache clean v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/build cache clean v1_0_0/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/gradle-features/build cache clean v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/build cache clean v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/configuration cache clean v1_0_0/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/gradle-features/configuration cache clean v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/configuration cache clean v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/project isolation clean v1_0_0/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/gradle-features/project isolation clean v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/project isolation clean v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/project isolation clean v1_0_0/library-a/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/gradle-features/project isolation clean v1_0_0/library-b/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto 1_0_0+hash/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto 1_0_0+hash/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto 1_0_0+hash/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto 1_0_0+timestamp/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto 1_0_0+timestamp/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto 1_0_0+timestamp/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto v1_0_0+hash/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto v1_0_0+hash/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto v1_0_0+hash/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto v1_0_0+timestamp/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto v1_0_0+timestamp/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/empty/auto v1_0_0+timestamp/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto 1_0_0 to 1_0_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto 1_0_0 to 1_0_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto 1_0_0 to 1_0_1/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0 to v1_0_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0 to v1_0_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0 to v1_0_1/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0-alpha.1 to v1_0_0-alpha.2/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0-alpha.1 to v1_0_0-alpha.2/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0-alpha.1 to v1_0_0-alpha.2/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0-beta.5 to v1_0_0-beta.6/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0-beta.5 to v1_0_0-beta.6/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/auto v1_0_0-beta.5 to v1_0_0-beta.6/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v1_0_0 - library w3_0_0 to w4_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v1_0_0 - library w3_0_0 to w4_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v1_0_0 - library w3_0_0 to w4_0_0/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v2_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v2_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v2_0_0 - library w3_0_0 to w3_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v2_0_0 - library w3_0_0 to w3_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v2_0_0 - library w3_0_0 to w3_0_0/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/major v1_0_0 to v2_0_0/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/malformed buildAndFail (1)/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/malformed buildAndFail (1)/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/minor v1_0_0 to v1_0_0 - library w3_0_0 to w3_1_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/minor v1_0_0 to v1_0_0 - library w3_0_0 to w3_1_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/minor v1_0_0 to v1_0_0 - library w3_0_0 to w3_1_0/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/minor v1_0_0 to v1_1_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/minor v1_0_0 to v1_1_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/minor v1_0_0 to v1_1_0 - library w3_0_0 to w3_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/minor v1_0_0 to v1_1_0 - library w3_0_0 to w3_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/minor v1_0_0 to v1_1_0 - library w3_0_0 to w3_0_0/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/patch v1_0_0 to v1_0_0- library w3_0_0 to w3_0_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/patch v1_0_0 to v1_0_0- library w3_0_0 to w3_0_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/patch v1_0_0 to v1_0_0- library w3_0_0 to w3_0_1/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/patch v1_0_0 to v1_0_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/patch v1_0_0 to v1_0_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/patch v1_0_0 to v1_0_1- library w3_0_0 to w3_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/patch v1_0_0 to v1_0_1- library w3_0_0 to w3_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/scope/patch v1_0_0 to v1_0_1- library w3_0_0 to w3_0_0/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+auto/alpha+auto v1_0_0 to v1_0_1-alpha.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+auto/alpha+auto v1_0_0 to v1_0_1-alpha.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+auto/alpha+auto v1_0_0-alpha.1 to v1_0_0-alpha.2/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+auto/alpha+auto v1_0_0-alpha.1 to v1_0_0-alpha.2/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+auto/alpha+auto v1_0_0-rc.11 buildAndFail/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+auto/alpha+auto v1_0_0-rc.11 buildAndFail/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+major/alpha+major v1_0_0 to v2_0_0-alpha_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+major/alpha+major v1_0_0 to v2_0_0-alpha_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+major/alpha+major v1_0_0 to v2_0_0-alpha_1 - library w3_0_0 to w3_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+major/alpha+major v1_0_0 to v2_0_0-alpha_1 - library w3_0_0 to w3_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+major/alpha+major v1_0_0 to v2_0_0-alpha_1 - library w3_0_0 to w3_0_0/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+major/v1_0_0 to v1_0_0 - library beta+minor w3_0_0 to w3_1_0-beta_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+major/v1_0_0 to v1_0_0 - library beta+minor w3_0_0 to w3_1_0-beta_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+major/v1_0_0 to v1_0_0 - library beta+minor w3_0_0 to w3_1_0-beta_1/library/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+minor/alpha+minor v1_0_0 to v1_1_0-alpha_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+minor/alpha+minor v1_0_0 to v1_1_0-alpha_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+patch/alpha+patch v1_0_0 to v1_0_1-alpha_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/alpha+patch/alpha+patch v1_0_0 to v1_0_1-alpha_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+auto/auto+auto v1_0_0 to v1_0_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+auto/auto+auto v1_0_0 to v1_0_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+auto/auto+auto v1_0_0-alpha.1 to v1_0_0-alpha.2/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+auto/auto+auto v1_0_0-alpha.1 to v1_0_0-alpha.2/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+auto/auto+auto v1_0_0-rc.11 to v1_0_0-rc.12/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+auto/auto+auto v1_0_0-rc.11 to v1_0_0-rc.12/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+major/auto+major v1_0_0 to v2_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+major/auto+major v1_0_0 to v2_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+major/auto+major v1_0_0-alpha.1 to v2_0_0-alpha.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+major/auto+major v1_0_0-alpha.1 to v2_0_0-alpha.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+major/auto+major v1_0_0-rc.11 to v2_0_0-rc.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+major/auto+major v1_0_0-rc.11 to v2_0_0-rc.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+minor/auto+minor v1_0_0 to v1_0_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+minor/auto+minor v1_0_0 to v1_0_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+minor/auto+minor v1_0_0-alpha.1 to v1_1_0-alpha.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+minor/auto+minor v1_0_0-alpha.1 to v1_1_0-alpha.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+minor/auto+minor v1_0_0-rc.11 to v1_1_0-rc.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+minor/auto+minor v1_0_0-rc.11 to v1_1_0-rc.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+patch/auto+patch v1_0_0 to v1_0_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+patch/auto+patch v1_0_0 to v1_0_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+patch/auto+patch v1_0_0-alpha.1 to v1_0_1-alpha.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+patch/auto+patch v1_0_0-alpha.1 to v1_0_1-alpha.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+patch/auto+patch v1_0_0-rc.11 to v1_0_1-rc.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/auto+patch/auto+patch v1_0_0-rc.11 to v1_0_1-rc.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/beta+auto/beta+auto v1_0_0 to v1_0_1-beta.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/beta+auto/beta+auto v1_0_0 to v1_0_1-beta.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/beta+auto/beta+auto v1_0_0-alpha.1 to v1_0_0-beta.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/beta+auto/beta+auto v1_0_0-alpha.1 to v1_0_0-beta.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/beta+auto/beta+auto v1_0_0-rc.11 buildAndFail/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/beta+auto/beta+auto v1_0_0-rc.11 buildAndFail/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/final+auto/final+auto v1_0_0 to v1_0_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/final+auto/final+auto v1_0_0 to v1_0_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/final+auto/final+auto v1_0_0-alpha.1 to v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/final+auto/final+auto v1_0_0-alpha.1 to v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/final+auto/final+auto v1_0_0-rc.11 to v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/final+auto/final+auto v1_0_0-rc.11 to v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/final+auto/final+auto v1_2_0 to v1_2_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/final+auto/final+auto v1_2_0 to v1_2_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/rc+auto/rc+auto v1_0_0 to v1_0_1-rc.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/rc+auto/rc+auto v1_0_0 to v1_0_1-rc.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/rc+auto/rc+auto v1_0_0-alpha.1 to v1_0_0-rc.1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/rc+auto/rc+auto v1_0_0-alpha.1 to v1_0_0-rc.1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/rc+auto/rc+auto v1_0_0-rc.11 to v1_0_0-rc.12/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage+scope/rc+auto/rc+auto v1_0_0-rc.11 to v1_0_0-rc.12/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/alpha v1_0_0 to v1_0_1-alpha_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/alpha v1_0_0 to v1_0_1-alpha_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/alpha v1_0_0-alpha-1 to v1_0_1-alpha_2/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/alpha v1_0_0-alpha-1 to v1_0_1-alpha_2/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/beta v1_0_0 to v1_0_1-beta_1/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/properties/stage/beta v1_0_0 to v1_0_1-beta_1/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/beta v1_0_0 to v1_0_1-beta_1/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/final v1_0_0-alpha_1 to v1_0_0/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/properties/stage/final v1_0_0-alpha_1 to v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/final v1_0_0-alpha_1 to v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/snapshot v1_0_0-alpha_1 to v1_0_0-SNAPSHOT/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/properties/stage/snapshot v1_0_0-alpha_1 to v1_0_0-SNAPSHOT/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/snapshot v1_0_0-alpha_1 to v1_0_0-SNAPSHOT/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/snapshot v1_0_0-rc_3 to v1_0_0-SNAPSHOT/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/properties/stage/snapshot v1_0_0-rc_3 to v1_0_0-SNAPSHOT/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/properties/stage/snapshot v1_0_0-rc_3 to v1_0_0-SNAPSHOT/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/push-tag/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/push-tag/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/tags-order/random/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/tags-order/random/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/clean v1_0_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/clean v1_0_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/clean v1_0_0 configuration phase/gradle.properties
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/clean v1_0_0 configuration phase/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/clean v1_0_0 configuration phase/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/clean-with-no-tag-current-commit (hash)/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/clean-with-no-tag-current-commit (hash)/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/no-clean-with-no-tag-current-commit (dirty)/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-build-dir/no-clean-with-no-tag-current-commit (dirty)/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-mapping/v1_0_0 to v1_0_0+1_9_0/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-mapping/v1_0_0 to v1_0_0+1_9_0/build.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-mapping/v1_0_0 to v1_0_0+2_0_0-develop/settings.gradle.kts
semver-project-gradle-plugin/testFunctional/resources/version-mapping/v1_0_0 to v1_0_0+2_0_0-develop/build.gradle.kts
semver-settings-gradle-plugin/build.gradle.kts
semver-settings-gradle-plugin/testFunctional/resources/multi-project/gradle.properties
semver-settings-gradle-plugin/testFunctional/resources/multi-project/settings.gradle.kts
semver-settings-gradle-plugin/testFunctional/resources/multi-project/library-one/gradle.properties
semver-settings-gradle-plugin/testFunctional/resources/multi-project/library-one/build.gradle.kts
semver-settings-gradle-plugin/testFunctional/resources/multi-project/library-two/gradle.properties
semver-settings-gradle-plugin/testFunctional/resources/multi-project/library-two/build.gradle.kts
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.9

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.