Merge pull request #21 from reecetech/support-pep440

Add PEP440 compatibility mode
This commit is contained in:
Phil Jay
2023-04-27 12:00:51 +10:00
committed by GitHub
5 changed files with 107 additions and 6 deletions

View File

@@ -9,7 +9,7 @@
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: Get next version - name: Get next version
uses: reecetech/version-increment@2023.3.1 uses: reecetech/version-increment@2023.4.1
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`
@@ -78,6 +84,7 @@ Examples:
| 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` |
| 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` | | increment | The digit to increment, either `major`, `minor` or `patch`, ignored if `scheme` == `calver` | No | `patch` |
### 📤 Outputs ### 📤 Outputs

View File

@@ -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)
@@ -69,4 +73,5 @@ 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 }}

View File

@@ -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

View File

@@ -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,39 @@ 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 "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

@@ -75,7 +75,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}"
if [[ "${pep440:-}" == 'true' ]] ; then
new_version="${new_version}+${pre_release}"
else
new_version="${new_version}-${pre_release}" 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