mirror of
https://github.com/reecetech/version-increment.git
synced 2025-12-21 14:35:44 +00:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dee3ec8905 | ||
|
|
8df12f2eb1 | ||
|
|
16351e1923 | ||
|
|
512aaef59f | ||
|
|
238431148e | ||
|
|
192637163e | ||
|
|
b51c517604 | ||
|
|
3165846543 | ||
|
|
f16cac75c5 | ||
|
|
d4ed669f7f | ||
|
|
a121e1106e | ||
|
|
0483a06d99 | ||
|
|
a6b9cc8234 | ||
|
|
2055d25933 | ||
|
|
acb0193bef | ||
|
|
ed7b98e336 | ||
|
|
13338be6d3 | ||
|
|
74a6f3d520 | ||
|
|
ae1ae190dc | ||
|
|
81805365e1 | ||
|
|
c6ea11748a | ||
|
|
73ade5516c | ||
|
|
352a9961c8 | ||
|
|
a449b75848 | ||
|
|
0df84379a9 | ||
|
|
0c4ebd1e55 | ||
|
|
b920b6b45e |
12
.github/workflows/test-and-release.yml
vendored
12
.github/workflows/test-and-release.yml
vendored
@@ -65,19 +65,27 @@ jobs:
|
||||
|
||||
- name: Check increment result
|
||||
shell: bash
|
||||
run: '[[ "$(date +%Y.%m)" == "$(echo "${{ steps.version-increment.outputs.VERSION }}" | cut -d "." -f 1-2)" ]]'
|
||||
run: '[[ "$(date +%Y.%-m)" == "$(echo "${{ steps.version-increment.outputs.VERSION }}" | cut -d "." -f 1-2)" ]]'
|
||||
|
||||
test-action-yml: # integration testing
|
||||
needs:
|
||||
- lint
|
||||
- test
|
||||
- test-api-mode
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- macos-latest
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
fail-fast: true
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout code # have to checkout to have the source code available
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Remove .git directory # remove the git directory to make the testing valid
|
||||
shell: bash
|
||||
run: rm -rf .git/
|
||||
|
||||
- name: Get next version via API
|
||||
|
||||
1
.shellcheckrc
Normal file
1
.shellcheckrc
Normal file
@@ -0,0 +1 @@
|
||||
external-sources=true
|
||||
26
README.md
26
README.md
@@ -2,6 +2,10 @@
|
||||
|
||||
## 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 ⌨️
|
||||
|
||||
```yaml
|
||||
@@ -9,7 +13,7 @@
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get next version
|
||||
uses: reecetech/version-increment@2023.9.3
|
||||
uses: reecetech/version-increment@2024.4.3
|
||||
id: version
|
||||
with:
|
||||
scheme: semver
|
||||
@@ -30,7 +34,7 @@ use the API mode:
|
||||
|
||||
```yaml
|
||||
- name: Get next version
|
||||
uses: reecetech/version-increment@2023.10.1
|
||||
uses: reecetech/version-increment@2024.4.3
|
||||
id: version
|
||||
with:
|
||||
use_api: true
|
||||
@@ -70,6 +74,22 @@ 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.
|
||||
|
||||
### Conventional Commits (semver with smarts) 💡
|
||||
|
||||
If you choose the conventional commits scheme, the action will parse the last commit message _(usually the merge commit)_ to determine
|
||||
the increment type for a `semver` version.
|
||||
|
||||
The following increment types by keyword are supported:
|
||||
- patch: build, chore, ci, docs, fix, perf, refactor, revert, style, test
|
||||
- minor: feat
|
||||
- major: any of the above keywords followed by a '!' character, or 'BREAKING CHANGE:' in commit body
|
||||
|
||||
If none of the keywords are detected, then the increment specified by the `increment` input will be used (defaults to patch).
|
||||
|
||||
> [!TIP]
|
||||
> You might like to _enforce_ conventional commits in the title of your pull requests to ensure that the merge commit has the correct
|
||||
> information. Something like this action might be handy: https://github.com/marketplace/actions/conventional-commit-in-pull-requests
|
||||
|
||||
### Default branch vs. any other branch 🎋
|
||||
|
||||
**Default branch**
|
||||
@@ -107,7 +127,7 @@ Examples:
|
||||
|
||||
| name | description | required | default |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| scheme | The versioning scheme in-use, either `semver` or `calver` | No | `semver` |
|
||||
| scheme | The versioning scheme in-use, either `semver`, `calver` or `conventional_commits` | 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` |
|
||||
| release_branch | Specify a non-default branch to use for the release tag (the one without -pre) | No | |
|
||||
|
||||
20
action.yml
20
action.yml
@@ -8,7 +8,14 @@ branding:
|
||||
|
||||
inputs:
|
||||
scheme:
|
||||
description: 'Versioning scheme - semver, or, calver (defaults to semver)'
|
||||
description: |
|
||||
Versioning scheme - semver, calver or conventional_commits (defaults to semver).
|
||||
|
||||
`conventional_commits` Will parse the last commit message (e.g. the merge commit) to
|
||||
determine the increment type, and supports the following increment types by keyword:
|
||||
- patch (build, chore, ci, docs, fix, perf, refactor, revert, style, test)
|
||||
- minor (feat)
|
||||
- major (any of the above keywords followed by a '!' character, or 'BREAKING CHANGE:' in commit body)
|
||||
required: false
|
||||
default: 'semver'
|
||||
pep440:
|
||||
@@ -19,6 +26,9 @@ inputs:
|
||||
description: |
|
||||
Field to increment - major, minor, or, patch (defaults to patch)
|
||||
|
||||
If using the `conventional_commits` scheme, this is the default increment if the parsing of the merge commit fails to
|
||||
find conventional commits information
|
||||
|
||||
Not applicable to `calver` scheme
|
||||
required: false
|
||||
default: 'patch'
|
||||
@@ -36,14 +46,14 @@ outputs:
|
||||
description: 'Current normal version detected'
|
||||
value: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
|
||||
current-v-version:
|
||||
description: 'Current normal version detected, prefixed with a `v` charatcter'
|
||||
description: 'Current normal version detected, prefixed with a `v` character'
|
||||
value: ${{ steps.version-lookup.outputs.CURRENT_V_VERSION }}
|
||||
version:
|
||||
description: 'Incremented version calculated'
|
||||
value: ${{ steps.version-increment.outputs.VERSION }}
|
||||
v-version:
|
||||
description: 'Incremented version calculated, prefixed with a `v` charatcter'
|
||||
value: ${{ steps.version-increment.outputs.V_VERSION }}
|
||||
value: ${{ steps.version-increment.outputs.V_VERSION }}
|
||||
major-version:
|
||||
description: 'Major number of the incremented version'
|
||||
value: ${{ steps.version-increment.outputs.MAJOR_VERSION }}
|
||||
@@ -70,7 +80,7 @@ runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- id: version-lookup
|
||||
run: ${{ github.action_path }}/version-lookup.sh
|
||||
run: "${GITHUB_ACTION_PATH}/version-lookup.sh"
|
||||
shell: bash
|
||||
env:
|
||||
github_token: ${{ github.token }}
|
||||
@@ -78,7 +88,7 @@ runs:
|
||||
use_api: ${{ inputs.use_api }}
|
||||
|
||||
- id: version-increment
|
||||
run: ${{ github.action_path }}/version-increment.sh
|
||||
run: "${GITHUB_ACTION_PATH}/version-increment.sh"
|
||||
shell: bash
|
||||
env:
|
||||
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
|
||||
|
||||
44
shared.sh
44
shared.sh
@@ -2,6 +2,9 @@
|
||||
# shellcheck disable=SC2034
|
||||
set -euo pipefail
|
||||
|
||||
# Force UTF-8 for all commands, for Git-Bash on Windows compatibility
|
||||
export LC_ALL=C.UTF-8
|
||||
|
||||
##==----------------------------------------------------------------------------
|
||||
## SemVer regexes
|
||||
## see: https://semver.org/spec/v2.0.0.html#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
|
||||
@@ -11,13 +14,21 @@ pcre_master_ver='^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9
|
||||
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*)$'
|
||||
|
||||
##==----------------------------------------------------------------------------
|
||||
## Conventional commit regexes
|
||||
## see: https://www.conventionalcommits.org/en/v1.0.0/
|
||||
|
||||
pcre_conventional_commit_patch='^(build|chore|ci|docs|fix|perf|refactor|revert|style|test)(\([a-zA-Z0-9-]+\))?:\s.*'
|
||||
pcre_conventional_commit_minor='^(feat)(\([a-zA-Z0-9-]+\))?:\s.*'
|
||||
pcre_conventional_commit_breaking='^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-zA-Z0-9-]+\))?!:.*|BREAKING CHANGE:'
|
||||
|
||||
##==----------------------------------------------------------------------------
|
||||
## 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
|
||||
if [[ "${scheme}" != 'semver' && "${scheme}" != 'calver' && "${scheme}" != 'conventional_commits' ]] ; then
|
||||
echo "🛑 Value of 'scheme' is not valid, choose from 'semver', 'calver' or 'conventional_commits" 1>&2
|
||||
input_errors='true'
|
||||
fi
|
||||
|
||||
@@ -40,19 +51,36 @@ if [[ "${use_api}" == 'true' ]] ; then
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
##==----------------------------------------------------------------------------
|
||||
## MacOS compatibility - for local testing
|
||||
## MacOS compatibility
|
||||
|
||||
export grep="grep"
|
||||
if [[ "$(uname)" == "Darwin" ]] ; then
|
||||
export grep="ggrep"
|
||||
if ! grep --version 1>/dev/null ; then
|
||||
export use_perl="false"
|
||||
export use_gnugrep="false"
|
||||
if [[ "${GITHUB_ACTIONS:-}" == 'true' && "$(uname)" == 'Darwin' ]] ; 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
|
||||
exit 9
|
||||
else
|
||||
export use_gnugrep="true"
|
||||
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
|
||||
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
#!/usr/bin/env bats
|
||||
# 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
|
||||
|
||||
export repo=".tmp_testing/repo"
|
||||
@@ -22,7 +31,7 @@ function init_repo {
|
||||
@test "fails if no current_version given" {
|
||||
init_repo
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 8 ] &&
|
||||
@@ -34,7 +43,7 @@ function init_repo {
|
||||
|
||||
export current_version=1.3.5-prerelease
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 8 ] &&
|
||||
@@ -46,7 +55,7 @@ function init_repo {
|
||||
|
||||
export scheme="foover"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 8 ] &&
|
||||
@@ -58,7 +67,7 @@ function init_repo {
|
||||
|
||||
export pep440="yes"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 8 ] &&
|
||||
@@ -70,7 +79,7 @@ function init_repo {
|
||||
|
||||
export increment="critical"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 8 ] &&
|
||||
@@ -90,7 +99,7 @@ function init_repo {
|
||||
export current_version=1.2.3
|
||||
export increment="patch"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -106,7 +115,7 @@ function init_repo {
|
||||
export current_version=1.2.3
|
||||
export increment="minor"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -123,7 +132,7 @@ function init_repo {
|
||||
export pep404="false"
|
||||
export increment="minor"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -139,7 +148,7 @@ function init_repo {
|
||||
export current_version=1.2.3
|
||||
export increment="major"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -156,7 +165,7 @@ function init_repo {
|
||||
export pep404="true"
|
||||
export increment="major"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -172,7 +181,7 @@ function init_repo {
|
||||
export current_version=1.2.3
|
||||
export increment="major"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -189,7 +198,7 @@ function init_repo {
|
||||
export current_version=2020.6.4
|
||||
export scheme="calver"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -202,7 +211,7 @@ function init_repo {
|
||||
export current_version="$(date +%Y.%-m.123)"
|
||||
export scheme="calver"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -216,7 +225,7 @@ function init_repo {
|
||||
export GITHUB_REF="refs/heads/super-awesome-feature"
|
||||
export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -231,7 +240,7 @@ function init_repo {
|
||||
export GITHUB_REF="refs/heads/releases"
|
||||
export release_branch="releases"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -248,7 +257,7 @@ function init_repo {
|
||||
export GITHUB_REF="refs/heads/super-awesome-python"
|
||||
export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')"
|
||||
|
||||
run ../../version-increment.sh
|
||||
run version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -265,10 +274,138 @@ function init_repo {
|
||||
export GITHUB_REF="refs/heads/super-awesome-python"
|
||||
export short_ref="$(git rev-parse --short HEAD | sed 's/0*//')"
|
||||
|
||||
run ../../version-increment.sh
|
||||
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}"* ]]
|
||||
}
|
||||
|
||||
@test "increments the patch version after a fix commit (conventional commits)" {
|
||||
init_repo
|
||||
|
||||
export current_version=1.2.3
|
||||
export scheme="conventional_commits"
|
||||
|
||||
echo "fix: something" > fix.txt
|
||||
git add fix.txt
|
||||
git commit -m "fix: something"
|
||||
|
||||
run ../../version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
[[ "$output" = *"VERSION=1.2.4"* ]]
|
||||
[[ "$output" != *"No conventional commit found"* ]]
|
||||
}
|
||||
|
||||
|
||||
@test "increments the patch version after a scoped fix commit (conventional commits)" {
|
||||
init_repo
|
||||
|
||||
export current_version=1.2.3
|
||||
export scheme="conventional_commits"
|
||||
|
||||
echo "fix: something" > fix.txt
|
||||
git add fix.txt
|
||||
git commit -m "fix(api): something"
|
||||
|
||||
run ../../version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
[[ "$output" = *"VERSION=1.2.4"* ]]
|
||||
[[ "$output" != *"No conventional commit found"* ]]
|
||||
}
|
||||
|
||||
@test "increments the major version after a breaking fix commit (conventional commits)" {
|
||||
init_repo
|
||||
|
||||
export current_version=1.2.3
|
||||
export scheme="conventional_commits"
|
||||
|
||||
echo "fix: breaking something" > fix.txt
|
||||
git add fix.txt
|
||||
git commit -m "fix!: something"
|
||||
|
||||
run ../../version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
[[ "$output" = *"VERSION=2.0.0"* ]]
|
||||
[[ "$output" != *"No conventional commit found"* ]]
|
||||
}
|
||||
|
||||
@test "increments the minor version after a feat commit (conventional commits)" {
|
||||
init_repo
|
||||
|
||||
export current_version=1.2.3
|
||||
export scheme="conventional_commits"
|
||||
|
||||
echo "new feature" > feat.txt
|
||||
git add feat.txt
|
||||
git commit -m "feat: something"
|
||||
|
||||
run ../../version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
[[ "$output" = *"VERSION=1.3.0"* ]]
|
||||
[[ "$output" != *"No conventional commit found"* ]]
|
||||
}
|
||||
|
||||
@test "increments the major version after a breaking feat commit (conventional commits)" {
|
||||
init_repo
|
||||
|
||||
export current_version=1.2.3
|
||||
export scheme="conventional_commits"
|
||||
|
||||
echo "breaking new feature" > feat.txt
|
||||
git add feat.txt
|
||||
git commit -m "feat!: something"
|
||||
|
||||
run ../../version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
[[ "$output" = *"VERSION=2.0.0"* ]]
|
||||
[[ "$output" != *"No conventional commit found"* ]]
|
||||
}
|
||||
|
||||
@test "increments the major version after a breaking change in the commit body (conventional commits)" {
|
||||
init_repo
|
||||
|
||||
export current_version=1.2.3
|
||||
export scheme="conventional_commits"
|
||||
|
||||
echo "breaking new fix" > feat.txt
|
||||
git add feat.txt
|
||||
git commit -m "Fix: something
|
||||
BREAKING CHANGE: really important"
|
||||
|
||||
run ../../version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
[[ "$output" = *"VERSION=2.0.0"* ]]
|
||||
[[ "$output" != *"No conventional commit found"* ]]
|
||||
}
|
||||
|
||||
@test "increments the patch version by default if no conventional commits found and enabled (conventional commits)" {
|
||||
init_repo
|
||||
|
||||
export current_version=1.2.3
|
||||
export scheme="conventional_commits"
|
||||
|
||||
echo "some new change" > feat.txt
|
||||
git add feat.txt
|
||||
git commit -m "new change"
|
||||
|
||||
run ../../version-increment.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
[[ "$output" = *"VERSION=1.2.4"* ]]
|
||||
[[ "$output" = *"No conventional commit found"* ]]
|
||||
}
|
||||
|
||||
@@ -5,6 +5,15 @@ load helper_print-info
|
||||
|
||||
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 {
|
||||
rm -rf "${repo}" &&
|
||||
mkdir -p "${repo}" &&
|
||||
@@ -22,7 +31,7 @@ function init_repo {
|
||||
|
||||
export scheme="foover"
|
||||
|
||||
run ../../version-lookup.sh
|
||||
run version-lookup.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 8 ] &&
|
||||
@@ -43,7 +52,7 @@ function init_repo {
|
||||
git tag 0.1.1
|
||||
git tag 0.1.2
|
||||
|
||||
run ../../version-lookup.sh
|
||||
run version-lookup.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -55,7 +64,7 @@ function init_repo {
|
||||
|
||||
git tag 0.1.2
|
||||
|
||||
run ../../version-lookup.sh
|
||||
run version-lookup.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -69,7 +78,7 @@ function init_repo {
|
||||
git tag 1.2.300
|
||||
git tag 1.2.301-dev.234
|
||||
|
||||
run ../../version-lookup.sh
|
||||
run version-lookup.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -79,7 +88,7 @@ function init_repo {
|
||||
@test "returns 0.0.0 if no normal version detected" {
|
||||
init_repo
|
||||
|
||||
run ../../version-lookup.sh
|
||||
run version-lookup.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -91,7 +100,7 @@ function init_repo {
|
||||
|
||||
git tag 0.0.1-dev.999
|
||||
|
||||
run ../../version-lookup.sh
|
||||
run version-lookup.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -103,7 +112,7 @@ function init_repo {
|
||||
|
||||
export scheme="calver"
|
||||
|
||||
run ../../version-lookup.sh
|
||||
run version-lookup.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
@@ -115,7 +124,7 @@ function init_repo {
|
||||
|
||||
git tag v3.4.5
|
||||
|
||||
run ../../version-lookup.sh
|
||||
run version-lookup.sh
|
||||
|
||||
print_run_info
|
||||
[ "$status" -eq 0 ] &&
|
||||
|
||||
@@ -15,7 +15,7 @@ fi
|
||||
if [[ -z "${current_version:-}" ]] ; then
|
||||
echo "🛑 Environment variable 'current_version' is unset or empty" 1>&2
|
||||
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
|
||||
input_errors='true'
|
||||
fi
|
||||
@@ -30,7 +30,7 @@ fi
|
||||
default_branch='main'
|
||||
# use release_branch if not empty
|
||||
if [[ -n "${release_branch:-}" ]] ; then
|
||||
default_branch="${release_branch}"
|
||||
default_branch="${release_branch}"
|
||||
elif [[ -z "${BATS_VERSION:-}" ]] ; then
|
||||
# if we're _not_ testing, then _actually_ check the origin
|
||||
if [[ "${use_api:-}" == 'true' ]] ; then
|
||||
@@ -43,11 +43,12 @@ elif [[ -z "${BATS_VERSION:-}" ]] ; then
|
||||
| jq -r '.default_branch'
|
||||
)"
|
||||
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
|
||||
|
||||
current_ref="${GITHUB_REF:-}"
|
||||
git_commit_sha=${GITHUB_SHA:-}
|
||||
|
||||
if [[ "${use_api:-}" == 'true' ]] ; then
|
||||
# because we cannot use `rev-parse` with the API, we'll take a punt that 9 characters is enough for uniqueness
|
||||
@@ -55,7 +56,32 @@ if [[ "${use_api:-}" == 'true' ]] ; then
|
||||
git_commit="$(echo "${GITHUB_SHA:0:9}" | sed 's/0*//')" # Also, trim leading zeros, because semver doesn't allow that in
|
||||
else # the 'pre-release version' part, but we can't use the + char
|
||||
git_commit="$(git rev-parse --short HEAD | sed 's/0*//')" # to make it 'build metadata' as that's not supported in K8s
|
||||
fi # labels
|
||||
git_commit_sha="$(git rev-parse --short HEAD)" # labels
|
||||
fi
|
||||
|
||||
##==----------------------------------------------------------------------------
|
||||
## Conventional commits
|
||||
if [[ "${scheme}" == 'conventional_commits' ]] ; then
|
||||
# Get message from given commit
|
||||
commit_message=$(git log -1 --pretty=format:%B "${git_commit_sha}")
|
||||
|
||||
# Check commit message header
|
||||
found_match='false'
|
||||
if [[ -n "$(echo "${commit_message}" | grep_p "${pcre_conventional_commit_breaking}")" ]] ; then
|
||||
increment='major'
|
||||
found_match='true'
|
||||
elif [[ -n "$(echo "${commit_message}" | grep_p "${pcre_conventional_commit_minor}")" ]] ; then
|
||||
increment='minor'
|
||||
found_match='true'
|
||||
elif [[ -n "$(echo "${commit_message}" | grep_p "${pcre_conventional_commit_patch}")" ]] ; then
|
||||
increment='patch'
|
||||
found_match='true'
|
||||
fi
|
||||
|
||||
if [[ "${found_match}" == 'false' ]] ; then
|
||||
echo "⚠️ No conventional commit found, defaulting to ${increment} increment" 1>&2
|
||||
fi
|
||||
fi
|
||||
|
||||
##==----------------------------------------------------------------------------
|
||||
## Version increment
|
||||
@@ -102,7 +128,7 @@ if [[ "${current_ref}" != "refs/heads/${default_branch}" ]] ; then
|
||||
echo "PRE_RELEASE_LABEL=${pre_release}" >> "${GITHUB_OUTPUT}"
|
||||
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 "ℹ️ See: https://semver.org/spec/v2.0.0.html" 1>&2
|
||||
echo "ℹ️ Failed version string: '${new_version}'" 1>&2
|
||||
|
||||
@@ -32,12 +32,12 @@ if [[ "${use_api:-}" == 'true' ]] ; then
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/git/matching-refs/tags/" \
|
||||
| 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
|
||||
current_version="$(
|
||||
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
|
||||
|
||||
@@ -46,7 +46,7 @@ if [[ -z "${current_version:-}" ]] ; then
|
||||
echo "⚠️ No previous release version identified in git tags"
|
||||
# brand new repo! (probably)
|
||||
case "${scheme}" in
|
||||
semver)
|
||||
semver | conventional_commits)
|
||||
current_version="0.0.0"
|
||||
;;
|
||||
calver)
|
||||
|
||||
Reference in New Issue
Block a user