name: Upgrade transitive dependencies

on:
  workflow_dispatch: # Allow running on-demand
  schedule:
    - cron: "0 3 * * 5"

jobs:
  upgrade:
    name: Upgrade & Open Pull Request
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: true

      - name: Generate branch name
        run: |
          git checkout -b deps/transitive/${{ github.run_id }}

      - name: Install rust
        run: |
          rustup toolchain install stable --no-self-update --profile minimal

      - name: Upgrade transitive dependencies
        run: cargo update --aggressive

      - name: Detect changes
        id: changes
        run:
          # This output boolean tells us if the dependencies have actually changed
          echo "count=$(git status --porcelain=v1 | wc -l)" >> $GITHUB_OUTPUT

      - name: Commit and push changes
        # Only push if changes exist
        if: steps.changes.outputs.count > 0
        run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git commit -am "dep: Upgrade transitive dependencies"
          git push origin HEAD

      - name: Open pull request if needed
        if: steps.changes.outputs.count > 0
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh pr create --base main --label 'PR: dependencies' --title 'dep: Upgrade transitive dependencies' --body 'Update dependencies'