The forge's container runs Debian trixie's Caddy, 2.6.2, which predates the persist_config global option. private-web-caddy and private-web-clone put it in the Caddyfile they run, so Caddy wouldn't start there and every request after it failed; they drop it, and the config Caddy saves stays in the scenario's own XDG directories, as before. The forge's own Caddyfile already works with 2.6, which is what runs in production. release-caddy also adapts deploy/edge/Caddyfile, which is for the edge's Caddy (Alpine's, 2.11 now) and uses persist_config. With a Caddy older than 2.7 it skips that one check and says so; the forge's Caddyfile is still adapted.
- commit
- 2f1c626cfc0f9c6aa1ed656bc7680eda3e850af0
- parent
- 79c9c92efac95599e87b6605a600b9b2b4ee0e3c
- author
- cat <admin@dev.site>
- ci
- ✓ passed in 72s, signed by cat
- kind
- test risk score 0.8 of 3, Jev's estimate
- review
- #5 Pass the scenarios in the container, as root
ci attestation
forge-attestation 1 type ci commit 2f1c626cfc0f9c6aa1ed656bc7680eda3e850af0 tree 94b508195efb84667c2bf52168f09b34051bc764 script .forge/ci e6f038ae810b87f90a4be115a762a9c91dd76a01 result pass exit 0 started 2026-10-18T23:03:42Z duration 72s runner (not shown here; refs/notes/ci has it) system Darwin 25.5.0 arm64 env host log sha256:bd205dced9d9eaca5c55cdfcacfa87e50a8ad071ec87e15b19030d5ccc462f20 240 lines |remote: review #4: /dami/greet/reviews/4/ |pushed wip/i18n |72eebdd running .forge/ci: greet.sh: say what it is | | sh: /bin/sh | | ok greet |72eebdd pass in 0s, signed |pushed main |remote: review #4: /dami/greet/reviews/4/ |pushed wip/i18n |dd36a24 running .forge/ci: wave at the world | | sh: /bin/sh | | FAIL greet : got 'hello, world o/', want 'hello, world' |dd36a24 fail in 0s, signed |forge: 1 commit(s) did not pass |remote: review #6: /dami/greet/reviews/6/ |pushed ana/wave |1242ffa running .forge/ci: update the test for the wave | | sh: /bin/sh | | ok greet |1242ffa pass in 0s, signed |remote: review #6: /dami/greet/reviews/6/ |pushed ana/wave |warning: You appear to have cloned an empty repository. |site home: deployed ac47b9c -> /sites/ana/dotfiles/home/ |created ana/notes |remote: review #1: /ana/notes/reviews/1/ |pushed ana/todo |landing #1 A todo list: ana/todo -> main |0c102a6 running .forge/ci: web, server and Python versions of greet | | sh: /bin/sh | | ok greet |0c102a6 pass in 0s, signed |pushed main |724971e running .forge/ci: messages: notes for the later regions | | sh: /bin/sh | | ok greet |724971e pass in 0s, signed |remote: review #7: /dami/greet/reviews/7/ |pushed dami/regions |created dami/forge |warning: You appear to have cloned an empty repository. |site guide: deployed 94a0389 -> /sites/dami/forge/guide/ |(node:44867) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built ana/dotfiles in 0s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |(node:45253) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built ana/notes in 1s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |(node:45735) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built dami/forge in 0s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |(node:46246) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built dami/greet in 2s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |(node:47633) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built - in 0s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |226 of 226 pages render the same without 11ty |guide: 4 files, links ok |ok
Signature: good, cat
| M | test/ | 2 | +- |
| M | test/ | 2 | +- |
| M | test/ | 8 | +++++++- |
@@ -29,7 +29,7 @@ ok caddy adapt --config "$T/Caddyfile" --adapter caddyfile
2929 cport=$(free_port)3030 private_server3131 {32- printf '{\n\tadmin off\n\tauto_https off\n\tpersist_config off\n}\n\n'32+ printf '{\n\tadmin off\n\tauto_https off\n}\n\n'3333 FORGE_PRIVATE_PORT=$PRIV_PORT "$FORGE" server caddyfile "http://127.0.0.1:$cport"3434 } >"$T/Caddyfile.run"3535 XDG_DATA_HOME=$T/xdg XDG_CONFIG_HOME=$T/xdg caddy run --config "$T/Caddyfile.run" --adapter caddyfile >"$T/caddy.log" 2>&1 &@@ -36,7 +36,7 @@ private_server
3636 node "$T_HOME/test/git-cgi.ts" "$gport" >"$T/cgi.log" 2>&1 &3737 T_PIDS="$T_PIDS $!"3838 {39- printf '{\n\tadmin off\n\tauto_https off\n\tpersist_config off\n}\n\n'39+ printf '{\n\tadmin off\n\tauto_https off\n}\n\n'4040 PATH="$T/bin:$PATH" FORGE_PRIVATE_PORT=$PRIV_PORT "$FORGE" server caddyfile "http://127.0.0.1:$cport"4141 } | awk -v up="127.0.0.1:$gport" '4242 /reverse_proxy unix\/\/run\/fcgiwrap\.socket/ { sub(/unix\/\/run\/fcgiwrap\.socket/, up); print; next }@@ -14,5 +14,11 @@ has "$e" 'not path_regexp \^/\[\^/\]\+/\[\^/\]\+/releases/download/\.$'
1414 has "$e" 'header @download Content-Disposition attachment'1515 if command -v caddy >/dev/null 2>&1; then1616 ok caddy adapt --config "$T/Caddyfile" --adapter caddyfile17- FORGE_DOMAIN=src.test FORGE_MIRROR_URL=https://mirror.test ok caddy adapt --config "$e" --adapter caddyfile17+ # The edge's Caddy is Alpine's (deploy/edge/Dockerfile), and newer than18+ # Debian's 2.6 in the forge's container, which doesn't know the edge's19+ # persist_config.20+ case $(caddy version) in21+ v2.[0-6].* | 2.[0-6].*) note "caddy $(caddy version | cut -d' ' -f1) is older than the edge's: skipped adapting deploy/edge/Caddyfile" ;;22+ *) FORGE_DOMAIN=src.test FORGE_MIRROR_URL=https://mirror.test ok caddy adapt --config "$e" --adapter caddyfile ;;23+ esac1824 fi