actions/setup-python@v5 lädt seine Runtime von GitHub-Releases und scheitert auf dem Gitea-Runner - der Lauf brach vor dem Deploy ab. Die Tests laufen jetzt in einer eigenen Dockerfile-Stufe, die der Workflow mit --target test aufruft. Damit gilt für sie dieselbe Python-Version und derselbe Paketstand wie für die Produktion, und der Schritt braucht nichts außer dem Docker-Daemon, den der Runner ohnehin nutzt. Ein Bind-Mount des Workspace wäre keine Option gewesen: der liegt im Job-Container, der Pfad zeigt auf dem Host ins Leere. Die Teststufe hängt nicht am finalen Image und wird beim Deploy-Build übersprungen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
49 lines
1.6 KiB
YAML
49 lines
1.6 KiB
YAML
name: Build & Deploy
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
# Intern klonen statt ueber die oeffentliche Domain: Gitea laeuft auf
|
|
# demselben Host, der Weg ueber die oeffentliche IP findet nicht
|
|
# zurueck (NAT-Hairpin).
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
github-server-url: http://gitea:3000
|
|
|
|
# Kein setup-python: die Action laedt ihre Runtime von GitHub-Releases
|
|
# und scheitert auf dem Gitea-Runner. Stattdessen laufen die Tests in
|
|
# einer eigenen Stufe des Dockerfiles - gegen dieselbe Python-Version
|
|
# und dieselben Pakete wie die Produktion. Ein roter Lauf bricht hier
|
|
# ab, bevor irgendetwas auf dem Server angefasst wird.
|
|
- name: Tests
|
|
run: docker build --target test .
|
|
|
|
- name: Tag ermitteln
|
|
run: echo "IMAGE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
|
|
|
|
# Ein einziges Repo-Secret DOTENV mit dem kompletten .env-Inhalt.
|
|
# Ueber env: statt direkter Interpolation, damit Anfuehrungszeichen,
|
|
# Backticks und $ in den Werten unangetastet bleiben.
|
|
- name: .env aus Secret erzeugen
|
|
env:
|
|
DOTENV: ${{ secrets.DOTENV }}
|
|
run: |
|
|
if [ -z "$DOTENV" ]; then
|
|
echo "Secret DOTENV ist leer oder nicht gesetzt."
|
|
exit 1
|
|
fi
|
|
umask 077
|
|
echo "$DOTENV" > .env
|
|
|
|
- name: Deployen
|
|
run: docker compose up -d --build --remove-orphans --wait --wait-timeout 300
|
|
|
|
- name: Alte Layer aufraeumen
|
|
run: docker image prune -f
|