Skip to content

Commit

Permalink
Add mapVersion to semver extension
Browse files Browse the repository at this point in the history
  • Loading branch information
JavierSegoviaCordoba committed Aug 3, 2023
1 parent fdd27ad commit 5d5d7c2
Show file tree
Hide file tree
Showing 21 changed files with 641 additions and 131 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@

### Added

- `mapVersion` to `semver` extension
- `version` to `semver` extension

### Changed

### Deprecated

### Removed

- `LazyVersion`

### Fixed

### Updated
Expand Down
64 changes: 42 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,13 @@ tasks.register("printLastCommitHash") {

- Default values:

| | **default value** |
|---------------------|---------------------------|
| **isEnabled** | `true` |
| **tagPrefix** | ` `, empty string |
| **commitsMaxCount** | `-1` |
| **gitDir** | `rootDir.resolve(".git")` |
| | **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.
Expand Down Expand Up @@ -149,6 +150,32 @@ 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:

```kotlin
// 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:

```kotlin
semver {
version.set("1.0.0")
}
```

##### Additional notes

###### Empty tag prefix for all projects
Expand All @@ -164,21 +191,27 @@ Or in the CLI:
### Version types

The whole format can be:

```text
<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>`
- Format: `<major>.<minor>.<patch>[-<stage>.<num>]`
- Example: `1.0.0-alpha.1`

#### Insignificant

- Format:
- Clean repository: `<major>.<minor>.<patch>-<stage>.<num>.<commits>+<hash>`
- Dirty repository: `<major>.<minor>.<patch>-<stage>.<num>.<commits>+<DIRTY>`
- 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`
Expand Down Expand Up @@ -383,16 +416,3 @@ semver: 1.0.1
./gradlew "-Psemver.checkClean=false"
semver: 1.0.0.23+1a2cd5b2 # 1a2cd5b2 is the last commit hash
```

### Utilities

The `project.version` is set as `LazyVersion`, it is possible so after casting it to `LazyVersion`,
it is possible to access to the `map` function which allows modifying the version. This can be
useful
to add a suffix to the version, for example, it is a common practice in Kotlin Compiler plugins to
attach the compatible Kotlin version, for example `1.0.0-1.8.21` or `1.0.0-alpha.2-1.8.21`.

```kotlin
val kotlin: String = getKotlinVersion()
(version as LazyVersion).map { semver -> "$semver-$kotlin" }
```
55 changes: 44 additions & 11 deletions gradle-version/api/gradle-version.api
Original file line number Diff line number Diff line change
@@ -1,30 +1,64 @@
public final class com/javiersc/gradle/version/GradleVersion : java/lang/Comparable {
public static final field Companion Lcom/javiersc/gradle/version/GradleVersion$Companion;
public synthetic fun <init> (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun compareTo (Lcom/javiersc/gradle/version/GradleVersion;)I
public synthetic fun compareTo (Ljava/lang/Object;)I
public final fun copy (IIILjava/lang/String;Ljava/lang/Integer;)Lcom/javiersc/gradle/version/GradleVersion;
public static synthetic fun copy$default (Lcom/javiersc/gradle/version/GradleVersion;IIILjava/lang/String;Ljava/lang/Integer;ILjava/lang/Object;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun copy (IIILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Lcom/javiersc/gradle/version/GradleVersion;
public static synthetic fun copy$default (Lcom/javiersc/gradle/version/GradleVersion;IIILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Lcom/javiersc/gradle/version/GradleVersion;
public fun equals (Ljava/lang/Object;)Z
public final fun getCommits ()Ljava/lang/Integer;
public final fun getHash ()Ljava/lang/String;
public final fun getMajor ()I
public final fun getMetadata ()Ljava/lang/String;
public final fun getMinor ()I
public final fun getPatch ()I
public final fun getStage ()Lcom/javiersc/gradle/version/GradleVersion$Stage;
public fun hashCode ()I
public final fun inc (Lcom/javiersc/gradle/version/GradleVersion$Increase;Ljava/lang/String;)Lcom/javiersc/gradle/version/GradleVersion;
public static synthetic fun inc$default (Lcom/javiersc/gradle/version/GradleVersion;Lcom/javiersc/gradle/version/GradleVersion$Increase;Ljava/lang/String;ILjava/lang/Object;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun isInsignificant ()Z
public final fun isInvalid ()Z
public final fun isSignificant ()Z
public fun toString ()Ljava/lang/String;
}

public final class com/javiersc/gradle/version/GradleVersion$CheckMode : java/lang/Enum {
public static final field Insignificant Lcom/javiersc/gradle/version/GradleVersion$CheckMode;
public static final field None Lcom/javiersc/gradle/version/GradleVersion$CheckMode;
public static final field Significant Lcom/javiersc/gradle/version/GradleVersion$CheckMode;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lcom/javiersc/gradle/version/GradleVersion$CheckMode;
public static fun values ()[Lcom/javiersc/gradle/version/GradleVersion$CheckMode;
}

public final class com/javiersc/gradle/version/GradleVersion$Companion {
public final fun getRegex ()Lkotlin/text/Regex;
public final fun getCommitsHashRegex ()Lkotlin/text/Regex;
public final fun getDirtyRegex ()Lkotlin/text/Regex;
public final fun getHashRegex ()Lkotlin/text/Regex;
public final fun getInsignificantRegex ()Lkotlin/text/Regex;
public final fun getMetadataRegex ()Lkotlin/text/Regex;
public final fun getNumRegex ()Lkotlin/text/Regex;
public final fun getOrNull (IIILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Lcom/javiersc/gradle/version/GradleVersion;
public static synthetic fun getOrNull$default (Lcom/javiersc/gradle/version/GradleVersion$Companion;IIILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun getScopeRegex ()Lkotlin/text/Regex;
public final fun invoke (IIILjava/lang/String;Ljava/lang/Integer;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun invoke (Ljava/lang/String;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun invoke (Ljava/lang/String;Ljava/lang/String;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun safe-IoAF18A (Ljava/lang/String;)Ljava/lang/Object;
public final fun safe-gIAlu-s (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
public final fun safe-yxL6bBk (IIILjava/lang/String;Ljava/lang/Integer;)Ljava/lang/Object;
public final fun getSignificantRegex ()Lkotlin/text/Regex;
public final fun getSnapshotRegex ()Lkotlin/text/Regex;
public final fun getStageNoSnapshotRegex ()Lkotlin/text/Regex;
public final fun getStageRegex ()Lkotlin/text/Regex;
public final fun invoke (IIILjava/lang/String;Ljava/lang/Integer;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun invoke (IIILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun invoke (Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun invoke (Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Lcom/javiersc/gradle/version/GradleVersion;
public static synthetic fun invoke$default (Lcom/javiersc/gradle/version/GradleVersion$Companion;IIILjava/lang/String;Ljava/lang/Integer;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Lcom/javiersc/gradle/version/GradleVersion;
public static synthetic fun invoke$default (Lcom/javiersc/gradle/version/GradleVersion$Companion;IIILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Lcom/javiersc/gradle/version/GradleVersion;
public static synthetic fun invoke$default (Lcom/javiersc/gradle/version/GradleVersion$Companion;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Lcom/javiersc/gradle/version/GradleVersion;
public static synthetic fun invoke$default (Lcom/javiersc/gradle/version/GradleVersion$Companion;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Lcom/javiersc/gradle/version/GradleVersion;
public final fun safe-0E7RQCE (Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Ljava/lang/Object;
public static synthetic fun safe-0E7RQCE$default (Lcom/javiersc/gradle/version/GradleVersion$Companion;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Ljava/lang/Object;
public final fun safe-gIAlu-s (Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Ljava/lang/Object;
public static synthetic fun safe-gIAlu-s$default (Lcom/javiersc/gradle/version/GradleVersion$Companion;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Ljava/lang/Object;
public final fun safe-tZkwj4A (IIILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;)Ljava/lang/Object;
public static synthetic fun safe-tZkwj4A$default (Lcom/javiersc/gradle/version/GradleVersion$Companion;IIILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Ljava/lang/String;Lcom/javiersc/gradle/version/GradleVersion$CheckMode;ILjava/lang/Object;)Ljava/lang/Object;
}

public abstract interface class com/javiersc/gradle/version/GradleVersion$Increase {
Expand Down Expand Up @@ -55,7 +89,6 @@ public final class com/javiersc/gradle/version/GradleVersion$Stage : java/lang/C
}

public final class com/javiersc/gradle/version/GradleVersion$Stage$Companion {
public final fun getStageRegex ()Lkotlin/text/Regex;
public final fun invoke (Ljava/lang/String;)Lcom/javiersc/gradle/version/GradleVersion$Stage;
public final fun invoke (Ljava/lang/String;Ljava/lang/Integer;)Lcom/javiersc/gradle/version/GradleVersion$Stage;
}
Expand Down
Loading

0 comments on commit 5d5d7c2

Please sign in to comment.