16 Commits

Author SHA1 Message Date
Phil Jay
1e4c88d873 Merge pull request #21 from reecetech/support-pep440
Add PEP440 compatibility mode
2023-04-27 12:00:51 +10:00
Phil Jay
d5f78b25d1 Update test cases 2023-04-27 11:59:49 +10:00
Phil Jay
bfb5689c4d Update README 2023-04-27 09:33:35 +10:00
Phil Jay
f81c317cbd Alter PEP440 handling to support both sem and cal 2023-04-27 09:10:47 +10:00
Phil Jay
bb0e075f8b Add pep440 mode 2023-04-26 16:31:08 +10:00
Phil Jay
f1fae3d6b7 Merge pull request #20 from reecetech/fix-label
Fix output name to match documentation
2023-03-10 12:49:39 +11:00
Phil Jay
77dfab16c0 Update README.md for next release 2023-03-10 12:41:56 +11:00
Phil Jay
2414f2fa44 Fix output name to match documentation 2023-03-10 12:40:51 +11:00
Phil Jay
f6d4e915f4 Merge pull request #19 from reecetech/update-ver-in-README
Update to have the latest version as the example in the README
2022-10-19 14:28:09 +11:00
Phil Jay
5f9f764060 New version available! 2022-10-19 14:26:06 +11:00
Phil Jay
0fd6f1742d Merge pull request #18 from reecetech/rm-set-output-calls
Remove deprecated `set-output` calls
2022-10-19 10:57:07 +11:00
Phil Jay
8e33684d42 Update action.yml for output name changes 2022-10-19 10:49:16 +11:00
Phil Jay
b7be5e00c2 Disable style warning 2022-10-19 10:49:16 +11:00
Phil Jay
ced1d4ac1d Replace set-output with append to GITHUB_OUTPUT 2022-10-19 09:24:11 +11:00
Phil Jay
e7c0a5aac2 Update tests to _not_ expect set-output 2022-10-19 09:24:11 +11:00
Phil Jay
c1893b945a Add GITHUB_OUTPUT override for testing 2022-10-19 08:51:07 +11:00
8 changed files with 184 additions and 60 deletions

View File

@@ -51,7 +51,7 @@ jobs:
id: version-increment
run: ./version-increment.sh
env:
current_version: ${{ steps.version-lookup.outputs.current-version }}
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
scheme: calver
- name: Release version
@@ -61,4 +61,4 @@ jobs:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
draft: false
prerelease: false
automatic_release_tag: "${{ steps.version-increment.outputs.version }}"
automatic_release_tag: "${{ steps.version-increment.outputs.VERSION }}"

View File

@@ -9,7 +9,7 @@
uses: actions/checkout@v2
- name: Get next version
uses: reecetech/version-increment@2022.5.1
uses: reecetech/version-increment@2023.4.1
id: version
with:
scheme: semver
@@ -24,6 +24,7 @@
```
### 🔖 semver
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
the patch digit). Both the current latest and the incremented version are
@@ -52,14 +53,16 @@ e.g. `2021.6.2`
| minor | month | `6` |
| 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.
### 🎋 Default branch vs. any other 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:
* `1.2.7`
@@ -67,7 +70,10 @@ Examples:
**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:
* `1.2.7-pre.41218aa78`
@@ -78,6 +84,7 @@ Examples:
| name | description | required | default |
| :--- | :--- | :--- | :--- |
| scheme | The versioning scheme in-use, either `semver` or `calver` | No | `semver` |
| 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` |
### 📤 Outputs

View File

@@ -11,6 +11,10 @@ inputs:
description: 'Versioning scheme - semver, or, calver (defaults to semver)'
required: false
default: 'semver'
pep440:
description: 'PEP440 compatibility mode - shifts the pre-release version information into build metadata instead'
required: false
default: false
increment:
description: |
Field to increment - major, minor, or, patch (defaults to patch)
@@ -22,37 +26,37 @@ inputs:
outputs:
current-version:
description: 'Current normal version detected'
value: ${{ steps.version-lookup.outputs.current-version }}
value: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
current-v-version:
description: 'Current normal version detected, prefixed with a `v` charatcter'
value: ${{ steps.version-lookup.outputs.current-v-version }}
value: ${{ steps.version-lookup.outputs.CURRENT_V_VERSION }}
version:
description: 'Incremented version calculated'
value: ${{ steps.version-increment.outputs.version }}
value: ${{ steps.version-increment.outputs.VERSION }}
v-version:
description: 'Incremented version calculated, prefixed with a `v` charatcter'
value: ${{ steps.version-increment.outputs.v-version }}
value: ${{ steps.version-increment.outputs.V_VERSION }}
major-version:
description: 'Major number of the incremented version'
value: ${{ steps.version-increment.outputs.major-version }}
value: ${{ steps.version-increment.outputs.MAJOR_VERSION }}
minor-version:
description: 'Minor number of the incremented version'
value: ${{ steps.version-increment.outputs.minor-version }}
value: ${{ steps.version-increment.outputs.MINOR_VERSION }}
patch-version:
description: 'Patch number of the incremented version'
value: ${{ steps.version-increment.outputs.patch-version }}
pre-release-version:
value: ${{ steps.version-increment.outputs.PATCH_VERSION }}
pre-release-label:
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:
description: 'Major number of the incremented version, prefixed with a `v` charatcter'
value: ${{ steps.version-increment.outputs.major-v-version }}
value: ${{ steps.version-increment.outputs.MAJOR_V_VERSION }}
minor-v-version:
description: 'Minor number of the incremented version, prefixed with a `v` charatcter'
value: ${{ steps.version-increment.outputs.minor-v-version }}
value: ${{ steps.version-increment.outputs.MINOR_V_VERSION }}
patch-v-version:
description: 'Patch number of the incremented version, prefixed with a `v` charatcter'
value: ${{ steps.version-increment.outputs.patch-v-version }}
value: ${{ steps.version-increment.outputs.PATCH_V_VERSION }}
runs:
using: "composite"
@@ -67,6 +71,7 @@ runs:
run: ${{ github.action_path }}/version-increment.sh
shell: bash
env:
current_version: ${{ steps.version-lookup.outputs.current-version }}
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
increment: ${{ inputs.increment }}
pep440: ${{ inputs.pep440 }}
scheme: ${{ inputs.scheme }}

