52 Commits

Author SHA1 Message Date
Phil Jay
28d33de033 Merge pull request #51 from reecetech/update-README
Document release workflow and refresh action examples
2026-08-10 16:26:47 +10:00
Phil Jay
1f38adcc34 Rework example to show tagging at the end
Closes #42
2026-08-10 16:21:09 +10:00
Phil Jay
72771d55b6 Update versions in README
Closes #50
2026-08-10 16:21:01 +10:00
Phil Jay
4ccdd6072c Generate release notes automatically 2026-08-10 16:09:55 +10:00
Phil Jay
79c9fd45a4 Merge pull request #49 from reecetech/fix-up-prefix-parsing
Treat tag prefixes as literal strings
2026-08-10 15:44:15 +10:00
Phil Jay
1b05caeb4c Treat tag prefixes as literal strings
Prevent regex metacharacters and sed delimiters in a tag prefix
from selecting unintended tags or causing lookup failures.
2026-08-10 15:22:02 +10:00
Phil Jay
f275de0d59 Expose parsing errors 2026-08-10 15:11:56 +10:00
Phil Jay
5f59cf0be0 Merge pull request #47 from reecetech/api-conventional-conflict
Support conventional commits in API mode
2026-08-10 12:46:12 +10:00
Phil Jay
26724048ca Add API call for git log 2026-08-10 12:38:33 +10:00
Phil Jay
69ceeacf75 Add integration test for API + CC error 2026-08-10 12:27:44 +10:00
Phil Jay
284d1792e3 Add test to expose issue 2026-08-10 12:19:47 +10:00
Phil Jay
9e616d7ba5 Merge pull request #46 from reecetech/permissions
Add permission to write for tag/release
2026-08-10 07:49:04 +10:00
Phil Jay
cfe1cec8c0 Add permission to write for tag/release 2026-08-10 07:42:06 +10:00
Phil Jay
ca9517f82b Merge pull request #44 from reecetech/update-workflow-deps
Update workflow deps (checkout, bats-action, action-gh-release), and update BATS to v1.14.0
2026-08-07 15:34:34 +10:00
Phil Jay
d503d08693 Update to latest BATS version 2026-08-07 15:19:26 +10:00
Phil Jay
a096ae3fb1 Update to latest versions of actions 2026-08-07 15:19:16 +10:00
Phil Jay
a29aa752dc Merge pull request #41 from reecetech/fixup
Fix: wrong version variable
2024-10-14 06:23:01 +11:00
Phil Jay
f1dfe8f5a1 Update README for new version 2024-10-11 16:20:18 +11:00
Phil Jay
feaac9b904 Fix: wrong version variable 2024-10-11 16:19:40 +11:00
Phil Jay
36b965a12f Merge pull request #40 from reecetech/workflow-tweek
Update test-and-release.yml
2024-10-11 15:50:11 +11:00
Phil Jay
9a52af87bc Update test-and-release.yml
Use `v2` of `action-gh-release`

Use action directly instead of using the scripts to provide a more direct example of use
2024-10-10 18:26:44 +11:00
George Kolecsanyi
a5d65984a6 Merge pull request #38 from reecetech/fix-when-no-prefix
set prefix tag default to empty string
2024-09-03 12:30:23 +10:00
George Kolecsanyi
39ac246d0c set prefix tag default to empty string 2024-09-03 12:22:17 +10:00
Phil Jay
2ec19615c5 Merge pull request #37 from reecetech/fix-test
Fix test for when on `main` branch
2024-09-02 10:58:36 +10:00
Phil Jay
95aaf0c0e9 Fix test for when on main branch 2024-09-02 10:55:20 +10:00
Phil Jay
a67b798a79 Merge pull request #36 from reecetech/fix-lint
Fix lint & create new release
2024-09-02 08:02:15 +10:00
Phil Jay
9791034c7c Improve + fix test 2024-08-31 16:08:37 +10:00
Phil Jay
233fed58a9 Fix lint; Add comment 2024-08-31 15:51:39 +10:00
Phil Jay
dbf9c566cb Merge pull request #35 from sefasenturk95/main
Update version look up to support tags prepended with a prefix
2024-08-31 14:50:53 +10:00
Phil Jay
0f298121cd Update README 2024-08-31 14:49:15 +10:00
Phil Jay
5af72f0ae1 Introduce new outputs 2024-08-31 14:38:32 +10:00
Phil Jay
836a0f07bb Fix tests; Pre-filter tags 2024-08-31 14:19:37 +10:00
Phil Jay
d4496413d6 Don't auto-add @ to prefix; Shift utility function 2024-08-31 13:49:15 +10:00
Phil Jay
aa4572b10f Add test to see that versions only with tag_prefix are returned 2024-08-31 13:28:20 +10:00
Sefa Şentürk
56f4a516dd Update action to support with tag_prefix parameter 2024-08-30 11:08:56 +02:00
Phil Jay
c1faa9d742 Merge pull request #33 from reecetech/bats
Switch to maintained `bats-action`; update to latest BATS version (v1.11.0)
2024-04-24 15:31:30 +10:00
Phil Jay
ca62a5d18e Update to latest BATS 2024-04-24 12:45:43 +10:00
Phil Jay
f149a06e08 Switch to bats-core/bats-action
Is maintained, and uses up to date node (v20)
2024-04-24 12:44:19 +10:00
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
8 changed files with 342 additions and 72 deletions

