Einen Job über viele Varianten laufen lassen – ohne ihn zu kopieren.
test:
runs-on: docker
strategy:
matrix:
python: ["3.10", "3.11", "3.12"]
fail-fast: false # nicht alle abbrechen bei 1 Fehler
max-parallel: 2 # höchstens 2 gleichzeitig
container: python:${{ matrix.python }}-slim
steps:
- uses: actions/checkout@v4
- run: pip install -r requirements.txt && pytest -q
Forgejo erzeugt daraus drei Läufe des Jobs – test (3.10), test (3.11),
test (3.12). In jedem steht der aktuelle Wert als ${{ matrix.python }} bereit.
matrix:
python: ["3.11", "3.12"]
os: [docker, lxc] # 2 x 2 = 4 Läufe
Zwei Achsen ergeben das Kreuzprodukt (hier 4 Kombinationen). Mit include: fügst du
Sonderfälle hinzu, mit exclude: nimmst du einzelne Kombinationen wieder heraus.
fail-fast: true) bricht Forgejo die übrigen Matrix-Läufe ab, sobald
einer fehlschlägt. Für vollständige Testabdeckung über alle Versionen setzt du
fail-fast: false – dann läufst du jede Variante zu Ende.
parallel: matrix:
Variablen je Kombination
Zugriff über $VARIABLE
strategy: matrix:
fail-fast & max-parallel
Zugriff über ${{ matrix.* }}
Frage: Eine Matrix hat python: [3.11, 3.12] und
db: [postgres, sqlite]. Wie viele Job-Läufe entstehen?
Vier – das Kreuzprodukt 2 × 2. Mit exclude: könntest du einzelne
Kombinationen wieder entfernen.
Aufgabe: Erweitere die Python-Matrix um "3.13" und stelle
sicher, dass alle Versionen zu Ende laufen, auch wenn eine fehlschlägt.
strategy:
matrix:
python: ["3.10", "3.11", "3.12", "3.13"]
fail-fast: false
Wie liest du den aktuellen Matrix-Wert im Job?
Jeder Lauf bekommt seine Zelle im matrix-Kontext, z. B. ${{ matrix.python }}.
Was bewirkt fail-fast: false?
Ohne fail-fast bricht ein Fehler die übrigen Läufe nicht ab – gut für vollständige Abdeckung.
strategy.matrix (include/exclude, fail-fast, max-parallel).
include?
Schick mir die Achsen – wir trimmen die Matrix gemeinsam.