name: Add Pull Request Labels and Assign to Project
on:
  pull_request_target:
    types: [opened, closed]

jobs:
  triage:
    runs-on: ubuntu-latest
    if: github.event.action == 'opened'
    steps:
      - uses: ericcornelissen/labeler@label-based-on-status
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}

  assign-to-project:
    runs-on: ubuntu-latest
    name: Assign to Project
    if: github.event.action == 'opened'
    needs: triage
    env:
      MY_GITHUB_TOKEN: ${{ secrets.AUTO_ASSIGN_WORKFLOW_TOKEN }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - id: get-labels
        uses: ./.github/actions/get-labels
        with:
          issue_number: ${{ github.event.pull_request.number }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - id: get-si-members
        name: Get simple-icons members
        run: |
          members="$(curl -H 'Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' --retry 5 -s https://api.github.com/orgs/simple-icons/members | jq .[].login | tr '\n' ',' | sed -e 's/"//g' -e 's/,$//')"
          echo "members=$members" >> $GITHUB_OUTPUT

      - id: get-linked-issues
        name: Get linked issue numbers
        uses: mondeja/pr-linked-issues-action@v2
        with:
          # Lazy linked issues. If one of the lines of the pull request body
          # matches one of the next contents, the matching issue number will
          # be added to `issues` output:
          add_links_by_content: |
            **Issue:** #{issue_number}
            **Issue**: #{issue_number}
            **Close:** #{issue_number}
            **Close**: #{issue_number}
            **Closes:** #{issue_number}
            **Closes**: #{issue_number}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - id: priority-1
        name: Assign `update icon/data` pull requests to "Priority 1"
        uses: srggrs/assign-one-project-github-action@1.3.1
        if: contains(steps.get-labels.outputs.labels, 'update icon/data')
        with:
          project: https://github.com/orgs/simple-icons/projects/2
          column_name: Priority 1

      - id: priority-2
        name: Assign `new icon` pull requests to "Priority 2"
        uses: srggrs/assign-one-project-github-action@1.3.1
        # the PR has the `new icon` label along with a linked issue and
        # the opener is not a member of simple-icons organization
        if: |
          contains(steps.get-labels.outputs.labels, 'new icon') &&
          join(steps.get-linked-issues.outputs.issues) != '' &&
          contains(steps.get-si-members.outputs.members, github.event.pull_request.user.login) == false
        with:
          project: https://github.com/orgs/simple-icons/projects/2
          column_name: Priority 2

      - id: priority-3
        name: Assign `new icon` pull requests by maintainers to "Priority 3"
        uses: srggrs/assign-one-project-github-action@1.3.1
        # the PR has the `new icon` label along with a linked issue and
        # the opener is a member of the simple-icons organisation
        if: |
          contains(steps.get-labels.outputs.labels, 'new icon') &&
          join(steps.get-linked-issues.outputs.issues) != '' &&
          contains(steps.get-si-members.outputs.members, github.event.pull_request.user.login) == true
        with:
          project: https://github.com/orgs/simple-icons/projects/2
          column_name: Priority 3

      - id: priority-4
        name: Assign `new icon` pull requests by maintainers without an issue to "Priority 4"
        uses: srggrs/assign-one-project-github-action@1.3.1
        # the PR has the `new icon` label but with no linked issue and
        # the opener is a member of the simple-icons organisation
        if: |
          contains(steps.get-labels.outputs.labels, 'new icon') &&
          join(steps.get-linked-issues.outputs.issues) == '' &&
          contains(steps.get-si-members.outputs.members, github.event.pull_request.user.login) == true
        with:
          project: https://github.com/orgs/simple-icons/projects/2
          column_name: Priority 4

      - name: Assign pull requests to "Unprioritised"
        uses: srggrs/assign-one-project-github-action@1.3.1
        if: |
          steps.priority-1.conclusion == 'skipped' &&
          steps.priority-2.conclusion == 'skipped' &&
          steps.priority-3.conclusion == 'skipped' &&
          steps.priority-4.conclusion == 'skipped'
        with:
          project: https://github.com/orgs/simple-icons/projects/2
          column_name: Unprioritised

  unassign-from-project:
    runs-on: ubuntu-latest
    name: Unassign from Project
    if: |
      github.event.action != 'opened' &&
      github.event.pull_request.merged == false
    env:
      MY_GITHUB_TOKEN: ${{ secrets.AUTO_ASSIGN_WORKFLOW_TOKEN }}
    steps:
      - name: Assign closed pull requests to "Completed or Abandoned"
        uses: srggrs/assign-one-project-github-action@1.3.1
        with:
          project: https://github.com/orgs/simple-icons/projects/2
          column_name: Completed or Abandoned