syncova-policies/.gitea/workflows/publish-image.yml
Weapie 265ca8ac38
All checks were successful
Container-Image bauen und veröffentlichen / build-and-push (push) Successful in 5m15s
Improve accessibility and access controls; verify production and database recovery
2026-09-14 11:44:41 +02:00

112 lines
3.5 KiB
YAML
Raw 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.

name: Container-Image bauen und veröffentlichen
on:
push:
branches: [main]
tags: ["v*"]
workflow_dispatch:
env:
REGISTRY: git.jfritzsche.de
IMAGE_NAME: jf/syncova-policies
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Quellcode auschecken
uses: actions/checkout@v4
- name: Node.js bereitstellen
uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm
- name: Abhängigkeiten installieren
run: npm ci
- name: Prisma-Client erzeugen
run: npx prisma generate
- name: Code und Sicherheitsregressionen prüfen
run: |
npm run typecheck
npm run lint
npm test
- name: Abhängigkeiten auf bekannte Sicherheitslücken prüfen
run: |
npm audit --audit-level=high
npm audit --prefix docker/prisma-cli --audit-level=high
- name: Testbrowser installieren
run: npx playwright install --with-deps chromium
- name: Browser- und API-Regressionen prüfen
run: npm run test:e2e:prod
- name: Image-Tags bestimmen
id: meta
run: |
IMAGE="${REGISTRY}/${IMAGE_NAME}"
SHA_TAG="${IMAGE}:$(echo "${GITHUB_SHA}" | cut -c1-7)"
TAGS="-t ${SHA_TAG}"
case "${GITHUB_REF}" in
refs/tags/v*)
VERSION="${GITHUB_REF#refs/tags/}"
TAGS="${TAGS} -t ${IMAGE}:${VERSION} -t ${IMAGE}:latest"
;;
refs/heads/main)
TAGS="${TAGS} -t ${IMAGE}:latest"
;;
esac
echo "tags=${TAGS}" >> "$GITHUB_OUTPUT"
echo "primary=${SHA_TAG}" >> "$GITHUB_OUTPUT"
echo "Tags: ${TAGS}"
# Der Token liegt als Actions-Secret REGISTRY_TOKEN im Repository,
# nicht im Klartext in dieser Datei.
- name: An der Registry anmelden
run: |
echo "${{ secrets.REGISTRY_TOKEN }}" \
| docker login "${REGISTRY}" -u "${{ gitea.actor }}" --password-stdin
# Der Build ist mehrfach mit ENOSPC abgebrochen. Damit im Fehlerfall die
# Zahlen im Log stehen: Plattenplatz UND Inodes – ENOSPC bedeutet auch
# "keine Inodes mehr frei", was `df -h` nicht zeigt.
- name: Plattenplatz vor dem Bauen
run: |
echo "── Belegung ──"; df -h /var/lib/docker / 2>/dev/null || df -h
echo "── Inodes ──"; df -i /var/lib/docker / 2>/dev/null || df -i
echo "── Docker ──"; docker system df
# Jeder abgebrochene Build lässt seine Schichten im Cache zurück; ohne
# Aufräumen wird es mit jedem Versuch enger. Entfernt wird ausschließlich
# ungenutzter Build-Cache – keine Images, keine Volumes, keine Container.
- name: Ungenutzten Build-Cache freigeben
run: |
docker builder prune --force --filter until=24h || true
echo "── Docker nach dem Aufräumen ──"; docker system df
- name: Image bauen
run: docker build ${{ steps.meta.outputs.tags }} .
- name: Plattenplatz nach dem Bauen
if: always()
run: df -h / 2>/dev/null; docker system df || true
- name: Image veröffentlichen
run: |
for tag in $(echo "${{ steps.meta.outputs.tags }}" | tr ' ' '\n' | grep -v '^-t$'); do
echo "Push ${tag}"
docker push "${tag}"
done
- name: Abmelden
if: always()
run: docker logout "${REGISTRY}" || true