forge server caddyfile read FORGE_BASE_URL with ${FORGE_BASE_URL#*://},
which fails under set -u when it isn't set. macOS's sh (bash 3.2) lets
that through, but Debian's dash, the container's and a VPS's /bin/sh,
stops with "parameter not set" instead of falling back to {host} as the
next lines mean to. The container always sets it, so this showed up only
in scenarios run there (private-http, release-caddy, private-web-caddy).- commit
- 396feb70568544c0208d1c83dd0e78e28ba535c9
- parent
- 9a4fbb2033caa12afc8910e6abb61cd18d790120
- author
- cat <admin@dev.site>
- ci
- ✓ passed in 81s, signed by cat
- kind
- fix risk score 1.0 of 3, Jev's estimate
- review
- #5 Pass the scenarios in the container, as root
ci attestation
forge-attestation 1 type ci commit 396feb70568544c0208d1c83dd0e78e28ba535c9 tree 1d90b95cf80e7ece5562ec964b3eb01824ee8146 script .forge/ci e6f038ae810b87f90a4be115a762a9c91dd76a01 result pass exit 0 started 2026-10-18T22:57:24Z duration 81s runner (not shown here; refs/notes/ci has it) system Darwin 25.5.0 arm64 env host log sha256:3b0b0881e5ee76b69f6c2d03dce317e060afd3372221aa988a002d1662d4d000 240 lines |remote: review #4: /dami/greet/reviews/4/ |pushed wip/i18n |e5f2803 running .forge/ci: greet.sh: say what it is | | sh: /bin/sh | | ok greet |e5f2803 pass in 0s, signed |pushed main |remote: review #4: /dami/greet/reviews/4/ |pushed wip/i18n |81aa3a3 running .forge/ci: wave at the world | | sh: /bin/sh | | FAIL greet : got 'hello, world o/', want 'hello, world' |81aa3a3 fail in 0s, signed |forge: 1 commit(s) did not pass |remote: review #6: /dami/greet/reviews/6/ |pushed ana/wave |8e599fc running .forge/ci: update the test for the wave | | sh: /bin/sh | | ok greet |8e599fc 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 cc94cc6 -> /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 |aa21a57 running .forge/ci: web, server and Python versions of greet | | sh: /bin/sh | | ok greet |aa21a57 pass in 0s, signed |pushed main |e1b8e93 running .forge/ci: messages: notes for the later regions | | sh: /bin/sh | | ok greet |e1b8e93 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 b8c7d81 -> /sites/dami/forge/guide/ |(node:87709) 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:87846) 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:87999) 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:88150) 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:88844) 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 | bin/ | 3 | ++- |
@@ -1011,7 +1011,8 @@ cmd_server_caddyfile() {
10111011 addr=$1 pages=${2:-} paddr=${3:-${2:-}}10121012 # Go module paths: <domain>/<owner>/<repo>/... answers ?go-get=1 with the10131013 # repo's https clone. The domain is fixed so the import path is canonical.1014- gohost=${FORGE_BASE_URL#*://}1014+ gohost=${FORGE_BASE_URL:-}1015+ gohost=${gohost#*://}10151016 gohost=${gohost%%/*}10161017 [ -n "$gohost" ] || gohost={host}10171018 cat <<EOF