mirror of
https://github.com/reecetech/version-increment.git
synced 2025-12-21 14:35:44 +00:00
Compare commits
24 Commits
2022.10.3
...
test_use_a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d5d532814 | ||
|
|
b78a17540f | ||
|
|
de5ab041fb | ||
|
|
3ac8392aa4 | ||
|
|
72c1fa6077 | ||
|
|
f21e559797 | ||
|
|
4415fcb6c0 | ||
|
|
4846cbaf9d | ||
|
|
468208262a | ||
|
|
e5f8667dfc | ||
|
|
2ef15157dd | ||
|
|
0974302def | ||
|
|
67d70b45a4 | ||
|
|
47e175a747 | ||
|
|
8202de8885 | ||
|
|
fa8feb816e | ||
|
|
1e4c88d873 | ||
|
|
d5f78b25d1 | ||
|
|
bfb5689c4d | ||
|
|
f81c317cbd | ||
|
|
bb0e075f8b | ||
|
|
f1fae3d6b7 | ||
|
|
77dfab16c0 | ||
|
|
2414f2fa44 |
52
.github/workflows/test-and-release.yml
vendored
52
.github/workflows/test-and-release.yml
vendored
@@ -9,56 +9,12 @@ on:
|
|||||||
- '**'
|
- '**'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Run ShellCheck
|
|
||||||
uses: ludeeus/action-shellcheck@94e0aab03ca135d11a35e5bfc14e6746dc56e7e9 # v1.1.0
|
|
||||||
with:
|
|
||||||
check_together: 'yes'
|
|
||||||
|
|
||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Get next version
|
||||||
uses: actions/checkout@v3
|
uses: reecetech/version-increment@use_api
|
||||||
|
id: version
|
||||||
- name: Setup bats
|
|
||||||
uses: mig4/setup-bats@af9a00deb21b5d795cabfeaa8d9060410377686d # v1.2.0
|
|
||||||
with:
|
with:
|
||||||
bats-version: 1.8.0
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: bats tests/*.bats
|
|
||||||
|
|
||||||
release:
|
|
||||||
needs:
|
|
||||||
- lint
|
|
||||||
- test
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Lookup version
|
|
||||||
id: version-lookup
|
|
||||||
run: ./version-lookup.sh
|
|
||||||
|
|
||||||
- name: Increment version
|
|
||||||
id: version-increment
|
|
||||||
run: ./version-increment.sh
|
|
||||||
env:
|
|
||||||
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
|
|
||||||
scheme: calver
|
scheme: calver
|
||||||
|
use_api: true
|
||||||
- name: Release version
|
|
||||||
uses: marvinpinto/action-automatic-releases@919008cf3f741b179569b7a6fb4d8860689ab7f0 # v1.2.1
|
|
||||||
if: ${{ github.ref_name == github.event.repository.default_branch }}
|
|
||||||
with:
|
|
||||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
automatic_release_tag: "${{ steps.version-increment.outputs.VERSION }}"
|
|
||||||
|
|||||||
24
README.md
24
README.md
@@ -9,7 +9,7 @@
|
|||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Get next version
|
- name: Get next version
|
||||||
uses: reecetech/version-increment@2022.10.3
|
uses: reecetech/version-increment@2023.9.3
|
||||||
id: version
|
id: version
|
||||||
with:
|
with:
|
||||||
scheme: semver
|
scheme: semver
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
```
|
```
|
||||||
|
|
||||||
### 🔖 semver
|
### 🔖 semver
|
||||||
|
|
||||||
This action will detect the current latest _normal_ semantic version (semver) from the tags in
|
This action will detect the current latest _normal_ semantic version (semver) from the tags in
|
||||||
a git repository. It will increment the version as directed (by default: +1 to
|
a git repository. It will increment the version as directed (by default: +1 to
|
||||||
the patch digit). Both the current latest and the incremented version are
|
the patch digit). Both the current latest and the incremented version are
|
||||||
@@ -52,14 +53,16 @@ e.g. `2021.6.2`
|
|||||||
| minor | month | `6` |
|
| minor | month | `6` |
|
||||||
| patch | release | `2` | The *n*th release for the month |
|
| patch | release | `2` | The *n*th release for the month |
|
||||||
|
|
||||||
If the current latest normal version is not the current year and month, then the year and month digits will be
|
If the current latest normal version is not the current year and month, then the
|
||||||
|
year and month digits will be
|
||||||
set to the current year and month, and the release digit will be reset to 1.
|
set to the current year and month, and the release digit will be reset to 1.
|
||||||
|
|
||||||
### 🎋 Default branch vs. any other branch
|
### 🎋 Default branch vs. any other branch
|
||||||
|
|
||||||
**Default branch**
|
**Default branch**
|
||||||
|
|
||||||
The action will return a _normal_ version if it is detected that the current commit is on the default branch (usually `main`).
|
The action will return a _normal_ version if it is detected that the current commit
|
||||||
|
is on the default branch (usually `main`).
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
* `1.2.7`
|
* `1.2.7`
|
||||||
@@ -67,7 +70,10 @@ Examples:
|
|||||||
|
|
||||||
**Any other branch**
|
**Any other branch**
|
||||||
|
|
||||||
The action will return a _pre-release_ version if any other branch is detected (e.g. `new-feature`, `bugfix/foo`, etc). The _pre-release_ portion of the version number will be the literal string `pre.` followed by the git commit ID short reference SHA (trimmed of any leading zeros).
|
The action will return a _pre-release_ version if any other branch is detected
|
||||||
|
(e.g. `new-feature`, `bugfix/foo`, etc). The _pre-release_ portion of the version number
|
||||||
|
will be the literal string `pre.` followed by the git commit ID short reference SHA
|
||||||
|
(trimmed of any leading zeros).
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
* `1.2.7-pre.41218aa78`
|
* `1.2.7-pre.41218aa78`
|
||||||
@@ -75,10 +81,12 @@ Examples:
|
|||||||
|
|
||||||
### 📥 Inputs
|
### 📥 Inputs
|
||||||
|
|
||||||
| name | description | required | default |
|
| name | description | required | default |
|
||||||
| :--- | :--- | :--- | :--- |
|
| :--- | :--- | :--- | :--- |
|
||||||
| scheme | The versioning scheme in-use, either `semver` or `calver` | No | `semver` |
|
| scheme | The versioning scheme in-use, either `semver` or `calver` | No | `semver` |
|
||||||
| increment | The digit to increment, either `major`, `minor` or `patch`, ignored if `scheme` == `calver` | No | `patch` |
|
| pep440 | Set to `true` for PEP440 compatibility of _pre-release_ versions by making use of the build metadata segment of semver, which maps to local version identifier in PEP440 | No | `false` |
|
||||||
|
| increment | The digit to increment, either `major`, `minor` or `patch`, ignored if `scheme` == `calver` | No | `patch` |
|
||||||
|
| release_branch | Specify a non-default branch to use for the release tag (the one without -pre) | No | |
|
||||||
|
|
||||||
### 📤 Outputs
|
### 📤 Outputs
|
||||||
|
|
||||||
|
|||||||
12
action.yml
12
action.yml
@@ -11,6 +11,10 @@ inputs:
|
|||||||
description: 'Versioning scheme - semver, or, calver (defaults to semver)'
|
description: 'Versioning scheme - semver, or, calver (defaults to semver)'
|
||||||
required: false
|
required: false
|
||||||
default: 'semver'
|
default: 'semver'
|
||||||
|
pep440:
|
||||||
|
description: 'PEP440 compatibility mode - shifts the pre-release version information into build metadata instead'
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
increment:
|
increment:
|
||||||
description: |
|
description: |
|
||||||
Field to increment - major, minor, or, patch (defaults to patch)
|
Field to increment - major, minor, or, patch (defaults to patch)
|
||||||
@@ -18,6 +22,10 @@ inputs:
|
|||||||
Not applicable to `calver` scheme
|
Not applicable to `calver` scheme
|
||||||
required: false
|
required: false
|
||||||
default: 'patch'
|
default: 'patch'
|
||||||
|
release_branch:
|
||||||
|
description: 'Specify a non-default branch to use for the release tag (the one without -pre)'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
current-version:
|
current-version:
|
||||||
@@ -41,7 +49,7 @@ outputs:
|
|||||||
patch-version:
|
patch-version:
|
||||||
description: 'Patch number of the incremented version'
|
description: 'Patch number of the incremented version'
|
||||||
value: ${{ steps.version-increment.outputs.PATCH_VERSION }}
|
value: ${{ steps.version-increment.outputs.PATCH_VERSION }}
|
||||||
pre-release-version:
|
pre-release-label:
|
||||||
description: 'Pre-release label of the incremented version'
|
description: 'Pre-release label of the incremented version'
|
||||||
value: ${{ steps.version-increment.outputs.PRE_RELEASE_LABEL }}
|
value: ${{ steps.version-increment.outputs.PRE_RELEASE_LABEL }}
|
||||||
major-v-version:
|
major-v-version:
|
||||||
@@ -69,4 +77,6 @@ runs:
|
|||||||
env:
|
env:
|
||||||
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
|
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
|
||||||
increment: ${{ inputs.increment }}
|
increment: ${{ inputs.increment }}
|
||||||
|
pep440: ${{ inputs.pep440 }}
|
||||||
scheme: ${{ inputs.scheme }}
|
scheme: ${{ inputs.scheme }}
|
||||||
|
release_branch: ${{ inputs.release_branch }}
|
||||||
|
|||||||
@@ -21,6 +21,12 @@ if [[ "${scheme}" != 'semver' && "${scheme}" != 'calver' ]] ; then
|
|||||||
input_errors='true'
|
input_errors='true'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
pep440="${pep440:-false}"
|
||||||
|
if [[ "${pep440}" != 'false' && "${pep440}" != 'true' ]] ; then
|
||||||
|
echo "🛑 Value of 'pep440' is not valid, choose from 'false' or 'true'" 1>&2
|
||||||
|
input_errors='true'
|
||||||
|
fi
|
||||||
|
|
||||||
##==----------------------------------------------------------------------------
|
##==----------------------------------------------------------------------------
|
||||||
## MacOS compatibility - for local testing
|
## MacOS compatibility - for local testing
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,18 @@ function init_repo {
|
|||||||
[[ "$output" = *"Value of 'scheme' is not valid"* ]]
|
[[ "$output" = *"Value of 'scheme' is not valid"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "fails if invalid value for pep440 given" {
|
||||||
|
init_repo
|
||||||
|
|
||||||
|
export pep440="yes"
|
||||||
|
|
||||||
|
run ../../version-increment.sh
|
||||||
|
|
||||||
|
print_run_info
|
||||||
|
[ "$status" -eq 8 ] &&
|
||||||
|
[[ "$output" = *"Value of 'pep440' is not valid"* ]]
|
||||||
|
}
|
||||||
|
|
||||||
@test "fails if invalid increment given" {
|
@test "fails if invalid increment given" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
@@ -104,6 +116,23 @@ function init_repo {
|
|||||||
[[ "$output" = *"VERSION=1.3.0"* ]]
|
[[ "$output" = *"VERSION=1.3.0"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "increments the minor digit correctly (explicitly not pep440)" {
|
||||||
|
init_repo
|
||||||
|
|
||||||
|
export current_version=1.2.3
|
||||||
|
export pep404="false"
|
||||||
|
export increment="minor"
|
||||||
|
|
||||||
|
run ../../version-increment.sh
|
||||||
|
|
||||||
|
print_run_info
|
||||||
|
[ "$status" -eq 0 ] &&
|
||||||
|
[[ "$output" = *"MAJOR_VERSION=1"* ]] &&
|
||||||
|
[[ "$output" = *"MINOR_VERSION=3"* ]] &&
|
||||||
|
[[ "$output" = *"PATCH_VERSION=0"* ]] &&
|
||||||
|
[[ "$output" = *"VERSION=1.3.0"* ]]
|
||||||
|
}
|
||||||
|
|
||||||
@test "increments the major digit correctly (semver)" {
|
@test "increments the major digit correctly (semver)" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
@@ -120,6 +149,23 @@ function init_repo {
|
|||||||
[[ "$output" = *"VERSION=2.0.0"* ]]
|
[[ "$output" = *"VERSION=2.0.0"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "increments the major digit correctly (pep440 mode)" {
|
||||||
|
init_repo
|
||||||
|
|
||||||
|
export current_version=1.2.3
|
||||||
|
export pep404="true"
|
||||||
|
export increment="major"
|
||||||
|
|
||||||
|
run ../../version-increment.sh
|
||||||
|
|
||||||
|
print_run_info
|
||||||
|
[ "$status" -eq 0 ] &&
|
||||||
|
[[ "$output" = *"MAJOR_VERSION=2"* ]] &&
|
||||||
|
[[ "$output" = *"MINOR_VERSION=0"* ]] &&
|
||||||
|
[[ "$output" = *"PATCH_VERSION=0"* ]] &&
|
||||||
|
[[ "$output" = *"VERSION=2.0.0"* ]]
|
||||||
|
}
|
||||||
|
|
||||||
@test "prefixes with v" {
|
@test "prefixes with v" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
@@ -174,6 +220,55 @@ function init_repo {
|
|||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$status" -eq 0 ] &&
|
||||||
[[ "$output" = *"PRE_RELEASE_LABEL=pre.${short_ref}"* ]]
|
[[ "$output" = *"PRE_RELEASE_LABEL=pre.${short_ref}"* ]] &&
|
||||||
[[ "$output" = *"VERSION=1.2.4-pre.${short_ref}"* ]]
|
[[ "$output" = *"VERSION=1.2.4-pre.${short_ref}"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "does not append prerelease information if on a specified release_branch" {
|
||||||
|
init_repo
|
||||||
|
|
||||||
|
export current_version=1.2.3
|
||||||
|
export GITHUB_REF="refs/heads/releases"
|
||||||
|
export release_branch="releases"
|
||||||
|
|
||||||
|
run ../../version-increment.sh
|
||||||
|
|
||||||
|
print_run_info
|
||||||
|
[ "$status" -eq 0 ] &&
|
||||||
|
[[ "$output" != *"PRE_RELEASE_LABEL=pre."* ]] &&
|
||||||
|
[[ "$output" != *"VERSION=1.2.4-pre."* ]] &&
|
||||||
|
[[ "$output" = *"VERSION=1.2.4"* ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "appends prerelease information in pep440 compatible way when pep440 is true" {
|
||||||
|
init_repo
|
||||||
|
|
||||||
|
export current_version=10.20.30
|
||||||
|
export pep440="true"
|
||||||
|
export GITHUB_REF="refs/heads/super-awesome-python"
|
||||||
|
export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')"
|
||||||
|
|
||||||
|
run ../../version-increment.sh
|
||||||
|
|
||||||
|
print_run_info
|
||||||
|
[ "$status" -eq 0 ] &&
|
||||||
|
[[ "$output" = *"PRE_RELEASE_LABEL=pre.${short_ref}"* ]] &&
|
||||||
|
[[ "$output" = *"VERSION=10.20.31+pre.${short_ref}"* ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "appends prerelease information in pep440 compatible way when pep440 is true, and using calver scheme" {
|
||||||
|
init_repo
|
||||||
|
|
||||||
|
export current_version=2020.6.4
|
||||||
|
export scheme="calver"
|
||||||
|
export pep440="true"
|
||||||
|
export GITHUB_REF="refs/heads/super-awesome-python"
|
||||||
|
export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')"
|
||||||
|
|
||||||
|
run ../../version-increment.sh
|
||||||
|
|
||||||
|
print_run_info
|
||||||
|
[ "$status" -eq 0 ] &&
|
||||||
|
[[ "$output" = *"PRE_RELEASE_LABEL=pre.${short_ref}"* ]] &&
|
||||||
|
[[ "$output" = *"VERSION=$(date +%Y.%-m.1)+pre.${short_ref}"* ]]
|
||||||
|
}
|
||||||
|
|||||||
@@ -32,6 +32,11 @@ default_branch='main'
|
|||||||
if [[ -z "${BATS_VERSION:-}" ]] ; then
|
if [[ -z "${BATS_VERSION:-}" ]] ; then
|
||||||
default_branch="$(git remote show origin | ${grep} 'HEAD branch' | cut -d ' ' -f 5)"
|
default_branch="$(git remote show origin | ${grep} 'HEAD branch' | cut -d ' ' -f 5)"
|
||||||
fi
|
fi
|
||||||
|
# use release_branch if not empty
|
||||||
|
if [[ -n "${release_branch:-}" ]] ; then
|
||||||
|
default_branch="${release_branch}"
|
||||||
|
fi
|
||||||
|
|
||||||
current_ref="${GITHUB_REF:-}"
|
current_ref="${GITHUB_REF:-}"
|
||||||
git_commit="$(git rev-parse --short HEAD | sed 's/0*//')" # trim leading zeros, because semver doesn't allow that in
|
git_commit="$(git rev-parse --short HEAD | sed 's/0*//')" # trim leading zeros, because semver doesn't allow that in
|
||||||
# the 'pre-release version' part, but we can't use the + char
|
# the 'pre-release version' part, but we can't use the + char
|
||||||
@@ -75,7 +80,11 @@ fi
|
|||||||
# add pre-release info to version if not the default branch
|
# add pre-release info to version if not the default branch
|
||||||
if [[ "${current_ref}" != "refs/heads/${default_branch}" ]] ; then
|
if [[ "${current_ref}" != "refs/heads/${default_branch}" ]] ; then
|
||||||
pre_release="pre.${git_commit}"
|
pre_release="pre.${git_commit}"
|
||||||
new_version="${new_version}-${pre_release}"
|
if [[ "${pep440:-}" == 'true' ]] ; then
|
||||||
|
new_version="${new_version}+${pre_release}"
|
||||||
|
else
|
||||||
|
new_version="${new_version}-${pre_release}"
|
||||||
|
fi
|
||||||
echo "PRE_RELEASE_LABEL=${pre_release}" >> "${GITHUB_OUTPUT}"
|
echo "PRE_RELEASE_LABEL=${pre_release}" >> "${GITHUB_OUTPUT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user