name: Auto-label issues on: issues: types: [opened] permissions: contents: read issues: write jobs: label: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: stefanbuck/github-issue-parser@v3 id: issue-parser continue-on-error: true with: template-path: .github/ISSUE_TEMPLATE/bug_report.yml - uses: redhat-plumbers-in-action/advanced-issue-labeler@v3 continue-on-error: true with: issue-form: ${{ steps.issue-parser.outputs.jsonString }} token: ${{ secrets.GITHUB_TOKEN }} config-path: .github/advanced-issue-labeler.yml - name: Infer component from text when the form was not used uses: actions/github-script@v7 with: script: | const { componentLabels, inferComponentLabels, loadKeywords, } = require(`${process.env.GITHUB_WORKSPACE}/.github/scripts/infer-component-labels.js`); const { data: issue } = await github.rest.issues.get({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, }); const keywords = loadKeywords(`${process.env.GITHUB_WORKSPACE}/.github/component-keywords.json`); const known = componentLabels(keywords); const existing = issue.labels.map((label) => label.name || label); if (existing.some((name) => known.includes(name))) { core.info(`Component label already present: ${existing.join(', ')}`); return; } const labels = inferComponentLabels(`${issue.title}\n\n${issue.body || ''}`, keywords); if (labels.length === 0) { core.info('No component could be inferred from the issue text'); return; } core.info(`Inferred: ${labels.join(', ')}`); await github.rest.issues.addLabels({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, labels, });