Trunk Upgrade #14
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Trunk Upgrade | |
| on: | |
| schedule: | |
| # On the first day of every month @ 8am | |
| - cron: 0 8 1 * * | |
| workflow_dispatch: {} | |
| permissions: read-all | |
| jobs: | |
| trunk-upgrade: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| # For trunk to create PRs | |
| contents: write | |
| pull-requests: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| - name: Create Token for MasterpointBot App | |
| uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a #v2.1.0 | |
| id: generate-token | |
| with: | |
| app_id: ${{ secrets.MP_BOT_APP_ID }} | |
| private_key: ${{ secrets.MP_BOT_APP_PRIVATE_KEY }} | |
| - name: Upgrade | |
| id: trunk-upgrade | |
| uses: trunk-io/trunk-action/upgrade@4d5ecc89b2691705fd08c747c78652d2fc806a94 # v1.1.19 | |
| with: | |
| github-token: ${{ steps.generate-token.outputs.token }} | |
| reviewers: "@masterpointio/masterpoint-internal" | |
| prefix: "chore: " | |
| - name: Wait for checks to pass + Merge PR | |
| if: steps.trunk-upgrade.outputs.pull-request-number != '' | |
| env: | |
| GH_TOKEN: ${{ secrets.MASTERPOINT_TEAM_PAT }} | |
| PR_NUMBER: ${{ steps.trunk-upgrade.outputs.pull-request-number }} | |
| run: | | |
| echo "Waiting for status checks to pass on PR #$PR_NUMBER..." | |
| # Wait a bit for checks to start | |
| echo "Waiting 30 seconds for checks to initialize..." | |
| sleep 30 | |
| # Try to get all checks first to see if any exist | |
| ALL_CHECKS_JSON=$(gh pr checks "$PR_NUMBER" --json state,bucket || echo "[]") | |
| echo "All checks: $ALL_CHECKS_JSON" | |
| # Get required checks | |
| REQUIRED_CHECKS_JSON=$(gh pr checks "$PR_NUMBER" --required --json state,bucket || echo "[]") | |
| echo "Required checks: $REQUIRED_CHECKS_JSON" | |
| # Check if we have any required checks | |
| REQUIRED_CHECKS_COUNT=$(echo "$REQUIRED_CHECKS_JSON" | jq '. | length') | |
| ALL_CHECKS_COUNT=$(echo "$ALL_CHECKS_JSON" | jq '. | length') | |
| if [ "$REQUIRED_CHECKS_COUNT" -eq 0 ] && [ "$ALL_CHECKS_COUNT" -eq 0 ]; then | |
| echo "No status checks found. This might be expected if no checks are configured." | |
| echo "Proceeding with auto-approval and merge..." | |
| # Auto-approve the PR | |
| gh pr review "$PR_NUMBER" --approve --body "Auto-approved by trunk upgrade workflow (no status checks configured)" | |
| # Merge the PR | |
| gh pr merge "$PR_NUMBER" --squash --delete-branch --admin | |
| exit 0 | |
| fi | |
| # If we have required checks, wait for them. Otherwise, wait for all checks. | |
| if [ "$REQUIRED_CHECKS_COUNT" -gt 0 ]; then | |
| echo "Waiting for $REQUIRED_CHECKS_COUNT required status checks..." | |
| CHECKS_TO_MONITOR="required" | |
| else | |
| echo "No required checks configured. Waiting for all $ALL_CHECKS_COUNT status checks..." | |
| CHECKS_TO_MONITOR="all" | |
| fi | |
| # Wait for checks to complete | |
| while true; do | |
| if [ "$CHECKS_TO_MONITOR" = "required" ]; then | |
| CHECKS_JSON=$(gh pr checks "$PR_NUMBER" --required --json state,bucket) | |
| else | |
| CHECKS_JSON=$(gh pr checks "$PR_NUMBER" --json state,bucket) | |
| fi | |
| echo "Current checks status: $CHECKS_JSON" | |
| if echo "$CHECKS_JSON" | jq -e '.[] | select(.bucket=="fail")' > /dev/null; then | |
| echo "One or more checks have failed. Exiting..." | |
| exit 1 | |
| fi | |
| FAILED_OR_PENDING_CHECKS=$(echo "$CHECKS_JSON" | jq '[.[] | select(.state!="SUCCESS" or .bucket!="pass")] | length') | |
| if [ "$FAILED_OR_PENDING_CHECKS" -eq 0 ]; then | |
| echo "All checks passed. Auto-approving and merging PR https://github.com/${{ github.repository }}/pull/$PR_NUMBER..." | |
| # Auto-approve the PR | |
| gh pr review "$PR_NUMBER" --approve --body "Auto-approved by trunk upgrade workflow" | |
| # Merge the PR | |
| gh pr merge "$PR_NUMBER" --squash --delete-branch --admin | |
| break | |
| else | |
| echo "Some checks are still running or pending. Retrying in 30s..." | |
| sleep 30 | |
| fi | |
| done |