CI/CD-Pipelines

GitLab CI/CD

Für GitLab CI/CD-Pipelines gibt es verschiedene Docker-Images mit vorinstalliertem uv: Available images.

.gitlab-ci.yml
 1variables:
 2  UV_VERSION: 0.4
 3  PYTHON_VERSION: 3.12
 4  BASE_LAYER: bookworm-slim
 5
 6
 7stages:
 8  - build
 9
10uv-install:
11  stage: build
12  image: ghcr.io/astral-sh/uv:$UV_VERSION-python$PYTHON_VERSION-$BASE_LAYER
13  variables:
14    UV_CACHE_DIR: .uv-cache
15  cache:
16    - key:
17        files:
18          - uv.lock
19      paths:
20        - $UV_CACHE_DIR
21  script:
22    # YOUR UV COMMANDS
23    - uv cache prune --ci
Zeile 23

Dies reduziert die Cache-Größe, s.a. Caching in continuous integration.

GitHub Actions

Die offizielle astral-sh/setup-uv-GitHub Action installiert uv, fügt es PATH hinzu und stellt einen Cache für die installierten Pakete bereit:

ci.yml
name: ci

jobs:
  test:
    name: python
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v3
        with:
          version: "0.4.24"

Anschließend könnt ihr entweder eine einzelne Python-Version oder eine Matrix mit uv installieren:

ci.yml
     - name: Set up Python
       uses: actions/setup-python@v5
       with:
         python-version-file: "pyproject.toml"

oder

ci.yml
     - name: Set up Python
       uses: actions/setup-python@v5
       with:
         python-version-file: ".python-version"

oder

ci.yml
name: ci

strategy:
  matrix:
    python-version:
      - "3.9"
      - "3.10"
      - "3.11"
      - "3.12"
      - "3.13"

jobs:
  test:
    name: python
    # ...
      - name: Set up Python ${{ matrix.python-version }}
        run: uv python install ${{ matrix.python-version }}

uv sync und uv run

Sobald uv und Python installiert sind, kann das Projekt mit uv sync installiert werden und Befehle können in der Umgebung mit uv run ausgeführt werden, z.B. für pytest:

ci.yml
      - name: Install the project
        run: uv sync --all-extras --dev

      - name: Run tests
        run: uv run pytest tests

Caching

Der Cache von uv verbessert die Laufzeiten:

ci.yml
      - name: Enable caching
        uses: astral-sh/setup-uv@v3
        with:
          enable-cache: true

Macht den Cache ungültig, wenn sich uv.lock ändert:

ci.yml
      - name: Define a cache dependency glob
        uses: astral-sh/setup-uv@v3
        with:
          enable-cache: true
          cache-dependency-glob: "uv.lock"