All checks were successful
Push Validation / validate (push) Successful in 54s
- Remove publish steps (release creation, binary build/upload) from the Prepare Release workflow; it now stops after committing and pushing the tag. - Add Do Release workflow triggered on v*.*.* tag pushes; reads release notes from the tagged changelog section, creates or updates the release, builds linux/amd64 and linux/arm64 binaries, uploads assets, then smoke-tests both binaries in a follow-on validate job. - Remove the standalone Action Validation workflow; binary validation now runs as a second job in Do Release after the release job succeeds, using the exact tag and version just published. - Update README to document the two-workflow release model and add split prepare/publish usage examples for both the composite action and the reusable workflows. - Update changelog unreleased section to reflect the new pipeline split and corrected artifact scope (linux/amd64 and linux/arm64 only).
128 lines
3.9 KiB
YAML
128 lines
3.9 KiB
YAML
name: Prepare Release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: Optional semantic version override, with or without leading v. When omitted, the recommended version is used.
|
|
required: false
|
|
workflow_call:
|
|
inputs:
|
|
version:
|
|
description: Optional semantic version override, with or without leading v. When omitted, the recommended version is used.
|
|
required: false
|
|
default: ''
|
|
type: string
|
|
|
|
jobs:
|
|
prepare:
|
|
runs-on: ubuntu-latest
|
|
container: docker.io/catthehacker/ubuntu:act-latest
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
env:
|
|
RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: '1.26.1'
|
|
check-latest: true
|
|
cache: true
|
|
cache-dependency-path: go.sum
|
|
|
|
- name: Resolve release version
|
|
id: resolve-version
|
|
env:
|
|
INPUT_VERSION: ${{ inputs.version }}
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
provided_version="$(printf '%s' "${INPUT_VERSION:-}" | sed 's/^[[:space:]]\+//; s/[[:space:]]\+$//')"
|
|
|
|
if [[ -n "$provided_version" ]]; then
|
|
release_version="$provided_version"
|
|
else
|
|
if ! release_version="$(go run ./cmd/vociferate --recommend --root . 2>release-recommendation.err)"; then
|
|
recommendation_error="$(tr '\n' ' ' < release-recommendation.err | sed 's/[[:space:]]\+/ /g' | sed 's/^ //; s/ $//')"
|
|
echo "Resolve release version: ${recommendation_error}" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo "RELEASE_VERSION=$release_version" >> "$GITHUB_ENV"
|
|
echo "version=$release_version" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Prepare release files
|
|
run: |
|
|
set -euo pipefail
|
|
go run ./cmd/vociferate \
|
|
--root . \
|
|
--version "$RELEASE_VERSION" \
|
|
--date "$(date -u +%F)" \
|
|
--changelog changelog.md
|
|
|
|
- name: Run tests
|
|
run: |
|
|
set -euo pipefail
|
|
go test ./...
|
|
|
|
- name: Configure git author
|
|
run: |
|
|
set -euo pipefail
|
|
git config user.name "gitea-actions[bot]"
|
|
git config user.email "gitea-actions[bot]@users.noreply.local"
|
|
|
|
- name: Commit release changes and push tag
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
normalized_version="${RELEASE_VERSION#v}"
|
|
tag="v${normalized_version}"
|
|
|
|
if git rev-parse "$tag" >/dev/null 2>&1; then
|
|
echo "Tag ${tag} already exists" >&2
|
|
exit 1
|
|
fi
|
|
|
|
case "$GITHUB_SERVER_URL" in
|
|
https://*)
|
|
authed_remote="https://oauth2:${RELEASE_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY}.git"
|
|
;;
|
|
http://*)
|
|
authed_remote="http://oauth2:${RELEASE_TOKEN}@${GITHUB_SERVER_URL#http://}/${GITHUB_REPOSITORY}.git"
|
|
;;
|
|
*)
|
|
echo "Unsupported GITHUB_SERVER_URL: ${GITHUB_SERVER_URL}" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
git remote set-url origin "$authed_remote"
|
|
git add changelog.md release-version
|
|
git commit -m "release: prepare ${tag}"
|
|
git tag "$tag"
|
|
git push origin HEAD
|
|
git push origin "$tag"
|
|
|
|
- name: Summarize prepared release
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
normalized_version="${RELEASE_VERSION#v}"
|
|
tag="v${normalized_version}"
|
|
|
|
{
|
|
echo "## Release Prepared"
|
|
echo
|
|
echo "- Updated files were committed to main."
|
|
echo "- Tag pushed: ${tag}"
|
|
echo "- The tag-triggered Do Release workflow will create or update the release and publish binaries."
|
|
} >> "$GITHUB_STEP_SUMMARY"
|