name: Auto-Label PRs

on:
  pull_request_target:
    types: [opened, synchronize]

jobs:
  label-and-milestone:
    runs-on: ubuntu-latest
    steps:
    # - name: Checkout repository
    #   uses: actions/checkout@v2

    - name: Set label and milestone
      id: set-label-milestone
      uses: actions/github-script@v7
      with:
        script: |
          const completionsLabel = 'completions';
          const completionsMilestone = 'fish next-3.x';

          // Get changed files in the pull request
          const prNumber = context.payload.pull_request.number;
          const { data: files } = await github.rest.pulls.listFiles({
            owner: context.repo.owner,
            repo: context.repo.repo,
            pull_number: prNumber,
          });

          // Check if any file matches /share/completions/*.fish and no change is outside of /share/
          const completionsRegex = new RegExp('^share/completions/.*\.fish');
          const isCompletions = files.some(file => completionsRegex.test(file.filename))
            && files.every(file => file.filename.startsWith('share/'));

          if (isCompletions) {
            // Add label to PR
            await github.rest.issues.addLabels({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: prNumber,
              labels: [completionsLabel],
            });
            console.log(`PR ${prNumber} assigned label "${completionsLabel}"`);

            // Get the list of milestones
            const { data: milestones } = await github.rest.issues.listMilestones({
              owner: context.repo.owner,
              repo: context.repo.repo,
            });

            // Find the milestone id
            const milestone = milestones.find(milestone => milestone.title === completionsMilestone);

            if (milestone) {
              // Set the milestone for the PR
              await github.rest.issues.update({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: prNumber,
                milestone: milestone.number
              });
              console.log(`PR ${prNumber} assigned milestone "${completionsMilestone}"`);
            } else {
              console.error(`Milestone "${completionsMilestone}" not found`);
            }
          }