Files
UmbrelApps/tools/evolu-relay/build.sh
T
HarmenandClaude Opus 5 c57197637f Wat de eerste echte gebruiksdag opleverde: logging, geschiedenis, uitlijning
Drie dingen die vandaag misgingen of ontbraken, en die alle drie uit gebruik
kwamen en niet uit nadenken.

De allowlist logde niets als een bekende eigenaar terugkwam en niets als er een
geweigerd werd. Daardoor stond er een tweede eigenaar drieentwintig keer aan de
deur zonder dat het log er iets over zei; het stond alleen op de pagina. Nu is er
een regel per eigenaar per keer dat het proces draait, dus ook bij terugkomst en
bij weigering, met een bovengrens omdat een weigering een id bevat dat de ander
zelf verzint. Een geweigerde schrijfactie logt voortaan hoeveel bytes er gevraagd
werden en welke grens gold, met de naam van de variabele erbij.

Allow gooide de geschiedenis weg. Een eigenaar die je alsnog toeliet kreeg "first
seen" op het moment van de klik, terwijl hij al twintig minuten stond te
kloppen. Juist daar wil je zien sinds wanneer. Met een toets erop.

En de knoppen stonden niet recht: id, gegevens en knoppen stonden naast elkaar,
dus de lengte van de gegevensregel bepaalde of de rij afbrak. Een eigenaar met
een last seen duwde zijn knoppen naar de volgende regel en dus naar links.
Nu staan naam en gegevens onder elkaar in een kolom en worden de knoppen altijd
naar rechts geduwd.

Inhoudelijk het belangrijkste: "de eerste eigenaar wint" is te smal. Een enkele
app kan meer dan een eigenaar gebruiken, en de pagina adviseerde de deur te
sluiten zodra de eerste binnen was. Daarmee sluit je je eigen tweede eigenaar
buiten. De tekst zegt nu te wachten tot er een minuut niets nieuws meer bij komt.

Image naar 0.3.0. De digest van 0.2.0 is uit de compose gehaald in plaats van
blijven staan: die zou naar de vorige image wijzen terwijl de tag iets anders
belooft.

Tests: alle vier groen (34, 54, 39 en 61 goed, 0 fout).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 12:08:19 +02:00

90 lines
4.8 KiB
Bash

#!/bin/sh
# ═══════════════════════════════════════════════════════════════════════════════
# Bouwt de image voor de app whatsnext-evolu-relay.
#
# Wat er gebouwd wordt is ONS programma: `src/index.js` roept `createRelay` uit
# `@evolu/nodejs` aan met onze eigen toegangscontrole erin. De relay zelf komt
# gewoon uit npm en wordt niet nagebouwd of aangepast.
#
# Dit verving op 28-08-2026 het vorige recept, dat de repo van Trezor kloonde en
# hun Dockerfile bouwde. Dat pakket had een Postgres en een quota-manager nodig en
# kon als zelf-gehoste relay in de kern niet werken; zie het plan Umbrelapp,
# OPEN.md punt 6.
#
# Waarom dit NIET in de app-map staat: umbreld kopieert de hele app-map naar het
# apparaat, en bij een update wordt alleen een whitelist ververst waar een
# Dockerfile niet in zit. Bouwen tijdens het starten van de app zou de installatie
# bovendien minuten laten hangen. Het recept hoort dus in de repo en het resultaat
# in een register; de app verwijst alleen naar de tag.
#
# Draaien: sh build.sh
# Vereist: docker op de machine waar je bouwt. Git is niet meer nodig.
# ═══════════════════════════════════════════════════════════════════════════════
set -eu
# ── De pin ────────────────────────────────────────────────────────────────────
# De versies van `@evolu/common` en `@evolu/nodejs` staan exact in package.json en
# zijn dáár de pin. Hier staat alleen het etiket op de uitkomst.
#
# Dit is het etiket op de IMAGE. Verhoog het als de image verandert, dus als er
# iets in src/, package.json of de Dockerfile wijzigt, en zet dan dezelfde waarde
# achter `image:` in de compose.
#
# `version` in umbrel-app.yml is een ander nummer en mag hierop vooruitlopen: dat
# moet bij élke wijziging aan de app omhoog, ook als alleen een template
# verandert, want anders rolt umbrelOS hem niet uit. Dat heeft hier een keer een
# dag gekost. Ze zijn dus gelijk zolang alleen de image wijzigt, en lopen uiteen
# zodra er een reparatie in de app-map zit.
VERSION="0.3.0"
# Het register staat er expres in en dit is geen smaakkwestie: umbreld haalt élke
# image op via de Docker Engine API, dus een tag die alleen lokaal bestaat is voor
# hem onbereikbaar en de installatie faalt met "pull access denied". Dat is op
# 25-08-2026 op het apparaat vastgesteld. Zie Umbrel-appstore-spec.md.
IMAGE="sc.kamenier-hamer.nl/sysop/evolu-relay:${VERSION}"
RECEPT="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
# ── Controles vooraf ──────────────────────────────────────────────────────────
# Beter hier hard falen dan een image bouwen die iets anders bevat dan je denkt.
if [ ! -f "${RECEPT}/package.json" ] || [ ! -f "${RECEPT}/src/index.js" ]; then
echo "FOUT: package.json of src/index.js ontbreekt in ${RECEPT}" >&2
exit 1
fi
if [ ! -f "${RECEPT}/package-lock.json" ]; then
echo "LET OP: er is geen package-lock.json, dus npm kiest zelf de onderliggende"
echo " afhankelijkheden. De twee pakketten van Evolu staan exact vast in"
echo " package.json, maar wat daaronder hangt kan meebewegen. Draai eenmalig"
echo " 'npm install' in deze map, commit het lock-bestand, en zet dan in de"
echo " Dockerfile 'npm install' om naar 'npm ci'."
echo
fi
# ── Bouwen ────────────────────────────────────────────────────────────────────
echo "Bouwen als ${IMAGE}"
docker build --tag "$IMAGE" "$RECEPT"
echo
echo "Klaar:"
docker image inspect --format '{{.RepoTags}} {{.Id}}' "$IMAGE"
echo
echo "Bouwen is niet genoeg: de app verwijst naar het register, want umbreld kan"
echo "niet bij een image die alleen lokaal staat. Nog te doen:"
echo
echo " docker login sc.kamenier-hamer.nl"
echo " docker push ${IMAGE}"
echo
echo "Zet daarna de digest uit de push-uitvoer achter de tag in"
echo "whatsnext-evolu-relay/docker-compose.yml, en zet \`version\` in het manifest"
echo "op ${VERSION}. Zonder die verhoging rolt umbrelOS het niet uit."
echo
echo "Controleer dat het anoniem te halen is, want umbreld krijgt geen"
echo "inloggegevens mee. Log uit in dezelfde context waarin je inlogde, anders"
echo "meet je je eigen sessie:"
echo
echo " docker logout sc.kamenier-hamer.nl && docker pull ${IMAGE}"