rastrillo / fiesta Public

Fail the published-link check when the site cannot be exported

make site-links-published SITE_REF=no-such-ref exited 0. The recipe
kept its result in a variable set by an && chain: when git archive or
tar failed, the chain skipped the link test and the variable was still
0, so the cleanup's exit $status reported a pass with no link checked.
It is the check run before shipping the site, so a pass it did not earn
is the failure it exists to prevent.

Each step now ends the recipe with its own failure and a message
naming it, and the scratch tree is removed in an EXIT trap, so the
cleanup cannot change the status. The archive is written to a file
and then extracted, rather than piped into tar, because a pipe's
status is tar's and a git archive that fails after writing part of
the tree would be hidden behind it.

Red: on the old recipe, SITE_REF=no-such-ref and a stub tar that fails
both exit 0. Green: both now exit 2 with the failing step named;
v1.0.0, which has no published-only mode, exits 2 as before; HEAD runs
TestEveryLinkInTheSiteResolves in published mode and passes. Not named
by .amadan/ci.d, which runs make ci.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev ef382e6d402be8bc7981ae12b0d059f2056070db parent 6222049
1 file changed, +16 −7
  • Makefile +16 −7

CI passed — run details

CI log
=== gofmt ===
=== no-rastrillo ===
go test -run '^(TestFiestaNeverImportsRastrillo|TestThePublicPackagesLinkNoBrowser)$' -count=1 .
ok  	amadan.net/rastrillo/fiesta	0.157s
=== size ===
go test ./internal/build -run '^TestTheOneLinkIsUnder25KiBGzipped$' -count=1 -v
=== RUN   TestTheOneLinkIsUnder25KiBGzipped
    build_test.go:138: fiesta-plain.css: 158347 bytes, 23104 bytes gzipped (22.6 KiB of the 25.0 KiB limit)
    build_test.go:138: fiesta-signal.css: 158442 bytes, 23217 bytes gzipped (22.7 KiB of the 25.0 KiB limit)
    build_test.go:138: fiesta.css: 161261 bytes, 23823 bytes gzipped (23.3 KiB of the 25.0 KiB limit)