View File

@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@2.0.0
@@ -24,12 +24,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Setup bats
uses: mig4/setup-bats@af9a00deb21b5d795cabfeaa8d9060410377686d # v1.2.0
uses: bats-core/bats-action@4.0.0
with:
bats-version: 1.8.0
bats-version: 1.14.0
- name: Test
run: bats tests/*.bats
@@ -40,7 +40,7 @@ jobs:
github_token: ${{ github.token }}
steps:
- name: Checkout code # have to checkout to have the source code available
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Remove .git directory # remove the git directory to make the testing valid
run: rm -rf .git/
@@ -67,6 +67,18 @@ jobs:
shell: bash
run: '[[ "$(date +%Y.%-m)" == "$(echo "${{ steps.version-increment.outputs.VERSION }}" | cut -d "." -f 1-2)" ]]'
- name: Test conventional commit increment version (with API)
id: version-increment-conventional
run: ./version-increment.sh
env:
current_version: 1.2.3
scheme: conventional_commits
use_api: 'true'
- name: Check conventional commit increment result
shell: bash
run: '[[ -n "${{ steps.version-increment-conventional.outputs.VERSION }}" ]]'
test-action-yml: # integration testing
needs:
- lint
@@ -77,12 +89,12 @@ jobs:
os:
- macos-latest
- ubuntu-latest
# - windows-latest -- coming soon, https://github.com/reecetech/version-increment/pull/30
fail-fast: true
- windows-latest
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code # have to checkout to have the source code available
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Remove .git directory # remove the git directory to make the testing valid
shell: bash
@@ -96,7 +108,7 @@ jobs:
use_api: true
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Get next version via Git
uses: ./
@@ -114,29 +126,44 @@ jobs:
[[ "${{ steps.version-via-api.outputs.patch-version }}" == "${{ steps.version-via-git.outputs.patch-version }}" ]]
# Don't test the full version or pre-version, since the number of digits is likely to be different (9 via api vs. 7 via git)
- name: Get next version via Git with tag-prefix
uses: ./
id: version-prefix
with:
scheme: 'semver'
use_api: false
tag_prefix: 'foo/bar@'
- name: Check that it starts from 0.0.1 (since prefix doesn't exist)
shell: bash
run: |
[[ "${{ steps.version-prefix.outputs.current-version }}" == "0.0.0" ]]
[[ "${{ steps.version-prefix.outputs.major-version }}" == "0" ]]
[[ "${{ steps.version-prefix.outputs.minor-version }}" == "0" ]]
[[ "${{ steps.version-prefix.outputs.patch-version }}" == "1" ]]
[[ "${{ steps.version-prefix.outputs.prefixed-version }}" = "foo/bar@0.0.1"* ]]
release:
permissions:
contents: write
needs:
- test-action-yml
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Lookup version
id: version-lookup
run: ./version-lookup.sh
- name: Increment version
id: version-increment
run: ./version-increment.sh
env:
current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }}
scheme: calver
- name: Get next version
uses: ./
id: version
with:
scheme: 'calver'
- name: Release version
uses: softprops/action-gh-release@v1
uses: softprops/action-gh-release@v3
if: ${{ github.ref_name == github.event.repository.default_branch }}
with:
draft: false
prerelease: false
tag_name: "${{ steps.version-increment.outputs.VERSION }}"
tag_name: "${{ steps.version.outputs.version }}"
generate_release_notes: true

View File

@@ -1,26 +1,56 @@
# Version Increment
This action calculates the next version based on existing Git tags.
Intentionally, this action does not create tags. It's suggested to use an
action dedicated to creating tags in a step following the successful steps
that make up your test, build and releasing process. See the example below.
## 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
name: Build and release
on:
push:
branches:
- main
jobs:
build-release:
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Get next version
uses: reecetech/version-increment@2023.9.3
uses: reecetech/version-increment@2026.8.4
id: version
with:
scheme: semver
increment: patch
# Example building, using the `version` output from `version-increment`
- name: Build image
uses: docker/build-push-action@v2
uses: docker/build-push-action@v7
with:
push: false
tags: "example/application:${{ steps.version.outputs.version }}"
context: .
- name: Create tag & GitHub release
uses: softprops/action-gh-release@v3
with:
draft: false
generate_release_notes: true
prerelease: false
tag_name: ${{ steps.version.outputs.version }}
```
#### API mode 🔗
@@ -30,7 +60,7 @@ use the API mode:
```yaml
- name: Get next version
uses: reecetech/version-increment@2024.4.1
uses: reecetech/version-increment@2026.8.4
id: version
with:
use_api: true
@@ -102,7 +132,7 @@ release branch name as an input. For example:
```yaml
- name: Get next version
uses: reecetech/version-increment@2023.10.1
uses: reecetech/version-increment@2026.8.4
id: version
with:
release_branch: publish
@@ -128,6 +158,7 @@ Examples:
| 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 | |
| use_api | Use the GitHub API to discover current tags, which avoids the need for a git checkout, but requires `curl` and `jq` | No | `false` |
| tag_prefix | Prefix the tag with a string (defaults to empty string). e.g. if set to `@org/product/` the action will filter by this prefix and return `@org/product/1.2.3` in `prefixed-version` output | No | |
### Outputs 📤
@@ -144,6 +175,8 @@ Examples:
| 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 |
| prefixed-version | Incremented version calculated, including a `tag_prefix` if specified |
| prefixed-v-version | Incremented version calculated, prefixed with a `v` charatcter, and also including a `tag_prefix` if specified |
## Contributing 💕

View File

@@ -40,6 +40,11 @@ inputs:
description: 'Use the GitHub API to discover current tags, which avoids the need for a git checkout, but requires `curl` and `jq`'
required: false
default: false
tag_prefix:
description: |
Prefix the tag with a string (defaults to empty string). e.g. if set to `@org/product/` the action will filter by this prefix and return `@org/product/1.2.3` in `prefixed-version` output
required: false
default: ''
outputs:
current-version:
@@ -75,20 +80,27 @@ outputs:
patch-v-version:
description: 'Patch number of the incremented version, prefixed with a `v` charatcter'
value: ${{ steps.version-increment.outputs.PATCH_V_VERSION }}
prefixed-version:
description: 'Incremented version calculated, including a `tag_prefix` if specified'
value: ${{ inputs.tag_prefix}}${{ steps.version-increment.outputs.VERSION }}
prefixed-v-version:
description: 'Incremented version calculated, prefixed with a `v` charatcter, and also including a `tag_prefix` if specified'
value: ${{ inputs.tag_prefix}}${{ steps.version-increment.outputs.V_VERSION }}
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 }}
scheme: ${{ inputs.scheme }}
use_api: ${{ inputs.use_api }}
tag_prefix: ${{ inputs.tag_prefix }}
- 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 }}

View File

@@ -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,6 +14,22 @@ 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*)$'
##==----------------------------------------------------------------------------
## Utility function for removing tag_prefix if present
remove_prefix() {
local tag="$1"
if [[ -n "${tag_prefix:-}" ]]; then
if [[ "${tag}" == "${tag_prefix}"* ]]; then
printf '%s\n' "${tag:${#tag_prefix}}"
else
printf '\n'
fi
else
printf '%s\n' "${tag}"
fi
}
##==----------------------------------------------------------------------------
## Conventional commit regexes
## see: https://www.conventionalcommits.org/en/v1.0.0/
@@ -48,6 +67,9 @@ if [[ "${use_api}" == 'true' ]] ; then
fi
fi
# Check if the tag_prefix is set, and if not, set it to an empty string
tag_prefix="${tag_prefix:-}"
##==----------------------------------------------------------------------------
## MacOS compatibility

View File

@@ -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,7 +274,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 ] &&
@@ -273,6 +282,34 @@ function init_repo {
[[ "$output" = *"VERSION=$(date +%Y.%-m.1)+pre.${short_ref}"* ]]
}
@test "uses the API commit message for conventional commits without a checkout" {
local no_checkout_dir="${BATS_TEST_TMPDIR}/no-checkout"
local mock_bin="${BATS_TEST_TMPDIR}/bin"
mkdir -p "${no_checkout_dir}" "${mock_bin}"
printf '%s\n' \
'#!/usr/bin/env bash' \
'printf "%s\n" "{\"commit\":{\"message\":\"feat: API-only change\"}}"' \
> "${mock_bin}/curl"
chmod +x "${mock_bin}/curl"
export PATH="${mock_bin}:${PATH}"
export current_version=1.2.3
export scheme="conventional_commits"
export use_api="true"
export github_token="test-token"
export GITHUB_REF="refs/heads/main"
export GITHUB_SHA="abcdef1234567890"
export GITHUB_API_URL="https://fake.github.example.com"
export GITHUB_REPOSITORY="gh-org/example"
run bash -c 'cd "$1" && version-increment.sh' -- "${no_checkout_dir}"
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"VERSION=1.3.0"* ]]
}
@test "increments the patch version after a fix commit (conventional commits)" {
init_repo
@@ -400,3 +437,24 @@ function init_repo {
[[ "$output" = *"VERSION=1.2.4"* ]]
[[ "$output" = *"No conventional commit found"* ]]
}
@test "increments the patch version by default if no conventional commits found and enabled (conventional commits) (with tag_prefix)" {
init_repo
export tag_prefix="@org/product@"
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" = *"V_VERSION=v1.2.4"* ]]
[[ "$output" = *"No conventional commit found"* ]]
}

View File

@@ -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 ] &&
@@ -63,23 +72,101 @@ function init_repo {
[[ "$output" = *"CURRENT_V_VERSION=v0.1.2"* ]]
}
@test "finds the current normal version with tag_prefix enabled" {
init_repo
export tag_prefix="@org/product@"
git tag @org/product@0.0.1
git tag @org/product@0.1.1
git tag @org/product@0.1.2
run version-lookup.sh
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"CURRENT_VERSION=0.1.2"* ]]
}
@test "tag_prefix enabled prefixes with a v" {
init_repo
export tag_prefix="@org/product/"
git tag @org/product/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 "treats tag_prefix as a literal string" {
init_repo
export tag_prefix="v."
git tag v.1.2.3
git tag v1.9.9
run version-lookup.sh
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"CURRENT_VERSION=1.2.3"* ]]
}
@test "supports a tag_prefix containing a sed delimiter" {
init_repo
export tag_prefix="foo|bar@"
git tag "foo|bar@1.2.3"
run version-lookup.sh
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"CURRENT_VERSION=1.2.3"* ]]
}
@test "finds the current normal version even if there's a newer pre-release version" {
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 ] &&
[[ "$output" = *"CURRENT_VERSION=1.2.300"* ]]
}
@test "finds only prefixed tags when tag_prefix set" {
init_repo
export tag_prefix="my_product-"
git tag my_product-0.1.2
git tag my_product-0.1.3-dev.123
git tag 2.4.5
git tag 2.4.6-dev.456
run version-lookup.sh
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"CURRENT_VERSION=0.1.2"* ]] &&
[[ "$output" = *"CURRENT_V_VERSION=v0.1.2"* ]]
}
@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 +178,21 @@ function init_repo {
git tag 0.0.1-dev.999
run ../../version-lookup.sh
run version-lookup.sh
print_run_info
[ "$status" -eq 0 ] &&
[[ "$output" = *"CURRENT_VERSION=0.0.0"* ]]
}
@test "returns 0.0.0 if no prefix version detected even if there's a non-prefix release version" {
init_repo
export tag_prefix="code/"
git tag 0.1.0
run version-lookup.sh
print_run_info
[ "$status" -eq 0 ] &&
@@ -103,7 +204,7 @@ function init_repo {
export scheme="calver"
run ../../version-lookup.sh
run version-lookup.sh
print_run_info
[ "$status" -eq 0 ] &&
@@ -115,7 +216,7 @@ function init_repo {
git tag v3.4.5
run ../../version-lookup.sh
run version-lookup.sh
print_run_info
[ "$status" -eq 0 ] &&

View File

@@ -63,7 +63,18 @@ fi
## Conventional commits
if [[ "${scheme}" == 'conventional_commits' ]] ; then
# Get message from given commit
commit_message=$(git log -1 --pretty=format:%B "${git_commit_sha}")
if [[ "${use_api:-}" == 'true' ]] ; then
commit_message="$(
curl -fsSL \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${github_token}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/commits/${git_commit_sha}" \
| jq -r '.commit.message'
)"
else
commit_message="$(git log -1 --pretty=format:%B "${git_commit_sha}")"
fi
# Check commit message header
found_match='false'

View File

@@ -32,12 +32,18 @@ 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
| while read -r tag; do remove_prefix "$tag"; done \
| { 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
| while read -r tag; do remove_prefix "$tag"; done \
| { grep_p "${pcre_allow_vprefix}" || true; } \
| sed 's/^v//g' \
| sort -V | tail -n 1
)"
fi