18 Commits

Author SHA1 Message Date
Phil Jay
dee3ec8905 Merge pull request #30 from b0bben/action-path-lookup-windows
Add Windows runners compatibility
2024-04-24 12:37:10 +10:00
Phil Jay
8df12f2eb1 Update README 2024-04-24 12:35:10 +10:00
Phil Jay
16351e1923 Update to use brace variable referencing
https://stackoverflow.com/a/8748880
2024-04-24 12:28:33 +10:00
Phil Jay
512aaef59f Fix: file location after rework of tests 2024-04-24 12:25:14 +10:00
Phil Jay
238431148e Remove log message
- Message is using a variable that's not confirmed as set yet
- Message is output by `version-lookup.sh` in normal operation anyway
2024-04-24 12:25:14 +10:00
Phil Jay
192637163e Enable testing on Windows 2024-04-24 12:12:29 +10:00
Bob Jelica
b51c517604 Force utf8 for all commands during execution 2024-04-24 12:12:04 +10:00
Bob Jelica
3165846543 Force utf8 before grepping 2024-04-24 12:09:02 +10:00
Bob Jelica
f16cac75c5 Try forcing locale for grep 2024-04-24 12:02:38 +10:00
Bob Jelica
d4ed669f7f Fix other test + add more debugging for windows 2024-04-24 12:01:04 +10:00
Bob Jelica
a121e1106e Fix tests 2024-04-24 12:01:04 +10:00
Bob Jelica
0483a06d99 Set starting patch number to '1' since increment doesn't work with 0s 2024-04-24 12:01:04 +10:00
Bob Jelica
a6b9cc8234 Fix 2nd location with path as well 2024-04-24 12:01:04 +10:00
Bob Jelica
2055d25933 Lookup action path in a Windows-friendly way 2024-04-24 12:01:04 +10:00
Phil Jay
acb0193bef Merge pull request #32 from ps-jay/matrix
Add multi-OS testing (`ubuntu` & `macos` for now); Rework MacOS support to use `perl`
2024-04-24 11:55:29 +10:00
Phil Jay
ed7b98e336 Disable Windows testing for now 2024-04-24 11:45:57 +10:00
Phil Jay
13338be6d3 Rework MacOS support 2024-04-24 11:43:51 +10:00
Phil Jay
74a6f3d520 Run tests on all runner types 2024-04-24 11:00:01 +10:00
8 changed files with 94 additions and 43 deletions

View File

@@ -72,12 +72,20 @@ jobs:
- lint - lint
- test - test
- test-api-mode - test-api-mode
runs-on: ubuntu-latest strategy:
matrix:
os:
- macos-latest
- ubuntu-latest
- windows-latest
fail-fast: true
runs-on: ${{ matrix.os }}
steps: steps:
- name: Checkout code # have to checkout to have the source code available - name: Checkout code # have to checkout to have the source code available
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Remove .git directory # remove the git directory to make the testing valid - name: Remove .git directory # remove the git directory to make the testing valid
shell: bash
run: rm -rf .git/ run: rm -rf .git/
- name: Get next version via API - name: Get next version via API

View File

@@ -2,6 +2,10 @@
## Use 📄 ## Use 📄
> [!NOTE]
> This action is confirmed to work on all three of GitHub's hosted runners -
> `ubuntu-latest`, `macos-latest` and `windows-latest` - at the point in time of the release of the action
### Example ⌨️ ### Example ⌨️
```yaml ```yaml
@@ -9,7 +13,7 @@
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Get next version - name: Get next version
uses: reecetech/version-increment@2023.9.3 uses: reecetech/version-increment@2024.4.3
id: version id: version
with: with:
scheme: semver scheme: semver
@@ -30,7 +34,7 @@ use the API mode:
```yaml ```yaml
- name: Get next version - name: Get next version
uses: reecetech/version-increment@2024.4.1 uses: reecetech/version-increment@2024.4.3
id: version id: version
with: with:
use_api: true use_api: true

View File

