fix(release): use valid git tag sort
Use GoReleaser’s supported Git version sort and assert it before release runs.
- commit
- 02ca8a8285577364cb32f3dfdd8e08517d64bdce
- author
- brice · · 2026-08-05 18:43 UTC
- parent
- 3f8fc45
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +11 -2
M .github/scripts/next-release-tag_test.sh +9 -0
| @@ -37,3 +37,12 @@ git tag -a v0.1.1 -m 'release v0.1.1' | |||
| 37 | 37 | ||
| 38 | 38 | git commit --allow-empty --quiet -m 'refactor!: replace extension handshake' | |
| 39 | 39 | expect 'v0.2.0' | |
| 40 | + | ||
| 41 | + | # GoReleaser passes tag_sort directly to `git tag --sort`, so keep the | |
| 42 | + | # configured semantic-version sort valid before a release run depends on it. | |
| 43 | + | tag_sort=$(sed -n 's/^[[:space:]]*tag_sort:[[:space:]]*//p' "$repo_root/.goreleaser.yaml") | |
| 44 | + | if [ "$tag_sort" != '-version:refname' ]; then | |
| 45 | + | printf 'goreleaser tag_sort = %q, want %q\n' "$tag_sort" '-version:refname' >&2 | |
| 46 | + | exit 1 | |
| 47 | + | fi | |
| 48 | + | git tag --sort "$tag_sort" --list 'v*.*.*' >/dev/null | |
| @@ -37,3 +37,12 @@ git tag -a v0.1.1 -m 'release v0.1.1' | |||||
| 37 | 37 | ||||
| 38 | git commit --allow-empty --quiet -m 'refactor!: replace extension handshake' | 38 | git commit --allow-empty --quiet -m 'refactor!: replace extension handshake' | ||
| 39 | expect 'v0.2.0' | 39 | expect 'v0.2.0' | ||
| 40 | + | ||||
| 41 | + | # GoReleaser passes tag_sort directly to `git tag --sort`, so keep the | |||
| 42 | + | # configured semantic-version sort valid before a release run depends on it. | |||
| 43 | + | tag_sort=$(sed -n 's/^[[:space:]]*tag_sort:[[:space:]]*//p' "$repo_root/.goreleaser.yaml") | |||
| 44 | + | if [ "$tag_sort" != '-version:refname' ]; then | |||
| 45 | + | printf 'goreleaser tag_sort = %q, want %q\n' "$tag_sort" '-version:refname' >&2 | |||
| 46 | + | exit 1 | |||
| 47 | + | fi | |||
| 48 | + | git tag --sort "$tag_sort" --list 'v*.*.*' >/dev/null | |||
M .goreleaser.yaml +2 -2
| @@ -49,8 +49,8 @@ snapshot: | |||
| 49 | 49 | version_template: "{{ incpatch .Version }}-next" | |
| 50 | 50 | ||
| 51 | 51 | git: | |
| 52 | - | # Generate prerelease changelogs from the previous stable tag. | |
| 53 | - | tag_sort: smartsemver | |
| 52 | + | # Git's version-aware sort selects semantic versions correctly. | |
| 53 | + | tag_sort: -version:refname | |
| 54 | 54 | ||
| 55 | 55 | changelog: | |
| 56 | 56 | sort: asc | |
| @@ -49,8 +49,8 @@ snapshot: | |||||
| 49 | version_template: "{{ incpatch .Version }}-next" | 49 | version_template: "{{ incpatch .Version }}-next" | ||
| 50 | 50 | ||||
| 51 | git: | 51 | git: | ||
| 52 | - | # Generate prerelease changelogs from the previous stable tag. | 52 | + | # Git's version-aware sort selects semantic versions correctly. |
| 53 | - | tag_sort: smartsemver | 53 | + | tag_sort: -version:refname |
| 54 | 54 | ||||
| 55 | changelog: | 55 | changelog: | ||
| 56 | sort: asc | 56 | sort: asc | ||