| name: Add issue header | |
| # Automatically edits an issue's descriptions with a header, | |
| # one of: | |
| # | |
| # - Bug report | |
| # - Crash report | |
| # - Feature or enhancement | |
| on: | |
| issues: | |
| types: | |
| # Only ever run once | |
| - opened | |
| jobs: | |
| add-header: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| issues: write | |
| steps: | |
| - uses: actions/github-script@v7 | |
| with: | |
| # language=JavaScript | |
| script: | | |
| // https://devguide.python.org/triage/labels/#type-labels | |
| const HEADERS = new Map([ | |
| ['type-bug', 'Bug report'], | |
| ['type-crash', 'Crash report'], | |
| ['type-feature', 'Feature or enhancement'], | |
| ]); | |
| let issue_data = await github.rest.issues.get({ | |
| issue_number: context.issue.number, | |
| owner: context.repo.owner, | |
| repo: context.repo.repo | |
| }).then(issue => issue.data); | |
| let header = ''; | |
| for (const label_data of issue_data.labels) { | |
| const label_name = (typeof label_data === 'string') ? label_data : label_data.name; | |
| if (HEADERS.has(label_name)) { | |
| header = HEADERS.get(label_name); | |
| break; | |
| } | |
| } | |
| if (header !== '') { | |
| console.log(`Setting new header: ${header}`); | |
| await github.rest.issues.update({ | |
| issue_number: context.issue.number, | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| body: `# ${header}\n\n${issue_data.body.replaceAll('\r', '')}` | |
| }); | |
| } |