name: Issue labels

on:
  issues:
    types: [opened, reopened]

permissions:
  issues: write

jobs:
  # From https://github.com/marketplace/actions/github-script#apply-a-label-to-an-issue.
  add-triage-label:
    name: "Add 'triage-needed'"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const result = await github.rest.issues.listLabelsOnIssue({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
            })
            const labels = result.data.map((label) => label.name)
            const hasNeeds = labels.some((label) => label.startsWith('needs'))

            if (!hasNeeds) {
              console.log('This issue is not labeled with a "needs __" label, add the "triage-needed" label.')

              github.rest.issues.addLabels({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: context.issue.number,
                labels: ['triage-needed']
              })
            } else {
              console.log('This issue already has a "needs __" label, do not add the "triage-needed" label.')
            }
