name: Build And Push
run-name: ${{ github.actor }} builds and pushes production-ready image
on:
  push:
    branches:
      - latest

jobs:
  publish:
    runs-on: ubuntu-latest
    env:
      RUNNER_TOOL_CACHE: /${{ github.workspace }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          registry: git.miwory.dev
          username: ${{ secrets.CI_USERNAME }}
          password: ${{ secrets.CI_TOKEN }}

      - name: Cache uv binary
        uses: actions/cache@v4
        with:
          path: ${{ github.workspace }}/uv
          key: uv-${{ runner.os }}
          restore-keys: uv-${{ runner.os }}

      - name: Cache uv dependencies
        uses: actions/cache@v4
        with:
          path: ${{ github.workspace }}/.cache/uv
          key: uv-${{ runner.os }}
          restore-keys: uv-${{ runner.os }}

      - name: Cache pre-commit
        uses: actions/cache@v4
        with:
          path: ~/.cache/pre-commit
          key: pre-commit-cache-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml') }}
          restore-keys: pre-commit-cache-${{ runner.os }}-

      - name: Install uv
        uses: astral-sh/setup-uv@v5
        with:
          version: "0.7.8"
          enable-cache: true
          cache-local-path: ${{ github.workspace }}/.cache/uv
          tool-dir: ${{ github.workspace }}/.cache/uv
          tool-bin-dir: ${{ github.workspace }}/.cache/uv
          cache-dependency-glob: ""

      - name: Set up Python
        run: uv python install

      - name: Install the project
        run: uv sync --no-install-project --cache-dir ${{ github.workspace }}/.cache/uv

      - name: Linter & Formatter
        run: uv run pre-commit run --all-files

      - name: Build and push Docker image
        uses: docker/build-push-action@v5
        with:
          context: .
          target: production
          push: true
          tags: "git.miwory.dev/smartsolutions/hospitalassistantbackend:latest"
          cache-from: type=gha
          cache-to: type=gha,mode=max