@@ -80,7 +80,7 @@ runs:
using: "composite" using: "composite"
steps: steps:
- 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: env:
github_token: ${{ github.token }} github_token: ${{ github.token }}
@@ -88,7 +88,7 @@ runs:
use_api: ${{ inputs.use_api }} use_api: ${{ inputs.use_api }}
- 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 }}

View File

@@ -2,6 +2,9 @@
# shellcheck disable=SC2034 # shellcheck disable=SC2034
set -euo pipefail set -euo pipefail
# Force UTF-8 for all commands, for Git-Bash on Windows compatibility
export LC_ALL=C.UTF-8
##==---------------------------------------------------------------------------- ##==----------------------------------------------------------------------------
## SemVer regexes ## SemVer regexes
## see: https://semver.org/spec/v2.0.0.html#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string ## see: https://semver.org/spec/v2.0.0.html#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
@@ -49,17 +52,35 @@ if [[ "${use_api}" == 'true' ]] ; then
fi fi
##==---------------------------------------------------------------------------- ##==----------------------------------------------------------------------------
## MacOS compatibility - for local testing ## MacOS compatibility
export grep="grep" export use_perl="false"
if [[ "$(uname)" == "Darwin" ]] ; then export use_gnugrep="false"
export grep="ggrep" if [[ "${GITHUB_ACTIONS:-}" == 'true' && "$(uname)" == 'Darwin' ]] ; then
if ! grep --version 1>/dev/null ; then export use_perl="true"
elif [[ "$(uname)" == 'Darwin' ]] ; then
if perl --version 1>/dev/null ; then
export use_perl="true"
elif ! ggrep --version 1>/dev/null ; then
echo "🛑 GNU grep not installed, try brew install coreutils" 1>&2 echo "🛑 GNU grep not installed, try brew install coreutils" 1>&2
exit 9 exit 9
else
export use_gnugrep="true"
fi fi
fi fi
function grep_p() {
if [[ "${use_perl}" == 'true' ]] ; then
perl -ne "print if /${1}/"
elif [[ "${use_gnugrep}" == 'true' ]] ; then
# shellcheck disable=SC2086
ggrep -P "${1}"
else
# shellcheck disable=SC2086
command grep -P "${1}"
fi
}
##==---------------------------------------------------------------------------- ##==----------------------------------------------------------------------------
## Non GitHub compatibility - for testing both locally and in BATS ## Non GitHub compatibility - for testing both locally and in BATS

View File

