#
# This workflow adds a label to the issue involved on event when is pinned
# and removes it when unpinned.
#
# It also is enhanced with `stale.yml` workflow: pinned issues never stales
# because that label is declared as part of it `exempt-issue-labels`
# input parameter.
#
name: Issues pinner management

on:
  issues:
    types:
      - "pinned"
      - "unpinned"

permissions:
  # no checkouts/branching needed
  contents: none
  # needed by "action-add-labels / action-remove-labels" to CRUD labels
  issues: write

# This allows a subsequently queued workflow run to interrupt/wait for previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.issue.number || github.run_id }}'
  cancel-in-progress: false  # true: interrupt, false = wait for

jobs:

  labeler:
    name: Pushpin labeler
    runs-on: ubuntu-latest
    steps:

      - name: Add pushpin label on pinning an issue
        id: if-pinned
        if: github.event.action == 'pinned'
        uses: actions-ecosystem/action-add-labels@v1
        with:
          repo:   ${{ github.repository }}
          number: ${{ github.event.issue.number }}
          labels: |
            :pushpin: pinned

      - name: Remove pushpin label on unpinning an issue
        id: if-unpinned
        if: github.event.action == 'unpinned'
        uses: actions-ecosystem/action-remove-labels@v1
        with:
          repo:   ${{ github.repository }}
          number: ${{ github.event.issue.number }}
          labels: |
            :pushpin: pinned

      - name: GitHub reporter
        # run even previous steps fails
        if: always()
        run: |
          echo "$INPUT_SUMMARY"  >> $GITHUB_STEP_SUMMARY;
        env:
          INPUT_SUMMARY: ${{ format('Issue [\#{2}]({0}/{1}/issues/{2}) should be `{3}`.',
                                    github.server_url, github.repository,
                                    github.event.issue.number,
                                    github.event.action) }}