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

View File

@@ -1,7 +1,8 @@
# S4 verification evidence
Date: 2026-10-28. Status: repository implementation and local container verification
passed; operational Gitea acceptance remains pending. S4 is **not complete**.
passed; Gitea and runner configuration are operational. Main publication is
awaiting approval to merge PR #1. S4 is **not complete**.
## Verified locally
@@ -56,7 +57,8 @@ Local image IDs (not registry digests):
`linux/amd64`; repository variable `TARGET_PLATFORM=linux/amd64` configured.
- [x] Activate and verify the Docker Desktop HTTP-registry setting.
- [x] Repository `REGISTRY_USER`/`REGISTRY_TOKEN` secrets configured using the
supplied token files. Registry access is verified by actual publication below.
supplied token files. A temporary Docker login with the registry token
succeeded; actual publication still awaits a main-branch merge.
- [x] Runner ID 1 (`agiledancers-mini-pc`) registered, service started and
online in Gitea. Real feature/failure jobs ran on this runner.
- [ ] Confirm server settings permit every branchpush (including messages with
@@ -86,3 +88,30 @@ attempt identifier for containers and diagnostic artifact names. The Gitea v3
artifact-list API returns an empty list despite successful uploads; artifacts
were verified by downloading the run-page archive URLs. This is separate from
artifact availability and does not require a server upgrade.
## Ready for review; main merge not authorized
[PR #1](http://192.168.2.28:3000/wanjakrah/agiledancers/pulls/1) remains open at
the maintainer's explicit request. No main merge or application image publication
was performed.
[Feature run #3](http://192.168.2.28:3000/wanjakrah/agiledancers/actions/runs/3),
API run/job ID 4, commit `834584dae06b5976936a5e739871f1164cf81bcd`, succeeded.
The two container E2E tests passed and diagnostics were uploaded as
`diagnostics-4-20261028164607460012324`, confirming unique attempt names work.
The main branch currently contains only its initial commit. PR #1 therefore
includes the prior application history from `feature/setup` as well as S4. Its
scope is documented in the PR description. A main merge needs explicit approval;
only then can real main publication/pullback/rerun acceptance be completed.
## Java 25 helper migration
CI orchestration, setup and behavior tests now run through `java ci/Ci.java`.
The shell/Python helpers have been removed. The source launcher compiles helper
classes in memory without external dependencies or preview flags. Fourteen Java
behavior tests pass, including JSON/configuration preservation, publication gates,
partial recovery and process deadlines. A real feature run validates this revision
before updating the existing open PR; no merge to main is authorized.