server-up/.forgejo/workflows/build.yml
Ramon 8ff5f4b1d3
Some checks failed
Deploy server-up (dev) / deploy (push) Failing after 4s
v0.5.10-beta - update-systeem met kanalen en een-klik bijwerken
- Update-kanalen stable/beta in plaats van het vinkje "pre-releases meenemen".
  Stable ziet alleen releases, beta ook pre-releases; een release telt hoger
  dan zijn eigen beta (0.5.10-beta1 < 0.5.10). UPDATE_INCLUDE_PRERELEASE
  migreert automatisch naar het beta-kanaal.
- Nieuw core/selfupdate.py: image uit de registry ophalen, SU_TAG wegschrijven
  en de eigen container laten hercreeren door een korte helper-container die op
  het nieuwe image draait (bevat de docker- en compose-CLI al). Een container
  kan zichzelf niet hercreeren, vandaar de helper.
- Deploy-map wordt uitgelezen uit de compose-labels van de eigen container.
  Ontbreken die, draait de container niet vanaf een registry-image of is de
  docker-socket er niet, dan meldt de UI waarom bijwerken niet kan.
- Vorige tag wordt onthouden; terugrolknop in de instellingen.
- Update-check een uur gecached, met geforceerde check via de knop; eerder deed
  elke paginalading een netwerkverzoek. Laatst-gecontroleerd zichtbaar.
- Registry-inloggegevens instelbaar; het token komt net als de git-tokens nooit
  terug via de API en leeg laten betekent ongewijzigd.
- docker-compose.yml gebruikt ${SU_IMAGE:-server-up}:${SU_TAG:-latest}; zonder
  SU_IMAGE blijft lokaal bouwen werken zoals voorheen.
- deploy-prod.yml bouwt en pusht het image in dezelfde job wanneer SU_IMAGE
  ingesteld is; build.yml is nu alleen handmatig. Bewust geen aparte
  build-workflow op dezelfde tag: bij een runner met een job tegelijk zou de
  deploy wachten op een build die zelf nog in de wachtrij staat.
- docs/updates.md: werking, complete Forgejo-instelling (registry, tokens,
  variables, secrets, runners), release-procedure voor stable en beta,
  terugrollen en probleemoplossing.
- Tests uitgebreid naar 148 (kanaallogica, cache, image-afleiding incl.
  registry-poortnummers, tag-validatie, .env-schrijven, tokenlek).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
2026-07-26 15:13:18 +02:00

89 lines
2.9 KiB
YAML

# 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 = <token met write:package>
#
# 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
python3 -m venv /tmp/su-build-venv
/tmp/su-build-venv/bin/pip install -q -r server-up/requirements.txt pytest
/tmp/su-build-venv/bin/python -m pytest tests -q
- 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