--- PASS: TestTheOneLinkIsUnder25KiBGzipped (0.03s)
PASS
ok  	amadan.net/rastrillo/fiesta/internal/build	0.027s
=== history ===
history: 43 commits; release tags: v1.0.0
=== suite ===
--- shard 0 of 48 ---
==> shard 0 of 48: make root
go build ./...
go vet ./...
FIESTA_TEST_REQUIRE_NODE=1 FIESTA_TEST_REQUIRE_GIT=1 FIESTA_TEST_REQUIRE_TAGS=1 ./hack/gotest.sh root 'internal/gallery@3 cmd/fiesta@2 internal/www@2'
ok  	amadan.net/rastrillo/fiesta	4.428s
ok  	amadan.net/rastrillo/fiesta/check	8.923s
ok  	amadan.net/rastrillo/fiesta/example	0.223s
?   	amadan.net/rastrillo/fiesta/hack/seed/english	[no test files]
ok  	amadan.net/rastrillo/fiesta/internal/axe	0.129s
ok  	amadan.net/rastrillo/fiesta/internal/build	1.208s
ok  	amadan.net/rastrillo/fiesta/internal/codeview	0.007s
?   	amadan.net/rastrillo/fiesta/internal/harness	[no test files]
ok  	amadan.net/rastrillo/fiesta/internal/markup	0.012s
ok  	amadan.net/rastrillo/fiesta/internal/nodetest	0.399s
ok  	amadan.net/rastrillo/fiesta/internal/rowrule	0.011s
ok  	amadan.net/rastrillo/fiesta/internal/site	3.014s
ok  	amadan.net/rastrillo/fiesta/internal/tokens	0.026s
suite: root took 15s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m11.420000s 0m1.940000s
--- shard 1 of 48 ---
==> shard 1 of 48: make test.internal.gallery~1of3
FIESTA_TEST_REQUIRE_NODE=1 FIESTA_TEST_REQUIRE_GIT=1 FIESTA_TEST_REQUIRE_TAGS=1 ./hack/gotest.sh test 'internal.gallery~1of3'
gotest: slice 1 of 3 of ./internal/gallery/ runs 37 of 109 test tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	67.306s
suite: test.internal.gallery~1of3 took 69s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m48.170000s 0m1.300000s
--- shard 2 of 48 ---
==> shard 2 of 48: make test.internal.gallery~2of3
FIESTA_TEST_REQUIRE_NODE=1 FIESTA_TEST_REQUIRE_GIT=1 FIESTA_TEST_REQUIRE_TAGS=1 ./hack/gotest.sh test 'internal.gallery~2of3'
gotest: slice 2 of 3 of ./internal/gallery/ runs 36 of 109 test tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	71.291s
suite: test.internal.gallery~2of3 took 73s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m52.020000s 0m1.260000s
--- shard 3 of 48 ---
==> shard 3 of 48: make test.internal.gallery~3of3
FIESTA_TEST_REQUIRE_NODE=1 FIESTA_TEST_REQUIRE_GIT=1 FIESTA_TEST_REQUIRE_TAGS=1 ./hack/gotest.sh test 'internal.gallery~3of3'
gotest: slice 3 of 3 of ./internal/gallery/ runs 36 of 109 test tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	65.515s
suite: test.internal.gallery~3of3 took 67s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m46.260000s 0m1.210000s
--- shard 4 of 48 ---
==> shard 4 of 48: make test.cmd.fiesta~1of2
FIESTA_TEST_REQUIRE_NODE=1 FIESTA_TEST_REQUIRE_GIT=1 FIESTA_TEST_REQUIRE_TAGS=1 ./hack/gotest.sh test 'cmd.fiesta~1of2'
gotest: slice 1 of 2 of ./cmd/fiesta/ runs 7 of 12 test tests
ok  	amadan.net/rastrillo/fiesta/cmd/fiesta	50.980s
suite: test.cmd.fiesta~1of2 took 52s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m33.560000s 0m2.090000s
--- shard 5 of 48 ---
==> shard 5 of 48: make test.cmd.fiesta~2of2
FIESTA_TEST_REQUIRE_NODE=1 FIESTA_TEST_REQUIRE_GIT=1 FIESTA_TEST_REQUIRE_TAGS=1 ./hack/gotest.sh test 'cmd.fiesta~2of2'
gotest: slice 2 of 2 of ./cmd/fiesta/ runs 5 of 12 test tests
ok  	amadan.net/rastrillo/fiesta/cmd/fiesta	53.694s
suite: test.cmd.fiesta~2of2 took 55s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m36.050000s 0m2.460000s
--- shard 6 of 48 ---
==> shard 6 of 48: make test.internal.www~1of2
FIESTA_TEST_REQUIRE_NODE=1 FIESTA_TEST_REQUIRE_GIT=1 FIESTA_TEST_REQUIRE_TAGS=1 ./hack/gotest.sh test 'internal.www~1of2'
gotest: slice 1 of 2 of ./internal/www/ runs 11 of 25 test tests
ok  	amadan.net/rastrillo/fiesta/internal/www	67.273s
suite: test.internal.www~1of2 took 69s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m47.730000s 0m1.700000s
--- shard 7 of 48 ---
==> shard 7 of 48: make test.internal.www~2of2
FIESTA_TEST_REQUIRE_NODE=1 FIESTA_TEST_REQUIRE_GIT=1 FIESTA_TEST_REQUIRE_TAGS=1 ./hack/gotest.sh test 'internal.www~2of2'
gotest: slice 2 of 2 of ./internal/www/ runs 14 of 25 test tests
ok  	amadan.net/rastrillo/fiesta/internal/www	63.656s
suite: test.internal.www~2of2 took 66s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m45.220000s 0m1.600000s
--- shard 8 of 48 ---
==> shard 8 of 48: make staticcheck
go run honnef.co/go/tools/cmd/staticcheck@v0.8.2 -tags browser ./...
suite: staticcheck took 9s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m9.240000s 0m0.720000s
--- shard 9 of 48 ---
==> shard 9 of 48: make govulncheck
go run golang.org/x/vuln/cmd/govulncheck@v1.8.0 ./...
=== Symbol Results ===

No vulnerabilities found.

