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 #12

push · v1.2.3 · 51e43db4ran in 56s · 2041 lines of output
queued 1s ran 55s total 56s
5 jobs
1 failed
56s duration
— tests
1 artifacts
failureBuild and deploy configuration site → Back up mutable production files View log
Unclassified failure The failure didn't match a known signature. Open the log — and this is a signal our classifier needs a new pattern.
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 @ 51e43db4b3770fa8754525b49368643caf73860aaction 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 5s
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/4329aa3c-a89f-4cd8-b088-797ddd203ee6download 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/176de53f-0a1d-44c1-a4be-e106863ebf4d -f /tmp/4329aa3c-a89f-4cd8-b088-797ddd203ee6Adding to the cache ...Caching tool node 24.18.0 x64source dir: /tmp/176de53f-0a1d-44c1-a4be-e106863ebf4ddestination /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-babf198b5f108ade1e363d095f80220f5bf6e9474b56e2db14260b48541b4a84Cache service version: v2Resolved Keys:["node-cache-Linux-x64-npm-babf198b5f108ade1e363d095f80220f5bf6e9474b56e2db14260b48541b4a84"]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": "Wed, 07 Oct 2026 06:53:01 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": "a80c5741-06d9-433b-bd43-cf4a8e598d22"}Body: { "matchedKey": "node-cache-Linux-x64-npm-babf198b5f108ade1e363d095f80220f5bf6e9474b56e2db14260b48541b4a84", "matched_key": "node-cache-Linux-x64-npm-babf198b5f108ade1e363d095f80220f5bf6e9474b56e2db14260b48541b4a84", "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-babf198b5f108ade1e363d095f80220f5bf6e9474b56e2db14260b48541b4a84Archive path: /tmp/f138aa32-4626-4d7b-a522-c17780fd31ef/cache.tzstStarting download of archive to: /tmp/f138aa32-4626-4d7b-a522-c17780fd31ef/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 (345139 B)[command]/usr/bin/tar -xf /tmp/f138aa32-4626-4d7b-a522-c17780fd31ef/cache.tzst -P -C /workspace/lapin-fute --use-compress-program unzstdCache restored successfullyCache restored from key: node-cache-Linux-x64-npm-babf198b5f108ade1e363d095f80220f5bf6e9474b56e2db14260b48541b4a84##[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 340msfound 0 vulnerabilities
successBuild static configuration page <1s
Run
npm run build:config-page
> lapin-fute@1.2.3 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

[[ -n "$BUNNY_STORAGE_ENDPOINT" ]] || { echo "Missing required production variable BUNNY_STORAGE_ENDPOINT" >&2; exit 1; }
[[ -n "$BUNNY_STORAGE_PASSWORD" ]] || { echo "Missing required production secret BUNNY_STORAGE_PASSWORD" >&2; exit 1; }
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)
bash: line 40: /dev/fd/63: No such file or directory
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:633) [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-babf198b5f108ade1e363d095f80220f5bf6e9474b56e2db14260b48541b4a84, 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.