forge attest runs .forge/ci in a clean worktree of each commit and signs the result into refs/notes/ci. It runs the checks CONTRIBUTING.md lists: the Deno workspace tasks, a publish dry run, and the Worker's typecheck, tests and Wrangler dry run.
- commit
- 27878f44b6ff9ab6a40138c0acbdd00a5e8ed42a
- parent
- 6ddd211407be97bc6f182d88b9d7b3f456da723f
- author
- cat <admin@dev.site>
- ci
- ✓ passed in 21s, signed by cat
ci attestation
forge-attestation 1
type ci
commit 27878f44b6ff9ab6a40138c0acbdd00a5e8ed42a
tree 31110055377ab00ced066aba41873ef05d993dbd
script .forge/ci 8f655ee4d09dbe4e790e45e5c400420998979ee4
result pass
exit 0
started 2026-10-17T22:56:11Z
duration 21s
runner (not shown here; refs/notes/ci has it)
system Darwin 25.5.0 arm64
env host
log sha256:bbd116293f055903b233fbf15b3f96b97035969c4f18713b8227e734a7ac64b7 615 lines
|ok 50 - unlock rejects passwords above 256 characters before hashing
| ---
| duration_ms: 0.25625
| type: 'test'
| ...
|1..50
|# tests 56
|# suites 2
|# pass 56
|# fail 0
|# cancelled 0
|# skipped 0
|# todo 0
|# duration_ms 236.278375
|
|> test:runtime
|> vitest run
|
|
| RUN v4.1.10 /Users/dami/.cache/forge/ci/d0656d9ed65b/worker
|
|send_email binding called with MessageBuilder:
|From: "nzip security" <alerts@share.demo.dev>
|To: operator@example.com
|Subject: [nzip] Possible enumeration open
|
|Text: /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/miniflare-8313bd9fc90c0950e07998c3ffeff4ef/email/email-text/dffdc1ec-8d17-49fc-91cc-af663314c1a7.txt
|HTML: /var/folders/b4/mv8w4c8j0zj0_mldppxdbdw00000gn/T/miniflare-8313bd9fc90c0950e07998c3ffeff4ef/email/email-html/23f7382e-b2aa-4228-9631-6179de7892a9.html
|
| Test Files 3 passed (3)
| Tests 29 passed (29)
| Start at 16:56:28
| Duration 2.13s (transform 433ms, setup 1.14s, import 52ms, tests 1.16s, environment 0ms)
|
|
| ⛅️ wrangler 4.112.0 (update available 4.151.1)
|───────────────────────────────────────────────
|Total Upload: 417.49 KiB / gzip: 89.08 KiB
|Your Worker has access to the following bindings:
|Binding Resource
|env.EMAIL (operator@example.com) Send Email
|env.DB (nzip) D1 Database
|env.CONTENT (nzip-content) R2 Bucket
|env.RL_ENUM (30 requests/60s) Rate Limit
|env.RL_UNLOCK (5 requests/60s) Rate Limit
|env.RL_OBSERVE (30 requests/60s) Rate Limit
|env.RL_SIGNAL (1 requests/60s) Rate Limit
|env.RL_NOTIFY_ENROLL (5 requests/60s) Rate Limit
|env.RL_NOTIFY_READ (60 requests/60s) Rate Limit
|env.RL_FEEDBACK (60 requests/60s) Rate Limit
|env.PUBLIC_BASE ("https://share.demo.dev") Environment Variable
|env.SITE_DOMAIN ("demo.dev") Environment Variable
|env.ALERT_EMAIL_TO ("operator@example.com") Environment Variable
|env.ALERT_EMAIL_FROM ("alerts@share.demo.dev") Environment Variable
|env.NOTIFY_ENABLED ("false") Environment Variable
|env.WEB_PUSH_ORIGINS ("") Environment Variable
|env.VAPID_PUBLIC_KEY ("replace-with-url-safe-base64-public-key") Environment Variable
|env.VAPID_SUBJECT ("mailto:operator@example.com") Environment Variable
|
|--dry-run: exiting now.
Signature: good, cat
| A | .forge/ | 18 | ++++++++++++++++++ |
@@ -0,0 +1,18 @@
1+2+# CI for src.rest: the repository checks from CONTRIBUTING.md, the Deno3+# workspace (fmt, lint, doc, check, test, publish dry run) and the Worker.4+set -eu5+npm ci --no-audit --no-fund6+(cd worker && npm ci --no-audit --no-fund)7+8+deno task fmt:check9+deno task lint10+deno task doc11+deno task check12+deno task test13+deno publish --dry-run --allow-dirty14+15+cd worker16+npm run check17+npm test18+npx wrangler deploy --dry-run