name: Dependency-Updater

on:
  schedule:
    - cron: "0 0 * * *"
  workflow_dispatch:

jobs:
  dependency_updater:
    name: Dependency-Updater
    runs-on: ubuntu-latest
    permissions: 
      pull-requests: write
      contents: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: install uv and python
        uses: astral-sh/setup-uv@v7
        with:
          version: "0.10.4"
          python-version: "3.9"
      - name: UV Python dependency updater
        env:
          GH_TOKEN: ${{ secrets.RENOVATE_TOKEN }}
        run: |
            git config --global user.name "SDK Updater Bot"
            git config --global user.email "noreply@stackit.de"
        
            pr_name=$(echo "Dependency Updates")

            make update-dependencies          
            branch_name="dependency-updater-${{ github.run_id }}"
            git checkout -b "$branch_name"

            if [ -n "$(git diff --name-only)" ]; then
              for file in $(git diff --name-only | grep uv.lock); do
                  # Extract the service for which the dependencies have been updated
                  dirpath=$(dirname $file)                
                  git add "$file"
                  git commit -m "chore: dependency update for ${dirpath}"
              done
              
              # Check if a PR already exists for dependency updates
              if gh pr list --state open | grep -q "${pr_name}"; then
                  echo "Pr for $dirpath already exists. Deleting old PR."
                  pr_number=$(gh pr list --state open --json number --search "$pr_name" -q '.[0].number')
                  gh pr close "$pr_number" --delete-branch
              fi

              git push --set-upstream origin "$branch_name"
              gh pr create --title "$pr_name" --body "Automated dependency update" --base "main"
            else
              echo "No changes detected. Skipping PR creation."
            fi
