name: Housekeeping

on:
  schedule:
    - cron: "0 0 * * *"
  workflow_dispatch:
    inputs:
      issueLimit:
        description: Max. number of issues to create
        required: true
        default: "5"

permissions:
  issues: write

jobs:
  find_closed_references:
    if: github.repository_owner == 'libretime'
    name: Find closed references

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4

      - uses: actions/setup-node@v3
        with:
          node-version: "16"

      - uses: ory/closed-reference-notifier@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          issueLimit: ${{ github.event.inputs.issueLimit || '5' }}
          ignore: .git,/docs/releases/*,CHANGELOG.md

  find_broken_links:
    if: github.repository_owner == 'libretime'
    name: Find broken links

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4

      - uses: actions/cache@v3
        with:
          path: .lycheecache
          key: housekeeping-find-broken-links-${{ github.sha }}
          restore-keys: housekeeping-find-broken-links-

      - name: Check Links
        id: lychee
        uses: lycheeverse/lychee-action@v1.8.0
        with:
          args: >-
            '**/*.md'
            --require-https
            --exclude-all-private
            --exclude-mail
            --exclude 'example\.(com|org)'
            --exclude '\$server_name\$request_uri'
            --exclude '%7Bvars.version%7D'
            --exclude 'https://dir.xiph.org/cgi-bin/yp-cgi'
            --exclude 'https://radio.indymedia.org/cgi-bin/yp-cgi'
            --exclude 'https://www.ascap.com'
            --exclude 'https://www.youtube-nocookie.com'
            --exclude 'github\.com/libretime/libretime/(issues|pulls)'
            --cache
            --max-cache-age 2d
          fail: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  find_stale_issues:
    if: github.repository_owner == 'libretime'
    name: Find stale issues

    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v8
        with:
          stale-issue-message: >
            This issue has been automatically marked as stale because it has not had
            activity in the last 5 months. It will be closed if no activity occurs in
            the next month.

            Please chat to us on the [forum](https://discourse.libretime.org/) or
            ask for help on [#libretime:matrix.org](https://matrix.to/#/#libretime:matrix.org)
            if you have any questions or need further support with getting this issue resolved.

            You may also label an issue as *pinned* if you would like to make sure
            that it does not get closed by this bot.
          close-issue-message: >
            This issue has been automatically closed after is was marked as stale and
            did not receive any further inputs.

            Feel free to let us know on the [forum](https://discourse.libretime.org/) or
            ask for help on [#libretime:matrix.org](https://matrix.to/#/#libretime:matrix.org)
            if you feel this issue should not have been closed.

            Thank you for your contributions.
          days-before-issue-stale: 150
          days-before-issue-close: 30
          stale-issue-label: "status: stalled"
          exempt-issue-labels: "status: pinned,status: maybe later,security,is: feature-request"
          exempt-issue-assignees: true
          exempt-issue-milestones: true
