name: Prepare Release on: workflow_dispatch: inputs: version: description: Semantic version to release, with or without leading v. required: true 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: Prepare release files env: RELEASE_VERSION: ${{ inputs.version }} run: | set -euo pipefail ./script/prepare-release.sh "$RELEASE_VERSION" - 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 env: RELEASE_VERSION: ${{ inputs.version }} 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 internal/homesick/version/version.go git commit -m "release: prepare ${tag}" git tag "$tag" git push origin HEAD git push origin "$tag"