From 6eb45e0003f874c055e7ce439b0968161f78b516 Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Tue, 25 Aug 2026 01:58:29 +0000 Subject: [PATCH] Add release tag validation workflow --- .woodpecker/release.yml | 33 +++++++++++++++++++++++++++++++++ docs/roadmap/implementation.md | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 .woodpecker/release.yml diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml new file mode 100644 index 00000000..a1ab7649 --- /dev/null +++ b/.woodpecker/release.yml @@ -0,0 +1,33 @@ +when: + - event: tag + +steps: + - name: validate-release + image: golang:1.25.5 + commands: + - | + set -eu + + version="$CI_COMMIT_TAG" + release_note="docs/releases/$version.md" + + if ! printf '%s\n' "$version" | grep -E -x 'v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)' >/dev/null; then + printf '%s\n' "invalid release tag: $version" >&2 + exit 1 + fi + if [ ! -s "$release_note" ]; then + printf '%s\n' "missing release note: $release_note" >&2 + exit 1 + fi + if ! grep -F -x "# Notarius $version" "$release_note" >/dev/null; then + printf '%s\n' "release note heading does not match $version" >&2 + exit 1 + fi + for heading in '## Summary' '## Compatibility' '## Upgrade' '## Changes'; do + if ! grep -F -x "$heading" "$release_note" >/dev/null; then + printf '%s\n' "release note is missing heading: $heading" >&2 + exit 1 + fi + done + + ./scripts/check-release-source.sh "$version" diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index 21fd34cb..53b98a89 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -192,7 +192,7 @@ git status --short matrix. - Successful execution leaves the worktree and index unchanged. -## Stage 3: Add Validation-Only Tag CI +## Stage 3: Add Validation-Only Tag CI ✅ ### Goal