Files

85 lines
3.3 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Deployment per Gitea Actions auf den Docker-Host, auf dem auch der Runner läuft.
# push auf main -> Images bauen, in die Gitea-Registry pushen, Test-Stack aktualisieren
# Tag v* -> dieselben (bereits getesteten) Images als Release taggen, Prod-Stack aktualisieren
# Konfiguration/Secrets liegen auf dem Host in /home/jannis/familyplanner/{test,prod}.env (siehe deploy/env.*.example).
# Runner läuft als Container: Job-Container brauchen Docker-Socket und /home/jannis/familyplanner – siehe docs/deploy-runner.md.
name: Deploy
on:
push:
branches: [main]
tags: ["v*"]
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: false
env:
CONFIG_DIR: /home/jannis/familyplanner
SERVICES: migrations api web
jobs:
test:
if: github.ref_type == 'branch'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Registry-Login
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "${{ vars.REGISTRY_HOST }}" -u "${{ secrets.REGISTRY_USER }}" --password-stdin
- name: Images bauen und pushen
working-directory: deploy
env:
TAG: ${{ github.sha }}
run: |
export APP_VERSION="$(git describe --tags --always)"
docker compose --env-file "$CONFIG_DIR/test.env" build $SERVICES
docker compose --env-file "$CONFIG_DIR/test.env" push $SERVICES
- name: Test-Stack aktualisieren
working-directory: deploy
env:
TAG: ${{ github.sha }}
run: |
docker network inspect edge >/dev/null 2>&1 || docker network create edge
docker compose -p familyplanner-test --env-file "$CONFIG_DIR/test.env" pull $SERVICES
docker compose -p familyplanner-test --env-file "$CONFIG_DIR/test.env" up -d --remove-orphans --wait
prod:
if: github.ref_type == 'tag'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Registry-Login
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "${{ vars.REGISTRY_HOST }}" -u "${{ secrets.REGISTRY_USER }}" --password-stdin
- name: Getestete Images zum Release befördern (kein Neubau)
env:
REGISTRY: ${{ vars.REGISTRY_HOST }}/${{ vars.REGISTRY_OWNER }}/
run: |
for svc in migrations api web; do
docker pull "${REGISTRY}familyplanner-$svc:${{ github.sha }}"
docker tag "${REGISTRY}familyplanner-$svc:${{ github.sha }}" "${REGISTRY}familyplanner-$svc:${{ github.ref_name }}"
docker push "${REGISTRY}familyplanner-$svc:${{ github.ref_name }}"
done
- name: Backup vor dem Update
working-directory: deploy
run: |
cp "$CONFIG_DIR/prod.env" .env
docker compose -p familyplanner-prod ps sql --status running -q | grep -q . && COMPOSE_PROJECT_NAME=familyplanner-prod sh scripts/backup.sh || echo "Erster Start, kein Backup"
rm -f .env
- name: Prod-Stack aktualisieren
working-directory: deploy
env:
TAG: ${{ github.ref_name }}
run: |
docker network inspect edge >/dev/null 2>&1 || docker network create edge
docker compose -p familyplanner-prod --env-file "$CONFIG_DIR/prod.env" pull $SERVICES
docker compose -p familyplanner-prod --env-file "$CONFIG_DIR/prod.env" up -d --remove-orphans --wait