@theholocron/cli 2.0.0-alpha.0 → 2.0.0-alpha.1
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 +15 -11
- package/dist/capabilities/index.d.mts +1 -1
- package/dist/cli.mjs +26 -13
- package/dist/{index-DDxKXqtR.d.mts → index-CSxf0Yc7.d.mts} +32 -32
- package/dist/index.d.mts +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,22 +3,26 @@
|
|
|
3
3
|
The Holocron CLI — a pluggable, capability-based orchestrator for
|
|
4
4
|
spinning up and operating software projects.
|
|
5
5
|
|
|
6
|
-
##
|
|
6
|
+
## Install
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
```bash
|
|
9
|
+
npm i -g @theholocron/cli@alpha
|
|
10
|
+
holocron --help
|
|
11
|
+
```
|
|
11
12
|
|
|
12
13
|
## What's in here
|
|
13
14
|
|
|
14
15
|
- `src/capabilities/` — the 14 capability interfaces that providers
|
|
15
|
-
|
|
16
|
+
implement
|
|
16
17
|
- `src/config.ts` — `holocron.config.json` parser + plugin resolution
|
|
17
|
-
- `src/cli.ts` — yargs entry, dispatches subcommands
|
|
18
|
+
- `src/cli.ts` — yargs entry, dispatches subcommands
|
|
19
|
+
- `src/commands/` — `setup`, `doctor`, `deploy`, `secret set`,
|
|
20
|
+
`secrets sync`, `npm publish-initial`
|
|
18
21
|
|
|
19
|
-
##
|
|
22
|
+
## Status
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
**`v2.0.0-alpha.0`** — published on npm under the `alpha` dist-tag.
|
|
25
|
+
[Release notes](https://github.com/theholocron/holocron/releases/tag/v2.0.0-alpha.0).
|
|
26
|
+
Design in
|
|
27
|
+
[`.notes/tech-architecture.spec.md`](../../.notes/tech-architecture.spec.md).
|
|
28
|
+
APIs may still shift before stable v2.0.0.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as Tooling, A as Environments, B as ProviderApiError, C as DeploymentTarget, D as DnsRecordType, E as DnsRecord, F as LifecycleSlot, G as ResolvedCapability, H as REQUIRED_CAPABILITIES, I as NormalizedAuthUser, J as Secrets, K as Ruleset, L as Notifications, M as IssueSearchFilter, N as Issues, O as Environment, P as LifecycleResult, Q as StorageBranch, R as Observability, S as DeploymentRecord, T as Dns, U as RepoRef, V as ProviderIdentity, W as RepoSettings, X as StatusCategory, Y as Source, Z as Storage, _ as ConnectionStringOptions, a as AuthEventType, at as WebhookVerificationError, b as DeploymentProject, c as CARDINALITY, d as Cardinality, et as ToolingDoctorReport, f as CardinalityFor, g as CiRunStatus, h as CiRunFilter, i as AuthEvent, it as WebhookDashboardInfo, j as Issue, k as EnvironmentReviewer, l as CapabilityImpls, m as CiRun, n as Auth, nt as TrackerUser, o as AuthIdentity, ot as isMulti, p as Ci, q as SecretScope, r as AuthDescription, rt as Vault, s as AuthUser, t as Analytics, tt as TrackerDoctorReport, u as CapabilityKey, v as CreateAuthUserInput, w as DeploymentTrigger, x as DeploymentProjectSettings, y as Deployment, z as ParseWebhookInput } from "../index-
|
|
1
|
+
import { $ as Tooling, A as Environments, B as ProviderApiError, C as DeploymentTarget, D as DnsRecordType, E as DnsRecord, F as LifecycleSlot, G as ResolvedCapability, H as REQUIRED_CAPABILITIES, I as NormalizedAuthUser, J as Secrets, K as Ruleset, L as Notifications, M as IssueSearchFilter, N as Issues, O as Environment, P as LifecycleResult, Q as StorageBranch, R as Observability, S as DeploymentRecord, T as Dns, U as RepoRef, V as ProviderIdentity, W as RepoSettings, X as StatusCategory, Y as Source, Z as Storage, _ as ConnectionStringOptions, a as AuthEventType, at as WebhookVerificationError, b as DeploymentProject, c as CARDINALITY, d as Cardinality, et as ToolingDoctorReport, f as CardinalityFor, g as CiRunStatus, h as CiRunFilter, i as AuthEvent, it as WebhookDashboardInfo, j as Issue, k as EnvironmentReviewer, l as CapabilityImpls, m as CiRun, n as Auth, nt as TrackerUser, o as AuthIdentity, ot as isMulti, p as Ci, q as SecretScope, r as AuthDescription, rt as Vault, s as AuthUser, t as Analytics, tt as TrackerDoctorReport, u as CapabilityKey, v as CreateAuthUserInput, w as DeploymentTrigger, x as DeploymentProjectSettings, y as Deployment, z as ParseWebhookInput } from "../index-CSxf0Yc7.mjs";
|
|
2
2
|
export { Analytics, Auth, AuthDescription, AuthEvent, AuthEventType, AuthIdentity, AuthUser, CARDINALITY, CapabilityImpls, CapabilityKey, Cardinality, CardinalityFor, Ci, CiRun, CiRunFilter, CiRunStatus, ConnectionStringOptions, CreateAuthUserInput, Deployment, DeploymentProject, DeploymentProjectSettings, DeploymentRecord, DeploymentTarget, DeploymentTrigger, Dns, DnsRecord, DnsRecordType, Environment, EnvironmentReviewer, Environments, Issue, IssueSearchFilter, Issues, LifecycleResult, LifecycleSlot, NormalizedAuthUser, Notifications, Observability, ParseWebhookInput, ProviderApiError, ProviderIdentity, REQUIRED_CAPABILITIES, RepoRef, RepoSettings, ResolvedCapability, Ruleset, SecretScope, Secrets, Source, StatusCategory, Storage, StorageBranch, Tooling, ToolingDoctorReport, TrackerDoctorReport, TrackerUser, Vault, WebhookDashboardInfo, WebhookVerificationError, isMulti };
|
package/dist/cli.mjs
CHANGED
|
@@ -233,11 +233,25 @@ async function runNpmPublishInitial(input = {}) {
|
|
|
233
233
|
const cwd = input.cwd ?? process.cwd();
|
|
234
234
|
const tag = input.tag ?? "alpha";
|
|
235
235
|
const dryRun = input.dryRun ?? false;
|
|
236
|
+
const otp = input.otp;
|
|
236
237
|
const env = input.env ?? process.env;
|
|
237
238
|
const exec = input.exec ?? defaultExec;
|
|
239
|
+
const publishArgs = [
|
|
240
|
+
"-r",
|
|
241
|
+
"--filter=./packages/*",
|
|
242
|
+
"--filter=!@theholocron/cli-utils",
|
|
243
|
+
"publish",
|
|
244
|
+
"--access",
|
|
245
|
+
"public",
|
|
246
|
+
"--no-git-checks",
|
|
247
|
+
"--tag",
|
|
248
|
+
tag,
|
|
249
|
+
...otp ? ["--otp", otp] : []
|
|
250
|
+
];
|
|
238
251
|
print(`Holocron npm publish-initial${dryRun ? " (dry-run)" : ""}`);
|
|
239
252
|
print(` cwd: ${cwd}`);
|
|
240
253
|
print(` tag: ${tag}`);
|
|
254
|
+
if (otp) print(` otp: <${otp.length} chars>`);
|
|
241
255
|
print("");
|
|
242
256
|
print(" → verifying npm auth (`npm whoami`)…");
|
|
243
257
|
const whoami = await exec("npm", ["whoami"], { cwd });
|
|
@@ -254,7 +268,7 @@ async function runNpmPublishInitial(input = {}) {
|
|
|
254
268
|
if (dryRun) {
|
|
255
269
|
print("");
|
|
256
270
|
print(" … (dry-run) skipping actual publish");
|
|
257
|
-
print(` would run: pnpm
|
|
271
|
+
print(` would run: pnpm ${publishArgs.join(" ")}`);
|
|
258
272
|
printNextSteps(print, env);
|
|
259
273
|
return {
|
|
260
274
|
status: "dry-run",
|
|
@@ -264,20 +278,15 @@ async function runNpmPublishInitial(input = {}) {
|
|
|
264
278
|
}
|
|
265
279
|
print("");
|
|
266
280
|
print(" → publishing all public @theholocron/* packages…");
|
|
267
|
-
const publish = await exec("pnpm",
|
|
268
|
-
"-r",
|
|
269
|
-
"--filter=./packages/*",
|
|
270
|
-
"--filter=!@theholocron/cli-utils",
|
|
271
|
-
"publish",
|
|
272
|
-
"--access",
|
|
273
|
-
"public",
|
|
274
|
-
"--no-git-checks",
|
|
275
|
-
"--tag",
|
|
276
|
-
tag
|
|
277
|
-
], { cwd });
|
|
281
|
+
const publish = await exec("pnpm", publishArgs, { cwd });
|
|
278
282
|
if (publish.exitCode !== 0) {
|
|
279
283
|
const message = `publish failed (exit ${publish.exitCode}): ${publish.stderr.trim() || publish.stdout.trim() || "no output"}`;
|
|
280
284
|
print(` ✗ ${message}`);
|
|
285
|
+
if (publish.stdout.includes("EOTP") || publish.stderr.includes("EOTP")) {
|
|
286
|
+
print("");
|
|
287
|
+
print(" → hint: your npm account requires 2FA for writes. Re-run with `--otp <code>`:");
|
|
288
|
+
print(` pnpm exec tsx packages/cli/src/cli.ts npm publish-initial --otp <6-digit-code>`);
|
|
289
|
+
}
|
|
281
290
|
return {
|
|
282
291
|
status: "fail",
|
|
283
292
|
message,
|
|
@@ -810,11 +819,15 @@ await yargs(hideBin(process.argv)).scriptName("holocron").usage("$0 <command> [o
|
|
|
810
819
|
type: "string",
|
|
811
820
|
default: "alpha",
|
|
812
821
|
describe: "npm distribution tag (defaults to alpha)"
|
|
822
|
+
}).option("otp", {
|
|
823
|
+
type: "string",
|
|
824
|
+
describe: "One-time password from your authenticator (required if npm needs 2FA for writes)"
|
|
813
825
|
}), async (argv) => {
|
|
814
826
|
if ((await runNpmPublishInitial({
|
|
815
827
|
cwd: argv.cwd,
|
|
816
828
|
tag: argv.tag,
|
|
817
|
-
dryRun: argv.dryRun
|
|
829
|
+
dryRun: argv.dryRun,
|
|
830
|
+
...argv.otp ? { otp: argv.otp } : {}
|
|
818
831
|
})).status === "fail") process.exitCode = 1;
|
|
819
832
|
}).command("config show", "Print the resolved holocron config", () => {}, async (argv) => {
|
|
820
833
|
const loaded = await loadConfig(argv.cwd);
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
* See `.notes/tech-architecture.spec.md` for the design narrative
|
|
12
12
|
* (status: proposed, issue: #74).
|
|
13
13
|
*/
|
|
14
|
-
type CapabilityKey =
|
|
15
|
-
type Cardinality =
|
|
14
|
+
type CapabilityKey = "source" | "ci" | "secrets" | "environments" | "issues" | "deployment" | "storage" | "auth" | "vault" | "dns" | "tooling" | "notifications" | "analytics" | "observability";
|
|
15
|
+
type Cardinality = "single" | "many";
|
|
16
16
|
declare const CARDINALITY: {
|
|
17
17
|
readonly source: "single";
|
|
18
18
|
readonly ci: "single";
|
|
@@ -50,7 +50,7 @@ declare class ProviderApiError extends Error {
|
|
|
50
50
|
interface Ruleset {
|
|
51
51
|
id: number;
|
|
52
52
|
name: string;
|
|
53
|
-
enforcement:
|
|
53
|
+
enforcement: "active" | "evaluate" | "disabled";
|
|
54
54
|
target?: string;
|
|
55
55
|
}
|
|
56
56
|
interface RepoSettings {
|
|
@@ -69,7 +69,7 @@ interface RepoRef {
|
|
|
69
69
|
defaultBranch: string;
|
|
70
70
|
}
|
|
71
71
|
interface Source extends ProviderIdentity {
|
|
72
|
-
readonly key:
|
|
72
|
+
readonly key: "source";
|
|
73
73
|
/** Auth sanity-check. Throws ProviderApiError on auth failure. */
|
|
74
74
|
whoami(): Promise<{
|
|
75
75
|
login: string;
|
|
@@ -88,7 +88,7 @@ interface Source extends ProviderIdentity {
|
|
|
88
88
|
writeWorkflowFile(name: string, contents: string): Promise<void>;
|
|
89
89
|
removeWorkflowFile(name: string): Promise<void>;
|
|
90
90
|
}
|
|
91
|
-
type CiRunStatus =
|
|
91
|
+
type CiRunStatus = "queued" | "in_progress" | "completed" | "cancelled" | "failure" | "success" | "skipped";
|
|
92
92
|
interface CiRun {
|
|
93
93
|
id: string | number;
|
|
94
94
|
workflowName: string;
|
|
@@ -105,21 +105,21 @@ interface CiRunFilter {
|
|
|
105
105
|
limit?: number;
|
|
106
106
|
}
|
|
107
107
|
interface Ci extends ProviderIdentity {
|
|
108
|
-
readonly key:
|
|
108
|
+
readonly key: "ci";
|
|
109
109
|
listRuns(filter?: CiRunFilter): Promise<CiRun[]>;
|
|
110
110
|
getRun(id: string | number): Promise<CiRun>;
|
|
111
111
|
}
|
|
112
112
|
type SecretScope = {
|
|
113
|
-
kind:
|
|
113
|
+
kind: "repo";
|
|
114
114
|
} | {
|
|
115
|
-
kind:
|
|
115
|
+
kind: "environment";
|
|
116
116
|
name: string;
|
|
117
117
|
} | {
|
|
118
|
-
kind:
|
|
118
|
+
kind: "organization";
|
|
119
119
|
name: string;
|
|
120
120
|
};
|
|
121
121
|
interface Secrets extends ProviderIdentity {
|
|
122
|
-
readonly key:
|
|
122
|
+
readonly key: "secrets";
|
|
123
123
|
/** List secret NAMES (not values) at the given scope. */
|
|
124
124
|
listSecrets(scope: SecretScope): Promise<string[]>;
|
|
125
125
|
/** Idempotent upsert. Adapter handles encryption. */
|
|
@@ -127,7 +127,7 @@ interface Secrets extends ProviderIdentity {
|
|
|
127
127
|
deleteSecret(scope: SecretScope, name: string): Promise<void>;
|
|
128
128
|
}
|
|
129
129
|
interface EnvironmentReviewer {
|
|
130
|
-
type:
|
|
130
|
+
type: "User" | "Team";
|
|
131
131
|
/** Numeric id — GitHub's reviewer API silently ignores login strings. */
|
|
132
132
|
id: number;
|
|
133
133
|
}
|
|
@@ -138,13 +138,13 @@ interface Environment {
|
|
|
138
138
|
preventSelfReview?: boolean;
|
|
139
139
|
}
|
|
140
140
|
interface Environments extends ProviderIdentity {
|
|
141
|
-
readonly key:
|
|
141
|
+
readonly key: "environments";
|
|
142
142
|
listEnvironments(): Promise<Environment[]>;
|
|
143
143
|
upsertEnvironment(env: Environment): Promise<void>;
|
|
144
144
|
deleteEnvironment(name: string): Promise<void>;
|
|
145
145
|
}
|
|
146
|
-
type LifecycleSlot =
|
|
147
|
-
type StatusCategory =
|
|
146
|
+
type LifecycleSlot = "inProgress" | "inReview" | "done";
|
|
147
|
+
type StatusCategory = "open" | "in-progress" | "in-review" | "done" | "other";
|
|
148
148
|
interface TrackerUser {
|
|
149
149
|
id: string;
|
|
150
150
|
displayName: string;
|
|
@@ -165,7 +165,7 @@ interface Issue {
|
|
|
165
165
|
}
|
|
166
166
|
interface IssueSearchFilter {
|
|
167
167
|
/** Restrict to issues assigned to a specific id, or 'currentUser'. */
|
|
168
|
-
assignee?: string |
|
|
168
|
+
assignee?: string | "currentUser";
|
|
169
169
|
/** Exclude issues in the `done` category. */
|
|
170
170
|
openOnly?: boolean;
|
|
171
171
|
/** Max number of issues to return. Adapters apply a sensible default. */
|
|
@@ -202,7 +202,7 @@ interface TrackerDoctorReport {
|
|
|
202
202
|
}>;
|
|
203
203
|
}
|
|
204
204
|
interface Issues extends ProviderIdentity {
|
|
205
|
-
readonly key:
|
|
205
|
+
readonly key: "issues";
|
|
206
206
|
/** Currently-authenticated user. */
|
|
207
207
|
getMyself(): Promise<TrackerUser>;
|
|
208
208
|
search(filter: IssueSearchFilter): Promise<Issue[]>;
|
|
@@ -221,12 +221,12 @@ interface Issues extends ProviderIdentity {
|
|
|
221
221
|
doctor(): Promise<TrackerDoctorReport>;
|
|
222
222
|
}
|
|
223
223
|
/** Env-var scope on the deploy platform. */
|
|
224
|
-
type DeploymentTarget =
|
|
224
|
+
type DeploymentTarget = "development" | "preview" | "production";
|
|
225
225
|
/**
|
|
226
226
|
* Named deployment trigger target — `undefined` means a branch
|
|
227
227
|
* preview (no named environment).
|
|
228
228
|
*/
|
|
229
|
-
type DeploymentTrigger =
|
|
229
|
+
type DeploymentTrigger = "production" | "staging";
|
|
230
230
|
interface DeploymentProject {
|
|
231
231
|
id: string;
|
|
232
232
|
name: string;
|
|
@@ -248,10 +248,10 @@ interface DeploymentRecord {
|
|
|
248
248
|
branch: string | null;
|
|
249
249
|
/** Named environment if one was targeted; undefined for branch previews. */
|
|
250
250
|
target?: DeploymentTrigger;
|
|
251
|
-
status:
|
|
251
|
+
status: "queued" | "building" | "ready" | "error" | "cancelled";
|
|
252
252
|
}
|
|
253
253
|
interface Deployment extends ProviderIdentity {
|
|
254
|
-
readonly key:
|
|
254
|
+
readonly key: "deployment";
|
|
255
255
|
listProjects(): Promise<DeploymentProject[]>;
|
|
256
256
|
/** Create if missing, otherwise return existing. Idempotent. */
|
|
257
257
|
ensureProject(input: {
|
|
@@ -287,7 +287,7 @@ interface ConnectionStringOptions {
|
|
|
287
287
|
pooled?: boolean;
|
|
288
288
|
}
|
|
289
289
|
interface Storage extends ProviderIdentity {
|
|
290
|
-
readonly key:
|
|
290
|
+
readonly key: "storage";
|
|
291
291
|
/**
|
|
292
292
|
* Connection string for the given scope. Scope is provider-specific:
|
|
293
293
|
*
|
|
@@ -343,7 +343,7 @@ interface WebhookDashboardInfo {
|
|
|
343
343
|
url: string;
|
|
344
344
|
}
|
|
345
345
|
interface Auth extends ProviderIdentity {
|
|
346
|
-
readonly key:
|
|
346
|
+
readonly key: "auth";
|
|
347
347
|
/** Env-var keys the runtime app needs. */
|
|
348
348
|
describe(): Promise<AuthDescription>;
|
|
349
349
|
/** Reachability probe — proves the configured key works. */
|
|
@@ -362,7 +362,7 @@ interface Auth extends ProviderIdentity {
|
|
|
362
362
|
secretRef: string;
|
|
363
363
|
}): Promise<void>;
|
|
364
364
|
}
|
|
365
|
-
type AuthEventType =
|
|
365
|
+
type AuthEventType = "user.created" | "user.updated" | "user.deleted";
|
|
366
366
|
interface NormalizedAuthUser {
|
|
367
367
|
id: string;
|
|
368
368
|
email: string;
|
|
@@ -389,7 +389,7 @@ declare class WebhookVerificationError extends Error {
|
|
|
389
389
|
name: string;
|
|
390
390
|
}
|
|
391
391
|
interface Vault extends ProviderIdentity {
|
|
392
|
-
readonly key:
|
|
392
|
+
readonly key: "vault";
|
|
393
393
|
/**
|
|
394
394
|
* Read a secret by reference. The reference format is
|
|
395
395
|
* provider-specific (1P: "op://Vault/Item/field"; HashiCorp Vault:
|
|
@@ -414,7 +414,7 @@ interface Vault extends ProviderIdentity {
|
|
|
414
414
|
*/
|
|
415
415
|
readEnvironment?(environmentId: string): Promise<Record<string, string>>;
|
|
416
416
|
}
|
|
417
|
-
type DnsRecordType =
|
|
417
|
+
type DnsRecordType = "A" | "AAAA" | "CNAME" | "TXT" | "MX" | "NS" | "SRV" | "CAA";
|
|
418
418
|
interface DnsRecord {
|
|
419
419
|
id?: string;
|
|
420
420
|
type: DnsRecordType;
|
|
@@ -424,7 +424,7 @@ interface DnsRecord {
|
|
|
424
424
|
priority?: number;
|
|
425
425
|
}
|
|
426
426
|
interface Dns extends ProviderIdentity {
|
|
427
|
-
readonly key:
|
|
427
|
+
readonly key: "dns";
|
|
428
428
|
listRecords(domain: string): Promise<DnsRecord[]>;
|
|
429
429
|
upsertRecord(domain: string, record: DnsRecord): Promise<DnsRecord>;
|
|
430
430
|
deleteRecord(domain: string, id: string): Promise<void>;
|
|
@@ -434,13 +434,13 @@ interface ToolingDoctorReport {
|
|
|
434
434
|
message: string;
|
|
435
435
|
}
|
|
436
436
|
interface Tooling extends ProviderIdentity {
|
|
437
|
-
readonly key:
|
|
437
|
+
readonly key: "tooling";
|
|
438
438
|
/** Sync the tool's authoritative state from the repo. */
|
|
439
439
|
sync(): Promise<void>;
|
|
440
440
|
doctor(): Promise<ToolingDoctorReport>;
|
|
441
441
|
}
|
|
442
442
|
interface Notifications extends ProviderIdentity {
|
|
443
|
-
readonly key:
|
|
443
|
+
readonly key: "notifications";
|
|
444
444
|
/**
|
|
445
445
|
* Send a message. `channel` is provider-specific (Slack channel id,
|
|
446
446
|
* Discord webhook url-name, etc.); adapters resolve from config.
|
|
@@ -448,14 +448,14 @@ interface Notifications extends ProviderIdentity {
|
|
|
448
448
|
send(channel: string, message: string): Promise<void>;
|
|
449
449
|
}
|
|
450
450
|
interface Analytics extends ProviderIdentity {
|
|
451
|
-
readonly key:
|
|
451
|
+
readonly key: "analytics";
|
|
452
452
|
describe(): Promise<{
|
|
453
453
|
provider: string;
|
|
454
454
|
dsnEnvKey: string;
|
|
455
455
|
}>;
|
|
456
456
|
}
|
|
457
457
|
interface Observability extends ProviderIdentity {
|
|
458
|
-
readonly key:
|
|
458
|
+
readonly key: "observability";
|
|
459
459
|
describe(): Promise<{
|
|
460
460
|
provider: string;
|
|
461
461
|
dsnEnvKey: string;
|
|
@@ -479,7 +479,7 @@ interface CapabilityImpls {
|
|
|
479
479
|
}
|
|
480
480
|
type CardinalityFor<K extends CapabilityKey> = (typeof CARDINALITY)[K];
|
|
481
481
|
/** Resolved runtime shape: single → one impl; many → array. */
|
|
482
|
-
type ResolvedCapability<K extends CapabilityKey> = CardinalityFor<K> extends
|
|
483
|
-
declare function isMulti<K extends CapabilityKey>(key: K): CardinalityFor<K> extends
|
|
482
|
+
type ResolvedCapability<K extends CapabilityKey> = CardinalityFor<K> extends "many" ? CapabilityImpls[K][] : CapabilityImpls[K];
|
|
483
|
+
declare function isMulti<K extends CapabilityKey>(key: K): CardinalityFor<K> extends "many" ? true : false;
|
|
484
484
|
//#endregion
|
|
485
485
|
export { Tooling as $, Environments as A, ProviderApiError as B, DeploymentTarget as C, DnsRecordType as D, DnsRecord as E, LifecycleSlot as F, ResolvedCapability as G, REQUIRED_CAPABILITIES as H, NormalizedAuthUser as I, Secrets as J, Ruleset as K, Notifications as L, IssueSearchFilter as M, Issues as N, Environment as O, LifecycleResult as P, StorageBranch as Q, Observability as R, DeploymentRecord as S, Dns as T, RepoRef as U, ProviderIdentity as V, RepoSettings as W, StatusCategory as X, Source as Y, Storage as Z, ConnectionStringOptions as _, AuthEventType as a, WebhookVerificationError as at, DeploymentProject as b, CARDINALITY as c, Cardinality as d, ToolingDoctorReport as et, CardinalityFor as f, CiRunStatus as g, CiRunFilter as h, AuthEvent as i, WebhookDashboardInfo as it, Issue as j, EnvironmentReviewer as k, CapabilityImpls as l, CiRun as m, Auth as n, TrackerUser as nt, AuthIdentity as o, isMulti as ot, Ci as p, SecretScope as q, AuthDescription as r, Vault as rt, AuthUser as s, Analytics as t, TrackerDoctorReport as tt, CapabilityKey as u, CreateAuthUserInput as v, DeploymentTrigger as w, DeploymentProjectSettings as x, Deployment as y, ParseWebhookInput as z };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as Tooling, A as Environments, B as ProviderApiError, C as DeploymentTarget, D as DnsRecordType, E as DnsRecord, F as LifecycleSlot, G as ResolvedCapability, H as REQUIRED_CAPABILITIES, I as NormalizedAuthUser, J as Secrets, K as Ruleset, L as Notifications, M as IssueSearchFilter, N as Issues, O as Environment, P as LifecycleResult, Q as StorageBranch, R as Observability, S as DeploymentRecord, T as Dns, U as RepoRef, V as ProviderIdentity, W as RepoSettings, X as StatusCategory, Y as Source, Z as Storage, _ as ConnectionStringOptions, a as AuthEventType, at as WebhookVerificationError, b as DeploymentProject, c as CARDINALITY, d as Cardinality, et as ToolingDoctorReport, f as CardinalityFor, g as CiRunStatus, h as CiRunFilter, i as AuthEvent, it as WebhookDashboardInfo, j as Issue, k as EnvironmentReviewer, l as CapabilityImpls, m as CiRun, n as Auth, nt as TrackerUser, o as AuthIdentity, ot as isMulti, p as Ci, q as SecretScope, r as AuthDescription, rt as Vault, s as AuthUser, t as Analytics, tt as TrackerDoctorReport, u as CapabilityKey, v as CreateAuthUserInput, w as DeploymentTrigger, x as DeploymentProjectSettings, y as Deployment, z as ParseWebhookInput } from "./index-
|
|
1
|
+
import { $ as Tooling, A as Environments, B as ProviderApiError, C as DeploymentTarget, D as DnsRecordType, E as DnsRecord, F as LifecycleSlot, G as ResolvedCapability, H as REQUIRED_CAPABILITIES, I as NormalizedAuthUser, J as Secrets, K as Ruleset, L as Notifications, M as IssueSearchFilter, N as Issues, O as Environment, P as LifecycleResult, Q as StorageBranch, R as Observability, S as DeploymentRecord, T as Dns, U as RepoRef, V as ProviderIdentity, W as RepoSettings, X as StatusCategory, Y as Source, Z as Storage, _ as ConnectionStringOptions, a as AuthEventType, at as WebhookVerificationError, b as DeploymentProject, c as CARDINALITY, d as Cardinality, et as ToolingDoctorReport, f as CardinalityFor, g as CiRunStatus, h as CiRunFilter, i as AuthEvent, it as WebhookDashboardInfo, j as Issue, k as EnvironmentReviewer, l as CapabilityImpls, m as CiRun, n as Auth, nt as TrackerUser, o as AuthIdentity, ot as isMulti, p as Ci, q as SecretScope, r as AuthDescription, rt as Vault, s as AuthUser, t as Analytics, tt as TrackerDoctorReport, u as CapabilityKey, v as CreateAuthUserInput, w as DeploymentTrigger, x as DeploymentProjectSettings, y as Deployment, z as ParseWebhookInput } from "./index-CSxf0Yc7.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/config.d.ts
|
|
4
4
|
type ProviderOptions = Record<string, unknown>;
|
|
@@ -30,15 +30,15 @@ interface ResolvedTuple {
|
|
|
30
30
|
options: ProviderOptions;
|
|
31
31
|
}
|
|
32
32
|
type ResolvedProviderEntry = {
|
|
33
|
-
cardinality:
|
|
33
|
+
cardinality: "single";
|
|
34
34
|
tuple: ResolvedTuple;
|
|
35
35
|
} | {
|
|
36
|
-
cardinality:
|
|
36
|
+
cardinality: "many";
|
|
37
37
|
tuples: ResolvedTuple[];
|
|
38
38
|
};
|
|
39
39
|
type ResolvedProvidersConfig = Partial<Record<CapabilityKey, ResolvedProviderEntry>>;
|
|
40
40
|
interface ResolvedHolocronConfig {
|
|
41
|
-
project: HolocronConfig[
|
|
41
|
+
project: HolocronConfig["project"];
|
|
42
42
|
providers: ResolvedProvidersConfig;
|
|
43
43
|
apps: AppConfig[];
|
|
44
44
|
doctor: DoctorConfig;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theholocron/cli",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.1",
|
|
4
4
|
"description": "The Holocron CLI — a pluggable, capability-based orchestrator for spinning up and operating software projects.",
|
|
5
5
|
"homepage": "https://github.com/theholocron/holocron/tree/main/packages/cli#readme",
|
|
6
6
|
"bugs": "https://github.com/theholocron/holocron/issues",
|