Merge pull request #5 from reecetech/rework

Rework for slightly better input validation
This commit is contained in:
Philip Jay
2021-10-22 07:35:13 +11:00
committed by GitHub
6 changed files with 29 additions and 24 deletions

View File

@@ -6,7 +6,7 @@
```yaml ```yaml
- name: Get next version - name: Get next version
uses: reecetech/version-increment@2021.10.3 uses: reecetech/version-increment@2021.10.4
id: version id: version
with: with:
scheme: semver scheme: semver

View File

@@ -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="${INPUT_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

View File

@@ -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,14 +37,13 @@ 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 INPUT_SCHEME="foover" export INPUT_SCHEME="foover"
run ../../version-increment.sh run ../../version-increment.sh
@@ -57,13 +56,12 @@ 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 INPUT_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'"* ]]
} }

View File

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

View File

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