@@ -1,6 +1,15 @@
#!/usr/bin/env bats #!/usr/bin/env bats
# vim: set ft=sh sw=4 : # vim: set ft=sh sw=4 :
setup() {
# get the containing directory of this file
# use $BATS_TEST_FILENAME instead of ${BASH_SOURCE[0]} or $0,
# as those will point to the bats executable's location or the preprocessed file respectively
DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
# make executables in src/ visible to PATH
PATH="$DIR/../:$PATH"
}
load helper_print-info load helper_print-info
export repo=".tmp_testing/repo" export repo=".tmp_testing/repo"
@@ -22,7 +31,7 @@ function init_repo {
@test "fails if no current_version given" { @test "fails if no current_version given" {
init_repo init_repo
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 8 ] && [ "$status" -eq 8 ] &&
@@ -34,7 +43,7 @@ function init_repo {
export current_version=1.3.5-prerelease export current_version=1.3.5-prerelease
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 8 ] && [ "$status" -eq 8 ] &&
@@ -46,7 +55,7 @@ function init_repo {
export scheme="foover" export scheme="foover"
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 8 ] && [ "$status" -eq 8 ] &&
@@ -58,7 +67,7 @@ function init_repo {
export pep440="yes" export pep440="yes"
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 8 ] && [ "$status" -eq 8 ] &&
@@ -70,7 +79,7 @@ function init_repo {
export increment="critical" export increment="critical"
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 8 ] && [ "$status" -eq 8 ] &&
@@ -90,7 +99,7 @@ function init_repo {
export current_version=1.2.3 export current_version=1.2.3
export 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 ] &&
@@ -106,7 +115,7 @@ function init_repo {
export current_version=1.2.3 export current_version=1.2.3
export 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 ] &&
@@ -123,7 +132,7 @@ function init_repo {
export pep404="false" export pep404="false"
export 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 ] &&
@@ -139,7 +148,7 @@ function init_repo {
export current_version=1.2.3 export current_version=1.2.3
export 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 ] &&
@@ -156,7 +165,7 @@ function init_repo {
export pep404="true" export pep404="true"
export 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 ] &&
@@ -172,7 +181,7 @@ function init_repo {
export current_version=1.2.3 export current_version=1.2.3
export 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 ] &&
@@ -189,7 +198,7 @@ function init_repo {
export current_version=2020.6.4 export current_version=2020.6.4
export 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 ] &&
@@ -202,7 +211,7 @@ function init_repo {
export current_version="$(date +%Y.%-m.123)" export current_version="$(date +%Y.%-m.123)"
export 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 ] &&
@@ -216,7 +225,7 @@ function init_repo {
export GITHUB_REF="refs/heads/super-awesome-feature" export GITHUB_REF="refs/heads/super-awesome-feature"
export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')" export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')"
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&
@@ -231,7 +240,7 @@ function init_repo {
export GITHUB_REF="refs/heads/releases" export GITHUB_REF="refs/heads/releases"
export release_branch="releases" export release_branch="releases"
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&
@@ -248,7 +257,7 @@ function init_repo {
export GITHUB_REF="refs/heads/super-awesome-python" export GITHUB_REF="refs/heads/super-awesome-python"
export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')" export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')"
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&
@@ -265,7 +274,7 @@ function init_repo {
export GITHUB_REF="refs/heads/super-awesome-python" export GITHUB_REF="refs/heads/super-awesome-python"
export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')" export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')"
run ../../version-increment.sh run version-increment.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&

View File

@@ -5,6 +5,15 @@ load helper_print-info
export repo=".tmp_testing/repo" export repo=".tmp_testing/repo"
setup() {
# get the containing directory of this file
# use $BATS_TEST_FILENAME instead of ${BASH_SOURCE[0]} or $0,
# as those will point to the bats executable's location or the preprocessed file respectively
DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
# make executables in src/ visible to PATH
PATH="$DIR/../:$PATH"
}
function init_repo { function init_repo {
rm -rf "${repo}" && rm -rf "${repo}" &&
mkdir -p "${repo}" && mkdir -p "${repo}" &&
@@ -22,7 +31,7 @@ function init_repo {
export scheme="foover" export scheme="foover"
run ../../version-lookup.sh run version-lookup.sh
print_run_info print_run_info
[ "$status" -eq 8 ] && [ "$status" -eq 8 ] &&
@@ -43,7 +52,7 @@ function init_repo {
git tag 0.1.1 git tag 0.1.1
git tag 0.1.2 git tag 0.1.2
run ../../version-lookup.sh run version-lookup.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&
@@ -55,7 +64,7 @@ function init_repo {
git tag 0.1.2 git tag 0.1.2
run ../../version-lookup.sh run version-lookup.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&
@@ -69,7 +78,7 @@ function init_repo {
git tag 1.2.300 git tag 1.2.300
git tag 1.2.301-dev.234 git tag 1.2.301-dev.234
run ../../version-lookup.sh run version-lookup.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&
@@ -79,7 +88,7 @@ function init_repo {
@test "returns 0.0.0 if no normal version detected" { @test "returns 0.0.0 if no normal version detected" {
init_repo init_repo
run ../../version-lookup.sh run version-lookup.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&
@@ -91,7 +100,7 @@ function init_repo {
git tag 0.0.1-dev.999 git tag 0.0.1-dev.999
run ../../version-lookup.sh run version-lookup.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&
@@ -103,7 +112,7 @@ function init_repo {
export 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 ] &&
@@ -115,7 +124,7 @@ function init_repo {
git tag v3.4.5 git tag v3.4.5
run ../../version-lookup.sh run version-lookup.sh
print_run_info print_run_info
[ "$status" -eq 0 ] && [ "$status" -eq 0 ] &&

View File

@@ -15,7 +15,7 @@ fi
if [[ -z "${current_version:-}" ]] ; then if [[ -z "${current_version:-}" ]] ; then
echo "🛑 Environment variable 'current_version' is unset or empty" 1>&2 echo "🛑 Environment variable 'current_version' is unset or empty" 1>&2
input_errors='true' input_errors='true'
elif [[ -z "$(echo "${current_version}" | ${grep} -P "${pcre_master_ver}")" ]] ; then 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 echo "🛑 Environment variable 'current_version' is not a valid normal version (M.m.p)" 1>&2
input_errors='true' input_errors='true'
fi fi
@@ -43,7 +43,7 @@ elif [[ -z "${BATS_VERSION:-}" ]] ; then
| jq -r '.default_branch' | jq -r '.default_branch'
)" )"
else else
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
fi fi
@@ -67,13 +67,13 @@ if [[ "${scheme}" == 'conventional_commits' ]] ; then
# Check commit message header # Check commit message header
found_match='false' found_match='false'
if [[ -n "$(echo "${commit_message}" | ${grep} -P "${pcre_conventional_commit_breaking}")" ]] ; then if [[ -n "$(echo "${commit_message}" | grep_p "${pcre_conventional_commit_breaking}")" ]] ; then
increment='major' increment='major'
found_match='true' found_match='true'
elif [[ -n "$(echo "${commit_message}" | ${grep} -P "${pcre_conventional_commit_minor}")" ]] ; then elif [[ -n "$(echo "${commit_message}" | grep_p "${pcre_conventional_commit_minor}")" ]] ; then
increment='minor' increment='minor'
found_match='true' found_match='true'
elif [[ -n "$(echo "${commit_message}" | ${grep} -P "${pcre_conventional_commit_patch}")" ]] ; then elif [[ -n "$(echo "${commit_message}" | grep_p "${pcre_conventional_commit_patch}")" ]] ; then
increment='patch' increment='patch'
found_match='true' found_match='true'
fi fi
@@ -128,7 +128,7 @@ if [[ "${current_ref}" != "refs/heads/${default_branch}" ]] ; then
echo "PRE_RELEASE_LABEL=${pre_release}" >> "${GITHUB_OUTPUT}" 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
echo "🛑 Version incrementing has failed to produce a semver compliant version" 1>&2 echo "🛑 Version incrementing has failed to produce a semver compliant version" 1>&2
echo " See: https://semver.org/spec/v2.0.0.html" 1>&2 echo " See: https://semver.org/spec/v2.0.0.html" 1>&2
echo " Failed version string: '${new_version}'" 1>&2 echo " Failed version string: '${new_version}'" 1>&2

View File

@@ -32,12 +32,12 @@ if [[ "${use_api:-}" == 'true' ]] ; then
-H "X-GitHub-Api-Version: 2022-11-28" \ -H "X-GitHub-Api-Version: 2022-11-28" \
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/git/matching-refs/tags/" \ "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/git/matching-refs/tags/" \
| jq -r '.[].ref' | sed 's|refs/tags/||g' \ | jq -r '.[].ref' | sed 's|refs/tags/||g' \
| { ${grep} -P "${pcre_allow_vprefix}" || true; } | sed 's/^v//g' | sort -V | tail -n 1 | { grep_p "${pcre_allow_vprefix}" || true; } | sed 's/^v//g' | sort -V | tail -n 1
)" )"
else else
current_version="$( current_version="$(
git tag -l \ git tag -l \
| { ${grep} -P "${pcre_allow_vprefix}" || true; } | sed 's/^v//g' | sort -V | tail -n 1 | { grep_p "${pcre_allow_vprefix}" || true; } | sed 's/^v//g' | sort -V | tail -n 1
)" )"
fi fi