name: Build uv cache

on:
  push:
    branches:
      - main
    paths:
      - "uv.lock"
      - "pyproject.toml"
  schedule:
    - cron: "0 0 */5 * *"  # Run every 5 days at midnight UTC to prevent cache expiration
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build-cache:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13"]

    steps:
      - name: Checkout repository
        uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

      - name: Install uv
        uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6
        with:
          version: "0.11.3"
          python-version: ${{ matrix.python-version }}
          enable-cache: false

      - name: Install dependencies and populate cache
        run: |
          echo "Building global UV cache for Python ${{ matrix.python-version }}..."
          uv sync --all-groups --all-extras --no-install-project
          echo "Cache populated successfully"

      - name: Save uv caches
        uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
        with:
          path: |
            ~/.cache/uv
            ~/.local/share/uv
            .venv
          key: uv-main-py${{ matrix.python-version }}-${{ hashFiles('uv.lock') }}
