36 Commits

Author SHA1 Message Date
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
Phil Jay
5d4fc14ad5 Merge pull request #17 from reecetech/update-bats
Update BATS
2022-10-18 16:33:29 +11:00
Phil Jay
1d159768e8 Update BATS 2022-10-18 16:31:37 +11:00
Phil Jay
69cfa4fa80 Merge pull request #16 from reecetech/action-updates
Update GitHub actions
2022-10-18 16:29:18 +11:00
Phil Jay
b9bae4a2dc Update GitHub actions 2022-10-18 16:10:59 +11:00
Philip Jay
53a0819e66 Merge pull request #15 from reecetech/pre-release
Expose the pre-release label as an output
2022-05-16 11:08:08 +10:00
Phil Jay
e53268eb3f Expose the pre-release label as an output 2022-05-12 15:44:33 +10:00
Asanga K
8d649fcfa3 Merge pull request #14 from reecetech/fix-git-fetch-tags-issue
[DE-4875] Forcing git fetch tags
2022-02-25 13:36:45 +11:00
karunasa
ccbbbe93a8 [DE-4875] Forcing git fetch tags
Workaround for the issue where in certain cases it's failing when a version tag has moved.
2022-02-25 09:26:09 +11:00
Asanga
ddbbe72b7f Merge pull request #13 from reecetech/exposing-convenience-version-numbers
Exposing major, minor and patch numbers as convenience outputs
2022-02-11 08:26:37 +11:00
Phil Jay
ba14b463c4 Add both "plain" and v prefix version outputs 2022-02-10 22:27:59 +11:00
Phil Jay
fde70f2da9 Add tests for new desired output 2022-02-10 22:27:23 +11:00
karunasa
8b854651df Exposing major, minor and patch numbers as outputs 2022-02-10 16:56:32 +11:00
Asanga
40611bca96 Merge pull request #12 from reecetech/using-v-outputs
Using v-* outputs in favor of string manipulation
2022-02-08 15:14:10 +11:00
Asanga
ddfcb5bc04 Updating to the latest version 2022-02-08 15:07:45 +11:00
Asanga
3d00642def Using v-* outputs in favor of string manipulation 2022-02-08 15:06:28 +11:00
Philip Jay
827489c005 Merge pull request #11 from reecetech/fixing-outputs
Fixing the outputs to match README
2022-02-08 14:55:07 +11:00
Phil Jay
ee28762c5b Update README for next version 2022-02-08 14:52:41 +11:00
Asanga
1c6699b17a Fixing the outputs to match with README 2022-02-08 14:40:16 +11:00
Philip Jay
822afeb70c Merge pull request #10 from reecetech/DE-4401-fix-for-pipefails
Avoid broken pipe exits (`141`) when `head` exits
2022-02-01 16:52:07 +11:00
Phil Jay
9492ff84fb Avoid broken pipe exits (141) when head exits
Intermittent issue, only observed on self-hosted agents on VMware (due
to multi-core processing)
2022-02-01 12:23:49 +11:00
Philip Jay
7c6e26cbd9 Merge pull request #9 from reecetech/v-prefix
Add `v` prefixed version output
2021-11-22 10:04:07 +11:00
Phil Jay
38a48eeef1 Add v prefixed version outputs
See: https://github.com/reecetech/version-increment/issues/8
2021-11-15 06:54:57 +11:00
Phil Jay
4988018178 Add tests for v prefixed version output 2021-11-15 06:54:21 +11:00
Philip Jay
3016172c72 Merge pull request #7 from reecetech/update-version-in-README
Replace with latest version
2021-11-03 13:14:27 +11:00
Phil Jay
a17b442bee Replace with latest version
2021.10.4 had a bug, we should have updated this when 2021.10.5 came
out.  Now the next version will be 2021.11.1
2021-11-01 19:08:01 +11:00
Philip Jay
406cc3a662 Merge pull request #6 from reecetech/fix-for-inputs-in-composites
Fix for inputs in composites
2021-10-22 12:00:08 +11:00
Phil Jay
a7121378a5 Fix for composite actions not having INPUT_ vars
See: https://github.com/actions/runner/issues/665
2021-10-22 11:54:47 +11:00
Phil Jay
f9aea6e594 Use latest BATS 2021-10-22 11:54:47 +11:00
8 changed files with 165 additions and 50 deletions

View File

