@aid-framework/cli 0.1.53 → 0.1.55
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/dist/.tsbuildinfo +1 -1
- package/dist/commands/infra.d.ts +31 -0
- package/dist/commands/infra.d.ts.map +1 -0
- package/dist/commands/infra.js +300 -0
- package/dist/commands/infra.js.map +1 -0
- package/dist/diagnostics.d.ts +9 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +11 -0
- package/dist/diagnostics.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/emit.d.ts +78 -0
- package/dist/infra/emit.d.ts.map +1 -0
- package/dist/infra/emit.js +116 -0
- package/dist/infra/emit.js.map +1 -0
- package/dist/infra/tofu.d.ts +34 -0
- package/dist/infra/tofu.d.ts.map +1 -0
- package/dist/infra/tofu.js +60 -0
- package/dist/infra/tofu.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +35 -4
- package/dist/main.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The OpenTofu wiring, derived from the deployment plan.
|
|
3
|
+
*
|
|
4
|
+
* This emits the *derived* layer only: the plan itself, the tfvars an env root consumes,
|
|
5
|
+
* and a README that says who owns what. Provider HCL (the `modules/` and `envs/` trees)
|
|
6
|
+
* is not emitted here, because it carries no information the IR has -- and because an
|
|
7
|
+
* emitter that wrote AWS resources it could not `tofu validate` would be guessing.
|
|
8
|
+
*
|
|
9
|
+
* The load-bearing rule is enforced by construction: nothing in this file accepts an
|
|
10
|
+
* account id, a region, a CIDR, a domain, or a sizing number, so none can appear in the
|
|
11
|
+
* output (design §12.2). An env root is the same for dev and prod; only its inputs differ.
|
|
12
|
+
*/
|
|
13
|
+
/** Where every derived infrastructure file lives, relative to the project root. */
|
|
14
|
+
export const INFRA_GENERATED_DIR = 'infra/generated';
|
|
15
|
+
/** The manifest recording what this emitter wrote, so a hand edit is never overwritten. */
|
|
16
|
+
export const INFRA_MANIFEST_PATH = 'infra/aid.infra.manifest.json';
|
|
17
|
+
/**
|
|
18
|
+
* Every derived file, in a stable order. Pure: the same plan always yields the same bytes,
|
|
19
|
+
* so `aid infra gen --check` can compare content instead of trusting a timestamp.
|
|
20
|
+
*/
|
|
21
|
+
export function emitInfra(plan) {
|
|
22
|
+
return [
|
|
23
|
+
{ path: `${INFRA_GENERATED_DIR}/deploy.plan.json`, contents: json(plan) },
|
|
24
|
+
{ path: `${INFRA_GENERATED_DIR}/deploy.auto.tfvars.json`, contents: json(tfvars(plan)) },
|
|
25
|
+
{ path: `${INFRA_GENERATED_DIR}/README.md`, contents: readme(plan) },
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
export function tfvars(plan) {
|
|
29
|
+
const services = {};
|
|
30
|
+
for (const service of plan.services) {
|
|
31
|
+
services[service.id] = {
|
|
32
|
+
target: service.target,
|
|
33
|
+
streaming: service.streaming,
|
|
34
|
+
routes: service.endpoints.map((endpoint) => ({
|
|
35
|
+
pipeline: endpoint.pipeline,
|
|
36
|
+
method: endpoint.method,
|
|
37
|
+
path: endpoint.path,
|
|
38
|
+
})),
|
|
39
|
+
env: service.env.map((variable) => ({
|
|
40
|
+
name: variable.name,
|
|
41
|
+
secret: variable.secret,
|
|
42
|
+
from: variable.from,
|
|
43
|
+
...(variable.value === undefined ? {} : { value: variable.value }),
|
|
44
|
+
})),
|
|
45
|
+
secret_names: [...service.secrets],
|
|
46
|
+
providers: [...service.providers],
|
|
47
|
+
ingest: [...service.ingest],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const dataStores = {};
|
|
51
|
+
for (const store of plan.stores) {
|
|
52
|
+
dataStores[store.id] = {
|
|
53
|
+
kind: store.kind,
|
|
54
|
+
...(store.secretRef === undefined ? {} : { secret_ref: store.secretRef }),
|
|
55
|
+
...(store.requiresExtension === undefined
|
|
56
|
+
? {}
|
|
57
|
+
: { requires_extension: store.requiresExtension }),
|
|
58
|
+
retrievers: [...store.retrievers],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
project: { name: plan.project.name, namespace: plan.project.namespace },
|
|
63
|
+
services,
|
|
64
|
+
data_stores: dataStores,
|
|
65
|
+
tasks: plan.tasks.map((task) => ({
|
|
66
|
+
id: task.id,
|
|
67
|
+
kind: task.kind,
|
|
68
|
+
source: task.source,
|
|
69
|
+
...(task.schedule === undefined ? {} : { schedule: task.schedule }),
|
|
70
|
+
})),
|
|
71
|
+
alarms: plan.alarms.map((alarm) => ({
|
|
72
|
+
id: alarm.id,
|
|
73
|
+
metric: alarm.metric,
|
|
74
|
+
source: alarm.source,
|
|
75
|
+
})),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function readme(plan) {
|
|
79
|
+
const routes = plan.services.reduce((total, service) => total + service.endpoints.length, 0);
|
|
80
|
+
return [
|
|
81
|
+
'# Generated infrastructure',
|
|
82
|
+
'',
|
|
83
|
+
'Derived from the spec by `aid infra gen`. Do not edit: the next run compares content',
|
|
84
|
+
'and refuses to overwrite a file you changed by hand (`--force` overrides).',
|
|
85
|
+
'',
|
|
86
|
+
'| File | What it is |',
|
|
87
|
+
'| --- | --- |',
|
|
88
|
+
'| `deploy.plan.json` | The provider-neutral deployment plan both backends render. |',
|
|
89
|
+
'| `deploy.auto.tfvars.json` | The same plan spelled as Terraform inputs. |',
|
|
90
|
+
'',
|
|
91
|
+
'## Using it',
|
|
92
|
+
'',
|
|
93
|
+
'An env root consumes the tfvars directly, so dev and prod share one module tree:',
|
|
94
|
+
'',
|
|
95
|
+
'```sh',
|
|
96
|
+
'tofu -chdir=infra/envs/dev plan -var-file=../../generated/deploy.auto.tfvars.json',
|
|
97
|
+
'```',
|
|
98
|
+
'',
|
|
99
|
+
'## What is here, and what is not',
|
|
100
|
+
'',
|
|
101
|
+
`- Services: ${plan.services.length}`,
|
|
102
|
+
`- Routes: ${routes}`,
|
|
103
|
+
`- Data stores: ${plan.stores.length}`,
|
|
104
|
+
`- Tasks: ${plan.tasks.length}`,
|
|
105
|
+
`- Alarm hooks: ${plan.alarms.length}`,
|
|
106
|
+
'',
|
|
107
|
+
'This directory holds derived *shape* only. Sizing, regions, accounts, domains, CIDRs',
|
|
108
|
+
'and secret values are business inputs and live in your env root, never here — which is',
|
|
109
|
+
'what lets one generated set run in more than one account.',
|
|
110
|
+
'',
|
|
111
|
+
].join('\n');
|
|
112
|
+
}
|
|
113
|
+
function json(value) {
|
|
114
|
+
return `${JSON.stringify(value, null, 2)}\n`;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=emit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/infra/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,mFAAmF;AACnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAErD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAC;AAoDnE;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,OAAO;QACL,EAAE,IAAI,EAAE,GAAG,mBAAmB,mBAAmB,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;QACzE,EAAE,IAAI,EAAE,GAAG,mBAAmB,0BAA0B,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;QACxF,EAAE,IAAI,EAAE,GAAG,mBAAmB,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;KACrE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAgB;IACrC,MAAM,QAAQ,GAAqD,EAAE,CAAC;IACtE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAC3C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,CAAC,CAAC;YACH,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;aACnE,CAAC,CAAC;YACH,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAClC,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;YACjC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAwD,EAAE,CAAC;IAC3E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG;YACrB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;YACzE,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACpD,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;SAClC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;QACvE,QAAQ;QACR,WAAW,EAAE,UAAU;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;SACpE,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,IAAgB;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7F,OAAO;QACL,4BAA4B;QAC5B,EAAE;QACF,sFAAsF;QACtF,4EAA4E;QAC5E,EAAE;QACF,uBAAuB;QACvB,eAAe;QACf,qFAAqF;QACrF,4EAA4E;QAC5E,EAAE;QACF,aAAa;QACb,EAAE;QACF,kFAAkF;QAClF,EAAE;QACF,OAAO;QACP,mFAAmF;QACnF,KAAK;QACL,EAAE;QACF,kCAAkC;QAClC,EAAE;QACF,eAAe,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACrC,aAAa,MAAM,EAAE;QACrB,kBAAkB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QACtC,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QAC/B,kBAAkB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QACtC,EAAE;QACF,sFAAsF;QACtF,wFAAwF;QACxF,2DAA2D;QAC3D,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How `aid infra` talks to OpenTofu.
|
|
3
|
+
*
|
|
4
|
+
* Only two things live here: what to run, and how to read the exit status. Every policy
|
|
5
|
+
* decision (which environment, whether prod needs confirming, what a drift status means
|
|
6
|
+
* to the caller) belongs to the command, so a test can assert the argv without pretending
|
|
7
|
+
* to be OpenTofu.
|
|
8
|
+
*/
|
|
9
|
+
import type { CliContext, SpawnResult } from '../context.js';
|
|
10
|
+
export declare const DEFAULT_TOFU = "tofu";
|
|
11
|
+
/** Set to point `aid infra` at a specific binary, such as a pinned OpenTofu download. */
|
|
12
|
+
export declare const TOFU_ENV = "AID_TOFU";
|
|
13
|
+
export declare const TFVARS_PATH = "infra/generated/deploy.auto.tfvars.json";
|
|
14
|
+
export type InfraAction = 'plan' | 'apply' | 'drift';
|
|
15
|
+
/** The env root an action runs in: `infra/envs/<env>`. */
|
|
16
|
+
export declare function envRoot(env: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* The argv for one action, relative to the env root.
|
|
19
|
+
*
|
|
20
|
+
* `drift` is `plan -detailed-exitcode`, because OpenTofu reserves exit 2 for "the plan is
|
|
21
|
+
* non-empty" — the one status that distinguishes drift from a failure without parsing
|
|
22
|
+
* human output.
|
|
23
|
+
*/
|
|
24
|
+
export declare function tofuArgs(action: InfraAction, env: string): string[];
|
|
25
|
+
export declare function tofuBinary(context: CliContext): string;
|
|
26
|
+
/**
|
|
27
|
+
* Run one action inside the env root, because `-var-file` is resolved relative to the
|
|
28
|
+
* directory OpenTofu runs in, not to the project the command was started from.
|
|
29
|
+
*
|
|
30
|
+
* `stdio` is `inherit` for a human, so a plan streams as it is computed, and `pipe` under
|
|
31
|
+
* `--json`, so the document on stdout stays parseable.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runTofu(context: CliContext, action: InfraAction, env: string, stdio: 'inherit' | 'pipe'): SpawnResult;
|
|
34
|
+
//# sourceMappingURL=tofu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tofu.d.ts","sourceRoot":"","sources":["../../src/infra/tofu.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE7D,eAAO,MAAM,YAAY,SAAS,CAAC;AAEnC,yFAAyF;AACzF,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,eAAO,MAAM,WAAW,4CAA4C,CAAC;AAErE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AASrD,0DAA0D;AAC1D,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAUnE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAGtD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,GAAG,MAAM,GACxB,WAAW,CAMb"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How `aid infra` talks to OpenTofu.
|
|
3
|
+
*
|
|
4
|
+
* Only two things live here: what to run, and how to read the exit status. Every policy
|
|
5
|
+
* decision (which environment, whether prod needs confirming, what a drift status means
|
|
6
|
+
* to the caller) belongs to the command, so a test can assert the argv without pretending
|
|
7
|
+
* to be OpenTofu.
|
|
8
|
+
*/
|
|
9
|
+
import { join, posix } from 'node:path';
|
|
10
|
+
export const DEFAULT_TOFU = 'tofu';
|
|
11
|
+
/** Set to point `aid infra` at a specific binary, such as a pinned OpenTofu download. */
|
|
12
|
+
export const TOFU_ENV = 'AID_TOFU';
|
|
13
|
+
export const TFVARS_PATH = 'infra/generated/deploy.auto.tfvars.json';
|
|
14
|
+
/** `apply` is the only action that changes anything, so it is the only one that approves. */
|
|
15
|
+
const APPROVALS = {
|
|
16
|
+
plan: [],
|
|
17
|
+
drift: [],
|
|
18
|
+
apply: ['-auto-approve'],
|
|
19
|
+
};
|
|
20
|
+
/** The env root an action runs in: `infra/envs/<env>`. */
|
|
21
|
+
export function envRoot(env) {
|
|
22
|
+
return posix.join('infra', 'envs', env);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The argv for one action, relative to the env root.
|
|
26
|
+
*
|
|
27
|
+
* `drift` is `plan -detailed-exitcode`, because OpenTofu reserves exit 2 for "the plan is
|
|
28
|
+
* non-empty" — the one status that distinguishes drift from a failure without parsing
|
|
29
|
+
* human output.
|
|
30
|
+
*/
|
|
31
|
+
export function tofuArgs(action, env) {
|
|
32
|
+
const varFile = posix.relative(envRoot(env), TFVARS_PATH);
|
|
33
|
+
return [
|
|
34
|
+
action === 'drift' ? 'plan' : action,
|
|
35
|
+
...(action === 'drift' ? ['-detailed-exitcode'] : []),
|
|
36
|
+
`-var-file=${varFile}`,
|
|
37
|
+
'-input=false',
|
|
38
|
+
'-no-color',
|
|
39
|
+
...APPROVALS[action],
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
export function tofuBinary(context) {
|
|
43
|
+
const configured = context.env[TOFU_ENV];
|
|
44
|
+
return configured === undefined || configured === '' ? DEFAULT_TOFU : configured;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Run one action inside the env root, because `-var-file` is resolved relative to the
|
|
48
|
+
* directory OpenTofu runs in, not to the project the command was started from.
|
|
49
|
+
*
|
|
50
|
+
* `stdio` is `inherit` for a human, so a plan streams as it is computed, and `pipe` under
|
|
51
|
+
* `--json`, so the document on stdout stays parseable.
|
|
52
|
+
*/
|
|
53
|
+
export function runTofu(context, action, env, stdio) {
|
|
54
|
+
return context.spawn(tofuBinary(context), tofuArgs(action, env), {
|
|
55
|
+
cwd: join(context.cwd, ...envRoot(env).split('/')),
|
|
56
|
+
stdio,
|
|
57
|
+
env: context.env,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=tofu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tofu.js","sourceRoot":"","sources":["../../src/infra/tofu.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAIxC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,yFAAyF;AACzF,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,MAAM,CAAC,MAAM,WAAW,GAAG,yCAAyC,CAAC;AAIrE,6FAA6F;AAC7F,MAAM,SAAS,GAAqD;IAClE,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,CAAC,eAAe,CAAC;CACzB,CAAC;AAEF,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAmB,EAAE,GAAW;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;IAC1D,OAAO;QACL,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACpC,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,aAAa,OAAO,EAAE;QACtB,cAAc;QACd,WAAW;QACX,GAAG,SAAS,CAAC,MAAM,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAmB;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;AACnF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CACrB,OAAmB,EACnB,MAAmB,EACnB,GAAW,EACX,KAAyB;IAEzB,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;QAC/D,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClD,KAAK;QACL,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;AACL,CAAC"}
|
package/dist/main.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ import type { CommandOutcome } from './output.js';
|
|
|
18
18
|
import type { CommandSpec } from './usage.js';
|
|
19
19
|
interface Command extends CommandSpec {
|
|
20
20
|
readonly run: (context: CliContext, args: ParsedArguments) => CommandOutcome;
|
|
21
|
+
/** Positional arguments this command accepts. Defaults to one. */
|
|
22
|
+
readonly maxPositionals?: number;
|
|
21
23
|
}
|
|
22
24
|
export declare const COMMANDS: readonly Command[];
|
|
23
25
|
export declare function run(argv: readonly string[], context: CliContext): ExitCode;
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AASjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,UAAU,OAAQ,SAAQ,WAAW;IACnC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,KAAK,cAAc,CAAC;IAC7E,kEAAkE;IAClE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAQD,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAwHtC,CAAC;AA0BF,wBAAgB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,CA6C1E"}
|
package/dist/main.js
CHANGED
|
@@ -15,6 +15,7 @@ import { booleanFlag, JSON_FLAG, parseArguments, valueFlag } from './args.js';
|
|
|
15
15
|
import { doctor } from './commands/doctor.js';
|
|
16
16
|
import { evaluate } from './commands/eval.js';
|
|
17
17
|
import { generate } from './commands/gen.js';
|
|
18
|
+
import { infra } from './commands/infra.js';
|
|
18
19
|
import { ingest } from './commands/ingest.js';
|
|
19
20
|
import { init } from './commands/init.js';
|
|
20
21
|
import { validate } from './commands/validate.js';
|
|
@@ -113,6 +114,30 @@ export const COMMANDS = [
|
|
|
113
114
|
target: args.values.get('target'),
|
|
114
115
|
}),
|
|
115
116
|
},
|
|
117
|
+
{
|
|
118
|
+
name: 'infra',
|
|
119
|
+
summary: 'derive the deployment wiring from the spec and drive OpenTofu',
|
|
120
|
+
usage: 'infra <gen|plan|apply|drift> [spec] [--dry-run|--check] [--env <name>] [--force]',
|
|
121
|
+
maxPositionals: 2,
|
|
122
|
+
flags: [
|
|
123
|
+
booleanFlag('dry-run', 'gen: report what would change, and write nothing'),
|
|
124
|
+
booleanFlag('check', 'gen: exit non-zero when the generated tree is out of date'),
|
|
125
|
+
valueFlag('env', 'name', 'environment root under infra/envs; plan, apply and drift use dev'),
|
|
126
|
+
booleanFlag('confirm-prod', 'required to apply to prod'),
|
|
127
|
+
booleanFlag('force', 'gen: overwrite generated files that were edited by hand'),
|
|
128
|
+
JSON_FLAG,
|
|
129
|
+
],
|
|
130
|
+
run: (context, args) => infra(context, {
|
|
131
|
+
subcommand: args.positionals[0],
|
|
132
|
+
spec: args.positionals[1],
|
|
133
|
+
dryRun: args.booleans.has('dry-run'),
|
|
134
|
+
check: args.booleans.has('check'),
|
|
135
|
+
force: args.booleans.has('force'),
|
|
136
|
+
env: args.values.get('env'),
|
|
137
|
+
confirmProd: args.booleans.has('confirm-prod'),
|
|
138
|
+
json: args.booleans.has('json'),
|
|
139
|
+
}),
|
|
140
|
+
},
|
|
116
141
|
];
|
|
117
142
|
function usageError(context, message, usage) {
|
|
118
143
|
context.stderr(`aid: ${message}\n\n${usage ?? globalUsage(COMMANDS)}`);
|
|
@@ -150,10 +175,16 @@ export function run(argv, context) {
|
|
|
150
175
|
context.stdout(commandUsage(command));
|
|
151
176
|
return EXIT_OK;
|
|
152
177
|
}
|
|
153
|
-
// Every command takes at most one positional (a spec, or the directory to
|
|
154
|
-
// into)
|
|
155
|
-
|
|
156
|
-
|
|
178
|
+
// Every other command takes at most one positional (a spec, or the directory to
|
|
179
|
+
// scaffold into); `infra` is the exception because it takes a subcommand and a spec. The
|
|
180
|
+
// arity rule lives here rather than five times in five commands, and each command
|
|
181
|
+
// declares its own bound rather than this list naming commands.
|
|
182
|
+
const maxPositionals = command.maxPositionals ?? 1;
|
|
183
|
+
if (parsed.args.positionals.length > maxPositionals) {
|
|
184
|
+
// `one path` rather than `1 path` keeps the message this command has always printed for
|
|
185
|
+
// the single-positional commands; only commands with a larger bound read as a count.
|
|
186
|
+
const bound = maxPositionals === 1 ? 'one path' : `${maxPositionals} arguments`;
|
|
187
|
+
return usageError(context, `\`aid ${command.name}\` takes at most ${bound}, got ${parsed.args.positionals.length}`, commandUsage(command));
|
|
157
188
|
}
|
|
158
189
|
const json = parsed.args.booleans.has('json');
|
|
159
190
|
try {
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aid-framework/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.55",
|
|
4
4
|
"description": "The `aid` command: scaffold a project, validate its spec, generate its code, and run its eval gate.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@aid-framework/generator-py-fastapi": "0.1.
|
|
37
|
-
"@aid-framework/generator-sdk": "0.1.
|
|
38
|
-
"@aid-framework/generator-ts-vercel": "0.1.
|
|
39
|
-
"@aid-framework/ir": "0.1.
|
|
40
|
-
"@aid-framework/spec": "0.1.
|
|
36
|
+
"@aid-framework/generator-py-fastapi": "0.1.55",
|
|
37
|
+
"@aid-framework/generator-sdk": "0.1.55",
|
|
38
|
+
"@aid-framework/generator-ts-vercel": "0.1.55",
|
|
39
|
+
"@aid-framework/ir": "0.1.55",
|
|
40
|
+
"@aid-framework/spec": "0.1.55"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/node": "^26.6.5"
|