View File

@@ -21,6 +21,12 @@ if [[ "${scheme}" != 'semver' && "${scheme}" != 'calver' ]] ; then
input_errors='true'
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
@@ -32,3 +38,10 @@ if [[ "$(uname)" == "Darwin" ]] ; then
exit 9
fi
fi
##==----------------------------------------------------------------------------
## Non GitHub compatibility - for testing both locally and in BATS
if [[ -z "${GITHUB_OUTPUT:-}" || -n "${BATS_VERSION:-}" ]] ; then
export GITHUB_OUTPUT="/dev/stdout"
fi

View File

@@ -53,6 +53,18 @@ function init_repo {
[[ "$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" {
init_repo
@@ -65,6 +77,13 @@ function init_repo {
[[ "$output" = *"Value of 'increment' is not valid, choose from 'major', 'minor', or 'patch'"* ]]
}
@test "no deprecated set-output calls made" {
run grep -q "::set-output" version-increment.sh
print_run_info
[ "$status" -eq 1 ]
}
@test "increments the patch digit correctly (semver)" {
init_repo
@@ -75,10 +94,10 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=major-version::1"* ]] &&
[[ "$output" = *"::set-output name=minor-version::2"* ]] &&
[[ "$output" = *"::set-output name=patch-version::4"* ]] &&
[[ "$output" = *"::set-output name=version::1.2.4"* ]]
[[ "$output" = *"MAJOR_VERSION=1"* ]] &&
[[ "$output" = *"MINOR_VERSION=2"* ]] &&
[[ "$output" = *"PATCH_VERSION=4"* ]] &&
[[ "$output" = *"VERSION=1.2.4"* ]]
}
@test "increments the minor digit correctly (semver)" {
@@ -91,10 +110,27 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=major-version::1"* ]] &&
[[ "$output" = *"::set-output name=minor-version::3"* ]] &&
[[ "$output" = *"::set-output name=patch-version::0"* ]] &&
[[ "$output" = *"::set-output name=version::1.3.0"* ]]
[[ "$output" = *"MAJOR_VERSION=1"* ]] &&
[[ "$output" = *"MINOR_VERSION=3"* ]] &&
[[ "$output" = *"PATCH_VERSION=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)" {
@@ -107,10 +143,27 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=major-version::2"* ]] &&
[[ "$output" = *"::set-output name=minor-version::0"* ]] &&
[[ "$output" = *"::set-output name=patch-version::0"* ]] &&
[[ "$output" = *"::set-output name=version::2.0.0"* ]]
[[ "$output" = *"MAJOR_VERSION=2"* ]] &&
[[ "$output" = *"MINOR_VERSION=0"* ]] &&
[[ "$output" = *"PATCH_VERSION=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" {
@@ -123,11 +176,11 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=version::2.0.0"* ]] &&
[[ "$output" = *"::set-output name=major-v-version::v2"* ]] &&
[[ "$output" = *"::set-output name=minor-v-version::v0"* ]] &&
[[ "$output" = *"::set-output name=patch-v-version::v0"* ]] &&
[[ "$output" = *"::set-output name=v-version::v2.0.0"* ]]
[[ "$output" = *"VERSION=2.0.0"* ]] &&
[[ "$output" = *"MAJOR_V_VERSION=v2"* ]] &&
[[ "$output" = *"MINOR_V_VERSION=v0"* ]] &&
[[ "$output" = *"PATCH_V_VERSION=v0"* ]] &&
[[ "$output" = *"V_VERSION=v2.0.0"* ]]
}
@test "increments to a new month (calver)" {
@@ -140,7 +193,7 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=version::$(date +%Y.%-m.1)"* ]]
[[ "$output" = *"VERSION=$(date +%Y.%-m.1)"* ]]
}
@test "increments the patch digit within a month (calver)" {
@@ -153,7 +206,7 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=version::$(date +%Y.%-m.124)"* ]]
[[ "$output" = *"VERSION=$(date +%Y.%-m.124)"* ]]
}
@test "appends prerelease information if on a branch" {
@@ -167,5 +220,39 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=version::1.2.4-pre.${short_ref}"* ]]
[[ "$output" = *"PRE_RELEASE_LABEL=pre.${short_ref}"* ]] &&
[[ "$output" = *"VERSION=1.2.4-pre.${short_ref}"* ]]
}
@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}"* ]]
}

View File

@@ -29,6 +29,13 @@ function init_repo {
[[ "$output" = *"Value of 'scheme' is not valid"* ]]
}
@test "no deprecated set-output calls made" {
run grep -q "::set-output" version-lookup.sh
print_run_info
[ "$status" -eq 1 ]
}
@test "finds the current normal version" {
init_repo
@@ -40,7 +47,7 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=current-version::0.1.2"* ]]
[[ "$output" = *"CURRENT_VERSION=0.1.2"* ]]
}
@test "prefixes with a v" {
@@ -52,8 +59,8 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=current-version::0.1.2"* ]] &&
[[ "$output" = *"::set-output name=current-v-version::v0.1.2"* ]]
[[ "$output" = *"CURRENT_VERSION=0.1.2"* ]] &&
[[ "$output" = *"CURRENT_V_VERSION=v0.1.2"* ]]
}
@test "finds the current normal version even if there's a newer pre-release version" {
@@ -66,7 +73,7 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=current-version::1.2.300"* ]]
[[ "$output" = *"CURRENT_VERSION=1.2.300"* ]]
}
@test "returns 0.0.0 if no normal version detected" {
@@ -76,7 +83,7 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=current-version::0.0.0"* ]]
[[ "$output" = *"CURRENT_VERSION=0.0.0"* ]]
}
@test "returns 0.0.0 if no normal version detected even if there's a pre-release version" {
@@ -88,7 +95,7 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=current-version::0.0.0"* ]]
[[ "$output" = *"CURRENT_VERSION=0.0.0"* ]]
}
@test "returns a calver if no normal version detected and calver scheme specified" {
@@ -100,7 +107,7 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=current-version::$(date '+%Y.%-m.0')"* ]]
[[ "$output" = *"CURRENT_VERSION=$(date '+%Y.%-m.0')"* ]]
}
@test "converts from older calver scheme automatically" {
@@ -112,7 +119,7 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=current-version::2020.9.2"* ]]
[[ "$output" = *"CURRENT_VERSION=2020.9.2"* ]]
}
@test "strips v from the version" {
@@ -124,5 +131,5 @@ function init_repo {
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"::set-output name=current-version::3.4.5"* ]]
[[ "$output" = *"CURRENT_VERSION=3.4.5"* ]]
}

View File

@@ -75,8 +75,12 @@ fi
# add pre-release info to version if not the default branch
if [[ "${current_ref}" != "refs/heads/${default_branch}" ]] ; then
pre_release="pre.${git_commit}"
new_version="${new_version}-${pre_release}"
echo "::set-output name=pre-release-label::${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}"
fi
if [[ -z "$(echo "${new_version}" | ${grep} -P "${pcre_semver}")" ]] ; then
@@ -88,11 +92,12 @@ fi
echo " The new version is ${new_version}"
echo "::set-output name=version::${new_version}"
echo "::set-output name=v-version::v${new_version}"
echo "::set-output name=major-version::${version_array[0]}"
echo "::set-output name=minor-version::${version_array[1]}"
echo "::set-output name=patch-version::${version_array[2]}"
echo "::set-output name=major-v-version::v${version_array[0]}"
echo "::set-output name=minor-v-version::v${version_array[1]}"
echo "::set-output name=patch-v-version::v${version_array[2]}"
# shellcheck disable=SC2129
echo "VERSION=${new_version}" >> "${GITHUB_OUTPUT}"
echo "V_VERSION=v${new_version}" >> "${GITHUB_OUTPUT}"
echo "MAJOR_VERSION=${version_array[0]}" >> "${GITHUB_OUTPUT}"
echo "MINOR_VERSION=${version_array[1]}" >> "${GITHUB_OUTPUT}"
echo "PATCH_VERSION=${version_array[2]}" >> "${GITHUB_OUTPUT}"
echo "MAJOR_V_VERSION=v${version_array[0]}" >> "${GITHUB_OUTPUT}"
echo "MINOR_V_VERSION=v${version_array[1]}" >> "${GITHUB_OUTPUT}"
echo "PATCH_V_VERSION=v${version_array[2]}" >> "${GITHUB_OUTPUT}"

View File

@@ -61,5 +61,5 @@ fi
echo " The current normal version is ${current_version}"
echo "::set-output name=current-version::${current_version}"
echo "::set-output name=current-v-version::v${current_version}"
echo "CURRENT_VERSION=${current_version}" >> "${GITHUB_OUTPUT}"
echo "CURRENT_V_VERSION=v${current_version}" >> "${GITHUB_OUTPUT}"