anthodev/lapin-futepublic Fork
⑂ develop
Commits
⬇ Clone ▾
git clone https://git.rickub.com/anthodev/lapin-fute.git
git clone ssh://git@rickub.com/anthodev/lapin-fute.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP
failure

Deploy configuration site to Bunny #11

push · v1.2.2 · 5736f05fran in 38s · 1326 lines of output
queued <1s ran 38s total 38s
5 jobs
2 failed
38s duration
— tests
0 artifacts
failureBuild release PBW → Install pinned Pebble toolchain View log
Step failed A step exited non-zero. Open the log for the failing command's output.
Run quality checks
Build release PBW
Build and deploy configuration site
Publish GitHub release notes
queued
Publish release to the RePebble store
queued
failureBuild and deploy configuration site 6s
successSet up job
cloning anthodev/lapin-fute @ 5736f05f9a516e686575236658c17fd4ec794ef4action actions/setup-node@v4: node20 (_actions/actions/setup-node/v4)action actions/upload-artifact@v4: node20 (_actions/actions/upload-artifact/v4)
successactions/checkout@v4 1s
(checkout already performed by the runner — delivered as the read-only work disk)
successactions/setup-node@v4 4s
ciguest: network up (172.30.0.2/30 via 172.30.0.1)ciguest: starting dockerd (overlay2, data-root on scratch)ciguest: dockerd is readyciguest: loaded baked image postgres_16-alpine.tar.gz: Loaded image: postgres:16-alpineciguest: 1 baked image archive(s) loaded (no per-job registry pull needed)ciguest: logged into registry registry.rickub.com as rickubNode version file is not JSON fileResolved .node-version as 24.18.0isExplicit: 24.18.0explicit? truechecking cache: /tmp/hostedtoolcache/node/24.18.0/x64not foundAttempting to download 24.18.0...No manifest cachedGetting manifest from actions/node-versions@main(node:551) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.(Use `node --trace-deprecation ...` to show where the warning was created)check 26.10.0 satisfies 24.18.0check 26.9.0 satisfies 24.18.0check 26.8.2 satisfies 24.18.0check 26.8.1 satisfies 24.18.0check 26.8.0 satisfies 24.18.0check 26.7.0 satisfies 24.18.0check 26.6.0 satisfies 24.18.0check 26.5.1 satisfies 24.18.0check 26.5.0 satisfies 24.18.0check 26.4.0 satisfies 24.18.0check 26.3.1 satisfies 24.18.0check 26.3.0 satisfies 24.18.0check 26.2.0 satisfies 24.18.0check 26.1.0 satisfies 24.18.0check 26.0.0 satisfies 24.18.0check 24.21.0 satisfies 24.18.0check 24.20.0 satisfies 24.18.0check 24.19.0 satisfies 24.18.0check 24.18.1 satisfies 24.18.0check 24.18.0 satisfies 24.18.0arm64===x64 && darwin===linuxx64===x64 && darwin===linuxarm64===x64 && linux===linuxx64===x64 && linux===linuxmatched 24.18.0Acquiring 24.18.0 - x64 from https://github.com/actions/node-versions/releases/download/24.18.0-28070977815/node-24.18.0-linux-x64.tar.gzDownloading https://github.com/actions/node-versions/releases/download/24.18.0-28070977815/node-24.18.0-linux-x64.tar.gzDestination /tmp/df9d89a7-fc35-4156-9722-4980e71dc3b8download completeExtracting ...Checking tar --versiontar (GNU tar) 1.34Copyright (C) 2021 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Written by John Gilmore and Jay Fenlason.[command]/usr/bin/tar xz --strip 1 --warning=no-unknown-keyword --overwrite -C /tmp/974cc262-14e6-4d70-b013-b11dc5255607 -f /tmp/df9d89a7-fc35-4156-9722-4980e71dc3b8Adding to the cache ...Caching tool node 24.18.0 x64source dir: /tmp/974cc262-14e6-4d70-b013-b11dc5255607destination /tmp/hostedtoolcache/node/24.18.0/x64finished caching tool
Environment details
node: v24.18.0npm: 11.16.0yarn:
[command]/tmp/hostedtoolcache/node/24.18.0/x64/bin/npm config get cache/tmp/home/.npmnpm's cache folder "/tmp/home/.npm" configured for the root directoryfollowSymbolicLinks 'true'followSymbolicLinks 'true'implicitDescendants 'true'matchDirectories 'true'omitBrokenSymbolicLinks 'true'excludeHiddenFiles 'false'Search path '/workspace/lapin-fute/package-lock.json'/workspace/lapin-fute/package-lock.jsonFound 1 files to hash.primary key is node-cache-Linux-x64-npm-19ac8dd7d6cd2f45c89d620919c445272bb7cb2827dd113434f652c44d5ac00bCache service version: v2Resolved Keys:["node-cache-Linux-x64-npm-19ac8dd7d6cd2f45c89d620919c445272bb7cb2827dd113434f652c44d5ac00b"]Checking zstd --quiet --version1.5.4zstd version: 1.5.4[Request] GetCacheEntryDownloadURL http://172.30.255.1:8888/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL[Response] - 200Headers: { "content-length": "1003", "content-security-policy": "default-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; frame-ancestors 'none'; object-src 'none'; form-action 'self' https://payment.stancer.com", "content-type": "application/json", "date": "Tue, 06 Oct 2026 22:00:03 GMT", "permissions-policy": "accelerometer=(), autoplay=(), camera=(), display-capture=(), encrypted-media=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()", "referrer-policy": "strict-origin-when-cross-origin", "strict-transport-security": "max-age=31536000; includeSubDomains", "x-content-type-options": "nosniff", "x-request-id": "89dece0d-ccd4-4ad9-b594-6e291b8ea175"}Body: { "matchedKey": "node-cache-Linux-x64-npm-19ac8dd7d6cd2f45c89d620919c445272bb7cb2827dd113434f652c44d5ac00b", "matched_key": "node-cache-Linux-x64-npm-19ac8dd7d6cd2f45c89d620919c445272bb7cb2827dd113434f652c44d5ac00b", "ok": true, "signedDownloadUrl": "http://172.30.255.1:8888/twirp/_blob/download/cache?sig=***", "signed_download_url": "http://172.30.255.1:8888/twirp/_blob/download/cache?sig=***"}Cache hit for: node-cache-Linux-x64-npm-19ac8dd7d6cd2f45c89d620919c445272bb7cb2827dd113434f652c44d5ac00bArchive path: /tmp/ce6ccf35-f15d-4ca0-9537-f502ad24c7af/cache.tzstStarting download of archive to: /tmp/ce6ccf35-f15d-4ca0-9537-f502ad24c7af/cache.tzstUse Azure SDK: trueDownload concurrency: 8Request timeout (ms): 30000Cache segment download timeout mins env var: undefinedSegment download timeout (ms): 600000Lookup only: falseCache Size: ~0 MB (345165 B)[command]/usr/bin/tar -xf /tmp/ce6ccf35-f15d-4ca0-9537-f502ad24c7af/cache.tzst -P -C /workspace/lapin-fute --use-compress-program unzstdCache restored successfullyCache restored from key: node-cache-Linux-x64-npm-19ac8dd7d6cd2f45c89d620919c445272bb7cb2827dd113434f652c44d5ac00b##[add-matcher]/workspace/_actions/actions/setup-node/v4/.github/tsc.json##[add-matcher]/workspace/_actions/actions/setup-node/v4/.github/eslint-stylish.json##[add-matcher]/workspace/_actions/actions/setup-node/v4/.github/eslint-compact.json
successnpm ci <1s
Run
npm ci
added 7 packages, and audited 12 packages in 354msfound 0 vulnerabilities
successBuild static configuration page <1s
Run
npm run build:config-page
> lapin-fute@1.2.2 build:config-page> node scripts/build-config-site.mjs --page-onlyconfig page ready: /workspace/lapin-fute/var/config-site (existing hosted catalog left unchanged)
failureBack up mutable production files <1s
Run
set -euo pipefail