@@ -13,10 +13,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@94e0aab03ca135d11a35e5bfc14e6746dc56e7e9
uses: ludeeus/action-shellcheck@94e0aab03ca135d11a35e5bfc14e6746dc56e7e9 # v1.1.0
with:
check_together: 'yes'
@@ -24,12 +24,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Setup bats
uses: mig4/setup-bats@af9a00deb21b5d795cabfeaa8d9060410377686d
uses: mig4/setup-bats@af9a00deb21b5d795cabfeaa8d9060410377686d # v1.2.0
with:
bats-version: 1.2.1
bats-version: 1.8.0
- name: Test
run: bats tests/*.bats
@@ -41,7 +41,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Lookup version
id: version-lookup
@@ -51,14 +51,14 @@ jobs:
id: version-increment
run: ./version-increment.sh
env:
current_version: ${{ steps.version-lookup.outputs.current-version }}
INPUT_SCHEME: calver
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
scheme: calver
- name: Release version
uses: marvinpinto/action-automatic-releases@919008cf3f741b179569b7a6fb4d8860689ab7f0
if: ${{ github.ref == 'refs/heads/main' }}
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 }}"
automatic_release_tag: "${{ steps.version-increment.outputs.VERSION }}"

View File

@@ -5,8 +5,11 @@
### ⌨️ Example
```yaml
- name: Checkout code
uses: actions/checkout@v2
- name: Get next version
uses: reecetech/version-increment@2021.10.4
uses: reecetech/version-increment@2022.10.3
id: version
with:
scheme: semver
@@ -81,8 +84,17 @@ Examples:
| 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) |
| 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

View File

@@ -20,12 +20,39 @@ inputs:
default: 'patch'
outputs:
current_version:
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 }}
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 }}
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-version:
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:
using: "composite"
@@ -33,9 +60,13 @@ runs:
- id: version-lookup
run: ${{ github.action_path }}/version-lookup.sh
shell: bash
env:
scheme: ${{ inputs.scheme }}
- id: version-increment
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 }}
scheme: ${{ inputs.scheme }}

View File

@@ -15,7 +15,7 @@ pcre_old_calver='^(?P<major>0|[1-9]\d*)-0{0,1}(?P<minor>0|[0-9]\d*)-R(?P<patch>0
## Input validation
input_errors='false'
scheme="${INPUT_SCHEME:-semver}"
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'
@@ -32,3 +32,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

@@ -44,7 +44,7 @@ function init_repo {
@test "fails if invalid scheme given" {
init_repo
export INPUT_SCHEME="foover"
export scheme="foover"
run ../../version-increment.sh
@@ -56,7 +56,7 @@ function init_repo {
@test "fails if invalid increment given" {
init_repo
export INPUT_INCREMENT="critical"
export increment="critical"
run ../../version-increment.sh
@@ -65,69 +65,102 @@ 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
export current_version=1.2.3
export INPUT_INCREMENT="patch"
export increment="patch"
run ../../version-increment.sh
print_run_info
[ "$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)" {
init_repo
export current_version=1.2.3
export INPUT_INCREMENT="minor"
export increment="minor"
run ../../version-increment.sh
print_run_info
[ "$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)" {
init_repo
export current_version=1.2.3
export INPUT_INCREMENT="major"
export increment="major"
run ../../version-increment.sh
print_run_info
[ "$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)" {
init_repo
export current_version=2020.6.4
export INPUT_SCHEME="calver"
export scheme="calver"
run ../../version-increment.sh
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)" {
init_repo
export current_version="$(date +%Y.%-m.123)"
export INPUT_SCHEME="calver"
export scheme="calver"
run ../../version-increment.sh
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" {
@@ -141,5 +174,6 @@ 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}"* ]]
}

View File

@@ -20,7 +20,7 @@ function init_repo {
@test "fails if invalid scheme given" {
init_repo
export INPUT_SCHEME="foover"
export scheme="foover"
run ../../version-lookup.sh
@@ -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,20 @@ 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" {
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" {
@@ -53,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" {
@@ -63,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" {
@@ -75,19 +95,19 @@ 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" {
init_repo
export INPUT_SCHEME="calver"
export scheme="calver"
run ../../version-lookup.sh
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" {
@@ -99,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" {
@@ -111,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

@@ -6,7 +6,7 @@ script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
# shellcheck source=shared.sh
source "${script_dir}/shared.sh"
increment="${INPUT_INCREMENT:-patch}"
increment="${increment:-patch}"
if [[ "${increment}" != 'patch' && "${increment}" != 'minor' && "${increment}" != 'major' ]] ; then
echo "🛑 Value of 'increment' is not valid, choose from 'major', 'minor', or 'patch'" 1>&2
input_errors='true'
@@ -74,7 +74,9 @@ fi
# add pre-release info to version if not the default branch
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
if [[ -z "$(echo "${new_version}" | ${grep} -P "${pcre_semver}")" ]] ; then
@@ -86,4 +88,12 @@ fi
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}"

View File

@@ -27,18 +27,18 @@ fi
# Skip if testing, otherwise pull tags
if [[ -z "${BATS_VERSION:-}" ]] ; then
git fetch --quiet origin 'refs/tags/*:refs/tags/*'
git fetch --quiet --force origin 'refs/tags/*:refs/tags/*'
fi
##==----------------------------------------------------------------------------
## Version parsing
# 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)
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
# 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/')"
@@ -61,4 +61,5 @@ fi
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}"