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: 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