name: 🤖 BlackRoad Auto-Merge on: pull_request: types: [opened, synchronize, reopened] check_suite: types: [completed] workflow_run: workflows: ["🔍 BlackRoad Compliance Check"] types: [completed] permissions: contents: write pull-requests: write checks: read jobs: auto-merge: name: Auto-Merge Compliant PRs runs-on: ubuntu-latest # Only run for bot-created PRs if: | github.event.pull_request.user.login == 'github-actions[bot]' || github.actor == 'github-actions[bot]' steps: - name: đŸ“Ĩ Checkout Repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: 🔍 Get PR Details id: pr env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # Get PR number if [ -n "${{ github.event.pull_request.number }}" ]; then PR_NUMBER="${{ github.event.pull_request.number }}" else # If triggered by workflow_run, find the PR PR_NUMBER=$(gh pr list --head blackroad-auto-fix --json number --jq '.[0].number') fi if [ -z "$PR_NUMBER" ]; then echo "No PR found, exiting..." exit 0 fi echo "number=$PR_NUMBER" >> $GITHUB_OUTPUT # Get PR status PR_DATA=$(gh pr view "$PR_NUMBER" --json statusCheckRollup,headRefName,mergeable,mergeStateStatus) # Extract status STATUS=$(echo "$PR_DATA" | jq -r '.statusCheckRollup[] | select(.conclusion != null) | .conclusion' | sort -u) MERGEABLE=$(echo "$PR_DATA" | jq -r '.mergeable') MERGE_STATE=$(echo "$PR_DATA" | jq -r '.mergeStateStatus') BRANCH=$(echo "$PR_DATA" | jq -r '.headRefName') echo "status=$STATUS" >> $GITHUB_OUTPUT echo "mergeable=$MERGEABLE" >> $GITHUB_OUTPUT echo "merge_state=$MERGE_STATE" >> $GITHUB_OUTPUT echo "branch=$BRANCH" >> $GITHUB_OUTPUT echo "PR #$PR_NUMBER status: $STATUS, mergeable: $MERGEABLE, state: $MERGE_STATE" - name: ✅ Validate PR for Auto-Merge id: validate run: | CAN_MERGE="false" # Check 1: Is this from blackroad-auto-fix branch? if [[ "${{ steps.pr.outputs.branch }}" == "blackroad-auto-fix" ]]; then echo "✅ PR is from auto-fix branch" # Check 2: Is mergeable? if [[ "${{ steps.pr.outputs.mergeable }}" == "MERGEABLE" ]]; then echo "✅ PR is mergeable (no conflicts)" # Check 3: All checks passed or no checks? if [[ -z "${{ steps.pr.outputs.status }}" ]] || [[ "${{ steps.pr.outputs.status }}" == "SUCCESS" ]]; then echo "✅ All checks passed (or no checks required)" CAN_MERGE="true" else echo "âš ī¸ Some checks failed or are pending: ${{ steps.pr.outputs.status }}" fi else echo "âš ī¸ PR has merge conflicts or is not mergeable" fi else echo "â„šī¸ Not an auto-fix PR (branch: ${{ steps.pr.outputs.branch }}), skipping" fi echo "can_merge=$CAN_MERGE" >> $GITHUB_OUTPUT - name: 🚀 Merge PR if: steps.validate.outputs.can_merge == 'true' && steps.pr.outputs.number != '' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_NUMBER="${{ steps.pr.outputs.number }}" echo "🤖 Merging PR #$PR_NUMBER..." # Merge with squash and delete branch gh pr merge "$PR_NUMBER" \ --squash \ --delete-branch \ --body "✅ Auto-merged by BlackRoad Auto-Merge System This PR passed all compliance checks and was automatically merged. 🤖 Automated by BlackRoad Auto-Merge Š 2025-2026 BlackRoad OS, Inc." echo "✅ PR #$PR_NUMBER merged successfully!" - name: đŸ’Ŧ Add Success Comment if: steps.validate.outputs.can_merge == 'true' && steps.pr.outputs.number != '' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_NUMBER="${{ steps.pr.outputs.number }}" gh pr comment "$PR_NUMBER" --body "🤖 **Auto-Merge Successful** This PR has been automatically merged because: - ✅ Created by BlackRoad auto-fix bot - ✅ All compliance checks passed - ✅ No merge conflicts - ✅ No manual review required The changes are now live on the default branch. --- 🤖 Automated by BlackRoad Auto-Merge System Š 2025-2026 BlackRoad OS, Inc." || true - name: 📝 Create Issue on Validation Failure if: | steps.validate.outputs.can_merge == 'false' && steps.pr.outputs.number != '' && steps.pr.outputs.branch == 'blackroad-auto-fix' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_NUMBER="${{ steps.pr.outputs.number }}" REPO="${{ github.repository }}" gh issue create \ --title "âš ī¸ Auto-Fix PR Requires Manual Review: #$PR_NUMBER" \ --body "## Auto-Fix PR Could Not Be Auto-Merged **PR:** #$PR_NUMBER **Status:** Manual review needed âš ī¸ **Reason:** Checks failed or merge conflicts detected ### Details: The auto-fix PR did not pass automatic validation. **Branch:** \`${{ steps.pr.outputs.branch }}\` **Mergeable:** \`${{ steps.pr.outputs.mergeable }}\` **Merge State:** \`${{ steps.pr.outputs.merge_state }}\` **Check Status:** \`${{ steps.pr.outputs.status }}\` ### Action Required: Please review the PR manually and resolve any issues. **PR Link:** https://github.com/$REPO/pull/$PR_NUMBER --- 🤖 Automated Alert from BlackRoad Auto-Merge System Š 2025-2026 BlackRoad OS, Inc." \ --label "auto-fix-failed,needs-review" || true - name: 🚨 Notify on Critical Failure if: failure() env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "🚨 Auto-merge workflow encountered an error" echo "This may require manual intervention" # If Slack webhook is configured, uncomment below: # curl -X POST "${{ secrets.SLACK_WEBHOOK }}" -H 'Content-Type: application/json' \ # -d '{"text":"🚨 Auto-merge failed in ${{ github.repository }}"}'