name: Label Issue

on:
  issues:
    types: [ opened, edited ]
  
jobs:
  label-topic-change-issue:
    runs-on: ubuntu-latest
    steps:
      - name: Add Labels To Issue
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const issue = context.payload.issue;
            const roadmapUrl = issue.body.match(/https?:\/\/roadmap.sh\/[^ ]+/);

            // if the issue is labeled as a topic-change, add the roadmap slug as a label
            if (issue.labels.some(label => label.name === 'topic-change')) {
              if (roadmapUrl) {
                const roadmapSlug = new URL(roadmapUrl[0]).pathname.replace(/\//, '');
                github.rest.issues.addLabels({
                  owner: context.repo.owner,
                  repo: context.repo.repo,
                  issue_number: issue.number,
                  labels: [roadmapSlug]
                });
              }
            
              // Close the issue if it has no roadmap URL
              if (!roadmapUrl) {
                github.rest.issues.update({
                  owner: context.repo.owner,
                  repo: context.repo.repo,
                  issue_number: issue.number,
                  state: 'closed'
                });
              }
            }