redkite 0.1.7 → 0.1.8
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 +313 -25
- package/dist/checks.d.ts.map +1 -1
- package/dist/checks.js +4 -0
- package/dist/checks.js.map +1 -1
- package/dist/cli/agent.d.ts +2 -0
- package/dist/cli/agent.d.ts.map +1 -1
- package/dist/cli/agent.js +23 -1
- package/dist/cli/agent.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +98 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -1
- package/dist/config.js.map +1 -1
- package/dist/deploy.d.ts +4 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +77 -23
- package/dist/deploy.js.map +1 -1
- package/dist/dockerfile.js +6 -7
- package/dist/dockerfile.js.map +1 -1
- package/dist/environment.d.ts +5 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +20 -0
- package/dist/environment.js.map +1 -0
- package/dist/host.d.ts +2 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +6 -0
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/localHost.d.ts.map +1 -1
- package/dist/localHost.js +2 -0
- package/dist/localHost.js.map +1 -1
- package/dist/plugin.d.ts +15 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +21 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/bitwarden.d.ts +11 -0
- package/dist/plugins/bitwarden.d.ts.map +1 -0
- package/dist/plugins/bitwarden.js +40 -0
- package/dist/plugins/bitwarden.js.map +1 -0
- package/dist/plugins/digitalOcean.d.ts +19 -0
- package/dist/plugins/digitalOcean.d.ts.map +1 -0
- package/dist/plugins/digitalOcean.js +71 -0
- package/dist/plugins/digitalOcean.js.map +1 -0
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +5 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/rds.d.ts +14 -0
- package/dist/plugins/rds.d.ts.map +1 -0
- package/dist/plugins/rds.js +86 -0
- package/dist/plugins/rds.js.map +1 -0
- package/dist/plugins/snapshot.d.ts +7 -0
- package/dist/plugins/snapshot.d.ts.map +1 -0
- package/dist/plugins/snapshot.js +29 -0
- package/dist/plugins/snapshot.js.map +1 -0
- package/dist/presets/nodeApp.d.ts +1 -2
- package/dist/presets/nodeApp.d.ts.map +1 -1
- package/dist/presets/nodeApp.js +0 -1
- package/dist/presets/nodeApp.js.map +1 -1
- package/dist/recover.d.ts +19 -0
- package/dist/recover.d.ts.map +1 -0
- package/dist/recover.js +58 -0
- package/dist/recover.js.map +1 -0
- package/dist/secrets/store.d.ts +5 -2
- package/dist/secrets/store.d.ts.map +1 -1
- package/dist/secrets/store.js +25 -14
- package/dist/secrets/store.js.map +1 -1
- package/dist/sshHost.d.ts +2 -0
- package/dist/sshHost.d.ts.map +1 -1
- package/dist/sshHost.js +29 -11
- package/dist/sshHost.js.map +1 -1
- package/dist/steps.d.ts +0 -7
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +6 -3
- package/dist/steps.js.map +1 -1
- package/dist/types.d.ts +4 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/checks.ts +4 -0
- package/src/cli/agent.ts +28 -1
- package/src/cli/index.ts +118 -29
- package/src/config.ts +19 -1
- package/src/deploy.ts +101 -29
- package/src/dockerfile.ts +7 -11
- package/src/environment.ts +24 -0
- package/src/host.ts +11 -0
- package/src/index.ts +4 -1
- package/src/localHost.ts +3 -0
- package/src/plugin.ts +50 -0
- package/src/plugins/bitwarden.ts +57 -0
- package/src/plugins/digitalOcean.ts +111 -0
- package/src/plugins/index.ts +4 -0
- package/src/plugins/rds.ts +126 -0
- package/src/plugins/snapshot.ts +44 -0
- package/src/presets/nodeApp.ts +1 -3
- package/src/recover.ts +90 -0
- package/src/secrets/store.ts +39 -20
- package/src/sshHost.ts +35 -11
- package/src/steps.ts +7 -6
- package/src/types.ts +22 -12
- package/dist/secrets/bitwarden.d.ts +0 -3
- package/dist/secrets/bitwarden.d.ts.map +0 -1
- package/dist/secrets/bitwarden.js +0 -6
- package/dist/secrets/bitwarden.js.map +0 -1
- package/src/secrets/bitwarden.ts +0 -7
package/dist/dockerfile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dockerfile.js","sourceRoot":"","sources":["../src/dockerfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4B1E,sEAAsE;AACtE,uEAAuE;AACvE,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,kCAAkC;AAClC,MAAM,UAAU,kBAAkB,CAAC,OAAkB;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,iBAAiB,CAAC;IAEvC,4EAA4E;IAC5E,qEAAqE;IACrE,OAAO,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAe,EACf,OAA0B;IAE1B,OAAO;QACL,gCAAgC;QAChC,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;QAC9B,EAAE;QACF,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;QAC9B,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,IAAe,EAAE,OAA0B;IAC/D,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAErC,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,KAAK,GAAG;QACZ,QAAQ,IAAI,CAAC,YAAY,OAAO,aAAa,EAAE;QAC/C,cAAc;KACf,CAAC;IAEF,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAE5C,IAAI,IAAI,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpE,2EAA2E;IAC3E,mEAAmE;IACnE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;IAE9B,+EAA+E;IAC/E,IAAI,OAAO,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IAElD,KAAK,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"dockerfile.js","sourceRoot":"","sources":["../src/dockerfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Context } from "./pipeline.js";
|
|
2
|
+
import type { AppSpec } from "./types.js";
|
|
3
|
+
export declare function envFileFor(app: AppSpec, context: Context): Promise<string | undefined>;
|
|
4
|
+
export declare function envFlags(app: AppSpec, context: Context): Promise<string[]>;
|
|
5
|
+
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAU1C,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,+BAK9D;AAGD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,qBAG5D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { readEnv } from "./secrets/refs.js";
|
|
2
|
+
// What the vault resolved to, handed over as a file rather than baked into an
|
|
3
|
+
// image. Nothing from a vault is in a layer, so this is the only way anything
|
|
4
|
+
// running the app's image sees its environment: the container itself, and the
|
|
5
|
+
// migrations and checks that run in the builder.
|
|
6
|
+
// Written to the host and handed over as a file, so no value appears in an
|
|
7
|
+
// argument list. Docker reads it when a container is created, and again for
|
|
8
|
+
// each `run --env-file`, so the file goes with the rest of the deploy's scratch
|
|
9
|
+
export async function envFileFor(app, context) {
|
|
10
|
+
if (!app.secrets)
|
|
11
|
+
return undefined;
|
|
12
|
+
const contents = await readEnv(app.secrets, context.secrets);
|
|
13
|
+
return await context.host.write(`apps/${app.name}/env`, contents);
|
|
14
|
+
}
|
|
15
|
+
// The flag, or nothing at all for an app that names no secrets
|
|
16
|
+
export async function envFlags(app, context) {
|
|
17
|
+
const path = await envFileFor(app, context);
|
|
18
|
+
return path ? [`--env-file ${path}`] : [];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,iDAAiD;AAEjD,2EAA2E;AAC3E,4EAA4E;AAC5E,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,OAAgB;IAC7D,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAEnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,EAAE,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAY,EAAE,OAAgB;IAC3D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC"}
|
package/dist/host.d.ts
CHANGED
|
@@ -11,8 +11,10 @@ export type Host = {
|
|
|
11
11
|
readonly cache: string;
|
|
12
12
|
pipe(local: string, remote: string, onLine?: OnLine): Promise<Result>;
|
|
13
13
|
stop(signal: "TERM" | "KILL"): Promise<number>;
|
|
14
|
+
final(command: string): Promise<Result>;
|
|
14
15
|
close?(): Promise<void>;
|
|
15
16
|
};
|
|
17
|
+
export declare function finalHost(host: Host): Host;
|
|
16
18
|
export declare function tail(lines: string[]): string;
|
|
17
19
|
export declare function lineReader(onLine: OnLine): {
|
|
18
20
|
push(chunk: string): void;
|
package/dist/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAItE,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5C,MAAM,MAAM,IAAI,GAAG;IAGjB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAGtD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAGtE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAItE,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5C,MAAM,MAAM,IAAI,GAAG;IAGjB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAGtD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAGvB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAGtE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAI/C,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAKF,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE1C;AAMD,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,UAEnC;AAGD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM;gBAIzB,MAAM;;EAUrB"}
|
package/dist/host.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
// The machine the containers run on. Every command a deploy issues goes through
|
|
2
2
|
// this, so the rest of the library is exercised against a recorder rather than
|
|
3
3
|
// against a host. Two implementations: one over ssh, one on this machine.
|
|
4
|
+
// The same host with the stop lifted. Handed to a Docker, it gives every
|
|
5
|
+
// command below it the same exemption, which is how a revert reaches the
|
|
6
|
+
// containers an abort left half moved
|
|
7
|
+
export function finalHost(host) {
|
|
8
|
+
return { ...host, sh: async (command) => await host.final(command) };
|
|
9
|
+
}
|
|
4
10
|
// A streamed command keeps this many lines, so a build that prints tens of
|
|
5
11
|
// megabytes still fits in the error a failure reports
|
|
6
12
|
const TAIL = 200;
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,0EAA0E;
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,0EAA0E;AAgC1E,yEAAyE;AACzE,yEAAyE;AACzE,sCAAsC;AACtC,MAAM,UAAU,SAAS,CAAC,IAAU;IAClC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,2EAA2E;AAC3E,sDAAsD;AACtD,MAAM,IAAI,GAAG,GAAG,CAAC;AAEjB,MAAM,UAAU,IAAI,CAAC,KAAe;IAClC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,OAAO;QACL,IAAI,CAAC,KAAa;YAChB,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,KAAK;YACH,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from "./build.js";
|
|
|
2
2
|
export * from "./config.js";
|
|
3
3
|
export * from "./deploy.js";
|
|
4
4
|
export * from "./docker.js";
|
|
5
|
+
export * from "./environment.js";
|
|
5
6
|
export * from "./dockerfile.js";
|
|
6
7
|
export * from "./health.js";
|
|
7
8
|
export * from "./host.js";
|
|
@@ -10,8 +11,10 @@ export * from "./localHost.js";
|
|
|
10
11
|
export * from "./log.js";
|
|
11
12
|
export * from "./nginx.js";
|
|
12
13
|
export * from "./pipeline.js";
|
|
14
|
+
export * from "./plugin.js";
|
|
15
|
+
export * from "./plugins/index.js";
|
|
16
|
+
export * from "./recover.js";
|
|
13
17
|
export * from "./presets/index.js";
|
|
14
|
-
export * from "./secrets/bitwarden.js";
|
|
15
18
|
export * from "./secrets/refs.js";
|
|
16
19
|
export * from "./secrets/store.js";
|
|
17
20
|
export * from "./shell.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export * from "./build.js";
|
|
|
2
2
|
export * from "./config.js";
|
|
3
3
|
export * from "./deploy.js";
|
|
4
4
|
export * from "./docker.js";
|
|
5
|
+
export * from "./environment.js";
|
|
5
6
|
export * from "./dockerfile.js";
|
|
6
7
|
export * from "./health.js";
|
|
7
8
|
export * from "./host.js";
|
|
@@ -10,8 +11,10 @@ export * from "./localHost.js";
|
|
|
10
11
|
export * from "./log.js";
|
|
11
12
|
export * from "./nginx.js";
|
|
12
13
|
export * from "./pipeline.js";
|
|
14
|
+
export * from "./plugin.js";
|
|
15
|
+
export * from "./plugins/index.js";
|
|
16
|
+
export * from "./recover.js";
|
|
13
17
|
export * from "./presets/index.js";
|
|
14
|
-
export * from "./secrets/bitwarden.js";
|
|
15
18
|
export * from "./secrets/refs.js";
|
|
16
19
|
export * from "./secrets/store.js";
|
|
17
20
|
export * from "./shell.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
package/dist/localHost.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localHost.d.ts","sourceRoot":"","sources":["../src/localHost.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOtC,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAEpE,wBAAsB,SAAS,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"localHost.d.ts","sourceRoot":"","sources":["../src/localHost.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOtC,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAEpE,wBAAsB,SAAS,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCzE"}
|
package/dist/localHost.js
CHANGED
|
@@ -24,6 +24,8 @@ export async function localHost(options = {}) {
|
|
|
24
24
|
// The build is a grandchild of the shell that was spawned, and every child
|
|
25
25
|
// is a process group leader, so one signal reaches the whole tree
|
|
26
26
|
stop: async (name) => signalEverything(name === "KILL" ? "SIGKILL" : "SIGTERM"),
|
|
27
|
+
// Without the signal, so a stop cannot refuse the work it created
|
|
28
|
+
final: async (command) => await spawnCollect("sh", ["-c", command]),
|
|
27
29
|
close: async () => {
|
|
28
30
|
await rm(directory, { recursive: true, force: true });
|
|
29
31
|
},
|
package/dist/localHost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localHost.js","sourceRoot":"","sources":["../src/localHost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ5D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAwB,EAAE;IACxD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEpE,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,OAAO;QACL,SAAS;QACT,KAAK;QACL,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAC5B,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAE/E,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAEnC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAEjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,4DAA4D;QAC5D,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CACpC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,MAAM,EAAE,CAAC,EAAE;YACvD,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;QAEJ,2EAA2E;QAC3E,kEAAkE;QAClE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/E,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"localHost.js","sourceRoot":"","sources":["../src/localHost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ5D,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAwB,EAAE;IACxD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEpE,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,OAAO;QACL,SAAS;QACT,KAAK;QACL,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAC5B,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAE/E,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAEnC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAEjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,4DAA4D;QAC5D,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CACpC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,MAAM,EAAE,CAAC,EAAE;YACvD,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;QAEJ,2EAA2E;QAC3E,kEAAkE;QAClE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/E,kEAAkE;QAClE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEnE,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type AnyStep } from "./pipeline.js";
|
|
2
|
+
import type { SecretStore } from "./secrets/refs.js";
|
|
3
|
+
export type OpenContext = {
|
|
4
|
+
detail: (message: string) => void;
|
|
5
|
+
};
|
|
6
|
+
export type OpenStore = (context: OpenContext) => Promise<SecretStore>;
|
|
7
|
+
export type Plugin = {
|
|
8
|
+
name: string;
|
|
9
|
+
steps?: AnyStep[];
|
|
10
|
+
stores?: Record<string, OpenStore>;
|
|
11
|
+
};
|
|
12
|
+
export declare function definePlugin<const T extends Plugin>(plugin: T): T;
|
|
13
|
+
export declare function pluginSteps(plugins?: Plugin[]): AnyStep[];
|
|
14
|
+
export declare function storeFor(plugins: Plugin[] | undefined, provider: string): OpenStore | undefined;
|
|
15
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD,MAAM,MAAM,WAAW,GAAG;IAGxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAGF,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAEvE,MAAM,MAAM,MAAM,GAAG;IAGnB,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC,CAAC;AAIF,wBAAgB,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAGjE;AAED,wBAAgB,WAAW,CAAC,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,EAAE,CAE7D;AAID,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,YAAK,EAAE,QAAQ,EAAE,MAAM,yBAShE"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { assertSteps } from "./pipeline.js";
|
|
2
|
+
// Identity, but the points a plugin claims are checked where it is written
|
|
3
|
+
// rather than where it is registered, so a typo is the plugin's own failure
|
|
4
|
+
export function definePlugin(plugin) {
|
|
5
|
+
assertSteps(plugin.steps ?? []);
|
|
6
|
+
return plugin;
|
|
7
|
+
}
|
|
8
|
+
export function pluginSteps(plugins = []) {
|
|
9
|
+
return plugins.flatMap((plugin) => plugin.steps ?? []);
|
|
10
|
+
}
|
|
11
|
+
// The one that answers for this provider. Two plugins claiming it would be two
|
|
12
|
+
// vaults for one tag, which is a config nobody can read the intent of
|
|
13
|
+
export function storeFor(plugins = [], provider) {
|
|
14
|
+
const claiming = plugins.filter((plugin) => plugin.stores?.[provider]);
|
|
15
|
+
if (claiming.length > 1) {
|
|
16
|
+
const names = claiming.map((plugin) => plugin.name).join(" and ");
|
|
17
|
+
throw new Error(`${names} both resolve ${provider} secrets, and only one can`);
|
|
18
|
+
}
|
|
19
|
+
return claiming[0]?.stores?.[provider];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AA2B1D,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAyB,MAAS;IAC5D,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAoB,EAAE;IAChD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,+EAA+E;AAC/E,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,UAAoB,EAAE,EAAE,QAAgB;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,QAAQ,4BAA4B,CAAC,CAAC;IACjF,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Plugin } from "../plugin.js";
|
|
2
|
+
import type { SecretRef } from "../types.js";
|
|
3
|
+
export type BitwardenOptions = {
|
|
4
|
+
secrets?: boolean | string;
|
|
5
|
+
};
|
|
6
|
+
declare function vault(options?: BitwardenOptions): Plugin;
|
|
7
|
+
export declare const bitwarden: typeof vault & {
|
|
8
|
+
item: (id: string) => SecretRef;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=bitwarden.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitwarden.d.ts","sourceRoot":"","sources":["../../src/plugins/bitwarden.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,MAAM,MAAM,gBAAgB,GAAG;IAM7B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC5B,CAAC;AAEF,iBAAS,KAAK,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAQrD;AA0BD,eAAO,MAAM,SAAS;eACT,MAAM,KAAG,SAAS;CAC7B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { definePlugin } from "../plugin.js";
|
|
2
|
+
import { bitwardenStore } from "../secrets/store.js";
|
|
3
|
+
// Redkite's own vault, and a plugin like any other: a deployment that does not
|
|
4
|
+
// register it cannot resolve a bitwarden ref, and says so before it builds.
|
|
5
|
+
// The one variable a vault needs when the session was obtained elsewhere. A CI
|
|
6
|
+
// job that unlocked once and reuses it across several deploys is the case
|
|
7
|
+
const KEY = "BW_KEY";
|
|
8
|
+
function vault(options = {}) {
|
|
9
|
+
const secrets = options.secrets ?? true;
|
|
10
|
+
if (secrets === false)
|
|
11
|
+
return definePlugin({ name: "bitwarden" });
|
|
12
|
+
return definePlugin({
|
|
13
|
+
name: "bitwarden",
|
|
14
|
+
stores: { bitwarden: async (context) => await open(secrets, context) },
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async function open(secrets, context) {
|
|
18
|
+
const session = typeof secrets === "string" ? secrets : process.env[KEY];
|
|
19
|
+
if (session)
|
|
20
|
+
return await bitwardenStore({ session, detail: context.detail });
|
|
21
|
+
return await bitwardenStore({
|
|
22
|
+
detail: context.detail,
|
|
23
|
+
clientId: required("BW_CLIENT_ID"),
|
|
24
|
+
clientSecret: required("BW_CLIENT_SECRET"),
|
|
25
|
+
password: required("BW_PASSWORD"),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function required(name) {
|
|
29
|
+
const value = process.env[name];
|
|
30
|
+
if (value)
|
|
31
|
+
return value;
|
|
32
|
+
throw new Error(`Neither ${KEY} nor ${name} is set, and this deployment reads its environment from Bitwarden`);
|
|
33
|
+
}
|
|
34
|
+
// The plugin is what a deployment registers; the item is what an app points at.
|
|
35
|
+
// Both are named bitwarden because both are the same vault, and the id is a
|
|
36
|
+
// pointer rather than a secret, so it belongs in the config
|
|
37
|
+
export const bitwarden = Object.assign(vault, {
|
|
38
|
+
item: (id) => ({ provider: "bitwarden", id }),
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=bitwarden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bitwarden.js","sourceRoot":"","sources":["../../src/plugins/bitwarden.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiC,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,+EAA+E;AAC/E,4EAA4E;AAE5E,+EAA+E;AAC/E,0EAA0E;AAC1E,MAAM,GAAG,GAAG,QAAQ,CAAC;AAWrB,SAAS,KAAK,CAAC,UAA4B,EAAE;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAElE,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;KACvE,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,OAAsB,EAAE,OAAoB;IAC9D,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzE,IAAI,OAAO;QAAE,OAAO,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9E,OAAO,MAAM,cAAc,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC;QAClC,YAAY,EAAE,QAAQ,CAAC,kBAAkB,CAAC;QAC1C,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC;KAClC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,IAAI,KAAK,CACb,WAAW,GAAG,QAAQ,IAAI,mEAAmE,CAC9F,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,4EAA4E;AAC5E,4DAA4D;AAC5D,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;IAC5C,IAAI,EAAE,CAAC,EAAU,EAAa,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;CACjE,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Plugin } from "../plugin.js";
|
|
2
|
+
export type Request = (url: string, init: {
|
|
3
|
+
method: string;
|
|
4
|
+
headers: Record<string, string>;
|
|
5
|
+
body: string;
|
|
6
|
+
}) => Promise<{
|
|
7
|
+
ok: boolean;
|
|
8
|
+
status: number;
|
|
9
|
+
text(): Promise<string>;
|
|
10
|
+
}>;
|
|
11
|
+
export type DigitalOceanSnapshotOptions = {
|
|
12
|
+
volume?: string;
|
|
13
|
+
droplet?: number;
|
|
14
|
+
name?: string;
|
|
15
|
+
tokenFrom?: string;
|
|
16
|
+
request?: Request;
|
|
17
|
+
};
|
|
18
|
+
export declare function digitalOceanSnapshot(options: DigitalOceanSnapshotOptions): Plugin;
|
|
19
|
+
//# sourceMappingURL=digitalOcean.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"digitalOcean.d.ts","sourceRoot":"","sources":["../../src/plugins/digitalOcean.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAiBzD,MAAM,MAAM,OAAO,GAAG,CACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KACpE,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAC;AAEvE,MAAM,MAAM,2BAA2B,GAAG;IAExC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAIF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CAOjF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { definePlugin } from "../plugin.js";
|
|
2
|
+
import { slug, snapshotName, tokenFrom } from "./snapshot.js";
|
|
3
|
+
// A snapshot of the disk a database sits on, taken before anything migrates it.
|
|
4
|
+
//
|
|
5
|
+
// DigitalOcean's managed databases have no endpoint that takes one on demand:
|
|
6
|
+
// their backups are automatic and the API only lists them. So what this
|
|
7
|
+
// snapshots is the block storage volume redkite's own postgres service keeps
|
|
8
|
+
// its data on, or the droplet when the database is the whole machine. A volume
|
|
9
|
+
// snapshot of a running Postgres is crash consistent rather than clean, which
|
|
10
|
+
// Postgres is built to survive: it replays the log on the way back up.
|
|
11
|
+
const API = "https://api.digitalocean.com/v2";
|
|
12
|
+
const TOKEN = "DIGITALOCEAN_TOKEN";
|
|
13
|
+
export function digitalOceanSnapshot(options) {
|
|
14
|
+
assertOneTarget(options);
|
|
15
|
+
return definePlugin({
|
|
16
|
+
name: `digitalocean-snapshot-${slug(options.volume ?? String(options.droplet ?? ""))}`,
|
|
17
|
+
steps: [snapshotStep(options)],
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function snapshotStep(options) {
|
|
21
|
+
const target = options.volume ?? String(options.droplet ?? "");
|
|
22
|
+
const send = options.request ?? ((url, init) => fetch(url, init));
|
|
23
|
+
const variable = options.tokenFrom ?? TOKEN;
|
|
24
|
+
return {
|
|
25
|
+
point: `swap:before:snapshot-${slug(target)}`,
|
|
26
|
+
check: (plan) => tokenFrom(variable, plan),
|
|
27
|
+
run: async (input, context) => {
|
|
28
|
+
const name = snapshotName(options.name ?? target, context.environment, new Date());
|
|
29
|
+
context.task.detail(`snapshotting ${target} as ${name}`);
|
|
30
|
+
const token = tokenFrom(variable, {
|
|
31
|
+
config: context.config,
|
|
32
|
+
environment: context.environment,
|
|
33
|
+
});
|
|
34
|
+
const answer = await send(urlFor(options), {
|
|
35
|
+
method: "POST",
|
|
36
|
+
headers: {
|
|
37
|
+
"content-type": "application/json",
|
|
38
|
+
authorization: `Bearer ${token}`,
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify(bodyFor(options, name)),
|
|
41
|
+
});
|
|
42
|
+
if (!answer.ok) {
|
|
43
|
+
throw new Error(`DigitalOcean refused the snapshot of ${target} (${answer.status}): ${await answer.text()}`);
|
|
44
|
+
}
|
|
45
|
+
return input;
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function urlFor(options) {
|
|
50
|
+
if (options.volume)
|
|
51
|
+
return `${API}/volumes/${options.volume}/snapshots`;
|
|
52
|
+
return `${API}/droplets/${options.droplet}/actions`;
|
|
53
|
+
}
|
|
54
|
+
// A volume takes a snapshot, a droplet is asked to perform one. Two endpoints
|
|
55
|
+
// with two shapes, which is why the target is not one field
|
|
56
|
+
function bodyFor(options, name) {
|
|
57
|
+
if (options.volume)
|
|
58
|
+
return { name };
|
|
59
|
+
return { type: "snapshot", name };
|
|
60
|
+
}
|
|
61
|
+
// Checked where the plugin is written rather than where it runs, so the config
|
|
62
|
+
// fails to load. The token cannot be: a plan reads the config without one
|
|
63
|
+
function assertOneTarget(options) {
|
|
64
|
+
if (options.volume && options.droplet !== undefined) {
|
|
65
|
+
throw new Error("digitalOceanSnapshot names both a volume and a droplet, and they are different disks");
|
|
66
|
+
}
|
|
67
|
+
if (!options.volume && options.droplet === undefined) {
|
|
68
|
+
throw new Error("digitalOceanSnapshot names no volume or droplet to snapshot");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=digitalOcean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"digitalOcean.js","sourceRoot":"","sources":["../../src/plugins/digitalOcean.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Plugin } from "../plugin.js";
|
|
2
|
+
export type Aws = (args: string[]) => Promise<{
|
|
3
|
+
stdout: string;
|
|
4
|
+
}>;
|
|
5
|
+
export type RdsSnapshotOptions = {
|
|
6
|
+
instance?: string;
|
|
7
|
+
cluster?: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
region?: string;
|
|
10
|
+
wait?: boolean;
|
|
11
|
+
aws?: Aws;
|
|
12
|
+
};
|
|
13
|
+
export declare function rdsSnapshot(options: RdsSnapshotOptions): Plugin;
|
|
14
|
+
//# sourceMappingURL=rds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rds.d.ts","sourceRoot":"","sources":["../../src/plugins/rds.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAYzD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAE/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAQ/D"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { definePlugin } from "../plugin.js";
|
|
4
|
+
import { slug, snapshotName } from "./snapshot.js";
|
|
5
|
+
// A snapshot of a managed Postgres or MySQL, taken before anything migrates it.
|
|
6
|
+
// Through the AWS CLI rather than the REST API: signing a request by hand is a
|
|
7
|
+
// page of crypto that nothing here could check, and every runner already has
|
|
8
|
+
// the CLI with the credentials the job was given.
|
|
9
|
+
const run = promisify(execFile);
|
|
10
|
+
export function rdsSnapshot(options) {
|
|
11
|
+
assertOneTarget(options);
|
|
12
|
+
const target = slug(options.instance ?? options.cluster ?? "");
|
|
13
|
+
return definePlugin({
|
|
14
|
+
name: `rds-snapshot-${target}`,
|
|
15
|
+
steps: [snapshotStep(options)],
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function snapshotStep(options) {
|
|
19
|
+
const target = options.instance ?? options.cluster ?? "";
|
|
20
|
+
const aws = options.aws ?? ((args) => run("aws", args));
|
|
21
|
+
return {
|
|
22
|
+
point: `swap:before:snapshot-${slug(target)}`,
|
|
23
|
+
run: async (input, context) => {
|
|
24
|
+
const identifier = snapshotName(options.name ?? target, context.environment, new Date());
|
|
25
|
+
context.task.detail(`snapshotting ${target} as ${identifier}`);
|
|
26
|
+
await aws(create(options, identifier));
|
|
27
|
+
// The data is captured when it begins, so this is not what makes the
|
|
28
|
+
// restore point good. It is what turns a snapshot that silently failed
|
|
29
|
+
// into a deploy that stops before the migration
|
|
30
|
+
if (options.wait) {
|
|
31
|
+
context.task.detail(`waiting for ${identifier}`);
|
|
32
|
+
await aws(ready(options, identifier));
|
|
33
|
+
}
|
|
34
|
+
return input;
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function create(options, identifier) {
|
|
39
|
+
const region = options.region ? ["--region", options.region] : [];
|
|
40
|
+
if (options.cluster) {
|
|
41
|
+
return [
|
|
42
|
+
"rds",
|
|
43
|
+
"create-db-cluster-snapshot",
|
|
44
|
+
"--db-cluster-identifier",
|
|
45
|
+
options.cluster,
|
|
46
|
+
"--db-cluster-snapshot-identifier",
|
|
47
|
+
identifier,
|
|
48
|
+
...region,
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
return [
|
|
52
|
+
"rds",
|
|
53
|
+
"create-db-snapshot",
|
|
54
|
+
"--db-instance-identifier",
|
|
55
|
+
options.instance ?? "",
|
|
56
|
+
"--db-snapshot-identifier",
|
|
57
|
+
identifier,
|
|
58
|
+
...region,
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
function ready(options, identifier) {
|
|
62
|
+
const region = options.region ? ["--region", options.region] : [];
|
|
63
|
+
if (options.cluster) {
|
|
64
|
+
return [
|
|
65
|
+
"rds",
|
|
66
|
+
"wait",
|
|
67
|
+
"db-cluster-snapshot-available",
|
|
68
|
+
"--db-cluster-snapshot-identifier",
|
|
69
|
+
identifier,
|
|
70
|
+
...region,
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
return ["rds", "wait", "db-snapshot-available", "--db-snapshot-identifier", identifier, ...region];
|
|
74
|
+
}
|
|
75
|
+
// An instance and a cluster are different API calls against different things,
|
|
76
|
+
// and guessing which was meant is worse than being told. Checked where the
|
|
77
|
+
// plugin is written rather than where it runs, so the config fails to load
|
|
78
|
+
function assertOneTarget(options) {
|
|
79
|
+
if (options.instance && options.cluster) {
|
|
80
|
+
throw new Error("rdsSnapshot names both an instance and a cluster, and they are different databases");
|
|
81
|
+
}
|
|
82
|
+
if (!options.instance && !options.cluster) {
|
|
83
|
+
throw new Error("rdsSnapshot names no instance or cluster to snapshot");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=rds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rds.js","sourceRoot":"","sources":["../../src/plugins/rds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Plan } from "../pipeline.js";
|
|
2
|
+
export type SnapshotPoint = `swap:before:${string}`;
|
|
3
|
+
export declare function slug(value: string): string;
|
|
4
|
+
export declare function stamp(now: Date): string;
|
|
5
|
+
export declare function snapshotName(prefix: string, environment: string, now: Date): string;
|
|
6
|
+
export declare function tokenFrom(name: string, plan: Plan): string;
|
|
7
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/plugins/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAS3C,MAAM,MAAM,aAAa,GAAG,eAAe,MAAM,EAAE,CAAC;AAIpD,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,UAMjC;AAKD,wBAAgB,KAAK,CAAC,GAAG,EAAE,IAAI,UAE9B;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,UAE1E;AAID,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,UAOjD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Letters, digits and single hyphens, which is the intersection of what RDS
|
|
2
|
+
// accepts as a snapshot identifier and what a point may be named
|
|
3
|
+
export function slug(value) {
|
|
4
|
+
return value
|
|
5
|
+
.toLowerCase()
|
|
6
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
7
|
+
.replace(/^-+|-+$/g, "")
|
|
8
|
+
.replace(/-{2,}/g, "-");
|
|
9
|
+
}
|
|
10
|
+
// Sortable, second-resolution, and legal in every identifier below. Two
|
|
11
|
+
// snapshots in one second would collide, and two deploys in one second is not
|
|
12
|
+
// a thing a swap can do
|
|
13
|
+
export function stamp(now) {
|
|
14
|
+
return now.toISOString().replace(/[-:T]/g, "").slice(0, 14);
|
|
15
|
+
}
|
|
16
|
+
// Names the deploy it was taken for. A snapshot nobody can place is one nobody
|
|
17
|
+
// will dare restore
|
|
18
|
+
export function snapshotName(prefix, environment, now) {
|
|
19
|
+
return slug(`${prefix}-${environment}-${stamp(now)}`);
|
|
20
|
+
}
|
|
21
|
+
// Read before the run starts, so a missing token is a config that fails while
|
|
22
|
+
// the host is untouched rather than a deploy that stops with the swap ahead
|
|
23
|
+
export function tokenFrom(name, plan) {
|
|
24
|
+
const value = process.env[name];
|
|
25
|
+
if (value)
|
|
26
|
+
return value;
|
|
27
|
+
throw new Error(`${name} is not set, and ${plan.config.project} snapshots its database before swapping`);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/plugins/snapshot.ts"],"names":[],"mappings":"AAWA,4EAA4E;AAC5E,iEAAiE;AACjE,MAAM,UAAU,IAAI,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,wEAAwE;AACxE,8EAA8E;AAC9E,wBAAwB;AACxB,MAAM,UAAU,KAAK,CAAC,GAAS;IAC7B,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,WAAmB,EAAE,GAAS;IACzE,OAAO,IAAI,CAAC,GAAG,MAAM,IAAI,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAU;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,oBAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,yCAAyC,CACxF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BuildSpec, CarryPath
|
|
1
|
+
import type { BuildSpec, CarryPath } from "../types.js";
|
|
2
2
|
type NodeAppOptions = {
|
|
3
3
|
builder?: string;
|
|
4
4
|
runtime?: string;
|
|
@@ -12,7 +12,6 @@ type NodeAppOptions = {
|
|
|
12
12
|
carry?: CarryPath[];
|
|
13
13
|
submodules?: boolean;
|
|
14
14
|
caches?: string[];
|
|
15
|
-
sourcemaps?: SourcemapSpec;
|
|
16
15
|
};
|
|
17
16
|
export declare function nodeApp(options: NodeAppOptions): BuildSpec;
|
|
18
17
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeApp.d.ts","sourceRoot":"","sources":["../../src/presets/nodeApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"nodeApp.d.ts","sourceRoot":"","sources":["../../src/presets/nodeApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExD,KAAK,cAAc,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAGhB,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CA2B1D"}
|