name: Issue claim automation

on:
  issue_comment:
    types: [created]
  issues:
    types: [closed, unlabeled, unassigned]
  schedule:
    - cron: '17 2 * * *'
  workflow_dispatch:

permissions:
  contents: read
  issues: write
  pull-requests: read

jobs:
  command:
    name: Process claim command
    if: >-
      github.event_name == 'issue_comment' &&
      github.event.issue.pull_request == null &&
      contains(fromJSON('["/claim", "/unclaim", "/renew", "/claim status"]'), github.event.comment.body)
    concurrency:
      group: issue-claim-${{ github.repository }}
      cancel-in-progress: false
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - name: Check out the default branch
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
        with:
          ref: ${{ github.event.repository.default_branch }}
          persist-credentials: false

      - name: Process command
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: node script/github/issue-claim.js event

  cleanup:
    name: Reconcile unpublished claims
    if: github.event_name == 'issues'
    concurrency:
      group: issue-claim-${{ github.repository }}-cleanup-${{ github.event.issue.number }}
      cancel-in-progress: false
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - name: Check out the default branch
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
        with:
          ref: ${{ github.event.repository.default_branch }}
          persist-credentials: false

      - name: Reconcile claim
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: node script/github/issue-claim.js cleanup

  sweep:
    name: Release expired claims
    if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
    concurrency:
      group: issue-claim-${{ github.repository }}
      cancel-in-progress: false
    runs-on: ubuntu-latest
    timeout-minutes: 20
    steps:
      - name: Check out the default branch
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
        with:
          ref: ${{ github.event.repository.default_branch }}
          persist-credentials: false

      - name: Release expired claims
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: node script/github/issue-claim.js sweep