mirror of
https://github.com/reecetech/version-increment.git
synced 2025-12-21 14:35:44 +00:00
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1fae3d6b7 | ||
|
|
77dfab16c0 | ||
|
|
2414f2fa44 | ||
|
|
f6d4e915f4 | ||
|
|
5f9f764060 | ||
|
|
0fd6f1742d | ||
|
|
8e33684d42 | ||
|
|
b7be5e00c2 | ||
|
|
ced1d4ac1d | ||
|
|
e7c0a5aac2 | ||
|
|
c1893b945a | ||
|
|
5d4fc14ad5 | ||
|
|
1d159768e8 | ||
|
|
69cfa4fa80 | ||
|
|
b9bae4a2dc | ||
|
|
53a0819e66 | ||
|
|
e53268eb3f | ||
|
|
8d649fcfa3 | ||
|
|
ccbbbe93a8 | ||
|
|
ddbbe72b7f | ||
|
|
ba14b463c4 | ||
|
|
fde70f2da9 | ||
|
|
8b854651df | ||
|
|
40611bca96 | ||
|
|
ddfcb5bc04 | ||
|
|
3d00642def | ||
|
|
827489c005 | ||
|
|
ee28762c5b | ||
|
|
1c6699b17a | ||
|
|
822afeb70c | ||
|
|
9492ff84fb | ||
|
|
7c6e26cbd9 | ||
|
|
38a48eeef1 | ||
|
|
4988018178 | ||
|
|
3016172c72 | ||
|
|
a17b442bee | ||
|
|
406cc3a662 | ||
|
|
a7121378a5 | ||
|
|
f9aea6e594 | ||
|
|
c0c7194013 | ||
|
|
a54c16bb35 |
22
.github/workflows/test-and-release.yml
vendored
22
.github/workflows/test-and-release.yml
vendored
@@ -13,10 +13,10 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Run ShellCheck
|
- name: Run ShellCheck
|
||||||
uses: ludeeus/action-shellcheck@94e0aab03ca135d11a35e5bfc14e6746dc56e7e9
|
uses: ludeeus/action-shellcheck@94e0aab03ca135d11a35e5bfc14e6746dc56e7e9 # v1.1.0
|
||||||
with:
|
with:
|
||||||
check_together: 'yes'
|
check_together: 'yes'
|
||||||
|
|
||||||
@@ -24,12 +24,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Setup bats
|
- name: Setup bats
|
||||||
uses: mig4/setup-bats@af9a00deb21b5d795cabfeaa8d9060410377686d
|
uses: mig4/setup-bats@af9a00deb21b5d795cabfeaa8d9060410377686d # v1.2.0
|
||||||
with:
|
with:
|
||||||
bats-version: 1.2.1
|
bats-version: 1.8.0
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
run: bats tests/*.bats
|
run: bats tests/*.bats
|
||||||
@@ -41,7 +41,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Lookup version
|
- name: Lookup version
|
||||||
id: version-lookup
|
id: version-lookup
|
||||||
@@ -51,14 +51,14 @@ jobs:
|
|||||||
id: version-increment
|
id: version-increment
|
||||||
run: ./version-increment.sh
|
run: ./version-increment.sh
|
||||||
env:
|
env:
|
||||||
current_version: ${{ steps.version-lookup.outputs.current-version }}
|
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
|
||||||
INPUT_SCHEME: calver
|
scheme: calver
|
||||||
|
|
||||||
- name: Release version
|
- name: Release version
|
||||||
uses: marvinpinto/action-automatic-releases@919008cf3f741b179569b7a6fb4d8860689ab7f0
|
uses: marvinpinto/action-automatic-releases@919008cf3f741b179569b7a6fb4d8860689ab7f0 # v1.2.1
|
||||||
if: ${{ github.ref == 'refs/heads/main' }}
|
if: ${{ github.ref_name == github.event.repository.default_branch }}
|
||||||
with:
|
with:
|
||||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
draft: false
|
draft: false
|
||||||
prerelease: false
|
prerelease: false
|
||||||
automatic_release_tag: "${{ steps.version-increment.outputs.version }}"
|
automatic_release_tag: "${{ steps.version-increment.outputs.VERSION }}"
|
||||||
|
|||||||
16
README.md
16
README.md
@@ -5,8 +5,11 @@
|
|||||||
### ⌨️ Example
|
### ⌨️ Example
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Get next version
|
- name: Get next version
|
||||||
uses: reecetech/version-increment@2021.10.3
|
uses: reecetech/version-increment@2023.3.1
|
||||||
id: version
|
id: version
|
||||||
with:
|
with:
|
||||||
scheme: semver
|
scheme: semver
|
||||||
@@ -81,8 +84,17 @@ Examples:
|
|||||||
|
|
||||||
| name | description |
|
| name | description |
|
||||||
| :--- | :--- |
|
| :--- | :--- |
|
||||||
| current_version | The current latest version detected from the git repositories tags |
|
| current-version | The current latest version detected from the git repositories tags |
|
||||||
|
| current-v-version | The current latest version detected from the git repositories tags, prefixed with a `v` character |
|
||||||
| version | The incremented version number (e.g. the next version) |
|
| version | The incremented version number (e.g. the next version) |
|
||||||
|
| v-version | The incremented version number (e.g. the next version), prefixed with a `v` character |
|
||||||
|
| major-version | Major number of the incremented version |
|
||||||
|
| minor-version | Minor number of the incremented version |
|
||||||
|
| patch-version | Patch number of the incremented version |
|
||||||
|
| pre-release-label | Pre-release label of the incremented version |
|
||||||
|
| major-v-version | Major number of the incremented version, prefixed with a `v` character |
|
||||||
|
| minor-v-version | Minor number of the incremented version, prefixed with a `v` character |
|
||||||
|
| patch-v-version | Patch number of the incremented version, prefixed with a `v` character |
|
||||||
|
|
||||||
## 💕 Contributing
|
## 💕 Contributing
|
||||||
|
|
||||||
|
|||||||
39
action.yml
39
action.yml
@@ -20,12 +20,39 @@ inputs:
|
|||||||
default: 'patch'
|
default: 'patch'
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
current_version:
|
current-version:
|
||||||
description: 'Current normal version detected'
|
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 }}
|
||||||
version:
|
version:
|
||||||
description: 'Incremented version calculated'
|
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 }}
|
||||||
|
major-version:
|
||||||
|
description: 'Major number of the incremented version'
|
||||||
|
value: ${{ steps.version-increment.outputs.MAJOR_VERSION }}
|
||||||
|
minor-version:
|
||||||
|
description: 'Minor number of the incremented 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-label:
|
||||||
|
description: 'Pre-release label of the incremented version'
|
||||||
|
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 }}
|
||||||
|
minor-v-version:
|
||||||
|
description: 'Minor number of the incremented version, prefixed with a `v` charatcter'
|
||||||
|
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 }}
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
@@ -33,9 +60,13 @@ runs:
|
|||||||
- id: version-lookup
|
- id: version-lookup
|
||||||
run: ${{ github.action_path }}/version-lookup.sh
|
run: ${{ github.action_path }}/version-lookup.sh
|
||||||
shell: bash
|
shell: bash
|
||||||
|
env:
|
||||||
|
scheme: ${{ inputs.scheme }}
|
||||||
|
|
||||||
- id: version-increment
|
- id: version-increment
|
||||||
run: ${{ github.action_path }}/version-increment.sh
|
run: ${{ github.action_path }}/version-increment.sh
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
current_version: ${{ steps.version-lookup.outputs.current-version }}
|
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
|
||||||
|
increment: ${{ inputs.increment }}
|
||||||
|
scheme: ${{ inputs.scheme }}
|
||||||
|
|||||||
22
shared.sh
22
shared.sh
@@ -2,12 +2,25 @@
|
|||||||
# shellcheck disable=SC2034
|
# shellcheck disable=SC2034
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
# see: https://semver.org/spec/v2.0.0.html#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
##==----------------------------------------------------------------------------
|
||||||
|
## SemVer regexes
|
||||||
|
## see: https://semver.org/spec/v2.0.0.html#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
||||||
|
|
||||||
pcre_semver='^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
|
pcre_semver='^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
|
||||||
pcre_master_ver='^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)$'
|
pcre_master_ver='^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)$'
|
||||||
pcre_allow_vprefix="^v{0,1}${pcre_master_ver:1}"
|
pcre_allow_vprefix="^v{0,1}${pcre_master_ver:1}"
|
||||||
pcre_old_calver='^(?P<major>0|[1-9]\d*)-0{0,1}(?P<minor>0|[0-9]\d*)-R(?P<patch>0|[1-9]\d*)$'
|
pcre_old_calver='^(?P<major>0|[1-9]\d*)-0{0,1}(?P<minor>0|[0-9]\d*)-R(?P<patch>0|[1-9]\d*)$'
|
||||||
|
|
||||||
|
##==----------------------------------------------------------------------------
|
||||||
|
## Input validation
|
||||||
|
|
||||||
|
input_errors='false'
|
||||||
|
scheme="${scheme:-semver}"
|
||||||
|
if [[ "${scheme}" != 'semver' && "${scheme}" != 'calver' ]] ; then
|
||||||
|
echo "🛑 Value of 'scheme' is not valid, choose from 'semver' or 'calver'" 1>&2
|
||||||
|
input_errors='true'
|
||||||
|
fi
|
||||||
|
|
||||||
##==----------------------------------------------------------------------------
|
##==----------------------------------------------------------------------------
|
||||||
## MacOS compatibility - for local testing
|
## MacOS compatibility - for local testing
|
||||||
|
|
||||||
@@ -19,3 +32,10 @@ if [[ "$(uname)" == "Darwin" ]] ; then
|
|||||||
exit 9
|
exit 9
|
||||||
fi
|
fi
|
||||||
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
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ function init_repo {
|
|||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 5 ] &&
|
[ "$status" -eq 8 ] &&
|
||||||
[[ "$output" = *"Environment variable 'current_version' is unset or empty"* ]]
|
[[ "$output" = *"Environment variable 'current_version' is unset or empty"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,15 +37,14 @@ function init_repo {
|
|||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 6 ] &&
|
[ "$status" -eq 8 ] &&
|
||||||
[[ "$output" = *"Environment variable 'current_version' is not a valid normal version"* ]]
|
[[ "$output" = *"Environment variable 'current_version' is not a valid normal version"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "fails if invalid scheme given" {
|
@test "fails if invalid scheme given" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export current_version=1.2.3
|
export scheme="foover"
|
||||||
export INPUT_SCHEME="foover"
|
|
||||||
|
|
||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
@@ -57,79 +56,111 @@ function init_repo {
|
|||||||
@test "fails if invalid increment given" {
|
@test "fails if invalid increment given" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export current_version=1.2.3
|
export increment="critical"
|
||||||
export INPUT_INCREMENT="critical"
|
|
||||||
|
|
||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 7 ] &&
|
[ "$status" -eq 8 ] &&
|
||||||
[[ "$output" = *"Value of 'increment' is not valid, choose from 'major', 'minor', or 'patch'"* ]]
|
[[ "$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)" {
|
@test "increments the patch digit correctly (semver)" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export current_version=1.2.3
|
export current_version=1.2.3
|
||||||
export INPUT_INCREMENT="patch"
|
export increment="patch"
|
||||||
|
|
||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$status" -eq 0 ] &&
|
||||||
[[ "$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)" {
|
@test "increments the minor digit correctly (semver)" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export current_version=1.2.3
|
export current_version=1.2.3
|
||||||
export INPUT_INCREMENT="minor"
|
export increment="minor"
|
||||||
|
|
||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$status" -eq 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 major digit correctly (semver)" {
|
@test "increments the major digit correctly (semver)" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export current_version=1.2.3
|
export current_version=1.2.3
|
||||||
export INPUT_INCREMENT="major"
|
export increment="major"
|
||||||
|
|
||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$status" -eq 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 "prefixes with v" {
|
||||||
|
init_repo
|
||||||
|
|
||||||
|
export current_version=1.2.3
|
||||||
|
export increment="major"
|
||||||
|
|
||||||
|
run ../../version-increment.sh
|
||||||
|
|
||||||
|
print_run_info
|
||||||
|
[ "$status" -eq 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)" {
|
@test "increments to a new month (calver)" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export current_version=2020.6.4
|
export current_version=2020.6.4
|
||||||
export INPUT_SCHEME="calver"
|
export scheme="calver"
|
||||||
|
|
||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$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)" {
|
@test "increments the patch digit within a month (calver)" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export current_version="$(date +%Y.%-m.123)"
|
export current_version="$(date +%Y.%-m.123)"
|
||||||
export INPUT_SCHEME="calver"
|
export scheme="calver"
|
||||||
|
|
||||||
run ../../version-increment.sh
|
run ../../version-increment.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$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" {
|
@test "appends prerelease information if on a branch" {
|
||||||
@@ -143,5 +174,6 @@ function init_repo {
|
|||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$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}"* ]]
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ function init_repo {
|
|||||||
@test "fails if invalid scheme given" {
|
@test "fails if invalid scheme given" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export INPUT_SCHEME="foover"
|
export scheme="foover"
|
||||||
|
|
||||||
run ../../version-lookup.sh
|
run ../../version-lookup.sh
|
||||||
|
|
||||||
@@ -29,6 +29,13 @@ function init_repo {
|
|||||||
[[ "$output" = *"Value of 'scheme' is not valid"* ]]
|
[[ "$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" {
|
@test "finds the current normal version" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
@@ -40,7 +47,20 @@ function init_repo {
|
|||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$status" -eq 0 ] &&
|
||||||
[[ "$output" = *"::set-output name=current-version::0.1.2"* ]]
|
[[ "$output" = *"CURRENT_VERSION=0.1.2"* ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "prefixes with a v" {
|
||||||
|
init_repo
|
||||||
|
|
||||||
|
git tag 0.1.2
|
||||||
|
|
||||||
|
run ../../version-lookup.sh
|
||||||
|
|
||||||
|
print_run_info
|
||||||
|
[ "$status" -eq 0 ] &&
|
||||||
|
[[ "$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" {
|
@test "finds the current normal version even if there's a newer pre-release version" {
|
||||||
@@ -53,7 +73,7 @@ function init_repo {
|
|||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$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" {
|
@test "returns 0.0.0 if no normal version detected" {
|
||||||
@@ -63,7 +83,7 @@ function init_repo {
|
|||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$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" {
|
@test "returns 0.0.0 if no normal version detected even if there's a pre-release version" {
|
||||||
@@ -75,19 +95,19 @@ function init_repo {
|
|||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$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" {
|
@test "returns a calver if no normal version detected and calver scheme specified" {
|
||||||
init_repo
|
init_repo
|
||||||
|
|
||||||
export INPUT_SCHEME="calver"
|
export scheme="calver"
|
||||||
|
|
||||||
run ../../version-lookup.sh
|
run ../../version-lookup.sh
|
||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$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" {
|
@test "converts from older calver scheme automatically" {
|
||||||
@@ -99,7 +119,7 @@ function init_repo {
|
|||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$status" -eq 0 ] &&
|
||||||
[[ "$output" = *"::set-output name=current-version::2020.9.2"* ]]
|
[[ "$output" = *"CURRENT_VERSION=2020.9.2"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "strips v from the version" {
|
@test "strips v from the version" {
|
||||||
@@ -111,5 +131,5 @@ function init_repo {
|
|||||||
|
|
||||||
print_run_info
|
print_run_info
|
||||||
[ "$status" -eq 0 ] &&
|
[ "$status" -eq 0 ] &&
|
||||||
[[ "$output" = *"::set-output name=current-version::3.4.5"* ]]
|
[[ "$output" = *"CURRENT_VERSION=3.4.5"* ]]
|
||||||
}
|
}
|
||||||
@@ -6,25 +6,21 @@ script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
source "${script_dir}/shared.sh"
|
source "${script_dir}/shared.sh"
|
||||||
|
|
||||||
if [[ -z "${current_version:-}" ]] ; then
|
increment="${increment:-patch}"
|
||||||
echo "🛑 Environment variable 'current_version' is unset or empty" 1>&2
|
|
||||||
exit 5
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$(echo "${current_version}" | ${grep} -P "${pcre_master_ver}")" ]] ; then
|
|
||||||
echo "🛑 Environment variable 'current_version' is not a valid normal version (M.m.p)" 1>&2
|
|
||||||
exit 6
|
|
||||||
fi
|
|
||||||
|
|
||||||
increment="${INPUT_INCREMENT:-patch}"
|
|
||||||
if [[ "${increment}" != 'patch' && "${increment}" != 'minor' && "${increment}" != 'major' ]] ; then
|
if [[ "${increment}" != 'patch' && "${increment}" != 'minor' && "${increment}" != 'major' ]] ; then
|
||||||
echo "🛑 Value of 'increment' is not valid, choose from 'major', 'minor', or 'patch'" 1>&2
|
echo "🛑 Value of 'increment' is not valid, choose from 'major', 'minor', or 'patch'" 1>&2
|
||||||
exit 7
|
input_errors='true'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
scheme="${INPUT_SCHEME:-semver}"
|
if [[ -z "${current_version:-}" ]] ; then
|
||||||
if [[ "${scheme}" != 'semver' && "${scheme}" != 'calver' ]] ; then
|
echo "🛑 Environment variable 'current_version' is unset or empty" 1>&2
|
||||||
echo "🛑 Value of 'scheme' is not valid, choose from 'semver' or 'calver'" 1>&2
|
input_errors='true'
|
||||||
|
elif [[ -z "$(echo "${current_version}" | ${grep} -P "${pcre_master_ver}")" ]] ; then
|
||||||
|
echo "🛑 Environment variable 'current_version' is not a valid normal version (M.m.p)" 1>&2
|
||||||
|
input_errors='true'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${input_errors}" == 'true' ]] ; then
|
||||||
exit 8
|
exit 8
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -78,7 +74,9 @@ 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
|
||||||
new_version="${new_version}-pre.${git_commit}"
|
pre_release="pre.${git_commit}"
|
||||||
|
new_version="${new_version}-${pre_release}"
|
||||||
|
echo "PRE_RELEASE_LABEL=${pre_release}" >> "${GITHUB_OUTPUT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z "$(echo "${new_version}" | ${grep} -P "${pcre_semver}")" ]] ; then
|
if [[ -z "$(echo "${new_version}" | ${grep} -P "${pcre_semver}")" ]] ; then
|
||||||
@@ -90,4 +88,12 @@ fi
|
|||||||
|
|
||||||
echo "ℹ️ The new version is ${new_version}"
|
echo "ℹ️ The new version is ${new_version}"
|
||||||
|
|
||||||
echo "::set-output name=version::${new_version}"
|
# 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}"
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|||||||
# shellcheck source=shared.sh
|
# shellcheck source=shared.sh
|
||||||
source "${script_dir}/shared.sh"
|
source "${script_dir}/shared.sh"
|
||||||
|
|
||||||
scheme="${INPUT_SCHEME:-semver}"
|
if [[ "${input_errors}" == 'true' ]] ; then
|
||||||
if [[ "${scheme}" != 'semver' && "${scheme}" != 'calver' ]] ; then
|
|
||||||
echo "🛑 Value of 'scheme' is not valid, choose from 'semver' or 'calver'" 1>&2
|
|
||||||
exit 8
|
exit 8
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -29,18 +27,18 @@ fi
|
|||||||
|
|
||||||
# Skip if testing, otherwise pull tags
|
# Skip if testing, otherwise pull tags
|
||||||
if [[ -z "${BATS_VERSION:-}" ]] ; then
|
if [[ -z "${BATS_VERSION:-}" ]] ; then
|
||||||
git fetch --quiet origin 'refs/tags/*:refs/tags/*'
|
git fetch --quiet --force origin 'refs/tags/*:refs/tags/*'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##==----------------------------------------------------------------------------
|
##==----------------------------------------------------------------------------
|
||||||
## Version parsing
|
## Version parsing
|
||||||
|
|
||||||
# detect current version - removing "v" from start of tag if it exists
|
# detect current version - removing "v" from start of tag if it exists
|
||||||
current_version="$(git tag -l | { ${grep} -P "${pcre_allow_vprefix}" || true; } | sed 's/^v//g' | sort -V --reverse | head -n1)"
|
current_version="$(git tag -l | { ${grep} -P "${pcre_allow_vprefix}" || true; } | sed 's/^v//g' | sort -V | tail -n 1)"
|
||||||
|
|
||||||
# support transition from an old reecetech calver style (yyyy-mm-Rr, where R is the literal `R`, and r is the nth release for the month)
|
# support transition from an old reecetech calver style (yyyy-mm-Rr, where R is the literal `R`, and r is the nth release for the month)
|
||||||
if [[ -z "${current_version:-}" ]] ; then
|
if [[ -z "${current_version:-}" ]] ; then
|
||||||
current_version="$(git tag -l | { ${grep} -P "${pcre_old_calver}" || true; } | sort -V --reverse | head -n1)"
|
current_version="$(git tag -l | { ${grep} -P "${pcre_old_calver}" || true; } | sort -V | tail -n 1)"
|
||||||
if [[ -n "${current_version:-}" ]] ; then
|
if [[ -n "${current_version:-}" ]] ; then
|
||||||
# convert - to . and drop leading zeros & the R
|
# convert - to . and drop leading zeros & the R
|
||||||
current_version="$(echo "${current_version}" | sed -r 's/^([0-9]+)-0{0,1}([0-9]+)-R0{0,1}([0-9]+)$/\1.\2.\3/')"
|
current_version="$(echo "${current_version}" | sed -r 's/^([0-9]+)-0{0,1}([0-9]+)-R0{0,1}([0-9]+)$/\1.\2.\3/')"
|
||||||
@@ -63,4 +61,5 @@ fi
|
|||||||
|
|
||||||
echo "ℹ️ The current normal version is ${current_version}"
|
echo "ℹ️ The current normal version is ${current_version}"
|
||||||
|
|
||||||
echo "::set-output name=current-version::${current_version}"
|
echo "CURRENT_VERSION=${current_version}" >> "${GITHUB_OUTPUT}"
|
||||||
|
echo "CURRENT_V_VERSION=v${current_version}" >> "${GITHUB_OUTPUT}"
|
||||||
|
|||||||
Reference in New Issue
Block a user