7 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
4 changed files with 68 additions and 18 deletions

View File

@@ -166,3 +166,4 @@ jobs:
draft: false draft: false
prerelease: false prerelease: false
tag_name: "${{ steps.version.outputs.version }}" tag_name: "${{ steps.version.outputs.version }}"
generate_release_notes: true

View File

@@ -1,5 +1,11 @@
# Version Increment # 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 📄 ## Use 📄
> [!NOTE] > [!NOTE]
@@ -9,22 +15,42 @@
### Example ⌨️ ### Example ⌨️
```yaml ```yaml
name: Build and release
on:
push:
branches:
- main
jobs:
build-release:
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v7
- name: Get next version - name: Get next version
uses: reecetech/version-increment@2024.10.1 uses: reecetech/version-increment@2026.8.4
id: version id: version
with: with:
scheme: semver scheme: semver
increment: patch increment: patch
# Example building, using the `version` output from `version-increment`
- name: Build image - name: Build image
uses: docker/build-push-action@v2 uses: docker/build-push-action@v7
with: with:
push: false
tags: "example/application:${{ steps.version.outputs.version }}" 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 🔗 #### API mode 🔗
@@ -34,7 +60,7 @@ use the API mode:
```yaml ```yaml
- name: Get next version - name: Get next version
uses: reecetech/version-increment@2024.10.1 uses: reecetech/version-increment@2026.8.4
id: version id: version
with: with:
use_api: true use_api: true
@@ -106,7 +132,7 @@ release branch name as an input. For example:
```yaml ```yaml
- name: Get next version - name: Get next version
uses: reecetech/version-increment@2023.10.1 uses: reecetech/version-increment@2026.8.4
id: version id: version
with: with:
release_branch: publish release_branch: publish

View File

@@ -20,19 +20,13 @@ pcre_old_calver='^(?P<major>0|[1-9]\d*)-0{0,1}(?P<minor>0|[0-9]\d*)-R(?P<patch>0
remove_prefix() { remove_prefix() {
local tag="$1" local tag="$1"
if [[ -n "${tag_prefix:-}" ]]; then if [[ -n "${tag_prefix:-}" ]]; then
# Escape special characters in tag_prefix if [[ "${tag}" == "${tag_prefix}"* ]]; then
local escaped_prefix printf '%s\n' "${tag:${#tag_prefix}}"
escaped_prefix=$(printf '%s\n' "$tag_prefix" | sed 's/[][\/.^$*]/\\&/g') # special chars matched by sed: ] [ / . ^ $ * else
printf '\n'
# shellcheck disable=SC2143
if [[ -z "$(echo "${tag}" | grep "^${tag_prefix}")" ]] ; then
echo ""
return
fi fi
# shellcheck disable=SC2001
echo "${tag}" | sed "s|^${escaped_prefix}||" # Use | as the delimiter to avoid conflicts with /
else else
echo "${tag}" printf '%s\n' "${tag}"
fi fi
} }

View File

@@ -103,6 +103,35 @@ function init_repo {
[[ "$output" = *"CURRENT_V_VERSION=v0.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" { @test "finds the current normal version even if there's a newer pre-release version" {
init_repo init_repo