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