mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-08-28 22:01:40 +00:00
7644dec3a3
* BLD - add GitHub contribution and release automation * BLD - restrict dev merges to maintainers * BLD - add automated review and PR test resources * DOC - require AI governance checks * FIX - pin patched nanoid dependency * TRY - trigger webhook delivery * TRY - verify webhook routing * TRY - rerun pull request checks
104 lines
3.4 KiB
YAML
104 lines
3.4 KiB
YAML
name: Pull request test resource link
|
|
|
|
on:
|
|
workflow_run:
|
|
workflows:
|
|
- CI
|
|
types:
|
|
- completed
|
|
|
|
permissions:
|
|
actions: read
|
|
contents: read
|
|
pull-requests: write
|
|
|
|
jobs:
|
|
comment:
|
|
name: Link test resource
|
|
if: github.event.workflow_run.event == 'pull_request'
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 5
|
|
steps:
|
|
- name: Create or update pull request comment
|
|
uses: actions/github-script@v9
|
|
with:
|
|
script: |
|
|
const marker = '<!-- sky-phone-test-resource -->';
|
|
const run = context.payload.workflow_run;
|
|
const pullRequest = run.pull_requests?.[0];
|
|
|
|
if (!pullRequest) {
|
|
core.notice('The CI run is not associated with a pull request.');
|
|
return;
|
|
}
|
|
|
|
const { owner, repo } = context.repo;
|
|
const runUrl = `https://github.com/${owner}/${repo}/actions/runs/${run.id}`;
|
|
let body;
|
|
|
|
if (run.conclusion === 'success') {
|
|
const response = await github.rest.actions.listWorkflowRunArtifacts({
|
|
owner,
|
|
repo,
|
|
run_id: run.id,
|
|
per_page: 100,
|
|
});
|
|
const prefix = `sky_phone-pr-${pullRequest.number}-`;
|
|
const artifact = response.data.artifacts.find(
|
|
(candidate) =>
|
|
!candidate.expired &&
|
|
candidate.name.startsWith(prefix) &&
|
|
/^sky_phone-pr-\d+-[0-9a-f]{40}\.zip$/.test(candidate.name),
|
|
);
|
|
|
|
if (!artifact) {
|
|
core.setFailed('CI succeeded without a pull request test resource artifact.');
|
|
return;
|
|
}
|
|
|
|
const artifactUrl = `https://github.com/${owner}/${repo}/actions/runs/${run.id}/artifacts/${artifact.id}`;
|
|
body = [
|
|
marker,
|
|
'## Sky Phone Test-Resource',
|
|
'',
|
|
`✅ Der aktuelle Pull Request wurde erfolgreich geprüft und gebaut. [Test-Resource herunterladen](${artifactUrl}).`,
|
|
'',
|
|
'Das ZIP enthält den deploybaren `sky_phone`-Ordner inklusive gebautem Frontend und bleibt 14 Tage verfügbar.',
|
|
'',
|
|
`[Workflow-Lauf öffnen](${runUrl})`,
|
|
].join('\n');
|
|
} else {
|
|
body = [
|
|
marker,
|
|
'## Sky Phone Test-Resource',
|
|
'',
|
|
`❌ Für den aktuellen Stand wurde keine freigegebene Test-Resource erzeugt, weil der [CI-Lauf](${runUrl}) nicht erfolgreich war.`,
|
|
].join('\n');
|
|
}
|
|
|
|
const comments = await github.paginate(github.rest.issues.listComments, {
|
|
owner,
|
|
repo,
|
|
issue_number: pullRequest.number,
|
|
per_page: 100,
|
|
});
|
|
const existing = comments.find(
|
|
(comment) => comment.user?.type === 'Bot' && comment.body?.includes(marker),
|
|
);
|
|
|
|
if (existing) {
|
|
await github.rest.issues.updateComment({
|
|
owner,
|
|
repo,
|
|
comment_id: existing.id,
|
|
body,
|
|
});
|
|
} else {
|
|
await github.rest.issues.createComment({
|
|
owner,
|
|
repo,
|
|
issue_number: pullRequest.number,
|
|
body,
|
|
});
|
|
}
|