Ergebnisse weitergeben – und Läufe beschleunigen. Zwei Dinge, die oft verwechselt werden.
pip install nicht jedes Mal alles neu lädt, brauchst du Cache. Beides sieht
ähnlich aus, hat aber gegensätzliche Zwecke.
Ein Job lädt mit upload-artifact Dateien hoch, ein anderer holt sie mit
download-artifact:
test:
runs-on: docker
container: python:3.12-slim
steps:
- uses: actions/checkout@v4
- run: pip install -r requirements.txt
- run: pytest --cov=app --cov-report=xml -q
- uses: https://code.forgejo.org/forgejo/upload-artifact@v4
with:
name: coverage
path: coverage.xml
actions/upload-artifact@v4 aus dem Forgejo-Mirror funktioniert nicht.
Nutze den gepatchten Fork https://code.forgejo.org/forgejo/upload-artifact@v4 (bzw.
download-artifact) – oder bleib bei @v3. Voraussetzung: Forgejo 7.0+
und Runner 3.4+. Genau hier scheitern die meisten kopierten GitHub-Workflows.
- uses: actions/cache@v4
with:
path: ~/.cache/pip
key: pip-${{ hashFiles('requirements.txt') }}
- run: pip install -r requirements.txt
Der key bestimmt die „Identität" des Caches. hashFiles(...) ändert ihn,
sobald sich requirements.txt ändert – dann wird neu installiert und neu gecacht.
Bleibt die Datei gleich, kommt der Cache aus dem Speicher: deutlich schneller.
actions/cache setzt voraus, dass der Forgejo-Runner einen Cache-Dienst anbietet.
Fehlt der, scheitert die Action mit "Cache action is only supported on GHES version >= 3.5".
Das ist Runner-Konfiguration – im Zweifel bei der Admin-Person nachfragen.
artifacts: & cache: als Keywords
Artifacts fliessen automatisch in spätere Stages
artifacts:reports: für Test-Widgets
Beides sind Actions (uses:)
Artifact muss aktiv hoch- und runtergeladen werden
Report-Widgets sind schwächer ausgeprägt
Frage: Der gebaute dist/app.whl soll im Deploy-Job verfügbar
sein. Artifact oder Cache?
Artifact – es ist ein Ergebnis, das ein anderer Job zwingend braucht. Cache wäre falsch: ein fehlender Cache ist nie ein Fehler, ein fehlendes Build-Ergebnis schon.
Aufgabe: Lade im build-Job das Verzeichnis dist/
als Artifact wheel hoch.
- uses: https://code.forgejo.org/forgejo/upload-artifact@v4
with:
name: wheel
path: dist/
Im Deploy-Job holst du es mit dem passenden download-artifact und
demselben name wieder ab.
Wofür ist ein Cache da?
Cache spart Zeit (z. B. heruntergeladene Pakete). Geht er verloren, läuft es nur langsamer – nie falsch. Ergebnisse gehören in Artifacts.
Welche Artifact-Action funktioniert in Forgejo zuverlässig?
Der Mirror-Stand von actions/upload-artifact@v4 bricht. Nutze den gepatchten
forgejo/upload-artifact (oder @v3).