cpython/.github/workflows/add-issue-header.yml

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', '')}`
              });
            }