The restore's build kicks forge lake to run 10 seconds later, in the background, in the restored root. CI removes that root once its checks and the restic round trip are done, and on a busy machine those took about as long: the lake wrote into the root while rm -rf was emptying it, rm failed with "Directory not empty", and so did CI. The restore now runs with FORGE_LAKE=0, which starts none; nothing there checks the restored forge's lake.
- commit
- cf1c0f1ab18a30f98ce5bd6d40a99e6500ac286f
- parent
- 4383583dc93eae0004733fd59207510c2553c8a5
- author
- cat <admin@dev.site>
- ci
- ✓ passed in 123s, signed by cat
- kind
- build risk score 1.0 of 3, Jev's estimate
- review
- #4 Keep private repos' release trees in a store only the forge reads
ci attestation
forge-attestation 1 type ci commit cf1c0f1ab18a30f98ce5bd6d40a99e6500ac286f tree 51b2bbb828c79db49eff3db398a4500e30d15f52 script .forge/ci e6f038ae810b87f90a4be115a762a9c91dd76a01 result pass exit 0 started 2026-10-18T22:32:58Z duration 123s runner (not shown here; refs/notes/ci has it) system Darwin 25.5.0 arm64 env host log sha256:63ecae83e389762b223e59c7e0135f2fed44b44161d33986788632b2f9a2f93b 234 lines |remote: review #4: /dami/greet/reviews/4/ |pushed wip/i18n |a77c43e running .forge/ci: greet.sh: say what it is | | sh: /bin/sh | | ok greet |a77c43e pass in 0s, signed |pushed main |remote: review #4: /dami/greet/reviews/4/ |pushed wip/i18n |32e3c25 running .forge/ci: wave at the world | | sh: /bin/sh | | FAIL greet : got 'hello, world o/', want 'hello, world' |32e3c25 fail in 0s, signed |forge: 1 commit(s) did not pass |remote: review #6: /dami/greet/reviews/6/ |pushed ana/wave |8350fa4 running .forge/ci: update the test for the wave | | sh: /bin/sh | | ok greet |8350fa4 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 b87bb3e -> /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 |3c3420e running .forge/ci: web, server and Python versions of greet | | sh: /bin/sh | | ok greet |3c3420e pass in 0s, signed |pushed main |72a5a15 running .forge/ci: messages: notes for the later regions | | sh: /bin/sh | | ok greet |72a5a15 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 875f449 -> /sites/dami/forge/guide/ |(node:35215) 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 1s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.EVLm2w/wt/demo/root/.forge/www |(node:37122) 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 -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.EVLm2w/wt/demo/root/.forge/www |(node:38262) 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 1s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.EVLm2w/wt/demo/root/.forge/www |(node:38788) 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 1s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.EVLm2w/wt/demo/root/.forge/www |(node:40632) 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 1s -> /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/forge-ci.EVLm2w/wt/demo/root/.forge/www |226 of 226 pages render the same without 11ty |guide: 4 files, links ok |ok
Signature: good, cat
| M | .forge/ | 6 | ++++-- |
@@ -80,10 +80,12 @@ test -f "$w/sites/dami/forge/guide/index.html"
8080 # Backups: stage the demo forge the way forge backup does, restore that into8181 # an empty root, and check the forge comes back whole: hooks, keys, refs,8282 # review logs and comments, sites, pages. The restic round trip needs83-# restic, which the container image has.83+# restic, which the container image has. The restore's build would start a84+# forge lake in the background 10 seconds on, writing into $r while it is85+# removed at the end; FORGE_LAKE=0 starts none.8486 r=$(mktemp -d "${TMPDIR:-/tmp}/forge-ci-restore.XXXXXX")8587 FORGE_ROOT=$PWD/demo/root sh bin/forge backup --dry-run 2>/dev/null86-FORGE_ROOT=$r sh bin/forge restore --from demo/root/.forge/backup/stage >/dev/null 2>&188+FORGE_LAKE=0 FORGE_ROOT=$r sh bin/forge restore --from demo/root/.forge/backup/stage >/dev/null 2>&18789 test -x "$r/dami/greet.git/hooks/pre-receive"8890 grep -q 'shell ana"' "$r/.ssh/authorized_keys"8991 diff -r demo/root/dami/greet.git/forge "$r/dami/greet.git/forge"