| # Simplified Commit Queue |
| # |
| # (Force) push to "queue-main-$USER" a potential change, and |
| # this job will push it main if it passes pre-commit and tests, |
| # which will run in parallel. The push may fail if the commit |
| # cannot be pushed cleanly because it needs to be rebased, which |
| # will happen especially if another developer pushes a change at |
| # roughly the same time. |
| # |
| # Please keep this file in sync with queue-dev.yml. |
| |
| name: Main Branch Commit Queue |
| on: |
| push: |
| branches: |
| - "queue-main-*" |
| |
| permissions: read-all |
| |
| jobs: |
| formatting: |
| uses: ./.github/workflows/formatting.yml |
| permissions: |
| contents: write |
| with: |
| auto_fix: true |
| |
| go-test: |
| needs: [formatting] |
| uses: ./.github/workflows/go_test.yml |
| permissions: read-all |
| with: |
| ref: ${{ needs.formatting.outputs.commit_sha }} |
| |
| ui-test: |
| needs: [formatting] |
| uses: ./.github/workflows/webui_test.yml |
| permissions: read-all |
| with: |
| ref: ${{ needs.formatting.outputs.commit_sha }} |
| |
| push-to-main: |
| runs-on: ubuntu-latest |
| needs: [go-test, ui-test, formatting] |
| permissions: |
| contents: write |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| fetch-depth: 0 |
| |
| - name: Push to main |
| id: push |
| run: | |
| COMMIT_TO_PUSH="HEAD" |
| if [[ "${{ needs.formatting.outputs.commit_sha }}" != "" ]]; then |
| echo "Using formatted commit: ${{ needs.formatting.outputs.commit_sha }}" |
| COMMIT_TO_PUSH="${{ needs.formatting.outputs.commit_sha }}" |
| fi |
| |
| # Get the actual commit SHA that we're pushing |
| COMMIT_SHA=$(git rev-parse "${COMMIT_TO_PUSH}") |
| echo "commit_sha=${COMMIT_SHA}" >> $GITHUB_OUTPUT |
| |
| # Get the list of commits that will be pushed (in chronological order) |
| COMMITS_TO_NOTIFY=$(git log origin/main.."${COMMIT_TO_PUSH}" --reverse --format="%H" | tr '\n' ' ') |
| echo "commits_to_notify=${COMMITS_TO_NOTIFY}" >> $GITHUB_OUTPUT |
| echo "Commits to be pushed and notified: ${COMMITS_TO_NOTIFY}" |
| |
| git push https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git "${COMMIT_TO_PUSH}":main |
| env: |
| GITHUB_TOKEN: ${{ github.token }} |
| |
| - name: Send Discord notifications for all pushed commits |
| if: success() |
| env: |
| DISCORD_WEBHOOK_FOR_COMMITS: ${{ secrets.DISCORD_WEBHOOK_FOR_COMMITS }} |
| run: | |
| COMMITS="${{ steps.push.outputs.commits_to_notify }}" |
| if [[ -z "$COMMITS" ]]; then |
| echo "No commits to notify about" |
| exit 0 |
| fi |
| |
| echo "Sending Discord notifications for commits: $COMMITS" |
| for commit_sha in $COMMITS; do |
| echo "Sending notification for commit: $commit_sha" |
| git checkout "$commit_sha" |
| GITHUB_SHA="$commit_sha" python3 .github/scripts/discord_notify.py |
| done |