@devdogsuga/backstage 0.1.8 → 0.1.9
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 +41 -23
- package/dist/{catalog-BWtUtxMF.js → catalog-COleRgQD.js} +19 -9
- package/dist/{cli-J_avqnlu.js → cli-CMThHZgV.js} +4 -4
- package/dist/{cli-D6swhEN-.js → cli-DjIwbjnx.js} +1 -1
- package/dist/commands-CaSixDwT.js +699 -0
- package/dist/{commands-zApyD2Rk.js → commands-CuYIkHeU.js} +2 -2
- package/dist/{commands-D-sNogNX.js → commands-DL5fpABN.js} +3 -3
- package/dist/{commands-Dwr4_CSu.js → commands-KY-9X1Rh.js} +2 -2
- package/dist/{commands-CQ-vbNe9.js → commands-jJcS7D2a.js} +4 -4
- package/dist/launch.js +2 -2
- package/dist/{meetings-CtBMT_25.js → meetings-CLZ6xQQB.js} +1 -1
- package/dist/{queries-DeEwfe2c.js → queries-CaAe3cve.js} +100 -8
- package/dist/{read-BLyKoe4l.js → read-B8DSwYfB.js} +1 -1
- package/package.json +7 -7
- package/dist/commands-D4FcDQuh.js +0 -225
package/README.md
CHANGED
|
@@ -37,29 +37,30 @@ pnpm backstage creds renew # extend every Send 30 days
|
|
|
37
37
|
pnpm backstage import involvement --file OrganizationRoster.csv # verify members; previews, then asks
|
|
38
38
|
pnpm backstage import attendance --meeting 2026-09-09 --file sign-in.csv
|
|
39
39
|
pnpm backstage export stars --from 2026-08-17 # audited under your gh login
|
|
40
|
+
pnpm backstage export attendance --meeting 2026-09-09 --format bevy,involvement
|
|
40
41
|
```
|
|
41
42
|
|
|
42
43
|
## Commands
|
|
43
44
|
|
|
44
|
-
| Command
|
|
45
|
-
|
|
|
46
|
-
| `deploy <app> --tier <t>`
|
|
47
|
-
| `deploy write-env`
|
|
48
|
-
| `deploy preflight`
|
|
49
|
-
| `deploy plan`, `deploy migrate`
|
|
50
|
-
| `deploy smoke --tier <t> [--app]`
|
|
51
|
-
| `deploy reconcile --tier <t>`
|
|
52
|
-
| `deploy prune-monitors --tier <t> [--app]`
|
|
53
|
-
| `env pull\|push\|audit --target <t>`
|
|
54
|
-
| `planner status\|create\|reset-password\|drop`
|
|
55
|
-
| `graphics [graphic…]`
|
|
56
|
-
| `qr <text>`
|
|
57
|
-
| `github rulesets\|settings`
|
|
58
|
-
| `newsletter render\|draft\|send <issue…>`
|
|
59
|
-
| `creds send\|add\|renew\|list\|report`
|
|
60
|
-
| `import involvement --file <csv>`
|
|
61
|
-
| `import attendance --meeting <day> --file <csv>`
|
|
62
|
-
| `export stars\|attendance\|reflections`
|
|
45
|
+
| Command | What it does |
|
|
46
|
+
| -------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
47
|
+
| `deploy <app> --tier <t>` | Checks `CLOUDFLARE_API_TOKEN`, writes the Worker's secrets file, deploys, removes it. |
|
|
48
|
+
| `deploy write-env` | Composes `.env.<DEPLOY_ENV>` from the GitHub environment. |
|
|
49
|
+
| `deploy preflight` | Classifies the project: paused (skip) or broken (fail). |
|
|
50
|
+
| `deploy plan`, `deploy migrate` | Dry-run the migrations into the job summary; apply them to `DB_URL`. |
|
|
51
|
+
| `deploy smoke --tier <t> [--app]` | Public routes answer 200, the auth redirect works, this deploy's Sentry release shows. |
|
|
52
|
+
| `deploy reconcile --tier <t>` | The platform's config reconcile, after the deploy (`CRON_SECRET`). |
|
|
53
|
+
| `deploy prune-monitors --tier <t> [--app]` | Deletes the app's Sentry Crons monitors it no longer declares (production only). |
|
|
54
|
+
| `env pull\|push\|audit --target <t>` | One env file per target, synced to Bitwarden and GitHub. `audit` lists orphans. |
|
|
55
|
+
| `planner status\|create\|reset-password\|drop` | The `migration_planner` role the preflight tier holds. |
|
|
56
|
+
| `graphics [graphic…]` | Club images from `@devdogsuga/brand`: `brand/*`, `app/*`, `event/*`. |
|
|
57
|
+
| `qr <text>` | QR codes with every option of `/console/qr`. |
|
|
58
|
+
| `github rulesets\|settings` | Diff (and with `--apply` write) GitHub config, through `gh`. |
|
|
59
|
+
| `newsletter render\|draft\|send <issue…>` | Changelog issues as files, mailbox drafts, or a send. |
|
|
60
|
+
| `creds send\|add\|renew\|list\|report` | Club logins from Bitwarden as email-verified Sends, and the Linear report. |
|
|
61
|
+
| `import involvement --file <csv>` | Verifies the members on the Involvement Network roster, unverifies everyone else. |
|
|
62
|
+
| `import attendance --meeting <day> --file <csv>` | Records a meeting's attendance from a sign-in sheet (method `import`). |
|
|
63
|
+
| `export stars\|attendance\|reflections\|responses` | Member data as CSV, each export audited under the officer's gh login. |
|
|
63
64
|
|
|
64
65
|
`smoke` and `reconcile` replace DevDogsUGA's `packages/deploy-checks`. The
|
|
65
66
|
per-app data (hosts, public paths, the protected path and its redirect) stays in
|
|
@@ -201,15 +202,32 @@ meetings are refused. Rerunning a sheet records nothing new; `--replace`
|
|
|
201
202
|
makes the sheet the meeting's whole imported set, removing earlier imported
|
|
202
203
|
rows it no longer lists. Every run previews, then asks (`--dry-run`, `--yes`).
|
|
203
204
|
|
|
204
|
-
### `export stars|attendance|reflections`
|
|
205
|
+
### `export stars|attendance|reflections|responses`
|
|
205
206
|
|
|
206
207
|
The platform's three CSVs, columns unchanged: `stars` (one row per earned
|
|
207
208
|
star), `attendance` (one row per check-in; `--meeting` for one night) and
|
|
208
|
-
`reflections` (each member's current text).
|
|
209
|
+
`reflections` (each member's current text). `responses` is the check-in
|
|
210
|
+
survey: one row per answer, worded with each question's current labels
|
|
211
|
+
beside the stored value. With `--meeting` it is that meeting's answers plus
|
|
212
|
+
its attendees' member answers as they stood when it ended (from the answer
|
|
213
|
+
history); `--format wide` writes one meeting as one row per person and one
|
|
214
|
+
column per question. Each export writes a
|
|
209
215
|
`platform.exportAudit` row before reading anything, attributed to the
|
|
210
216
|
platform account linked to the GitHub login `gh` is signed in as, and refuses
|
|
211
|
-
to run when there is none.
|
|
212
|
-
|
|
217
|
+
to run when there is none.
|
|
218
|
+
|
|
219
|
+
`attendance` can also be written as a Bevy attendee import (GDG's
|
|
220
|
+
gdg.community.dev; one row per person, checked in, with a `survey:` column
|
|
221
|
+
for each question mapped to one in `questions.json` that anyone answered) and
|
|
222
|
+
an Involvement Network
|
|
223
|
+
list (one MyID email per line), both for one `--meeting`. `--format
|
|
224
|
+
platform,bevy,involvement` picks any of them, written from one read with an
|
|
225
|
+
audit row each; at a terminal it is asked. At a terminal each file's
|
|
226
|
+
destination is asked for too, with path completion (Tab completes the
|
|
227
|
+
highlighted suggestion; a folder means the suggested name inside it).
|
|
228
|
+
Otherwise files go to `./<kind>…[-<format>].<ext>`, or `--out` (a file, a
|
|
229
|
+
folder for several, or `-` for stdout). Files are owner-readable only and
|
|
230
|
+
never replace an existing file without `--yes` or a yes at the prompt.
|
|
213
231
|
|
|
214
232
|
No secret value reaches stdout, stderr, the failure log, Sentry, an error
|
|
215
233
|
message or argv: values go to `bw` as base64 JSON on stdin, every error is
|
|
@@ -2,7 +2,7 @@ import { A as YES, D as DRY_RUN, O as JSON_FLAG, j as createCatalog, k as SCOPES
|
|
|
2
2
|
import { n as isDryRun } from "./dry-run-CFCZUpjb.js";
|
|
3
3
|
import { o as unwrap } from "./ui-Bb69ZfVv.js";
|
|
4
4
|
import { n as positionals } from "./args-Cjr_Iqts.js";
|
|
5
|
-
import { t as EXPORTS } from "./queries-
|
|
5
|
+
import { t as EXPORTS } from "./queries-CaAe3cve.js";
|
|
6
6
|
import { r as qrCatalogOptions } from "./options-DCaqm8BI.js";
|
|
7
7
|
import { existsSync, readFileSync } from "node:fs";
|
|
8
8
|
import { join } from "node:path";
|
|
@@ -1242,8 +1242,8 @@ const TO = {
|
|
|
1242
1242
|
};
|
|
1243
1243
|
const OUT = {
|
|
1244
1244
|
flag: "--out",
|
|
1245
|
-
value: "<path|->",
|
|
1246
|
-
summary: "Where to write
|
|
1245
|
+
value: "<path|dir|->",
|
|
1246
|
+
summary: "Where to write (a folder for several files; - for stdout). Asked at a terminal."
|
|
1247
1247
|
};
|
|
1248
1248
|
function exportOf(kind, extra = []) {
|
|
1249
1249
|
return {
|
|
@@ -1261,18 +1261,28 @@ function exportOf(kind, extra = []) {
|
|
|
1261
1261
|
]
|
|
1262
1262
|
};
|
|
1263
1263
|
}
|
|
1264
|
+
const MEETING = {
|
|
1265
|
+
flag: "--meeting",
|
|
1266
|
+
value: "<meeting>",
|
|
1267
|
+
summary: "One meeting: its day (2026-09-09), slug, config id or id."
|
|
1268
|
+
};
|
|
1264
1269
|
const exportCommand = {
|
|
1265
1270
|
name: "export",
|
|
1266
|
-
summary: "Member data as CSV: stars, attendance, reflections. Audited.",
|
|
1271
|
+
summary: "Member data as CSV: stars, attendance, reflections, survey responses. Audited.",
|
|
1267
1272
|
hint: "production database; your gh login is recorded",
|
|
1268
1273
|
subcommands: [
|
|
1269
1274
|
exportOf("stars"),
|
|
1270
|
-
exportOf("attendance", [{
|
|
1271
|
-
flag: "--
|
|
1272
|
-
value: "<
|
|
1273
|
-
summary: "
|
|
1275
|
+
exportOf("attendance", [MEETING, {
|
|
1276
|
+
flag: "--format",
|
|
1277
|
+
value: "<formats>",
|
|
1278
|
+
summary: "platform, bevy (GDG attendee import), involvement (MyID emails); comma-separated. Asked at a terminal."
|
|
1274
1279
|
}]),
|
|
1275
|
-
exportOf("reflections")
|
|
1280
|
+
exportOf("reflections"),
|
|
1281
|
+
exportOf("responses", [MEETING, {
|
|
1282
|
+
flag: "--format",
|
|
1283
|
+
value: "<formats>",
|
|
1284
|
+
summary: "platform (one row per answer), wide (one row per person; needs --meeting). Asked at a terminal."
|
|
1285
|
+
}])
|
|
1276
1286
|
]
|
|
1277
1287
|
};
|
|
1278
1288
|
//#endregion
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { C as discoverRepoRoot, T as cliName, b as ownPackageDir, c as reportDevtoolsError, f as isNoEnv, l as reportDevtoolsFailure, n as captureDevtoolsError, o as initDevtoolsTelemetry, p as isNonInteractive, w as findRepoRoot, x as ownVersion } from "./telemetry-Be_lbB5c.js";
|
|
2
|
-
import { a as recordEnteredTier, f as helpPath, i as beginInvocation, l as dbPush, m as renderHelp, n as bareGroupStartPath, o as recordResolved, p as renderCommandList, r as runMenu, s as reproducibleCommand, t as catalog, u as dbPushDryRun } from "./catalog-
|
|
2
|
+
import { a as recordEnteredTier, f as helpPath, i as beginInvocation, l as dbPush, m as renderHelp, n as bareGroupStartPath, o as recordResolved, p as renderCommandList, r as runMenu, s as reproducibleCommand, t as catalog, u as dbPushDryRun } from "./catalog-COleRgQD.js";
|
|
3
3
|
import { a as repoPeerUrl, n as loadEnv, r as loadEnvLoad, t as getEnvSync } from "./peers-u1zxe-Ub.js";
|
|
4
4
|
import { t as nonEmpty } from "./connection-D3XsOE3S.js";
|
|
5
5
|
import { a as wouldRunLine, n as isDryRun, t as dryRunKind } from "./dry-run-CFCZUpjb.js";
|
|
@@ -5380,12 +5380,12 @@ const HANDLERS = {
|
|
|
5380
5380
|
},
|
|
5381
5381
|
completions: handleCompletions,
|
|
5382
5382
|
github: handleGithub,
|
|
5383
|
-
graphics: async (rest) => (await import("./commands-
|
|
5383
|
+
graphics: async (rest) => (await import("./commands-jJcS7D2a.js")).handleGraphics(rest),
|
|
5384
5384
|
qr: async (rest) => (await import("./commands-DQYH_m6i.js")).handleQr(rest),
|
|
5385
5385
|
newsletter: async (rest) => (await import("./commands-35rBJ1R0.js")).handleNewsletter(rest),
|
|
5386
5386
|
creds: async (rest) => (await import("./commands-BF5eptEi.js")).handleCreds(rest),
|
|
5387
|
-
import: async (rest) => (await import("./commands-
|
|
5388
|
-
export: async (rest) => (await import("./commands-
|
|
5387
|
+
import: async (rest) => (await import("./commands-CuYIkHeU.js")).handleImport(rest),
|
|
5388
|
+
export: async (rest) => (await import("./commands-CaSixDwT.js")).handleExport(rest)
|
|
5389
5389
|
};
|
|
5390
5390
|
/**
|
|
5391
5391
|
* Names that were commands of the contributor CLI, refused with where they
|
|
@@ -133,4 +133,4 @@ function reportFailure(command, err, worded = []) {
|
|
|
133
133
|
explainError(`${command} failed.`, err);
|
|
134
134
|
}
|
|
135
135
|
//#endregion
|
|
136
|
-
export {
|
|
136
|
+
export { readInputFile as a, ProductionError as c, requireProductionKey as d, withConnection as f, plural as i, connect as l, confirmWrite as n, reportFailure as o, expandHome as r, say as s, canPrompt as t, dbError as u };
|