@scribe-platform/cli 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -4
- package/dist/commands/site.d.ts.map +1 -1
- package/dist/commands/site.js +95 -0
- package/dist/commands/site.js.map +1 -1
- package/dist/lib/client.d.ts +37 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +6 -6
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/deploy-wait.d.ts +41 -0
- package/dist/lib/deploy-wait.d.ts.map +1 -0
- package/dist/lib/deploy-wait.js +22 -0
- package/dist/lib/deploy-wait.js.map +1 -0
- package/dist/lib/verify-report.d.ts +5 -0
- package/dist/lib/verify-report.d.ts.map +1 -0
- package/dist/lib/verify-report.js +54 -0
- package/dist/lib/verify-report.js.map +1 -0
- package/package.json +1 -1
- package/skills/scribe-site-builder/SKILL.md +20 -3
- package/skills/scribe-site-builder/recipes/deploy.md +4 -0
- package/skills/scribe-site-builder/recipes/forms.md +109 -22
- package/skills/scribe-site-builder/recipes/schema.md +42 -0
package/README.md
CHANGED
|
@@ -59,12 +59,34 @@ scribe site add --slug <slug> [--domain <domain>] [--name <name>]
|
|
|
59
59
|
[--turnstile-key <key>] [--form-collection <name>]
|
|
60
60
|
scribe site update <slug> [--domain <domain>] [--turnstile-key <key>]
|
|
61
61
|
scribe site clone <slug> [directory]
|
|
62
|
+
scribe site deploy <slug> [--skip-verify] [--timeout <minutes>]
|
|
63
|
+
scribe site verify <slug> [--json]
|
|
62
64
|
scribe site delete <slug> [--yes]
|
|
63
65
|
```
|
|
64
66
|
|
|
65
|
-
`site add` creates the GitHub repo, pushes
|
|
66
|
-
registers the site with the admin in one step.
|
|
67
|
-
|
|
67
|
+
`site add` creates the GitHub repo, pushes a minimal valid scaffold, and
|
|
68
|
+
registers the site with the admin in one step. There is no starter template to
|
|
69
|
+
fill in — the site is authored against the recipes in the `scribe-site-builder`
|
|
70
|
+
skill. `site clone` is a plain `git clone` of the resulting repo, so you can work
|
|
71
|
+
on the design locally.
|
|
72
|
+
|
|
73
|
+
`site deploy` dispatches the build, waits for GitHub Pages to finish, then checks
|
|
74
|
+
what actually shipped. `site verify` runs those checks on their own against
|
|
75
|
+
whatever is live, and exits non-zero if any fail — so it works in a script. The
|
|
76
|
+
five things they check are a contract between a site and Scribe, and every one of
|
|
77
|
+
them fails silently:
|
|
78
|
+
|
|
79
|
+
| Check | What it costs when it's missed |
|
|
80
|
+
|---|---|
|
|
81
|
+
| `analytics` | No visitor data, and it cannot be backfilled |
|
|
82
|
+
| `turnstile` | The endpoint rejects real submissions, or the form is open to abuse |
|
|
83
|
+
| `retry` | A visitor is told their enquiry sent when it didn't. A lost lead |
|
|
84
|
+
| `dispatch` | An editor publishes, the admin says saved, the site never updates |
|
|
85
|
+
| `basepath` | Every link and asset 404s |
|
|
86
|
+
|
|
87
|
+
Forms are optional: a site with none skips `turnstile` and `retry` rather than
|
|
88
|
+
failing them. A site with nothing deployed yet skips everything and exits zero.
|
|
89
|
+
`--skip-verify` exists and prints what it gave up.
|
|
68
90
|
|
|
69
91
|
`site delete` permanently removes the repo and every record of the site. It
|
|
70
92
|
cannot be undone, and prompts for confirmation unless you pass `--yes`.
|
|
@@ -162,7 +184,9 @@ pass `--yes`. There is no equivalent in the admin UI, on purpose.
|
|
|
162
184
|
scribe build trigger <site>
|
|
163
185
|
```
|
|
164
186
|
|
|
165
|
-
Dispatches the site's build workflow. Debounced to once
|
|
187
|
+
Dispatches the site's build workflow and returns immediately. Debounced to once
|
|
188
|
+
every five minutes. Prefer `scribe site deploy`, which waits for the build and
|
|
189
|
+
then checks the result.
|
|
166
190
|
|
|
167
191
|
## Programmatic use
|
|
168
192
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../src/commands/site.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../src/commands/site.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyS3D"}
|
package/dist/commands/site.js
CHANGED
|
@@ -2,6 +2,10 @@ import { spawn } from 'node:child_process';
|
|
|
2
2
|
import { createInterface } from 'node:readline/promises';
|
|
3
3
|
import { ScribeApiError } from '../lib/client.js';
|
|
4
4
|
import { CliExit, printResult, requireClient, runAction } from '../lib/cli-utils.js';
|
|
5
|
+
import { printVerifyReport, verifyFailed } from '../lib/verify-report.js';
|
|
6
|
+
import { deployOutcome, newestRunId } from '../lib/deploy-wait.js';
|
|
7
|
+
/** Slow enough not to hammer the API through a two-minute build, quick enough to feel responsive. */
|
|
8
|
+
const POLL_INTERVAL_MS = 5_000;
|
|
5
9
|
/**
|
|
6
10
|
* Printed to stderr by default: these records are the thing to act on when
|
|
7
11
|
* promotion is refused, so they shouldn't land in a piped stdout alongside
|
|
@@ -170,6 +174,97 @@ export function registerSiteCommands(program) {
|
|
|
170
174
|
});
|
|
171
175
|
});
|
|
172
176
|
}));
|
|
177
|
+
site
|
|
178
|
+
.command('deploy')
|
|
179
|
+
.description("Deploy the site: dispatch its build workflow, wait for it, then verify what shipped")
|
|
180
|
+
.argument('<slug>', 'Site slug')
|
|
181
|
+
.option('--skip-verify', "Deploy without checking the result against Scribe's site invariants")
|
|
182
|
+
.option('--timeout <minutes>', 'How long to wait for the build before giving up', '10')
|
|
183
|
+
.action(runAction(async (slug, opts) => {
|
|
184
|
+
const client = requireClient();
|
|
185
|
+
const timeoutMs = Number(opts.timeout) * 60_000;
|
|
186
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
187
|
+
console.error('--timeout must be a positive number of minutes.');
|
|
188
|
+
process.exitCode = 1;
|
|
189
|
+
throw new CliExit();
|
|
190
|
+
}
|
|
191
|
+
// Read the newest run *before* dispatching, so the run this deploy
|
|
192
|
+
// creates is distinguishable from the one already sitting there green.
|
|
193
|
+
const baseline = newestRunId((await client.buildRuns(slug)).runs);
|
|
194
|
+
const dispatch = await client.triggerBuild(slug);
|
|
195
|
+
if (!dispatch.dispatched) {
|
|
196
|
+
console.log('A build was already dispatched within the last 5 minutes — waiting for that one instead.');
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.log(`Dispatched the build for "${slug}".`);
|
|
200
|
+
}
|
|
201
|
+
const deadline = Date.now() + timeoutMs;
|
|
202
|
+
let outcome = deployOutcome((await client.buildRuns(slug)).runs, baseline);
|
|
203
|
+
let announced = false;
|
|
204
|
+
while (outcome.kind === 'pending' || outcome.kind === 'running') {
|
|
205
|
+
if (outcome.kind === 'running' && !announced) {
|
|
206
|
+
console.log(`Building — ${outcome.run.url}`);
|
|
207
|
+
announced = true;
|
|
208
|
+
}
|
|
209
|
+
if (Date.now() >= deadline) {
|
|
210
|
+
// Deliberately not a verify failure. Checking now would read the
|
|
211
|
+
// previous build and could report a pass for a deploy still in
|
|
212
|
+
// flight, which is the one outcome worse than no check.
|
|
213
|
+
console.error(`\nGave up waiting after ${opts.timeout} minute(s). The build may still be running — check the Actions tab,`);
|
|
214
|
+
console.error(`then run \`scribe site verify ${slug}\` once it finishes.`);
|
|
215
|
+
process.exitCode = 1;
|
|
216
|
+
throw new CliExit();
|
|
217
|
+
}
|
|
218
|
+
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
|
|
219
|
+
outcome = deployOutcome((await client.buildRuns(slug)).runs, baseline);
|
|
220
|
+
}
|
|
221
|
+
if (outcome.kind === 'failed') {
|
|
222
|
+
console.error(`\nThe build failed (${outcome.run.conclusion}) — ${outcome.run.url}`);
|
|
223
|
+
console.error('Nothing was verified, because nothing new was deployed.');
|
|
224
|
+
process.exitCode = 1;
|
|
225
|
+
throw new CliExit();
|
|
226
|
+
}
|
|
227
|
+
console.log(`Deployed — ${outcome.run.url}`);
|
|
228
|
+
if (opts.skipVerify) {
|
|
229
|
+
// Spelled out rather than left as "verification skipped": the point of
|
|
230
|
+
// an escape hatch is knowing what you gave up, and these five fail
|
|
231
|
+
// silently, so nothing else will tell you.
|
|
232
|
+
console.log('\nSkipped verification (--skip-verify). Not checked, and none of these would error on their own:');
|
|
233
|
+
console.log(' the analytics tracker, the spam protection on any form, the submission retry');
|
|
234
|
+
console.log(' queue, the deploy trigger the admin publishes through, and the base path.');
|
|
235
|
+
console.log(`\nRun \`scribe site verify ${slug}\` when convenient.`);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const report = await client.verifySite(slug);
|
|
239
|
+
printVerifyReport(report);
|
|
240
|
+
if (verifyFailed(report)) {
|
|
241
|
+
// Distinct from a build failure above, and worth saying out loud: the
|
|
242
|
+
// deploy worked, the site is live, and something about it is wrong.
|
|
243
|
+
console.error('The deploy succeeded and the site is live. The checks above are what is wrong with it.');
|
|
244
|
+
process.exitCode = 1;
|
|
245
|
+
throw new CliExit();
|
|
246
|
+
}
|
|
247
|
+
}));
|
|
248
|
+
site
|
|
249
|
+
.command('verify')
|
|
250
|
+
.description("Check the deployed site against Scribe's site invariants (RFC 0024). Exits non-zero on failure")
|
|
251
|
+
.argument('<slug>', 'Site slug')
|
|
252
|
+
.option('--json', 'Output the full report as JSON')
|
|
253
|
+
.action(runAction(async (slug, opts) => {
|
|
254
|
+
const client = requireClient();
|
|
255
|
+
const report = await client.verifySite(slug);
|
|
256
|
+
if (opts.json) {
|
|
257
|
+
console.log(JSON.stringify(report, null, 2));
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
printVerifyReport(report);
|
|
261
|
+
}
|
|
262
|
+
// A skip is not a failure, so a Site with nothing deployed exits zero.
|
|
263
|
+
if (verifyFailed(report)) {
|
|
264
|
+
process.exitCode = 1;
|
|
265
|
+
throw new CliExit();
|
|
266
|
+
}
|
|
267
|
+
}));
|
|
173
268
|
site
|
|
174
269
|
.command('delete')
|
|
175
270
|
.description('Permanently delete a site: its GitHub repo and every record for it. Cannot be undone.')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.js","sourceRoot":"","sources":["../../src/commands/site.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"site.js","sourceRoot":"","sources":["../../src/commands/site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAsB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,qGAAqG;AACrG,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B;;;;GAIG;AACH,SAAS,eAAe,CAAC,OAAwB,EAAE,QAAgC,OAAO,CAAC,KAAK;IAC9F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAC7E,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAEjC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,2EAA2E,CAAC,CAAC;QACnF,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,KAAK,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAChF,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC3D,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,wEAAwE,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAEjE,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CACL,SAAS,CAAC,KAAK,EAAE,IAAwB,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;IAEJ,IAAI;SACD,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,wFAAwF,CAAC;SACrG,cAAc,CAAC,eAAe,EAAE,wCAAwC,CAAC;SACzE,MAAM,CAAC,mBAAmB,EAAE,6GAA6G,CAAC;SAC1I,MAAM,CAAC,uBAAuB,EAAE,iFAAiF,CAAC;SAClH,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;SAC9D,MAAM,CAAC,0BAA0B,EAAE,sEAAsE,CAAC;SAC1G,MAAM,CACL,SAAS,CAAC,KAAK,EAAE,IAAsG,EAAE,EAAE;QACzH,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;YACrC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,YAAY;YACnC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,kBAAkB,EAAE,IAAI,CAAC,cAAc;SACxC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CACT,gBAAgB,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,UAAU,sBAAsB,MAAM,CAAC,cAAc,aAAa,MAAM,CAAC,MAAM,EAAE,CACjI,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,gHAAgH,CAAC,CAAC;QAChI,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEJ,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC/B,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;SAChE,MAAM,CAAC,mBAAmB,EAAE,oFAAoF,CAAC;SACjH,MAAM,CACL,SAAS,CAAC,KAAK,EAAE,IAAY,EAAE,IAAgD,EAAE,EAAE;QACjF,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC3E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;YAC3C,gBAAgB,EAAE,IAAI,CAAC,YAAY;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEJ,IAAI;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oGAAoG,CAAC;SACjH,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC/B,cAAc,CAAC,mBAAmB,EAAE,+CAA+C,CAAC;SACpF,MAAM,CAAC,YAAY,EAAE,2EAA2E,CAAC;SACjG,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC;SACxD,MAAM,CACL,SAAS,CAAC,KAAK,EAAE,IAAY,EAAE,IAA4D,EAAE,EAAE;QAC7F,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAE/B,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,cAAc,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACvG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvC,eAAe,CAAE,GAAG,CAAC,IAAqC,CAAC,OAAO,CAAC,CAAC;gBACpE,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;gBAC1F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,MAAM,IAAI,OAAO,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,GAAG,YAAY,cAAc,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACrG,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;gBACzC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,KAAK,MAAM,IAAI,IAAK,GAAG,CAAC,IAA4B,CAAC,KAAK,EAAE,CAAC;oBAC3D,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC7B,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;gBACnF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,MAAM,IAAI,OAAO,EAAE,CAAC;YACtB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,6EAA6E,CAAC,CAAC;gBAC3G,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,MAAM,CAAC,MAAM,oBAAoB,CAAC,CAAC;YACzE,eAAe,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,QAAQ,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACvC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC,CAAC,CACH,CAAC;IAEJ,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,mGAAmG,CAAC;SAChH,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC/B,QAAQ,CAAC,aAAa,EAAE,mDAAmD,CAAC;SAC5E,MAAM,CACL,SAAS,CAAC,KAAK,EAAE,IAAY,EAAE,SAA6B,EAAE,EAAE;QAC9D,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,+BAA+B,CAAC,CAAC;YAC/E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,GAAG,GAAG,sBAAsB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,MAAM,CAAC;QAC5E,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEpE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACvD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,IAAI,IAAI,KAAK,CAAC;oBAAE,OAAO,EAAE,CAAC;;oBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEJ,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qFAAqF,CAAC;SAClG,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC/B,MAAM,CAAC,eAAe,EAAE,qEAAqE,CAAC;SAC9F,MAAM,CAAC,qBAAqB,EAAE,iDAAiD,EAAE,IAAI,CAAC;SACtF,MAAM,CACL,SAAS,CAAC,KAAK,EAAE,IAAY,EAAE,IAA+C,EAAE,EAAE;QAChF,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,CAAC;QAED,mEAAmE;QACnE,uEAAuE;QACvE,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAElE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC;QAC1G,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,OAAO,GAAG,aAAa,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3E,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC7C,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC3B,iEAAiE;gBACjE,+DAA+D;gBAC/D,wDAAwD;gBACxD,OAAO,CAAC,KAAK,CACX,2BAA2B,IAAI,CAAC,OAAO,qEAAqE,CAC7G,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,iCAAiC,IAAI,sBAAsB,CAAC,CAAC;gBAC3E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,MAAM,IAAI,OAAO,EAAE,CAAC;YACtB,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;YACtE,OAAO,GAAG,aAAa,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,uBAAuB,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACrF,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACzE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,uEAAuE;YACvE,mEAAmE;YACnE,2CAA2C;YAC3C,OAAO,CAAC,GAAG,CAAC,kGAAkG,CAAC,CAAC;YAChH,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,qBAAqB,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7C,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,sEAAsE;YACtE,oEAAoE;YACpE,OAAO,CAAC,KAAK,CAAC,wFAAwF,CAAC,CAAC;YACxG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEJ,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gGAAgG,CAAC;SAC7G,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC/B,MAAM,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SAClD,MAAM,CACL,SAAS,CAAC,KAAK,EAAE,IAAY,EAAE,IAAwB,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,uEAAuE;QACvE,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,MAAM,IAAI,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEJ,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uFAAuF,CAAC;SACpG,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC/B,MAAM,CAAC,OAAO,EAAE,0CAA0C,CAAC;SAC3D,MAAM,CACL,SAAS,CAAC,KAAK,EAAE,IAAY,EAAE,IAAuB,EAAE,EAAE;QACxD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAC9B,qEAAqE,IAAI,+BAA+B,CACzG,CAAC;YACF,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
|
package/dist/lib/client.d.ts
CHANGED
|
@@ -102,6 +102,39 @@ export interface ScribeSchema {
|
|
|
102
102
|
* place. Every command/tool goes through this — no direct core or GitHub
|
|
103
103
|
* imports from either package.
|
|
104
104
|
*/
|
|
105
|
+
/** RFC 0024. `skip` means the check could not run, which is neither a pass nor a failure. */
|
|
106
|
+
export interface InvariantCheck {
|
|
107
|
+
name: string;
|
|
108
|
+
state: 'pass' | 'fail' | 'skip';
|
|
109
|
+
message: string;
|
|
110
|
+
detail?: string[];
|
|
111
|
+
}
|
|
112
|
+
export interface VerifyReport {
|
|
113
|
+
slug: string;
|
|
114
|
+
url: string;
|
|
115
|
+
checks: InvariantCheck[];
|
|
116
|
+
failed: string[];
|
|
117
|
+
skipped: string[];
|
|
118
|
+
ran: number;
|
|
119
|
+
lastVerifiedAt: string | null;
|
|
120
|
+
pagesChecked: string[];
|
|
121
|
+
pageErrors: Array<{
|
|
122
|
+
url: string;
|
|
123
|
+
reason: string;
|
|
124
|
+
}>;
|
|
125
|
+
truncated: boolean;
|
|
126
|
+
repoErrors: string[];
|
|
127
|
+
}
|
|
128
|
+
export interface WorkflowRunSummary {
|
|
129
|
+
id: number;
|
|
130
|
+
status: 'running' | 'completed';
|
|
131
|
+
conclusion: string | null;
|
|
132
|
+
createdAt: string;
|
|
133
|
+
updatedAt: string;
|
|
134
|
+
url: string;
|
|
135
|
+
headSha: string;
|
|
136
|
+
event: string;
|
|
137
|
+
}
|
|
105
138
|
export declare class ScribeClient {
|
|
106
139
|
private readonly options;
|
|
107
140
|
constructor(options: ScribeClientOptions);
|
|
@@ -210,5 +243,9 @@ export declare class ScribeClient {
|
|
|
210
243
|
triggerBuild(site: string): Promise<{
|
|
211
244
|
dispatched: boolean;
|
|
212
245
|
}>;
|
|
246
|
+
verifySite(site: string): Promise<VerifyReport>;
|
|
247
|
+
buildRuns(site: string): Promise<{
|
|
248
|
+
runs: WorkflowRunSummary[];
|
|
249
|
+
}>;
|
|
213
250
|
}
|
|
214
251
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/client.js
CHANGED
|
@@ -16,12 +16,6 @@ function encodePath(path) {
|
|
|
16
16
|
.map(encodeURIComponent)
|
|
17
17
|
.join('/');
|
|
18
18
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Thin HTTP client over the admin app's `/api/v1` surface, shared by the
|
|
21
|
-
* CLI and MCP server so the fetch/auth/error-mapping logic exists in one
|
|
22
|
-
* place. Every command/tool goes through this — no direct core or GitHub
|
|
23
|
-
* imports from either package.
|
|
24
|
-
*/
|
|
25
19
|
export class ScribeClient {
|
|
26
20
|
options;
|
|
27
21
|
constructor(options) {
|
|
@@ -164,5 +158,11 @@ export class ScribeClient {
|
|
|
164
158
|
async triggerBuild(site) {
|
|
165
159
|
return this.request('POST', `/api/v1/sites/${encodeURIComponent(site)}/build`);
|
|
166
160
|
}
|
|
161
|
+
async verifySite(site) {
|
|
162
|
+
return this.request('POST', `/api/v1/sites/${encodeURIComponent(site)}/verify`);
|
|
163
|
+
}
|
|
164
|
+
async buildRuns(site) {
|
|
165
|
+
return this.request('GET', `/api/v1/sites/${encodeURIComponent(site)}/build/status`);
|
|
166
|
+
}
|
|
167
167
|
}
|
|
168
168
|
//# sourceMappingURL=client.js.map
|
package/dist/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGrB;IACA;IAHlB,YACE,OAAe,EACC,MAAc,EACd,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAqGD,iHAAiH;AACjH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,kBAAkB,CAAC;SACvB,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { WorkflowRunSummary } from './client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Deciding when a dispatched deploy has finished — the logic `scribe site deploy`
|
|
4
|
+
* waits on, kept pure so its awkward cases are testable without a two-minute
|
|
5
|
+
* build.
|
|
6
|
+
*
|
|
7
|
+
* The awkward cases are the whole problem. A dispatch returns before GitHub has
|
|
8
|
+
* created the run, so "no new run yet" is normal for a few seconds and must not
|
|
9
|
+
* be read as finished. And the previous run is sitting right there, already
|
|
10
|
+
* `completed` and `success` — mistaking it for this one is how a verify ends up
|
|
11
|
+
* checking the old build and reporting a stale pass, which RFC 0024 says is worse
|
|
12
|
+
* than not checking at all.
|
|
13
|
+
*/
|
|
14
|
+
export type DeployOutcome =
|
|
15
|
+
/** No run newer than the dispatch exists yet. Keep waiting. */
|
|
16
|
+
{
|
|
17
|
+
kind: 'pending';
|
|
18
|
+
}
|
|
19
|
+
/** The new run exists and is still going. */
|
|
20
|
+
| {
|
|
21
|
+
kind: 'running';
|
|
22
|
+
run: WorkflowRunSummary;
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'succeeded';
|
|
25
|
+
run: WorkflowRunSummary;
|
|
26
|
+
} | {
|
|
27
|
+
kind: 'failed';
|
|
28
|
+
run: WorkflowRunSummary;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Identifies this deploy's run by id: anything whose id is greater than the
|
|
32
|
+
* newest run seen *before* the dispatch is new.
|
|
33
|
+
*
|
|
34
|
+
* Ids rather than timestamps, because GitHub's `created_at` has one-second
|
|
35
|
+
* resolution and a dispatch that lands in the same second as a push would be
|
|
36
|
+
* ambiguous. Run ids are monotonic per repository.
|
|
37
|
+
*/
|
|
38
|
+
export declare function deployOutcome(runs: WorkflowRunSummary[], baselineRunId: number | null): DeployOutcome;
|
|
39
|
+
/** The newest run id before a dispatch, or null when the workflow has never run. */
|
|
40
|
+
export declare function newestRunId(runs: WorkflowRunSummary[]): number | null;
|
|
41
|
+
//# sourceMappingURL=deploy-wait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-wait.d.ts","sourceRoot":"","sources":["../../src/lib/deploy-wait.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,aAAa;AACvB,+DAA+D;AAC7D;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB,6CAA6C;GAC3C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,kBAAkB,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,kBAAkB,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,CAOrG;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,MAAM,GAAG,IAAI,CAErE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifies this deploy's run by id: anything whose id is greater than the
|
|
3
|
+
* newest run seen *before* the dispatch is new.
|
|
4
|
+
*
|
|
5
|
+
* Ids rather than timestamps, because GitHub's `created_at` has one-second
|
|
6
|
+
* resolution and a dispatch that lands in the same second as a push would be
|
|
7
|
+
* ambiguous. Run ids are monotonic per repository.
|
|
8
|
+
*/
|
|
9
|
+
export function deployOutcome(runs, baselineRunId) {
|
|
10
|
+
const candidates = baselineRunId === null ? runs : runs.filter((run) => run.id > baselineRunId);
|
|
11
|
+
if (candidates.length === 0)
|
|
12
|
+
return { kind: 'pending' };
|
|
13
|
+
const run = candidates.reduce((newest, each) => (each.id > newest.id ? each : newest));
|
|
14
|
+
if (run.status !== 'completed')
|
|
15
|
+
return { kind: 'running', run };
|
|
16
|
+
return run.conclusion === 'success' ? { kind: 'succeeded', run } : { kind: 'failed', run };
|
|
17
|
+
}
|
|
18
|
+
/** The newest run id before a dispatch, or null when the workflow has never run. */
|
|
19
|
+
export function newestRunId(runs) {
|
|
20
|
+
return runs.length === 0 ? null : runs.reduce((max, run) => Math.max(max, run.id), 0);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=deploy-wait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-wait.js","sourceRoot":"","sources":["../../src/lib/deploy-wait.ts"],"names":[],"mappings":"AAuBA;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAA0B,EAAE,aAA4B;IACpF,MAAM,UAAU,GAAG,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,CAAC;IAChG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAExD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvF,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAChE,OAAO,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC7F,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAC,IAA0B;IACpD,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { VerifyReport } from './client.js';
|
|
2
|
+
/** Whether anything actually failed. The caller's exit code hangs off this, and a skip never contributes. */
|
|
3
|
+
export declare function verifyFailed(report: VerifyReport): boolean;
|
|
4
|
+
export declare function printVerifyReport(report: VerifyReport, write?: (line: string) => void): void;
|
|
5
|
+
//# sourceMappingURL=verify-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-report.d.ts","sourceRoot":"","sources":["../../src/lib/verify-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAUhD,6GAA6G;AAC7G,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CAwCzG"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Printing an RFC 0024 verification. Shared by `scribe site verify` and
|
|
3
|
+
* `scribe site deploy`, so a deploy's verdict reads identically to a standalone
|
|
4
|
+
* one and there is no second opinion about what counts as a failure.
|
|
5
|
+
*/
|
|
6
|
+
const MARK = { pass: '✓', fail: '✗', skip: '–' };
|
|
7
|
+
/** Whether anything actually failed. The caller's exit code hangs off this, and a skip never contributes. */
|
|
8
|
+
export function verifyFailed(report) {
|
|
9
|
+
return report.failed.length > 0;
|
|
10
|
+
}
|
|
11
|
+
export function printVerifyReport(report, write = console.log) {
|
|
12
|
+
write(`\nVerifying "${report.slug}" — ${report.url}`);
|
|
13
|
+
if (report.pagesChecked.length === 0) {
|
|
14
|
+
// Not a failure. A Site provisioned minutes ago has nothing deployed to look
|
|
15
|
+
// at, and saying so is more useful than five identical skip lines.
|
|
16
|
+
write('\n Nothing deployed yet — no page could be fetched, so nothing was checked.');
|
|
17
|
+
for (const error of report.pageErrors)
|
|
18
|
+
write(` ${error.url} — ${error.reason}`);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const suffix = report.truncated ? ` (capped — more pages exist than were checked)` : '';
|
|
22
|
+
write(` ${report.pagesChecked.length} page(s) checked${suffix}\n`);
|
|
23
|
+
}
|
|
24
|
+
for (const check of report.checks) {
|
|
25
|
+
write(` ${MARK[check.state] ?? '?'} ${check.name.padEnd(10)} ${check.message}`);
|
|
26
|
+
for (const line of check.detail ?? [])
|
|
27
|
+
write(` ${line}`);
|
|
28
|
+
}
|
|
29
|
+
if (report.pagesChecked.length > 0 && report.pageErrors.length > 0) {
|
|
30
|
+
write('\n Pages that could not be fetched (not counted either way):');
|
|
31
|
+
for (const error of report.pageErrors)
|
|
32
|
+
write(` ${error.url} — ${error.reason}`);
|
|
33
|
+
}
|
|
34
|
+
for (const error of report.repoErrors)
|
|
35
|
+
write(`\n ! ${error}`);
|
|
36
|
+
write('');
|
|
37
|
+
if (verifyFailed(report)) {
|
|
38
|
+
write(` ${report.failed.length} check(s) failed: ${report.failed.join(', ')}`);
|
|
39
|
+
}
|
|
40
|
+
else if (report.pagesChecked.length === 0) {
|
|
41
|
+
// Not "all checks passed". `dispatch` reads repo files and runs for every
|
|
42
|
+
// Site, deployed or not, so a count of what passed would read as a clean
|
|
43
|
+
// bill of health for a Site nothing is serving. This Site is deliberately
|
|
44
|
+
// not recorded as verified either.
|
|
45
|
+
write(' Nothing about the deployed Site was checked, so it is not recorded as verified.');
|
|
46
|
+
write(' Deploy it, then run this again.');
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const skipped = report.skipped.length > 0 ? `, ${report.skipped.length} not applicable` : '';
|
|
50
|
+
write(` All ${report.ran} applicable check(s) passed${skipped}.`);
|
|
51
|
+
}
|
|
52
|
+
write('');
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=verify-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-report.js","sourceRoot":"","sources":["../../src/lib/verify-report.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -144,9 +144,26 @@ recognise, a command that no longer exists).
|
|
|
144
144
|
merge conflicts, nothing purpose-built.
|
|
145
145
|
|
|
146
146
|
7. **Deploy.** Any push to the repo's default branch runs `.github/workflows/deploy.yml`
|
|
147
|
-
automatically (build + GitHub Pages).
|
|
148
|
-
|
|
149
|
-
|
|
147
|
+
automatically (build + GitHub Pages). Two ways to do it on demand:
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
scribe site deploy my-site # dispatch, wait for the build, then verify
|
|
151
|
+
scribe build trigger my-site # dispatch and return immediately
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Prefer `site deploy`.** It waits for the Pages run and then checks the
|
|
155
|
+
deployed pages against Scribe's five site invariants (RFC 0024) — the tracker,
|
|
156
|
+
the spam protection on any form, the submission retry queue, the deploy
|
|
157
|
+
trigger the admin publishes through, and the base path. Every one of those
|
|
158
|
+
fails silently: nothing errors, the build is green, and the page looks right.
|
|
159
|
+
`--skip-verify` exists and prints what it gave up.
|
|
160
|
+
|
|
161
|
+
`build trigger` stays as the fire-and-forget primitive. It is debounced to once
|
|
162
|
+
per 5 minutes per site, so repeat calls in that window are a silent no-op —
|
|
163
|
+
and it tells you nothing about whether the result is correct.
|
|
164
|
+
|
|
165
|
+
`scribe site verify my-site` runs the checks on their own, against whatever is
|
|
166
|
+
currently live. Exits non-zero on a failure, so it works in a script.
|
|
150
167
|
|
|
151
168
|
8. **Domain cutover — only when a customer's own hostname is ready.** Skip this
|
|
152
169
|
entirely for demo sites; the GitHub Pages default already works.
|
|
@@ -4,6 +4,10 @@ Sites deploy to GitHub Pages from their own repo. Two parts of this are a
|
|
|
4
4
|
contract with Scribe rather than a preference: the workflow must accept
|
|
5
5
|
`workflow_dispatch`, and the Astro `base` must follow `public/CNAME`.
|
|
6
6
|
|
|
7
|
+
Both are checked against the deployed output by `scribe site verify <site>`, along
|
|
8
|
+
with the tracker (`schema.md`) and the two form contracts (`forms.md`) — see
|
|
9
|
+
RFC 0024. Run it after a deploy rather than reading this list and hoping.
|
|
10
|
+
|
|
7
11
|
## Why `workflow_dispatch` matters
|
|
8
12
|
|
|
9
13
|
When an editor publishes in the admin, Scribe commits the content file and then
|
|
@@ -77,6 +77,31 @@ POST /api/submissions?site=<slug>&collection=<name>
|
|
|
77
77
|
Never report success on a non-2xx. A form that says "Thanks!" after a 503 loses
|
|
78
78
|
the message.
|
|
79
79
|
|
|
80
|
+
## 2b. Three things about a form that are contract, not style
|
|
81
|
+
|
|
82
|
+
Design the markup however you like. These three are checked by
|
|
83
|
+
`scribe site verify` (RFC 0024), because each one fails **silently** — nothing
|
|
84
|
+
errors, the build is green, and the page looks right to whoever just deployed it.
|
|
85
|
+
|
|
86
|
+
| Contract | How to satisfy it |
|
|
87
|
+
|---|---|
|
|
88
|
+
| The form says which collection it posts to | `data-collection="<name>"` on the `<form>`, or `collection=<name>` in its `data-endpoint`/`action` |
|
|
89
|
+
| Turnstile protects it | Cloudflare's script tag, plus a `cf-turnstile` element whose `data-sitekey` is **this Site's** key |
|
|
90
|
+
| It never reports a false success | the retry queue in §3, declared with `data-scribe-retry` on the `<form>` |
|
|
91
|
+
|
|
92
|
+
The first is how Scribe finds your form in the built HTML at all. It is also
|
|
93
|
+
already load-bearing — your submit handler reads it to build the POST URL — so
|
|
94
|
+
there is no extra attribute to remember.
|
|
95
|
+
|
|
96
|
+
`data-scribe-retry` is the one attribute that exists purely as a claim, because
|
|
97
|
+
"this form queues a failed submission" has no other signature in the output. Put
|
|
98
|
+
it on the `<form>` in the same component that implements the queue, and don't put
|
|
99
|
+
it on a form that doesn't: it is read as an assertion that the behaviour below is
|
|
100
|
+
present.
|
|
101
|
+
|
|
102
|
+
A widget keyed to a **different** Site's `turnstileSiteKey` is as bad as no
|
|
103
|
+
widget — the endpoint verifies the token against this Site's secret and 401s it.
|
|
104
|
+
|
|
80
105
|
## 3. A form component
|
|
81
106
|
|
|
82
107
|
Generic and schema-driven, which is the useful starting point when the fields
|
|
@@ -119,7 +144,7 @@ function inputType(f: { name: string; type: string }) {
|
|
|
119
144
|
return 'text';
|
|
120
145
|
}
|
|
121
146
|
---
|
|
122
|
-
<form id={formId} data-site={site} data-collection={collection} data-endpoint={`${apiBase}/api/submissions`}>
|
|
147
|
+
<form id={formId} data-site={site} data-collection={collection} data-endpoint={`${apiBase}/api/submissions`} data-scribe-retry>
|
|
123
148
|
{fields.map((f) => (
|
|
124
149
|
prefill[f.name] !== undefined ? (
|
|
125
150
|
<input type="hidden" name={f.name} value={prefill[f.name]} />
|
|
@@ -146,11 +171,23 @@ function inputType(f: { name: string; type: string }) {
|
|
|
146
171
|
const statusEl = form.querySelector('.form-status');
|
|
147
172
|
const say = (m) => { if (statusEl) statusEl.textContent = m; };
|
|
148
173
|
|
|
149
|
-
|
|
150
|
-
|
|
174
|
+
const { site, collection, endpoint } = form.dataset;
|
|
175
|
+
const storageKey = `scribe_pending_submission_${site}_${collection}`;
|
|
176
|
+
|
|
177
|
+
// Last resorts only. The endpoint puts visitor-facing copy in the response
|
|
178
|
+
// body (RFC 0004) so the server can change what a Visitor reads without
|
|
179
|
+
// rebuilding every Site. These two cover the cases where there is no body:
|
|
180
|
+
// the request never arrived, or it came back with nothing usable.
|
|
181
|
+
const UNREACHABLE = "We couldn't send that yet — it's saved and will retry.";
|
|
182
|
+
const GENERIC = "We couldn't send that. Please try again, or call or email us instead.";
|
|
151
183
|
|
|
152
|
-
|
|
153
|
-
|
|
184
|
+
const readPending = () => { try { return JSON.parse(localStorage.getItem(storageKey)) ?? null; } catch { return null; } };
|
|
185
|
+
const savePending = (p) => { try { localStorage.setItem(storageKey, JSON.stringify(p)); } catch {} };
|
|
186
|
+
const clearPending = () => { try { localStorage.removeItem(storageKey); } catch {} };
|
|
187
|
+
|
|
188
|
+
// Built per control rather than from FormData, so a checkbox sends a real
|
|
189
|
+
// boolean and an unchecked box sends `false` instead of being omitted.
|
|
190
|
+
function collect() {
|
|
154
191
|
const payload = {};
|
|
155
192
|
for (const el of form.elements) {
|
|
156
193
|
if (!el.name) continue;
|
|
@@ -158,36 +195,86 @@ function inputType(f: { name: string; type: string }) {
|
|
|
158
195
|
else if (el.type === 'number') payload[el.name] = el.value === '' ? null : Number(el.value);
|
|
159
196
|
else payload[el.name] = el.value;
|
|
160
197
|
}
|
|
198
|
+
return payload;
|
|
199
|
+
}
|
|
161
200
|
|
|
162
|
-
|
|
163
|
-
|
|
201
|
+
async function send(payload) {
|
|
202
|
+
const url = `${endpoint}?site=${encodeURIComponent(site)}&collection=${encodeURIComponent(collection)}`;
|
|
203
|
+
const res = await fetch(url, {
|
|
204
|
+
method: 'POST',
|
|
205
|
+
headers: { 'Content-Type': 'application/json' },
|
|
206
|
+
body: JSON.stringify(payload),
|
|
207
|
+
});
|
|
208
|
+
if (res.ok) return;
|
|
209
|
+
// A non-2xx means the server answered and said why, which is a different
|
|
210
|
+
// thing from never reaching it. `answered` picks the message; `retryable`
|
|
211
|
+
// decides whether a later attempt could plausibly land.
|
|
212
|
+
const body = await res.json().catch(() => ({}));
|
|
213
|
+
const error = new Error((body.error ?? '').trim() || GENERIC);
|
|
214
|
+
error.answered = true;
|
|
215
|
+
error.retryable = res.status >= 500;
|
|
216
|
+
throw error;
|
|
217
|
+
}
|
|
164
218
|
|
|
219
|
+
form.addEventListener('submit', async (event) => {
|
|
220
|
+
event.preventDefault();
|
|
221
|
+
const payload = collect();
|
|
165
222
|
say('Sending…');
|
|
166
223
|
try {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
headers: { 'Content-Type': 'application/json' },
|
|
170
|
-
body: JSON.stringify(payload),
|
|
171
|
-
});
|
|
172
|
-
if (!res.ok) {
|
|
173
|
-
// The server's copy is written for the visitor on 400/503; prefer it.
|
|
174
|
-
const data = await res.json().catch(() => ({}));
|
|
175
|
-
say(data.error || "Sorry — we couldn't send that. Please try again.");
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
224
|
+
await send(payload);
|
|
225
|
+
clearPending();
|
|
178
226
|
form.reset();
|
|
179
227
|
say('Thanks — we got it.');
|
|
180
|
-
} catch {
|
|
181
|
-
|
|
228
|
+
} catch (err) {
|
|
229
|
+
// Never claim a success the server didn't give, and never paper over
|
|
230
|
+
// its message with ours.
|
|
231
|
+
if (err.answered) {
|
|
232
|
+
if (err.retryable) savePending(payload);
|
|
233
|
+
say(err.message);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
savePending(payload);
|
|
237
|
+
say(UNREACHABLE);
|
|
182
238
|
}
|
|
183
239
|
});
|
|
240
|
+
|
|
241
|
+
// Replay on the next page load, which is what makes the queue worth having.
|
|
242
|
+
(async function retryPending() {
|
|
243
|
+
const pending = readPending();
|
|
244
|
+
if (!pending) return;
|
|
245
|
+
try {
|
|
246
|
+
await send(pending);
|
|
247
|
+
clearPending();
|
|
248
|
+
say('Thanks — we got it.');
|
|
249
|
+
} catch (err) {
|
|
250
|
+
// Replaying a rejection (a validation error, a rate limit) on every
|
|
251
|
+
// page load would loop forever, so drop it and show what the server
|
|
252
|
+
// said. Anything else stays queued for next time.
|
|
253
|
+
if (err.answered && !err.retryable) {
|
|
254
|
+
clearPending();
|
|
255
|
+
say(err.message);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
})();
|
|
184
259
|
})();
|
|
185
260
|
</script>
|
|
186
261
|
```
|
|
187
262
|
|
|
263
|
+
**The retry queue is the part not to skip.** Without it, a submission that fails
|
|
264
|
+
because the Visitor's connection dropped or the database was briefly unreachable
|
|
265
|
+
is gone — and the only person who could tell you is the Visitor, who thinks they
|
|
266
|
+
already got in touch. That is the single most expensive silent failure a Scribe
|
|
267
|
+
Site has, which is why `data-scribe-retry` is checked rather than suggested.
|
|
268
|
+
|
|
269
|
+
One subtlety worth knowing: a replay reuses the **stored payload**, which still
|
|
270
|
+
carries the `cf-turnstile-response` from the original attempt. Turnstile tokens
|
|
271
|
+
are short-lived, so a replay much later is rejected as a 401 — `answered` and not
|
|
272
|
+
`retryable`, so it is dropped with the server's message rather than looping. The
|
|
273
|
+
queue's real job is the retry that happens seconds or minutes later, not days.
|
|
274
|
+
|
|
188
275
|
Note `cf-turnstile-response`: the Turnstile widget injects a hidden input with
|
|
189
|
-
that name into the form, so
|
|
190
|
-
|
|
276
|
+
that name into the form, so `collect()` picks it up automatically. If you build
|
|
277
|
+
the payload by hand, include it explicitly.
|
|
191
278
|
|
|
192
279
|
## 4. Put it on a page
|
|
193
280
|
|
|
@@ -45,6 +45,8 @@ export interface ScribeSchema {
|
|
|
45
45
|
site: string;
|
|
46
46
|
siteName?: string;
|
|
47
47
|
turnstileSiteKey?: string;
|
|
48
|
+
umamiWebsiteId?: string;
|
|
49
|
+
umamiScriptUrl?: string;
|
|
48
50
|
collections: ScribeCollection[];
|
|
49
51
|
}
|
|
50
52
|
|
|
@@ -76,6 +78,8 @@ runs at build time, and CI installs dev deps before `npm run build`).
|
|
|
76
78
|
| `site` | the Site slug — what you pass as `?site=` when submitting a form |
|
|
77
79
|
| `siteName` | display name |
|
|
78
80
|
| `turnstileSiteKey` | public Turnstile key for forms |
|
|
81
|
+
| `umamiWebsiteId` | analytics id for this Site — **render it, see below** |
|
|
82
|
+
| `umamiScriptUrl` | where the analytics tracker is served from |
|
|
79
83
|
| `collections[].path` | where content files live, relative to the repo root |
|
|
80
84
|
| `collections[].format` | `yaml-frontmatter` (markdown with a body) or `yaml` (data only) |
|
|
81
85
|
| `collections[].form` | `true` means submissions, not files — **no content to render** |
|
|
@@ -87,6 +91,44 @@ A `form: true` collection has **no files in the repo** — its submissions are r
|
|
|
87
91
|
in Scribe's database, readable in the admin or via
|
|
88
92
|
`scribe submission list`/`export`. Don't try to render it as content.
|
|
89
93
|
|
|
94
|
+
## Analytics — put the tracker in your layout
|
|
95
|
+
|
|
96
|
+
Scribe writes `umamiWebsiteId` and `umamiScriptUrl` into `.scribe.yml` when it
|
|
97
|
+
provisions a Site (ADR 0001). **Nothing renders them for you** — a Site whose
|
|
98
|
+
layout omits this snippet collects no visitor data at all, and the Client's
|
|
99
|
+
monthly Report has an empty website section.
|
|
100
|
+
|
|
101
|
+
In the `<head>` of your base layout:
|
|
102
|
+
|
|
103
|
+
```astro
|
|
104
|
+
---
|
|
105
|
+
import { loadScribeSchema } from '../lib/scribe';
|
|
106
|
+
const { umamiWebsiteId, umamiScriptUrl } = loadScribeSchema();
|
|
107
|
+
---
|
|
108
|
+
{umamiWebsiteId && umamiScriptUrl && (
|
|
109
|
+
<script defer src={umamiScriptUrl} data-website-id={umamiWebsiteId}></script>
|
|
110
|
+
)}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Both guards matter: a Site provisioned before analytics existed, or one where
|
|
114
|
+
registration failed, has neither key, and a `<script>` with no id is a request
|
|
115
|
+
that reports nothing.
|
|
116
|
+
|
|
117
|
+
**This is the one thing here you cannot fix later.** Analytics data is not
|
|
118
|
+
retroactive — Umami only knows about visits that happened while the script was
|
|
119
|
+
on the page. A month shipped without it is a month that stays empty forever, so
|
|
120
|
+
add it when you build the layout, not when someone asks for a Report.
|
|
121
|
+
|
|
122
|
+
`scribe site verify <site>` checks the **deployed pages** for it, every page it
|
|
123
|
+
can reach rather than just the homepage — which is the point. A Site can have
|
|
124
|
+
the tracker in one layout and serve some pages through another, and the repo
|
|
125
|
+
looks fine either way. Rod's Auto Body renders through `Site.astro` while still
|
|
126
|
+
carrying an unused `Base.astro`; patching the obvious file there would have
|
|
127
|
+
produced a clean commit, a green deploy, and no tracking at all.
|
|
128
|
+
|
|
129
|
+
Cookieless, so it needs no consent banner, and `defer` keeps it off the
|
|
130
|
+
critical path.
|
|
131
|
+
|
|
90
132
|
## From the CLI instead
|
|
91
133
|
|
|
92
134
|
Useful when you want the schema without a checkout, or to inspect it while
|