Run CI orchestration and setup as Java 25 source programs
Some checks failed
Build, test and publish / verify (push) Failing after 11s

This commit is contained in:
2026-10-29 09:07:41 +01:00
parent 834584dae0
commit 069b62ae92
20 changed files with 821 additions and 536 deletions

View File

@@ -5,6 +5,26 @@ backend en frontend, bouwt twee images en draait Playwright tegen die containers
Alleen `main` mag daarna images publiceren. Er vindt geen deployment plaats.
Tagpushes en aparte pull-requestevents starten geen extra workflow.
## Java-bronbestanden uitvoeren
De CI- en setuphulpmiddelen zijn Java 25-bronbestanden. Start ze direct met
`java ci/Ci.java <opdracht>` vanuit de repositoryroot. De Java-launcher compileert
de benodigde bronbestanden in het geheugen. Er is geen aparte `javac`-stap,
Maven-module, Python-installatie of scriptingframework nodig. De helper gebruikt
alleen de JDK, inclusief de HTTP-client, process builder en bestandsloten.
Beschikbare opdrachten: `verify`, `publish`, `cleanup`, `attempt`, `test`,
`configure-gitea`, `configure-docker <daemon.json>` en
`install-runner [--prepare-only]`. `verify` heeft een intern tijdsbudget van
75 minuten; `publish` 15 minuten. Opruimen krijgt een apart budget van 2 minuten.
Zorg dat `java` naar JDK 25 verwijst, bijvoorbeeld met:
```sh
export JAVA_HOME=/usr/lib/jvm/java-25-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
```
## Machines en voorwaarden
Gitea 1.25.4 en de registry staan op de bestaande Synology,
@@ -14,8 +34,8 @@ wakker blijven; Docker en de runner moeten draaien. Anders blijven jobs wachten.
Een host-runner voert repositorycode uit als de ontwikkelgebruiker: gebruik deze
runner alleen voor deze vertrouwde repository.
De runner heeft Git, Bash, JDK 25, Maven 3.9+, Node 22.22.3+/24.15.0+/26+, npm,
Python 3, curl, flock (util-linux), timeout (coreutils) en een werkende Docker-daemon
De runner heeft Git, Bash, JDK 25, Maven 3.9+, Node 22.22.3+/24.15.0+/26+, npm
en een werkende Docker-daemon
nodig. De huidige mini-pc heeft de ontwikkeltools en Docker Desktop al geïnstalleerd.
De workflow gebruikt één job tegelijk (`capacity: 1`), één Playwright-worker en
CPU/geheugenlimieten voor de tijdelijke applicatie- en browsercontainers.
@@ -52,7 +72,7 @@ Je kunt de instelling ook samenvoegen met behoud van bestaande instellingen en
backup via:
```sh
python3 ci/runner/configure-docker.py "$HOME/.docker/daemon.json"
java ci/Ci.java configure-docker "$HOME/.docker/daemon.json"
```
Voor Docker Engine op Linux is dat dezelfde toevoeging aan
@@ -88,7 +108,7 @@ Het gewone jobtoken van Gitea 1.25 biedt geen packagepublicatie; gebruik een PAT
Gebruik een repository-runnerregistratietoken, geen instancebrede registratie.
Sla tokenwaarden buiten Git op en plaats ze niet in opdrachten, screenshots of logs.
Voor reproduceerbare configuratie bestaat `ci/configure-gitea.py`. Maak twee
Voor reproduceerbare configuratie bestaat `java ci/Ci.java configure-gitea`. Maak twee
bestanden buiten de repository met mode `600`: één voor een PAT met voldoende
repositorybeheerrechten (repository Actions, secrets, variabelen en runnerregistratie),
en één voor de publicatie-PAT. De beheer-PAT hoeft niet als workflowsecret te worden
@@ -100,7 +120,7 @@ export GITEA_ADMIN_TOKEN_FILE="$HOME/.config/agiledancers-runner/admin-token"
export REGISTRY_TOKEN_FILE="$HOME/.config/agiledancers-runner/registry-token"
export REGISTRY_USER=wanjakrah
export TARGET_PLATFORM=linux/amd64 # alleen als dit op de Synology is vastgesteld
python3 ci/configure-gitea.py
java ci/Ci.java configure-gitea
```
Het script stelt de repository-instellingen in via de API en schrijft het
@@ -118,9 +138,9 @@ testdiagnostiek; gepubliceerde containerimages worden niet automatisch verwijder
```sh
export JAVA_HOME=/usr/lib/jvm/java-25-openjdk-amd64
bash ci/runner/install.sh --prepare-only
java ci/Ci.java install-runner --prepare-only
# Na Dockerconfiguratie en het opslaan van het registratietoken:
bash ci/runner/install.sh
java ci/Ci.java install-runner
systemctl --user status agiledancers-runner
journalctl --user -u agiledancers-runner -f
```
@@ -168,8 +188,8 @@ De frontend luistert op containerpoort 8080, ondersteunt SPA-routes en proxy't
8080. Voorbeelden voor eventueel handmatig starten staan los van de pipeline;
de pipeline start geen blijvende applicatie op de NAS.
`ci/verify.sh` maakt een succesmarker pas na alle builds en tests.
`ci/publish.sh` vereist die marker en hoofdbranchref. Onder een gedeeld `flock`
`java ci/Ci.java verify` maakt een succesmarker pas na alle builds en tests.
`java ci/Ci.java publish` vereist die marker en hoofdbranchref. Onder een gedeeld Java-bestandslot (`FileChannel`)
buiten de checkout worden bestaande commitimages hergebruikt en ontbrekende
images geüpload. Iedere image wordt teruggehaald, op revisielabel gecontroleerd en
met digest vastgelegd in de diagnostiek. Authenticatie- of netwerkfouten tellen
@@ -192,7 +212,7 @@ niet in; de workflow maakt daarom zelf een unieke identificatie per poging. Geen
inspect met mogelijke credentials wordt opgenomen.
Bij mislukking blijven de oorspronkelijke exitstatus en rapporten behouden.
Een trap én een `always()`-stap verzamelen diagnostiek en verwijderen de tijdelijke
Een Java-`finally`/shutdown-hook én een `always()`-stap verzamelen diagnostiek en verwijderen de tijdelijke
containers en het netwerk met hun unieke runnaam. Een harde machine-uitval kan
opruimen onderbreken: controleer daarna uitsluitend achtergebleven resources met
label `agiledancers.ci.run`; gebruik geen algemene Docker-prune op de ontwikkel-PC.
@@ -206,7 +226,7 @@ blijven de committags bruikbaar en worden de oude `main`-updates overgeslagen.
Lokale controle van publicatie-/foutgedrag zonder registrywijzigingen:
```sh
python3 -m unittest discover -s ci/tests -v
java ci/Ci.java test
```
Volledige lokale verificatie met Docker en de vastgestelde platformwaarde:
@@ -214,7 +234,7 @@ Volledige lokale verificatie met Docker en de vastgestelde platformwaarde:
```sh
export JAVA_HOME=/usr/lib/jvm/java-25-openjdk-amd64
export TARGET_PLATFORM=linux/amd64 # eerst de Synology controleren
bash ci/verify.sh
java ci/Ci.java verify
```
## Operationele oplevering