test -n "$BUNNY_STORAGE_ENDPOINT"
test -n "$BUNNY_STORAGE_PASSWORD"
endpoint="${BUNNY_STORAGE_ENDPOINT%/}"
case "$endpoint" in
  https://*) ;;
  *) echo "BUNNY_STORAGE_ENDPOINT must use HTTPS" >&2; exit 1 ;;
esac
mkdir -p var/deploy-backup/files
: > var/deploy-backup/missing

while IFS= read -r -d '' file; do
  relative_path="${file#var/config-site/}"
  case "$relative_path" in
    *[!A-Za-z0-9._/-]* | /* | *../*)
      echo "Refusing unsafe backup path: $relative_path" >&2
      exit 1
      ;;
  esac

  target="var/deploy-backup/files/$relative_path"
  mkdir -p "$(dirname "$target")"
  status="$(curl --silent --show-error \
    --output "$target" \
    --write-out '%{http_code}' \
    --header "AccessKey: $BUNNY_STORAGE_PASSWORD" \
    "$endpoint/$relative_path")"
  case "$status" in
    200) ;;
    404)
      rm -f "$target"
      printf '%s\0' "$relative_path" >> var/deploy-backup/missing
      ;;
    *)
      echo "Could not back up $relative_path: HTTP $status" >&2
      exit 1
      ;;
  esac
done < <(find var/config-site -type f -print0)
skippedRetain rollback bundle
(skipped: step if: condition evaluated to false)
skippedUpload static site to Bunny Storage
Run
set -euo pipefail

test -n "$BUNNY_STORAGE_ENDPOINT"
test -n "$BUNNY_STORAGE_PASSWORD"
endpoint="${BUNNY_STORAGE_ENDPOINT%/}"
case "$endpoint" in
  https://*) ;;
  *) echo "BUNNY_STORAGE_ENDPOINT must use HTTPS" >&2; exit 1 ;;
esac

upload_file() {
  local file="$1"
  local relative_path="${file#var/config-site/}"
  local mime_type
  case "$relative_path" in
    *[!A-Za-z0-9._/-]* | /* | *../*)
      echo "Refusing unsafe deployment path: $relative_path" >&2
      exit 1
      ;;
  esac
  mime_type="$(file --brief --mime-type "$file")"
  echo "Uploading $relative_path"
  curl --fail --silent --show-error \
    --retry 3 --retry-all-errors \
    --request PUT \
    --header "AccessKey: $BUNNY_STORAGE_PASSWORD" \
    --header "Content-Type: $mime_type" \
    --upload-file "$file" \
    "$endpoint/$relative_path"
}

export endpoint BUNNY_STORAGE_PASSWORD
export -f upload_file
find var/config-site -type f -print0 \
  | xargs -0 --no-run-if-empty --max-args=1 --max-procs=32 \
      bash -c 'upload_file "$1"' _
(skipped: step if: condition evaluated to false)
skippedPurge Bunny CDN cache
Run
set -euo pipefail
test -n "$BUNNY_API_KEY"
test -n "$BUNNY_PULL_ZONE_ID"
curl --fail --silent --show-error \
  --retry 3 --retry-all-errors \
  --request POST \
  --header "AccessKey: $BUNNY_API_KEY" \
  "https://api.bunny.net/pullzone/$BUNNY_PULL_ZONE_ID/purgeCache"
(skipped: step if: condition evaluated to false)
skippedVerify served static site
Run
for attempt in 1 2 3; do
  if npm run verify:config-site -- --page-only; then
    exit 0
  fi
  if [[ "$attempt" != 3 ]]; then sleep 10; fi
done
exit 1
(skipped: step if: condition evaluated to false)
skippedRestore previous mutable files after failure
Run
set -euo pipefail

endpoint="${BUNNY_STORAGE_ENDPOINT%/}"
case "$endpoint" in
  https://*) ;;
  *) echo "BUNNY_STORAGE_ENDPOINT must use HTTPS" >&2; exit 1 ;;
esac
restore_file() {
  local file="$1"
  local relative_path="${file#var/deploy-backup/files/}"
  local mime_type
  mime_type="$(file --brief --mime-type "$file")"
  echo "Restoring $relative_path"
  curl --fail --silent --show-error \
    --request PUT \
    --header "AccessKey: $BUNNY_STORAGE_PASSWORD" \
    --header "Content-Type: $mime_type" \
    --upload-file "$file" \
    "$endpoint/$relative_path"
}
export endpoint BUNNY_STORAGE_PASSWORD
export -f restore_file
find var/deploy-backup/files -type f -print0 \
  | xargs -0 --no-run-if-empty --max-args=1 --max-procs=16 \
      bash -c 'restore_file "$1"' _

while IFS= read -r -d '' relative_path; do
  echo "Removing newly introduced mutable file $relative_path"
  status="$(curl --silent --show-error \
    --request DELETE \
    --header "AccessKey: $BUNNY_STORAGE_PASSWORD" \
    --output /dev/null \
    --write-out '%{http_code}' \
    "$endpoint/$relative_path")"
  case "$status" in
    200 | 201 | 204 | 404) ;;
    *)
      echo "Could not remove $relative_path during rollback: HTTP $status" >&2
      exit 1
      ;;
  esac
done < var/deploy-backup/missing

curl --fail --silent --show-error \
  --request POST \
  --header "AccessKey: $BUNNY_API_KEY" \
  "https://api.bunny.net/pullzone/$BUNNY_PULL_ZONE_ID/purgeCache"
(skipped: step if: condition evaluated to false)
Post actions/setup-node@v4
(node:631) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.(Use `node --trace-deprecation ...` to show where the warning was created)Cache hit occurred on the primary key node-cache-Linux-x64-npm-19ac8dd7d6cd2f45c89d620919c445272bb7cb2827dd113434f652c44d5ac00b, not saving cache.step failed: exit code 1 — Back up mutable production files

No test reports for this run.

Tell a job where its test runner writes its report and this tab fills in: how many tests passed, failed and were skipped, a bar of the result at a glance, then every failure first — with the assertion that failed and the output around it — over a per-suite list of cases and their durations. No scrolling a log for the word FAIL.

It is one reports: key on the job — a job key, not a step, so the report is collected whatever the job concluded. JUnit XML and go test -json are both understood, and most runners already emit one of them. reports: is a rickub extension and works only in .rickub/workflows/; in .github/workflows/ it is a parse error on purpose, because those files are also meant to run on github.com.