Your code is affected by 0 vulnerabilities.
This scan also found 2 vulnerabilities in packages you import and 5
vulnerabilities in modules you require, but your code doesn't appear to call
these vulnerabilities.
Use '-show verbose' for more details.
suite: govulncheck took 6s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m3.390000s 0m0.390000s
--- shard 10 of 48 ---
==> shard 10 of 48: make gitleaks
go run github.com/zricethezav/gitleaks/v8@v8.30.1 git --no-banner --redact --log-opts='--full-history --diff-filter=tuxdb HEAD' .
10:43AM INF Unknown SCM platform. Use --platform to include links in findings. host=amadan.net
10:43AM INF 43 commits scanned.
10:43AM INF scanned ~9319202 bytes (9.32 MB) in 3.52s
10:43AM INF no leaks found
suite: gitleaks took 4s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m7.690000s 0m0.220000s
--- shard 11 of 48 ---
==> shard 11 of 48: make browser.internal.harness
./hack/gotest.sh browser 'internal.harness'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: ./internal/harness/ runs its 10 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/harness	6.053s
suite: browser.internal.harness took 8s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m1.710000s 0m1.360000s
--- shard 12 of 48 ---
==> shard 12 of 48: make browser.check~1of13
./hack/gotest.sh browser 'check~1of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 1 of 13 of ./check/ runs 17 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	108.343s
suite: browser.check~1of13 took 118s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m51.150000s 0m14.360000s
--- shard 13 of 48 ---
==> shard 13 of 48: make browser.check~2of13
./hack/gotest.sh browser 'check~2of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 2 of 13 of ./check/ runs 17 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	117.626s
suite: browser.check~2of13 took 127s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m57.720000s 0m16.190000s
--- shard 14 of 48 ---
==> shard 14 of 48: make browser.check~3of13
./hack/gotest.sh browser 'check~3of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 3 of 13 of ./check/ runs 16 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	105.109s
suite: browser.check~3of13 took 114s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m44.950000s 0m12.580000s
--- shard 15 of 48 ---
==> shard 15 of 48: make browser.check~4of13
./hack/gotest.sh browser 'check~4of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 4 of 13 of ./check/ runs 16 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	108.253s
suite: browser.check~4of13 took 117s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m56.830000s 0m17.260000s
--- shard 16 of 48 ---
==> shard 16 of 48: make browser.check~5of13
./hack/gotest.sh browser 'check~5of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 5 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	98.502s
suite: browser.check~5of13 took 108s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m43.180000s 0m14.610000s
--- shard 17 of 48 ---
==> shard 17 of 48: make browser.check~6of13
./hack/gotest.sh browser 'check~6of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 6 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	102.604s
suite: browser.check~6of13 took 111s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m50.100000s 0m16.880000s
--- shard 18 of 48 ---
==> shard 18 of 48: make browser.check~7of13
./hack/gotest.sh browser 'check~7of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 7 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	100.476s
suite: browser.check~7of13 took 110s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m48.020000s 0m14.880000s
--- shard 19 of 48 ---
==> shard 19 of 48: make browser.check~8of13
./hack/gotest.sh browser 'check~8of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 8 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	105.707s
suite: browser.check~8of13 took 115s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m47.270000s 0m15.600000s
--- shard 20 of 48 ---
==> shard 20 of 48: make browser.check~9of13
./hack/gotest.sh browser 'check~9of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 9 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	88.820s
suite: browser.check~9of13 took 98s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m33.230000s 0m10.610000s
--- shard 21 of 48 ---
==> shard 21 of 48: make browser.check~10of13
./hack/gotest.sh browser 'check~10of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 10 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	99.444s
suite: browser.check~10of13 took 108s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m41.980000s 0m13.050000s
--- shard 22 of 48 ---
==> shard 22 of 48: make browser.check~11of13
./hack/gotest.sh browser 'check~11of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 11 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	96.625s
suite: browser.check~11of13 took 105s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m44.120000s 0m13.920000s
--- shard 23 of 48 ---
==> shard 23 of 48: make browser.check~12of13
./hack/gotest.sh browser 'check~12of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 12 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	105.060s
suite: browser.check~12of13 took 114s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m51.140000s 0m15.860000s
--- shard 24 of 48 ---
==> shard 24 of 48: make browser.check~13of13
./hack/gotest.sh browser 'check~13of13'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: slice 13 of 13 of ./check/ runs 18 of 228 browser tests
ok  	amadan.net/rastrillo/fiesta/check	95.563s
suite: browser.check~13of13 took 105s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m41.970000s 0m12.590000s
--- shard 25 of 48 ---
==> shard 25 of 48: make browser.internal.gallery~1of18
./hack/gotest.sh browser 'internal.gallery~1of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 1 of 18 of ./internal/gallery/ runs 6 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	42.975s
suite: browser.internal.gallery~1of18 took 47s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m12.360000s 0m3.730000s
--- shard 26 of 48 ---
==> shard 26 of 48: make browser.internal.gallery~2of18
./hack/gotest.sh browser 'internal.gallery~2of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 2 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	54.677s
suite: browser.internal.gallery~2of18 took 59s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m11.570000s 0m3.160000s
--- shard 27 of 48 ---
==> shard 27 of 48: make browser.internal.gallery~3of18
./hack/gotest.sh browser 'internal.gallery~3of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 3 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	63.052s
suite: browser.internal.gallery~3of18 took 68s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m12.670000s 0m3.930000s
--- shard 28 of 48 ---
==> shard 28 of 48: make browser.internal.gallery~4of18
./hack/gotest.sh browser 'internal.gallery~4of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 4 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	52.042s
suite: browser.internal.gallery~4of18 took 56s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m11.250000s 0m3.010000s
--- shard 29 of 48 ---
==> shard 29 of 48: make browser.internal.gallery~5of18
./hack/gotest.sh browser 'internal.gallery~5of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 5 of 18 of ./internal/gallery/ runs 6 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	67.174s
suite: browser.internal.gallery~5of18 took 72s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m16.470000s 0m5.700000s
--- shard 30 of 48 ---
==> shard 30 of 48: make browser.internal.gallery~6of18
./hack/gotest.sh browser 'internal.gallery~6of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 6 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	60.625s
suite: browser.internal.gallery~6of18 took 64s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m13.160000s 0m4.080000s
--- shard 31 of 48 ---
==> shard 31 of 48: make browser.internal.gallery~7of18
./hack/gotest.sh browser 'internal.gallery~7of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 7 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	59.372s
suite: browser.internal.gallery~7of18 took 64s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m10.760000s 0m2.830000s
--- shard 32 of 48 ---
==> shard 32 of 48: make browser.internal.gallery~8of18
./hack/gotest.sh browser 'internal.gallery~8of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 8 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	63.463s
suite: browser.internal.gallery~8of18 took 68s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m15.200000s 0m4.910000s
--- shard 33 of 48 ---
==> shard 33 of 48: make browser.internal.gallery~9of18
./hack/gotest.sh browser 'internal.gallery~9of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 9 of 18 of ./internal/gallery/ runs 6 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	76.719s
suite: browser.internal.gallery~9of18 took 80s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m21.590000s 0m7.980000s
--- shard 34 of 48 ---
==> shard 34 of 48: make browser.internal.gallery~10of18
./hack/gotest.sh browser 'internal.gallery~10of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 10 of 18 of ./internal/gallery/ runs 2 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	66.733s
suite: browser.internal.gallery~10of18 took 72s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m11.130000s 0m2.750000s
--- shard 35 of 48 ---
==> shard 35 of 48: make browser.internal.gallery~11of18
./hack/gotest.sh browser 'internal.gallery~11of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 11 of 18 of ./internal/gallery/ runs 2 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	67.378s
suite: browser.internal.gallery~11of18 took 72s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m11.340000s 0m3.010000s
--- shard 36 of 48 ---
==> shard 36 of 48: make browser.internal.gallery~12of18
./hack/gotest.sh browser 'internal.gallery~12of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 12 of 18 of ./internal/gallery/ runs 2 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	71.617s
suite: browser.internal.gallery~12of18 took 76s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m16.190000s 0m5.290000s
--- shard 37 of 48 ---
==> shard 37 of 48: make browser.internal.gallery~13of18
./hack/gotest.sh browser 'internal.gallery~13of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 13 of 18 of ./internal/gallery/ runs 4 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	72.705s
suite: browser.internal.gallery~13of18 took 77s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m16.390000s 0m5.660000s
--- shard 38 of 48 ---
==> shard 38 of 48: make browser.internal.gallery~14of18
./hack/gotest.sh browser 'internal.gallery~14of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 14 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	75.765s
suite: browser.internal.gallery~14of18 took 81s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m16.670000s 0m5.550000s
--- shard 39 of 48 ---
==> shard 39 of 48: make browser.internal.gallery~15of18
./hack/gotest.sh browser 'internal.gallery~15of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 15 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	76.856s
suite: browser.internal.gallery~15of18 took 81s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m17.170000s 0m5.840000s
--- shard 40 of 48 ---
==> shard 40 of 48: make browser.internal.gallery~16of18
./hack/gotest.sh browser 'internal.gallery~16of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 16 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	73.171s
suite: browser.internal.gallery~16of18 took 78s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m14.030000s 0m4.600000s
--- shard 41 of 48 ---
==> shard 41 of 48: make browser.internal.gallery~17of18
./hack/gotest.sh browser 'internal.gallery~17of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 17 of 18 of ./internal/gallery/ runs 5 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	82.454s
suite: browser.internal.gallery~17of18 took 87s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m17.000000s 0m5.880000s
--- shard 42 of 48 ---
==> shard 42 of 48: make browser.internal.gallery~18of18
./hack/gotest.sh browser 'internal.gallery~18of18'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 18 of 18 of ./internal/gallery/ runs 6 of 84 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery	86.135s
suite: browser.internal.gallery~18of18 took 91s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m18.460000s 0m6.780000s
--- shard 43 of 48 ---
==> shard 43 of 48: make browser.internal.gallery.history
./hack/gotest.sh browser 'internal.gallery.history'
gotest: on ip-172-31-19-192, driving /opt/amadan-browser/chromium-1234/chrome-linux/chrome
gotest: ./internal/gallery/history/ runs its 3 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/gallery/history	36.665s
suite: browser.internal.gallery.history took 39s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m21.790000s 0m2.170000s
--- shard 44 of 48 ---
==> shard 44 of 48: make browser.internal.www~1of4
./hack/gotest.sh browser 'internal.www~1of4'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 1 of 4 of ./internal/www/ runs 5 of 24 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/www	88.886s
suite: browser.internal.www~1of4 took 94s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m39.190000s 0m2.300000s
--- shard 45 of 48 ---
==> shard 45 of 48: make browser.internal.www~2of4
./hack/gotest.sh browser 'internal.www~2of4'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 2 of 4 of ./internal/www/ runs 7 of 24 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/www	92.995s
suite: browser.internal.www~2of4 took 97s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m54.130000s 0m3.490000s
--- shard 46 of 48 ---
==> shard 46 of 48: make browser.internal.www~3of4
./hack/gotest.sh browser 'internal.www~3of4'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 3 of 4 of ./internal/www/ runs 6 of 24 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/www	95.837s
suite: browser.internal.www~3of4 took 100s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m54.140000s 0m3.130000s
--- shard 47 of 48 ---
==> shard 47 of 48: make browser.internal.www~4of4
./hack/gotest.sh browser 'internal.www~4of4'
gotest: on ip-172-31-19-192, driving the harness's own choice (/usr/local/bin/chromium)
gotest: slice 4 of 4 of ./internal/www/ runs 6 of 24 browser tests
ok  	amadan.net/rastrillo/fiesta/internal/www	89.871s
suite: browser.internal.www~4of4 took 95s; CPU, user then system, of this shell and then of the role:
0m0.000000s 0m0.000000s
0m47.200000s 0m3.270000s
diff --git a/Makefile b/Makefile
index 3219b4a..92147ce 100644
--- a/Makefile
+++ b/Makefile
@@ -279,16 +279,25 @@ site: | $(BIN)/tmp
# reason: it fails from a change to js/, css/ or i18n/ until the
# release carrying it is committed, as it should. Run it, and see it
# pass, before shipping the site.
+#
+# Each step that can fail ends the recipe with its own failure, and the
+# scratch tree goes in an EXIT trap. A status kept in a variable through
+# an && chain came out 0 when the export failed, so a bad SITE_REF
+# passed with no link checked. The archive is written to a file rather
+# than piped, so a failing git archive is not hidden behind tar's
+# status.
SITE_REF ?= HEAD
site-links-published: | $(BIN)/tmp
- @d=$$(mktemp -d) && status=0 && \
- git archive --format=tar '$(SITE_REF)' | tar -x -C "$$d" && \
- if ! grep -q FIESTA_LINKS_PUBLISHED "$$d/internal/www/links_test.go"; then \
- echo "site-links-published: $(SITE_REF)'s link check has no published-only mode, so it would pass through the fallback; check a commit that has it"; status=1; \
- else \
- (cd "$$d" && FIESTA_LINKS_PUBLISHED=1 go test ./internal/www -run '^TestEveryLinkInTheSiteResolves$$' -count=1 -v) || status=1; \
+ @d=$$(mktemp -d) || exit 1; \
+ trap 'rm -rf "$$d"' EXIT; trap 'exit 130' INT TERM; \
+ git archive --format=tar -o "$$d/site.tar" '$(SITE_REF)' || { \
+ echo "site-links-published: git archive could not export $(SITE_REF)"; exit 1; }; \
+ mkdir "$$d/tree" && tar -x -C "$$d/tree" -f "$$d/site.tar" || { \
+ echo "site-links-published: could not extract $(SITE_REF)'s tree"; exit 1; }; \
+ if ! grep -q FIESTA_LINKS_PUBLISHED "$$d/tree/internal/www/links_test.go"; then \
+ echo "site-links-published: $(SITE_REF)'s link check has no published-only mode, so it would pass through the fallback; check a commit that has it"; exit 1; \
fi; \
- rm -rf "$$d"; exit $$status
+ cd "$$d/tree" && FIESTA_LINKS_PUBLISHED=1 go test ./internal/www -run '^TestEveryLinkInTheSiteResolves$$' -count=1 -v
root no-rastrillo size staticcheck govulncheck gitleaks: | $(BIN)/tmp