name: Check Deployment Readiness on: pull_request: types: [labeled] jobs: check-and-deploy: runs-on: ubuntu-latest if: github.event.label.name == 'awaiting-deployment' permissions: actions: write pull-requests: read contents: write steps: - name: Check build workflow status id: check uses: actions/github-script@v7 with: script: | const prNumber = context.payload.pull_request.number; const headSha = context.payload.pull_request.head.sha; console.log(`Checking build status for PR #${prNumber}, commit ${headSha}`); // Use Check Runs API to get the status of the build workflow const { data: checkRuns } = await github.rest.checks.listForRef({ owner: context.repo.owner, repo: context.repo.repo, ref: headSha, check_name: 'build' }); console.log(`Found ${checkRuns.total_count} check runs for 'build'`); if (checkRuns.total_count === 0) { console.log('No build check found for this commit'); core.setOutput('should_deploy', 'false'); core.setOutput('reason', 'No build check found'); return; } const buildCheck = checkRuns.check_runs[0]; console.log(`Build check status: ${buildCheck.status}, conclusion: ${buildCheck.conclusion}`); // Check if build is still running if (buildCheck.status !== 'completed') { console.log('Build check is still running'); core.setOutput('should_deploy', 'false'); core.setOutput('reason', 'Build check is still running'); return; } // Check if build failed if (buildCheck.conclusion !== 'success') { console.log(`Build check failed with conclusion: ${buildCheck.conclusion}`); core.setOutput('should_deploy', 'false'); core.setOutput('reason', `Build check ${buildCheck.conclusion}`); return; } // Build completed successfully console.log('Build check completed successfully, ready to deploy'); core.setOutput('should_deploy', 'true'); - name: Trigger deployment if: steps.check.outputs.should_deploy == 'true' uses: actions/github-script@v7 with: script: | await github.rest.actions.createWorkflowDispatch({ owner: context.repo.owner, repo: context.repo.repo, workflow_id: 'deploy-pr.yml', ref: context.payload.pull_request.head.ref, inputs: { pr_number: context.payload.pull_request.number.toString() } }); console.log('Deployment workflow triggered');