Files
sbox-public/.github/workflows/pull_request.yml
2025-12-02 12:50:20 +00:00

56 lines
1.9 KiB
YAML

name: PR Triage
on:
pull_request_target:
types: [ labeled ]
jobs:
pr-triaged:
runs-on: ubuntu-latest
if: github.event.label.name == 'triaged'
steps:
- name: Ensure PR checks passed
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const requiredChecks = ['format', 'tests'];
const pr = context.payload.pull_request;
if (!pr) {
throw new Error('No pull request found in event payload.');
}
const { data } = await github.rest.checks.listForRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: pr.head.sha,
per_page: 100
});
const checkRuns = data.check_runs ?? [];
for (const requiredCheck of requiredChecks) {
const match = checkRuns.find(run => (run.name ?? '') === requiredCheck);
if (!match || match.conclusion !== 'success') {
const status = match ? (match.conclusion ?? match.status ?? 'unknown') : 'missing';
core.warning(`Required check '${requiredCheck}' did not pass (${status}).`);
throw new Error('Cannot triage until required checks succeed. Remove and re-add the triaged label to retry.');
}
}
- name: Repository Dispatch
uses: actions/github-script@v7
env:
DISPATCH_CONTEXT: ${{ toJson(github) }}
with:
github-token: ${{ secrets.SBOXBOT_TOKEN }}
script: |
const clientPayload = JSON.parse(process.env.DISPATCH_CONTEXT);
await github.rest.repos.createDispatchEvent({
owner: 'Facepunch',
repo: 'sbox',
event_type: 'pr-triaged',
client_payload: { github: clientPayload }
});