name: Check autorelease deprecation

on:
  pull_request_target:
    types: [opened, synchronize, converted_to_draft, ready_for_review, edited]

jobs:
  build:
    name: Check autorelease deprecation
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false

    permissions:
      pull-requests: write

    steps:
      - uses: actions/checkout@v3
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          fetch-depth: 0

      - name: Determine branch name
        run: |
          BRANCH="${GITHUB_BASE_REF#refs/heads/}"
          echo "Building for $BRANCH"
          echo "BRANCH=$BRANCH" >> $GITHUB_ENV

      - name: Determine changed packages
        run: |
          RET=0

          # only detect packages with changes
          PKG_ROOTS=$(find . -name Makefile | \
            grep -v ".*/src/Makefile" | \
            sed -e 's@./\(.*\)/Makefile@\1/@')
          CHANGES=$(git diff --diff-filter=d --name-only origin/$BRANCH...)

          for ROOT in $PKG_ROOTS; do
            for CHANGE in $CHANGES; do
              if [[ "$CHANGE" == "$ROOT"* ]]; then
                if grep -q '$(AUTORELEASE)' "$ROOT/Makefile"; then
                  CONTAINS_AUTORELEASE+="$ROOT"
                fi
                break
              fi
            done
          done

          if [ -n "$CONTAINS_AUTORELEASE" ]; then
            RET=1
            cat > "$GITHUB_WORKSPACE/pr_comment.md" << EOF
          Please do no longer set *PKG_RELEASE* to *AUTORELEASE* as the
          feature is deprecated. Please use an integer instead. Below is a
          list of affected packages including correct *PKG_RELEASE*:

          EOF
          fi

          for ROOT in $CONTAINS_AUTORELEASE; do
            echo -n "  - ${ROOT}Makefile: PKG_RELEASE:=" >> "$GITHUB_WORKSPACE/pr_comment.md"
            last_bump="$(git log --pretty=format:'%h %s' "$ROOT" |
              grep --max-count=1 -e ': [uU]pdate to ' -e ': [bB]ump to ' |
              cut -f 1 -d ' ')"

            if [ -n "$last_bump" ]; then
              echo -n $(($(git rev-list --count "$last_bump..HEAD" "$ROOT") + 2)) >> "$GITHUB_WORKSPACE/pr_comment.md"
            else
              echo -n $(($(git rev-list --count HEAD "$ROOT") + 2)) >> "$GITHUB_WORKSPACE/pr_comment.md"
            fi
            echo >> "$GITHUB_WORKSPACE/pr_comment.md"
          done

          exit $RET

      - name: Find Comment
        uses: peter-evans/find-comment@v2
        if: ${{ failure() }}
        id: fc
        with:
          issue-number: ${{ github.event.pull_request.number }}
          comment-author: 'github-actions[bot]'

      - name: Create or update comment
        uses: peter-evans/create-or-update-comment@v2
        if: ${{ failure() }}
        with:
          comment-id: ${{ steps.fc.outputs.comment-id }}
          issue-number: ${{ github.event.pull_request.number }}
          body-file: 'pr_comment.md'
          edit-mode: replace