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.
Siehe auch
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 }}
Siehe auch
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"