diff --git a/.forgejo/workflows/deploy-prod.yml b/.forgejo/workflows/deploy-prod.yml index 8feb37a..cbdb591 100644 --- a/.forgejo/workflows/deploy-prod.yml +++ b/.forgejo/workflows/deploy-prod.yml @@ -85,24 +85,37 @@ jobs: # SU_TAG vastleggen zodat compose en de "Nu bijwerken"-knop in de app # naar hetzelfde image wijzen (zie docs/updates.md). # - # Bestaat er nog geen .env, dan zetten we hem op vanuit .env.example, - # zodat BIND, PORT en SU_IMAGE zichtbaar en instelbaar zijn. Een - # bestaande .env blijft ongemoeid; rsync slaat hem over. + # SU_TAG bepaalt welk image compose start. We schrijven dat bij + # voorkeur in .env zodat het een handmatige `docker compose up` + # overleeft, maar dat bestand kan van een andere gebruiker zijn (bv. + # met sudo aangemaakt). Lukt schrijven niet, dan geven we SU_TAG mee + # via de omgeving: compose gebruikt die en de deploy loopt gewoon door. if [ ! -f .env ] && [ -f .env.example ]; then - cp .env.example .env - echo "Nieuwe .env aangemaakt vanuit .env.example" + cp .env.example .env 2>/dev/null \ + && echo "Nieuwe .env aangemaakt vanuit .env.example" \ + || echo "LET OP: kon geen .env aanmaken in $(pwd)" + fi + + if [ -w .env ] || { [ ! -e .env ] && [ -w . ]; }; then + touch .env + sed -i '/^SU_TAG=/d' .env + echo "SU_TAG=${VERSION}" >> .env + echo "Inhoud van $(pwd)/.env:" + grep -vE '^\s*(#|$)' .env | sed 's/^/ /' + else + echo "LET OP: $(pwd)/.env is niet schrijfbaar voor $(id -un)." + echo " Eigenaar: $(stat -c '%U:%G %a' .env 2>/dev/null || echo onbekend)" + echo " Herstel eenmalig met:" + echo " sudo chown $(stat -c '%U:%G' . ) $(pwd)/.env" + echo " SU_TAG wordt nu via de omgeving meegegeven." fi - touch .env - sed -i '/^SU_TAG=/d' .env - echo "SU_TAG=${VERSION}" >> .env - echo "Inhoud van $(pwd)/.env:" - grep -vE '^\s*(#|$)' .env | sed 's/^/ /' # Draait deze server vanaf de registry (SU_IMAGE in .env), dan bouwen # we hier én pushen we het resultaat, zodat de in-app updateknop het # image kan ophalen. Bouwen en pushen zitten bewust in dezelfde job: # een aparte build-workflow zou met deze deploy om de runner strijden. - SU_IMAGE="$(grep -E '^SU_IMAGE=' .env | cut -d= -f2- || true)" + export SU_TAG="${VERSION}" + SU_IMAGE="$(grep -E '^SU_IMAGE=' .env 2>/dev/null | cut -d= -f2- || true)" docker compose build --pull if [ -n "$SU_IMAGE" ]; then @@ -128,6 +141,7 @@ jobs: run: | set -euo pipefail cd "$DEPLOY_DIR" + export SU_TAG="${VERSION}" docker compose up -d --remove-orphans docker compose ps echo "Compose-projectmap volgens de container:" diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 2a60c36..68bf184 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -81,28 +81,36 @@ jobs: echo "${VERSION}" > VERSION - # De dev-server bouwt altijd zelf vanaf de dev-branch. SU_TAG vastleggen - # zodat compose exact het zojuist gebouwde image start. - # - # Bestaat er nog geen .env, dan zetten we hem op vanuit .env.example. - # Zo staat er een leesbaar bestand met alle instellingen erin (BIND, - # PORT, SU_IMAGE) in plaats van alleen een kale SU_TAG-regel. Een - # bestaande .env blijft ongemoeid; rsync slaat hem over. + # SU_TAG bepaalt welk image compose start. We schrijven dat bij + # voorkeur in .env zodat het een handmatige `docker compose up` + # overleeft, maar dat bestand kan van een andere gebruiker zijn (bv. + # met sudo aangemaakt). Lukt schrijven niet, dan geven we SU_TAG mee + # via de omgeving: compose gebruikt die en de deploy loopt gewoon door. if [ ! -f .env ] && [ -f .env.example ]; then - cp .env.example .env - echo "Nieuwe .env aangemaakt vanuit .env.example" + cp .env.example .env 2>/dev/null \ + && echo "Nieuwe .env aangemaakt vanuit .env.example" \ + || echo "LET OP: kon geen .env aanmaken in $(pwd)" fi - touch .env - sed -i '/^SU_TAG=/d' .env - echo "SU_TAG=${VERSION}" >> .env - echo "Inhoud van $(pwd)/.env:" - grep -vE '^\s*(#|$)' .env | sed 's/^/ /' + if [ -w .env ] || { [ ! -e .env ] && [ -w . ]; }; then + touch .env + sed -i '/^SU_TAG=/d' .env + echo "SU_TAG=${VERSION}" >> .env + echo "Inhoud van $(pwd)/.env:" + grep -vE '^\s*(#|$)' .env | sed 's/^/ /' + else + echo "LET OP: $(pwd)/.env is niet schrijfbaar voor $(id -un)." + echo " Eigenaar: $(stat -c '%U:%G %a' .env 2>/dev/null || echo onbekend)" + echo " Herstel eenmalig met:" + echo " sudo chown $(stat -c '%U:%G' . ) $(pwd)/.env" + echo " SU_TAG wordt nu via de omgeving meegegeven." + fi - name: Build image run: | set -euo pipefail cd "$DEPLOY_DIR" + export SU_TAG="${VERSION}" docker compose build --pull docker tag "server-up:${VERSION}" "server-up:${CHANNEL}" || true @@ -110,6 +118,7 @@ jobs: run: | set -euo pipefail cd "$DEPLOY_DIR" + export SU_TAG="${VERSION}" docker compose up -d --remove-orphans docker compose ps # Waar draait de container vandaan, en op welk adres luistert hij? diff --git a/VERSION b/VERSION index 978c14e..6bbadc1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.45-beta +0.5.46-beta