blob: da68507c1379c374fbb584d91e61c1bac7fbe39c [file] [log] [blame]
Earl Lee2e463fb2025-04-17 11:22:22 -07001# Simplified Commit Queue
2#
3# (Force) push to "queue-main-$USER" a potential change, and
4# this job will push it main if it passes pre-commit and tests,
5# which will run in parallel. The push may fail if the commit
6# cannot be pushed cleanly because it needs to be rebased, which
7# will happen especially if another developer pushes a change at
8# roughly the same time.
Josh Bleecher Snyderefda3962025-04-30 13:09:42 -07009#
10# Please keep this file in sync with queue-dev.yml.
Earl Lee2e463fb2025-04-17 11:22:22 -070011
12name: Main Branch Commit Queue
13on:
14 push:
15 branches:
Josh Bleecher Snyderbd6c1682025-04-25 12:04:07 -070016 - "queue-main-*"
Earl Lee2e463fb2025-04-17 11:22:22 -070017
18permissions: read-all
19
20jobs:
Josh Bleecher Snyderbd6c1682025-04-25 12:04:07 -070021 formatting:
22 uses: ./.github/workflows/formatting.yml
Josh Bleecher Snyderae772262025-04-25 20:02:22 +000023 permissions:
24 contents: write
Josh Bleecher Snyderbd6c1682025-04-25 12:04:07 -070025 with:
26 auto_fix: true
27
Philip Zeyliger4de80d22025-04-23 12:33:31 -070028 go-test:
Josh Bleecher Snyderbd6c1682025-04-25 12:04:07 -070029 needs: [formatting]
Earl Lee2e463fb2025-04-17 11:22:22 -070030 uses: ./.github/workflows/go_test.yml
31 permissions: read-all
Josh Bleecher Snyder936ba622025-04-30 20:53:21 +000032 with:
33 ref: ${{ needs.formatting.outputs.commit_sha }}
Philip Zeyligerc314f0c2025-07-16 16:48:46 -070034 include-slow-tests: false
Earl Lee2e463fb2025-04-17 11:22:22 -070035
Philip Zeyliger4de80d22025-04-23 12:33:31 -070036 ui-test:
Josh Bleecher Snyderbd6c1682025-04-25 12:04:07 -070037 needs: [formatting]
Philip Zeyliger4de80d22025-04-23 12:33:31 -070038 uses: ./.github/workflows/webui_test.yml
39 permissions: read-all
Josh Bleecher Snyder936ba622025-04-30 20:53:21 +000040 with:
41 ref: ${{ needs.formatting.outputs.commit_sha }}
Philip Zeyliger4de80d22025-04-23 12:33:31 -070042
Earl Lee2e463fb2025-04-17 11:22:22 -070043 push-to-main:
44 runs-on: ubuntu-latest
Josh Bleecher Snyderc3391a92025-04-25 21:03:33 +000045 needs: [go-test, ui-test, formatting]
Earl Lee2e463fb2025-04-17 11:22:22 -070046 permissions:
47 contents: write
48 steps:
49 - uses: actions/checkout@v4
50 with:
51 fetch-depth: 0
52
53 - name: Push to main
Josh Bleecher Snyder6e463602025-05-28 18:10:59 +000054 id: push
Earl Lee2e463fb2025-04-17 11:22:22 -070055 run: |
Josh Bleecher Snydereda2a8c2025-04-25 21:24:11 +000056 COMMIT_TO_PUSH="HEAD"
Josh Bleecher Snyderc3391a92025-04-25 21:03:33 +000057 if [[ "${{ needs.formatting.outputs.commit_sha }}" != "" ]]; then
58 echo "Using formatted commit: ${{ needs.formatting.outputs.commit_sha }}"
Josh Bleecher Snydereda2a8c2025-04-25 21:24:11 +000059 COMMIT_TO_PUSH="${{ needs.formatting.outputs.commit_sha }}"
Josh Bleecher Snyderc3391a92025-04-25 21:03:33 +000060 fi
Josh Bleecher Snyder10489732025-04-30 12:49:10 -070061
Josh Bleecher Snyder6e463602025-05-28 18:10:59 +000062 # Get the actual commit SHA that we're pushing
63 COMMIT_SHA=$(git rev-parse "${COMMIT_TO_PUSH}")
64 echo "commit_sha=${COMMIT_SHA}" >> $GITHUB_OUTPUT
65
Philip Zeyligerfb56a5c2025-07-16 22:38:38 +000066 # Ensure we have the latest main branch reference
67 git fetch origin main
68
Josh Bleecher Snyder837699b2025-05-28 18:58:17 +000069 # Get the list of commits that will be pushed (in chronological order)
Philip Zeyligerfb56a5c2025-07-16 22:38:38 +000070 # Use FETCH_HEAD as the base to avoid rewriting local main reference
71 COMMITS_TO_NOTIFY=$(git log FETCH_HEAD.."${COMMIT_TO_PUSH}" --reverse --format="%H" | tr '\n' ' ')
Josh Bleecher Snyder837699b2025-05-28 18:58:17 +000072 echo "commits_to_notify=${COMMITS_TO_NOTIFY}" >> $GITHUB_OUTPUT
73 echo "Commits to be pushed and notified: ${COMMITS_TO_NOTIFY}"
74
Josh Bleecher Snyderb74b5262025-04-30 12:53:46 -070075 git push https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git "${COMMIT_TO_PUSH}":main
Josh Bleecher Snyderddc81422025-04-25 19:47:05 +000076 env:
77 GITHUB_TOKEN: ${{ github.token }}
Josh Bleecher Snyder6e463602025-05-28 18:10:59 +000078
Josh Bleecher Snyder837699b2025-05-28 18:58:17 +000079 - name: Send Discord notifications for all pushed commits
Josh Bleecher Snyder6e463602025-05-28 18:10:59 +000080 if: success()
81 env:
82 DISCORD_WEBHOOK_FOR_COMMITS: ${{ secrets.DISCORD_WEBHOOK_FOR_COMMITS }}
Josh Bleecher Snyder837699b2025-05-28 18:58:17 +000083 run: |
84 COMMITS="${{ steps.push.outputs.commits_to_notify }}"
85 if [[ -z "$COMMITS" ]]; then
86 echo "No commits to notify about"
87 exit 0
88 fi
89
90 echo "Sending Discord notifications for commits: $COMMITS"
91 for commit_sha in $COMMITS; do
92 echo "Sending notification for commit: $commit_sha"
93 git checkout "$commit_sha"
94 GITHUB_SHA="$commit_sha" python3 .github/scripts/discord_notify.py
95 done