Skip to content

Promote Main to Release Branches #47

Promote Main to Release Branches

Promote Main to Release Branches #47

Workflow file for this run

name: Promote Main to Release
permissions:
contents: write
on:
workflow_dispatch:
jobs:
generate_tag:
name: Generate HeadVer Tag
uses: ./.github/workflows/headver-tagging.yml
with: {}
create_release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: generate_tag
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Create Release
uses: ncipollo/release-action@v1
with:
tag: "v${{ needs.generate_tag.outputs.version }}"
release_name: "Release v${{ needs.generate_tag.outputs.version }}"
body: "Automated release created for build v${{ needs.generate_tag.outputs.version }}"
token: ${{ secrets.GITHUB_TOKEN }}
promote_release_branch:
name: Promote main -> release
runs-on: ubuntu-latest
needs: create_release
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Promote main branch to release branch
run: |
set -euo pipefail
git fetch origin main
git fetch origin release || true
MAIN_SHA=$(git rev-parse origin/main)
if git show-ref --verify --quiet refs/remotes/origin/release; then
RELEASE_SHA=$(git rev-parse origin/release)
else
RELEASE_SHA=""
fi
if [ -z "$RELEASE_SHA" ]; then
git push origin origin/main:refs/heads/release
{
echo "## Release Promotion"
echo "- Status: success (release branch created)"
echo "- Promoted main SHA: $MAIN_SHA"
echo "- Target branch: release"
echo "- Note: Vercel production deploy is triggered by release branch update"
} >> "$GITHUB_STEP_SUMMARY"
exit 0
fi
if [ "$MAIN_SHA" = "$RELEASE_SHA" ]; then
{
echo "## Release Promotion"
echo "- Status: skipped (release is already up to date)"
echo "- main: $MAIN_SHA"
} >> "$GITHUB_STEP_SUMMARY"
exit 0
fi
if ! git merge-base --is-ancestor origin/release origin/main; then
echo "release branch is not an ancestor of main. Resolve release history before promotion." >&2
exit 1
fi
git push origin origin/main:refs/heads/release
{
echo "## Release Promotion"
echo "- Status: success"
echo "- Promoted main SHA: $MAIN_SHA"
echo "- Target branch: release"
echo "- Note: Vercel production deploy is triggered by release branch update"
} >> "$GITHUB_STEP_SUMMARY"