# Forgejo Actions — bouw het image en push het naar de container-registry. # # Dit image is wat de "Nu bijwerken"-knop in Server Up ophaalt. Draait bij elke # v*-tag, zodat elke release (en pre-release) een image krijgt met dezelfde tag # als de release zelf: v0.5.10 → server-up:0.5.10. # # Vereisten (Repository → Settings): # Variables → REGISTRY = git.example.com (host van je Forgejo) # OWNER = bes-r (gebruiker/organisatie) # Secrets → PACKAGE_TOKEN = # # Zie docs/updates.md voor de complete instelling. name: Build en push image (handmatig) # Alleen handmatig. Bij een v*-tag bouwt en pusht deploy-prod.yml het image al # in dezelfde job — zo kan er geen wachtrij ontstaan waarin de deploy op een # build wacht die zelf nog in de rij staat. on: workflow_dispatch: inputs: tag: description: "Versie om te bouwen (bv. 0.5.10). Leeg = VERSION-bestand" required: false jobs: build: runs-on: [self-hosted, prod] timeout-minutes: 30 steps: - name: Checkout uses: actions/checkout@v4 - name: Versie en tags bepalen id: meta run: | set -euo pipefail VERSION="${{ inputs.tag }}" if [ -z "$VERSION" ]; then VERSION="$(tr -d '[:space:]' < VERSION)" fi IMAGE="${{ vars.REGISTRY }}/${{ vars.OWNER }}/server-up" echo "VERSION=${VERSION}" >> "$GITHUB_ENV" echo "IMAGE=${IMAGE}" >> "$GITHUB_ENV" # Pre-release (tag met een streepje, bv. v0.5.10-beta1) krijgt géén # 'latest'-tag: die hoort bij het stable-kanaal. if [[ "$VERSION" == *-* ]]; then echo "EXTRA_TAG=beta" >> "$GITHUB_ENV" else echo "EXTRA_TAG=latest" >> "$GITHUB_ENV" fi echo "Bouwen: ${IMAGE}:${VERSION}" - name: Tests draaien run: | set -euo pipefail # In een container in plaats van een venv op de runner: die heeft # geen python3-venv, en zo draaien de tests bovendien op exact de # Python-versie waarop de app in productie draait. # PYTHONDONTWRITEBYTECODE + no:cacheprovider voorkomen dat er # root-eigen bestanden in de werkmap achterblijven. docker run --rm \ -v "$PWD:/w" -w /w \ -v su-pip-cache:/root/.cache/pip \ -e PYTHONDONTWRITEBYTECODE=1 \ python:3.12-slim \ sh -c "pip install -q -r server-up/requirements.txt pytest \ && python -m pytest tests -q -p no:cacheprovider" - name: Inloggen op de registry run: | set -euo pipefail echo "${{ secrets.PACKAGE_TOKEN }}" \ | docker login "${{ vars.REGISTRY }}" \ -u "${{ vars.OWNER }}" --password-stdin - name: Bouwen run: | set -euo pipefail docker build \ --pull \ --build-arg "SU_VERSION=${VERSION}" \ -t "${IMAGE}:${VERSION}" \ -t "${IMAGE}:${EXTRA_TAG}" \ . - name: Pushen run: | set -euo pipefail docker push "${IMAGE}:${VERSION}" docker push "${IMAGE}:${EXTRA_TAG}" echo "Gepusht: ${IMAGE}:${VERSION} en ${IMAGE}:${EXTRA_TAG}" - name: Uitloggen if: always() run: docker logout "${{ vars.REGISTRY }}" || true