---
name: Update repository with Cruft
permissions:
  contents: write
  pull-requests: write
  actions: write
on:
  schedule:
    - cron: "0 0 * * *"

env:
  PYTHON_VERSION: 3.13

jobs:
  update:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: true
      matrix:
        include:
          - add-paths: .
            body: Use this to merge the changes to this repository.
            branch: cruft/update
            commit-message: "chore: accept new Cruft update"
            title: New updates detected with Cruft
          - add-paths: .cruft.json
            body: Use this to reject the changes in this repository.
            branch: cruft/reject
            commit-message: "chore: reject new Cruft update"
            title: Reject new updates detected with Cruft
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: ${{ env.PYTHON_VERSION }}

      - name: Install Cruft
        run: pip3 install cruft

      - name: Check if update is available
        continue-on-error: false
        id: check
        run: |
          CHANGES=0
          if [ -f .cruft.json ]; then
            if ! cruft check; then
              CHANGES=1
            fi
          else
            echo "No .cruft.json file"
          fi

          echo "has_changes=$CHANGES" >> "$GITHUB_OUTPUT"

      - name: Run update if available
        if: steps.check.outputs.has_changes == '1'
        run: |
          git config --global user.email "allen.porter@gmail.com"
          git config --global user.name "Allen Porter"

          cruft update --skip-apply-ask --refresh-private-variables
          git restore --staged .


      - name: Create pull request
        if: steps.check.outputs.has_changes == '1'
        uses: peter-evans/create-pull-request@v7
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          add-paths: ${{ matrix.add-paths }}
          commit-message: ${{ matrix.commit-message }}
          branch: ${{ matrix.branch }}
          delete-branch: true
          branch-suffix: timestamp
          title: ${{ matrix.title }}
          body: |
            This is an autogenerated PR. ${{ matrix.body }}

            [Cruft](https://cruft.github.io/cruft/) has detected updates from the Cookiecutter repository.