singularity-forge/.github/workflows/forensics-check.yml
2026-04-30 21:55:17 +02:00

86 lines
2.9 KiB
YAML

name: Forensics Check
on:
issues:
types: [opened, edited]
permissions:
issues: write
jobs:
check-forensics:
# Only run on bug reports
if: contains(github.event.issue.labels.*.name, 'bug')
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
- name: Check for forensics output and comment if missing
uses: actions/github-script@v7
with:
script: |
const body = context.payload.issue.body || '';
const issueNumber = context.payload.issue.number;
const forensicsMarker = 'Auto-generated by `/sf forensics`';
if (body.includes(forensicsMarker)) {
core.info('Forensics output found in issue body — no comment needed.');
return;
}
// Check comments too — reporter may have added it after opening
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
});
const forensicsInComments = comments.data.some(c =>
c.body && c.body.includes(forensicsMarker)
);
if (forensicsInComments) {
core.info('Forensics output found in comments — no comment needed.');
return;
}
// Avoid duplicate bot comments
const botMarker = '<!-- sf-forensics-check -->';
const alreadyCommented = comments.data.some(c =>
c.user.type === 'Bot' && c.body && c.body.includes(botMarker)
);
if (alreadyCommented) {
core.info('Forensics request comment already posted — skipping duplicate.');
return;
}
const comment = [
botMarker,
'',
'Thanks for the bug report! To help us investigate, please run `/sf forensics` in your project and paste the output here.',
'',
'```bash',
'# In your project directory:',
'/sf forensics',
'```',
'',
'The forensics output includes git history analysis, session traces, stuck-loop detection, and cost data that significantly speeds up diagnosis.',
'',
'---',
'*This is an automated check. If `/sf forensics` is not available in your version, you can skip this step.*',
].join('\n');
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: comment,
});
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
labels: ['needs-forensics'],
});
core.info('Posted forensics request comment.');