Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 36 additions & 3 deletions .github/workflows/auto-merge-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ name: auto-merge-release

on:
schedule:
# 10:00 UTC = 4am CST (winter) / 5am CDT (summer)
- cron: "0 10 * * 1"
- cron: "0 10 * * *"
workflow_dispatch:

permissions: {}
Expand All @@ -16,11 +15,45 @@ jobs:
merge:
if: github.repository == 'jdx/usage'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
Comment thread
cursor[bot] marked this conversation as resolved.
fetch-tags: true
persist-credentials: false
- name: Merge release into main
run: |
set -euo pipefail

if [ "${GITHUB_EVENT_NAME:-}" != "workflow_dispatch" ]; then
latest_tag=$(git describe --tags --match 'v[0-9]*' --abbrev=0 || true)
if [ -n "$latest_tag" ]; then
range="${latest_tag}..HEAD"
tag_time=$(git for-each-ref --format='%(creatordate:unix)' "refs/tags/$latest_tag")
now=$(date +%s)
min_age=$((7 * 24 * 60 * 60))
age=$((now - tag_time))
if [ "$age" -lt "$min_age" ]; then
echo "Latest release ${latest_tag} is less than 7 days old; not auto-merging release PRs"
exit 0
fi
else
echo "No v[0-9]* release tag found; allowing bootstrap release"
range=""
fi
if [ -n "$range" ]; then
commit_subjects=$(git log --format=%s "$range")
if ! grep -Eq '^(fix|feat)(\([^)]+\))?!?: ' <<<"$commit_subjects"; then
echo "No pending fix/feat commits since the latest release; not auto-merging release PRs"
exit 0
fi
fi
else
echo "Manual dispatch; skipping release cadence guards"
fi

PR_NUMBER=$(gh pr list -R jdx/usage --base main --head release --state open --limit 100 --json number,headRefName,headRepositoryOwner \
--jq '[.[] | select(.headRefName == "release") | select(.headRepositoryOwner.login == "jdx")][0].number // empty')
if [ -z "$PR_NUMBER" ]; then
Expand All @@ -35,7 +68,7 @@ jobs:
exit 0
fi

echo "PR #$PR_NUMBER is ready for the Monday morning release window"
echo "PR #$PR_NUMBER is ready for the daily release window"
gh pr merge "$PR_NUMBER" -R jdx/usage --squash --auto
env:
GH_TOKEN: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }}