ci: deploy pull requests to staging server (#24)
parent
c334fc59d5
commit
2744b1727a
@ -0,0 +1,81 @@
|
|||||||
|
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');
|
||||||
Loading…
Reference in New Issue