diff --git a/.github/workflows/auto-merge-release.yml b/.github/workflows/auto-merge-release.yml new file mode 100644 index 00000000..ef174d99 --- /dev/null +++ b/.github/workflows/auto-merge-release.yml @@ -0,0 +1,41 @@ +name: auto-merge-release + +on: + schedule: + # 10:00 UTC = 4am CST (winter) / 5am CDT (summer) + - cron: "0 10 * * 1" + workflow_dispatch: + +permissions: {} + +concurrency: + group: auto-merge-release + cancel-in-progress: false + +jobs: + merge: + if: github.repository == 'jdx/usage' + runs-on: ubuntu-latest + steps: + - name: Merge release into main + run: | + set -euo pipefail + + 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 + echo "No open PR from release to main" + exit 0 + fi + + BODY=$(gh pr view "$PR_NUMBER" -R jdx/usage --json body --jq '.body // ""') + TRIMMED_BODY=$(echo "$BODY" | tr -d '[:space:]') + if [ -z "$TRIMMED_BODY" ]; then + echo "Skipping merge: PR #$PR_NUMBER has an empty body; will retry on the next scheduled run" + exit 0 + fi + + echo "PR #$PR_NUMBER is ready for the Monday morning release window" + gh pr merge "$PR_NUMBER" -R jdx/usage --squash --auto + env: + GH_TOKEN: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }}