@catladder/cli 5.0.1 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/apps/cli/src/apps/cli/commands/project/doctor/checkGithub.js +3 -3
- package/dist/apps/cli/src/apps/cli/commands/project/doctor/checkGithub.js.map +1 -1
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupAccessTokens.js +2 -2
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupAccessTokens.js.map +1 -1
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.js +2 -2
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupGithub.js.map +1 -1
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupKubernetes.js +23 -7
- package/dist/apps/cli/src/apps/cli/commands/project/setup/setupKubernetes.js.map +1 -1
- package/dist/apps/cli/src/commands/index.d.ts +1 -0
- package/dist/apps/cli/src/commands/index.js +4 -1
- package/dist/apps/cli/src/commands/index.js.map +1 -1
- package/dist/apps/cli/src/commands/project/commandConfigSecrets.js +2 -1
- package/dist/apps/cli/src/commands/project/commandConfigSecrets.js.map +1 -1
- package/dist/apps/cli/src/commands/project/commandMrPin.d.ts +21 -0
- package/dist/apps/cli/src/commands/project/commandMrPin.js +119 -0
- package/dist/apps/cli/src/commands/project/commandMrPin.js.map +1 -0
- package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.d.ts +1 -42
- package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.js +5 -124
- package/dist/apps/cli/src/commands/project/commandSecretsSyncGithub.js.map +1 -1
- package/dist/apps/cli/src/commands/project/secrets/commandSecretsPush.js +2 -1
- package/dist/apps/cli/src/commands/project/secrets/commandSecretsPush.js.map +1 -1
- package/dist/apps/cli/src/commands/project/secrets/commandSecretsSet.js +2 -2
- package/dist/apps/cli/src/commands/project/secrets/commandSecretsSet.js.map +1 -1
- package/dist/apps/cli/src/commands/project/secrets/document.d.ts +1 -12
- package/dist/apps/cli/src/commands/project/secrets/document.js +1 -79
- package/dist/apps/cli/src/commands/project/secrets/document.js.map +1 -1
- package/dist/apps/cli/src/gcloud/serviceAccounts.js +15 -4
- package/dist/apps/cli/src/gcloud/serviceAccounts.js.map +1 -1
- package/dist/apps/cli/src/secrets/github.d.ts +41 -0
- package/dist/apps/cli/src/secrets/github.js +127 -0
- package/dist/apps/cli/src/secrets/github.js.map +1 -0
- package/dist/apps/cli/src/secrets/index.d.ts +2 -0
- package/dist/apps/cli/src/secrets/index.js +19 -0
- package/dist/apps/cli/src/secrets/index.js.map +1 -0
- package/dist/apps/cli/src/secrets/writeSecrets.d.ts +18 -0
- package/dist/apps/cli/src/secrets/writeSecrets.js +88 -0
- package/dist/apps/cli/src/secrets/writeSecrets.js.map +1 -0
- package/dist/apps/cli/src/utils/gitlab.d.ts +10 -0
- package/dist/apps/cli/src/utils/gitlab.js +30 -5
- package/dist/apps/cli/src/utils/gitlab.js.map +1 -1
- package/dist/apps/cli/src/vault/BitwardenVault.d.ts +6 -0
- package/dist/apps/cli/src/vault/BitwardenVault.js +11 -1
- package/dist/apps/cli/src/vault/BitwardenVault.js.map +1 -1
- package/dist/apps/cli/src/vault/GitlabVault.d.ts +2 -2
- package/dist/apps/cli/src/vault/GitlabVault.js +3 -2
- package/dist/apps/cli/src/vault/GitlabVault.js.map +1 -1
- package/dist/apps/cli/src/vault/VaultManager.d.ts +2 -2
- package/dist/apps/cli/src/vault/VaultManager.js +2 -2
- package/dist/apps/cli/src/vault/VaultManager.js.map +1 -1
- package/dist/apps/cli/src/vault/types.d.ts +16 -2
- package/dist/bundles/catenv/index.js +115 -13
- package/dist/bundles/cli/index.js +749 -431
- package/dist/bundles/skills/catladder-cli/references/commands.md +13 -0
- package/dist/bundles/skills/catladder-deploys/SKILL.md +7 -0
- package/dist/bundles/skills/catladder-migrate-ci-backend/SKILL.md +7 -2
- package/dist/bundles/skills/catladder-pipelines/SKILL.md +27 -1
- package/dist/bundles/skills/catladder-secrets/SKILL.md +16 -0
- package/dist/packages/pipeline/src/autoStop.d.ts +22 -0
- package/dist/packages/pipeline/src/autoStop.js +30 -0
- package/dist/packages/pipeline/src/autoStop.js.map +1 -0
- package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js +2 -0
- package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js.map +1 -1
- package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.d.ts +4 -1
- package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.js +21 -1
- package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.js.map +1 -1
- package/dist/packages/pipeline/src/deploy/base/deploy.js +8 -2
- package/dist/packages/pipeline/src/deploy/base/deploy.js.map +1 -1
- package/dist/packages/pipeline/src/index.d.ts +1 -0
- package/dist/packages/pipeline/src/index.js +1 -0
- package/dist/packages/pipeline/src/index.js.map +1 -1
- package/dist/packages/pipeline/src/types/config.d.ts +32 -0
- package/dist/skills/catladder-cli/references/commands.md +13 -0
- package/dist/skills/catladder-deploys/SKILL.md +7 -0
- package/dist/skills/catladder-migrate-ci-backend/SKILL.md +7 -2
- package/dist/skills/catladder-pipelines/SKILL.md +27 -1
- package/dist/skills/catladder-secrets/SKILL.md +16 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/apps/cli/commands/project/doctor/checkGithub.ts +1 -1
- package/src/apps/cli/commands/project/setup/setupAccessTokens.ts +3 -2
- package/src/apps/cli/commands/project/setup/setupGithub.ts +1 -1
- package/src/apps/cli/commands/project/setup/setupKubernetes.ts +31 -20
- package/src/commands/index.ts +1 -0
- package/src/commands/project/commandConfigSecrets.ts +1 -1
- package/src/commands/project/commandMrPin.ts +184 -0
- package/src/commands/project/commandSecretsSyncGithub.ts +7 -154
- package/src/commands/project/secrets/commandSecretsPush.ts +2 -5
- package/src/commands/project/secrets/commandSecretsSet.ts +2 -2
- package/src/commands/project/secrets/document.ts +2 -127
- package/src/gcloud/serviceAccounts.ts +16 -7
- package/src/secrets/__tests__/writeSecrets.test.ts +147 -0
- package/src/secrets/github.ts +157 -0
- package/src/secrets/index.ts +2 -0
- package/src/secrets/writeSecrets.ts +138 -0
- package/src/utils/gitlab.ts +34 -7
- package/src/vault/BitwardenVault.ts +10 -1
- package/src/vault/GitlabVault.ts +9 -2
- package/src/vault/VaultManager.ts +3 -2
- package/src/vault/__tests__/BitwardenVault.test.ts +88 -0
- package/src/vault/types.ts +17 -1
|
@@ -1,130 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.commandSecretsSyncGithub =
|
|
3
|
+
exports.commandSecretsSyncGithub = void 0;
|
|
4
4
|
const pipeline_1 = require("../../../../../packages/pipeline/src/index.js");
|
|
5
5
|
const getProjectConfig_1 = require("../../config/getProjectConfig");
|
|
6
6
|
const defineCommand_1 = require("../../core/defineCommand");
|
|
7
|
+
const secrets_1 = require("../../secrets");
|
|
7
8
|
const github_1 = require("../../utils/github");
|
|
8
|
-
/**
|
|
9
|
-
* all secrets declared in the config, with their values read from the
|
|
10
|
-
* vault (github secrets are write-only and can never act as a source)
|
|
11
|
-
*/
|
|
12
|
-
const collectSecretsFromVault = async (io, envFilter) => {
|
|
13
|
-
const envAndComponents = await (0, getProjectConfig_1.getAllComponentsWithAllEnvsHierarchical)();
|
|
14
|
-
const kinds = new Map();
|
|
15
|
-
for (const [componentName, envs] of Object.entries(envAndComponents)) {
|
|
16
|
-
for (const env of envs) {
|
|
17
|
-
if (envFilter && !envFilter.includes(env)) {
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
const { secretEnvVarKeys, jobOnlyVars } = await (0, getProjectConfig_1.getEnvironment)(env, componentName);
|
|
21
|
-
const keys = [
|
|
22
|
-
...secretEnvVarKeys,
|
|
23
|
-
...jobOnlyVars.build.secretEnvVarKeys,
|
|
24
|
-
...jobOnlyVars.deploy.secretEnvVarKeys,
|
|
25
|
-
];
|
|
26
|
-
keys.forEach(({ key, kind }) => kinds.set((0, pipeline_1.getSecretVarName)(env, componentName, key), kind !== null && kind !== void 0 ? kind : "secret"));
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
const names = [...kinds.keys()];
|
|
30
|
-
const values = await (await io.getVaultManager()).readSecrets(names, io);
|
|
31
|
-
const secrets = names
|
|
32
|
-
.filter((name) => values[name] !== undefined)
|
|
33
|
-
.map((name) => {
|
|
34
|
-
var _a;
|
|
35
|
-
return ({
|
|
36
|
-
name,
|
|
37
|
-
value: values[name],
|
|
38
|
-
kind: (_a = kinds.get(name)) !== null && _a !== void 0 ? _a : "secret",
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
const missing = names.filter((name) => values[name] === undefined);
|
|
42
|
-
return { secrets, missing };
|
|
43
|
-
};
|
|
44
|
-
exports.collectSecretsFromVault = collectSecretsFromVault;
|
|
45
|
-
/** marker for repo-level (environment-less) targets */
|
|
46
|
-
const REPO_LEVEL = "";
|
|
47
|
-
/**
|
|
48
|
-
* derives which github environment(s) each secret/variable must live in
|
|
49
|
-
* by scanning the GENERATED workflows: a `${{ secrets.X }}` / `${{
|
|
50
|
-
* vars.X }}` reference in a job's env targets that job's environment
|
|
51
|
-
* (or the repo level when the job has none). Deriving from the real
|
|
52
|
-
* output means the sync can never drift from what the workflows expect.
|
|
53
|
-
*
|
|
54
|
-
* Environment secrets are the answer to github's cap of 100 secrets
|
|
55
|
-
* per REPO (a multi-env project easily exceeds it): the cap applies
|
|
56
|
-
* per environment instead.
|
|
57
|
-
*/
|
|
58
|
-
const collectSecretTargets = async (config) => {
|
|
59
|
-
var _a;
|
|
60
|
-
const workflows = await new pipeline_1.GithubBackend().createWorkflows(config);
|
|
61
|
-
const targets = new Map();
|
|
62
|
-
for (const workflow of Object.values(workflows)) {
|
|
63
|
-
for (const job of Object.values(workflow.jobs)) {
|
|
64
|
-
const environment = typeof job.environment === "object"
|
|
65
|
-
? job.environment.name
|
|
66
|
-
: job.environment;
|
|
67
|
-
for (const value of Object.values((_a = job.env) !== null && _a !== void 0 ? _a : {})) {
|
|
68
|
-
if (typeof value !== "string")
|
|
69
|
-
continue;
|
|
70
|
-
for (const match of value.matchAll(/\$\{\{\s*(?:secrets|vars)\.([A-Za-z0-9_]+)\s*\}\}/g)) {
|
|
71
|
-
const name = match[1];
|
|
72
|
-
if (!targets.has(name)) {
|
|
73
|
-
targets.set(name, new Set());
|
|
74
|
-
}
|
|
75
|
-
targets.get(name).add(environment !== null && environment !== void 0 ? environment : REPO_LEVEL);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return targets;
|
|
81
|
-
};
|
|
82
|
-
exports.collectSecretTargets = collectSecretTargets;
|
|
83
|
-
/**
|
|
84
|
-
* pushes vault values to github via the gh cli: sensitive ones as
|
|
85
|
-
* secrets (masked), "variable"-kind ones as variables (plain) — each
|
|
86
|
-
* into the environment(s) whose jobs reference them
|
|
87
|
-
*/
|
|
88
|
-
const pushSecretsToGithub = async (io, repo, secrets, targets) => {
|
|
89
|
-
const environments = [
|
|
90
|
-
...new Set([...targets.values()].flatMap((envs) => [...envs].filter((env) => env !== REPO_LEVEL))),
|
|
91
|
-
];
|
|
92
|
-
for (const environment of environments) {
|
|
93
|
-
await (0, github_1.ensureGithubEnvironment)(repo, environment);
|
|
94
|
-
io.log(`🌍 environment ${environment}`);
|
|
95
|
-
}
|
|
96
|
-
for (const { name, value, kind } of secrets) {
|
|
97
|
-
const envs = targets.get(name);
|
|
98
|
-
if (!envs) {
|
|
99
|
-
io.log(`⏭️ ${name} (not referenced by any generated workflow)`);
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
for (const environment of envs) {
|
|
103
|
-
const suffix = environment === REPO_LEVEL ? "" : ` → ${environment}`;
|
|
104
|
-
if (kind === "variable") {
|
|
105
|
-
await (0, github_1.setGithubVariable)(repo, name, value, environment || undefined);
|
|
106
|
-
io.log(`📖 ${name} (variable)${suffix}`);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
await (0, github_1.setGithubSecret)(repo, name, value, environment || undefined);
|
|
110
|
-
io.log(`✅ ${name}${suffix}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
exports.pushSecretsToGithub = pushSecretsToGithub;
|
|
116
|
-
/**
|
|
117
|
-
* resolves the github repository from the configured git remote
|
|
118
|
-
* (`pipelines.github.gitRemote`, defaults to origin)
|
|
119
|
-
*/
|
|
120
|
-
const getConfiguredGithubRepo = async () => {
|
|
121
|
-
const config = await (0, getProjectConfig_1.getProjectConfig)();
|
|
122
|
-
if (!config) {
|
|
123
|
-
return undefined;
|
|
124
|
-
}
|
|
125
|
-
return (0, github_1.getGithubRepoFromRemote)((0, pipeline_1.getPipelineGitRemote)(config, "github"));
|
|
126
|
-
};
|
|
127
|
-
exports.getConfiguredGithubRepo = getConfiguredGithubRepo;
|
|
128
9
|
/**
|
|
129
10
|
* copies the catladder secrets from the vault to github actions
|
|
130
11
|
* repository secrets, keeping the exact same names, so the github
|
|
@@ -161,12 +42,12 @@ exports.commandSecretsSyncGithub = (0, defineCommand_1.defineCommand)({
|
|
|
161
42
|
if (!(await (0, github_1.isGhAuthenticated)())) {
|
|
162
43
|
throw new Error("the github cli (gh) is not installed or not authenticated — run `gh auth login` first");
|
|
163
44
|
}
|
|
164
|
-
const repo = (_a = (await ctx.get("repo"))) !== null && _a !== void 0 ? _a : (await (0,
|
|
45
|
+
const repo = (_a = (await ctx.get("repo"))) !== null && _a !== void 0 ? _a : (await (0, secrets_1.getConfiguredGithubRepo)());
|
|
165
46
|
if (!repo) {
|
|
166
47
|
throw new Error(`no github repository found on the '${(0, pipeline_1.getPipelineGitRemote)(config, "github")}' remote — pass it as owner/name or configure pipelines.github.gitRemote`);
|
|
167
48
|
}
|
|
168
49
|
const envFilter = (_b = (await ctx.get("env"))) === null || _b === void 0 ? void 0 : _b.split(",").map((e) => e.trim());
|
|
169
|
-
const { secrets, missing } = await (0,
|
|
50
|
+
const { secrets, missing } = await (0, secrets_1.collectSecretsFromVault)(ctx, envFilter);
|
|
170
51
|
if (missing.length > 0) {
|
|
171
52
|
ctx.log(`⚠️ ${missing.length} secrets are not set in the vault and will be skipped:`);
|
|
172
53
|
missing.forEach((name) => ctx.log(` - ${name}`));
|
|
@@ -183,7 +64,7 @@ exports.commandSecretsSyncGithub = (0, defineCommand_1.defineCommand)({
|
|
|
183
64
|
if (!confirmed) {
|
|
184
65
|
throw new Error("abort");
|
|
185
66
|
}
|
|
186
|
-
await (0,
|
|
67
|
+
await (0, secrets_1.pushSecretsToGithub)(ctx, repo, secrets, await (0, secrets_1.collectSecretTargets)(config));
|
|
187
68
|
ctx.log("");
|
|
188
69
|
ctx.log("done! 😻 the github pipeline can use them as ${{ secrets.<NAME> }}");
|
|
189
70
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandSecretsSyncGithub.js","sourceRoot":"","sources":["../../../../../../src/commands/project/commandSecretsSyncGithub.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"commandSecretsSyncGithub.js","sourceRoot":"","sources":["../../../../../../src/commands/project/commandSecretsSyncGithub.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ const fs_extra_1 = require("fs-extra");
|
|
|
5
5
|
const yaml_1 = require("yaml");
|
|
6
6
|
const defineCommand_1 = require("../../../core/defineCommand");
|
|
7
7
|
const readStdin_1 = require("../../../utils/readStdin");
|
|
8
|
+
const secrets_1 = require("../../../secrets");
|
|
8
9
|
const document_1 = require("./document");
|
|
9
10
|
const scope_1 = require("./scope");
|
|
10
11
|
const parseKeysInput_1 = require("./parseKeysInput");
|
|
@@ -67,7 +68,7 @@ exports.commandSecretsPush = (0, defineCommand_1.defineCommand)({
|
|
|
67
68
|
if (!confirmed) {
|
|
68
69
|
throw new Error("abort");
|
|
69
70
|
}
|
|
70
|
-
await (0,
|
|
71
|
+
await (0, secrets_1.writeSecretsAndMirror)(ctx, writes);
|
|
71
72
|
ctx.log("done! 😻");
|
|
72
73
|
},
|
|
73
74
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandSecretsPush.js","sourceRoot":"","sources":["../../../../../../../src/commands/project/secrets/commandSecretsPush.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AACpC,+BAA6B;AAC7B,+DAA4D;AAC5D,wDAAqD;
|
|
1
|
+
{"version":3,"file":"commandSecretsPush.js","sourceRoot":"","sources":["../../../../../../../src/commands/project/secrets/commandSecretsPush.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ exports.commandSecretsSet = void 0;
|
|
|
4
4
|
const fs_extra_1 = require("fs-extra");
|
|
5
5
|
const defineCommand_1 = require("../../../core/defineCommand");
|
|
6
6
|
const readStdin_1 = require("../../../utils/readStdin");
|
|
7
|
-
const
|
|
7
|
+
const secrets_1 = require("../../../secrets");
|
|
8
8
|
const scope_1 = require("./scope");
|
|
9
9
|
const resolveValue = async (io, value, valueFile) => {
|
|
10
10
|
if (valueFile) {
|
|
@@ -75,7 +75,7 @@ exports.commandSecretsSet = (0, defineCommand_1.defineCommand)({
|
|
|
75
75
|
componentName,
|
|
76
76
|
secrets: { [key]: value },
|
|
77
77
|
}));
|
|
78
|
-
await (0,
|
|
78
|
+
await (0, secrets_1.writeSecretsAndMirror)(ctx, writes);
|
|
79
79
|
ctx.log("done! 😻");
|
|
80
80
|
},
|
|
81
81
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandSecretsSet.js","sourceRoot":"","sources":["../../../../../../../src/commands/project/secrets/commandSecretsSet.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AACpC,+DAA4D;AAE5D,wDAAqD;AAErD,
|
|
1
|
+
{"version":3,"file":"commandSecretsSet.js","sourceRoot":"","sources":["../../../../../../../src/commands/project/secrets/commandSecretsSet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IO } from "../../../core/types";
|
|
2
|
+
import type { SecretsWrite } from "../../../secrets";
|
|
2
3
|
import type { ScopedSecretKeys } from "./scope";
|
|
3
4
|
/** placeholder for secrets that have no value in the vault yet */
|
|
4
5
|
export declare const FILL_ME = "\uD83D\uDEA8 FILL ME";
|
|
@@ -11,12 +12,6 @@ export type SecretsDocument = {
|
|
|
11
12
|
[env: string]: Record<string, unknown>;
|
|
12
13
|
};
|
|
13
14
|
};
|
|
14
|
-
/** secrets of one env of one component, ready to be written */
|
|
15
|
-
export type SecretsWrite = {
|
|
16
|
-
env: string;
|
|
17
|
-
componentName: string;
|
|
18
|
-
secrets: Record<string, unknown>;
|
|
19
|
-
};
|
|
20
15
|
/**
|
|
21
16
|
* builds the document for the given scope with the current values from
|
|
22
17
|
* the vault; unset secrets appear as the FILL_ME placeholder
|
|
@@ -39,9 +34,3 @@ export declare const collectSecretsWrites: (document: SecretsDocument, scoped: S
|
|
|
39
34
|
writes: SecretsWrite[];
|
|
40
35
|
skipped: string[];
|
|
41
36
|
};
|
|
42
|
-
/**
|
|
43
|
-
* writes secrets to the vault (the source of truth) and mirrors them
|
|
44
|
-
* to every enabled CI backend — which backends exist is invisible to
|
|
45
|
-
* the caller
|
|
46
|
-
*/
|
|
47
|
-
export declare const writeSecretsAndMirror: (io: IO, writes: SecretsWrite[]) => Promise<void>;
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.collectSecretsWrites = exports.checkSecretsDocument = exports.buildSecretsDocument = exports.FILL_ME = void 0;
|
|
4
4
|
const pipeline_1 = require("../../../../../../packages/pipeline/src/index.js");
|
|
5
|
-
const getProjectConfig_1 = require("../../../config/getProjectConfig");
|
|
6
|
-
const github_1 = require("../../../utils/github");
|
|
7
|
-
const gitlab_1 = require("../../../utils/gitlab");
|
|
8
|
-
const commandSecretsSyncGithub_1 = require("../commandSecretsSyncGithub");
|
|
9
5
|
/** placeholder for secrets that have no value in the vault yet */
|
|
10
6
|
exports.FILL_ME = "🚨 FILL ME";
|
|
11
7
|
/* for convenience, parse json values. that makes it easier to edit secrets that are objects */
|
|
@@ -103,78 +99,4 @@ const collectSecretsWrites = (document, scoped) => {
|
|
|
103
99
|
return { writes, skipped };
|
|
104
100
|
};
|
|
105
101
|
exports.collectSecretsWrites = collectSecretsWrites;
|
|
106
|
-
/**
|
|
107
|
-
* writes secrets to the vault (the source of truth) and mirrors them
|
|
108
|
-
* to every enabled CI backend — which backends exist is invisible to
|
|
109
|
-
* the caller
|
|
110
|
-
*/
|
|
111
|
-
const writeSecretsAndMirror = async (io, writes) => {
|
|
112
|
-
const config = await (0, getProjectConfig_1.getProjectConfig)();
|
|
113
|
-
if (!config) {
|
|
114
|
-
throw new Error("no catladder config found");
|
|
115
|
-
}
|
|
116
|
-
io.log("");
|
|
117
|
-
io.log("writing secrets to the vault, please wait...");
|
|
118
|
-
io.log("");
|
|
119
|
-
for (const { env, componentName, secrets } of writes) {
|
|
120
|
-
io.log("writing " + env + ":" + componentName + "...\n");
|
|
121
|
-
await (await io.getVaultManager()).writeSecrets(env, componentName, secrets);
|
|
122
|
-
io.log("");
|
|
123
|
-
io.log("✅ " + env + ":" + componentName);
|
|
124
|
-
io.log("--------------------------------\n");
|
|
125
|
-
}
|
|
126
|
-
await mirrorSecretsToCiBackends(io, config, writes);
|
|
127
|
-
};
|
|
128
|
-
exports.writeSecretsAndMirror = writeSecretsAndMirror;
|
|
129
|
-
/**
|
|
130
|
-
* the vault is the source of truth; every enabled CI backend receives
|
|
131
|
-
* a mirrored copy of the written secrets (gitlab variables, github
|
|
132
|
-
* secrets), so all CI systems stay in sync
|
|
133
|
-
*/
|
|
134
|
-
const mirrorSecretsToCiBackends = async (io, config, writes) => {
|
|
135
|
-
const enabled = (0, pipeline_1.getEnabledPipelineTypes)(config);
|
|
136
|
-
// gitlab mirror (unless gitlab is the vault itself, then it is
|
|
137
|
-
// already written)
|
|
138
|
-
if ((0, pipeline_1.getVaultConfig)(config).type !== "gitlab" && enabled.includes("gitlab")) {
|
|
139
|
-
for (const { env, componentName, secrets } of writes) {
|
|
140
|
-
await (0, gitlab_1.upsertAllVariables)(io, secrets, env, componentName);
|
|
141
|
-
}
|
|
142
|
-
io.log("✅ mirrored to gitlab");
|
|
143
|
-
}
|
|
144
|
-
if (!enabled.includes("github")) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
const kinds = new Map();
|
|
148
|
-
for (const { env, componentName } of writes) {
|
|
149
|
-
const { secretEnvVarKeys, jobOnlyVars } = await (0, getProjectConfig_1.getEnvironment)(env, componentName);
|
|
150
|
-
[
|
|
151
|
-
...secretEnvVarKeys,
|
|
152
|
-
...jobOnlyVars.build.secretEnvVarKeys,
|
|
153
|
-
...jobOnlyVars.deploy.secretEnvVarKeys,
|
|
154
|
-
].forEach(({ key, kind }) => kinds.set((0, pipeline_1.getSecretVarName)(env, componentName, key), kind !== null && kind !== void 0 ? kind : "secret"));
|
|
155
|
-
}
|
|
156
|
-
const secrets = writes.flatMap(({ env, componentName, secrets }) => Object.entries(secrets).map(([key, value]) => {
|
|
157
|
-
var _a;
|
|
158
|
-
const name = (0, pipeline_1.getSecretVarName)(env, componentName, key);
|
|
159
|
-
return {
|
|
160
|
-
name,
|
|
161
|
-
value: typeof value === "string" ? value : JSON.stringify(value !== null && value !== void 0 ? value : ""),
|
|
162
|
-
kind: (_a = kinds.get(name)) !== null && _a !== void 0 ? _a : "secret",
|
|
163
|
-
};
|
|
164
|
-
}));
|
|
165
|
-
if (secrets.length === 0) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
if (!(await (0, github_1.isGhAuthenticated)())) {
|
|
169
|
-
io.log("⚠️ github pipeline is enabled, but the github cli (gh) is not authenticated — run `project secrets-sync-github` later to mirror the secrets");
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
const repo = await (0, commandSecretsSyncGithub_1.getConfiguredGithubRepo)();
|
|
173
|
-
if (!repo) {
|
|
174
|
-
io.log("⚠️ github pipeline is enabled, but no github repository was found — run `project secrets-sync-github` later to mirror the secrets");
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
io.log(`mirroring ${secrets.length} secrets to github ('${repo}')...`);
|
|
178
|
-
await (0, commandSecretsSyncGithub_1.pushSecretsToGithub)(io, repo, secrets, await (0, commandSecretsSyncGithub_1.collectSecretTargets)(config));
|
|
179
|
-
};
|
|
180
102
|
//# sourceMappingURL=document.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../../../../../../src/commands/project/secrets/document.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../../../../../../src/commands/project/secrets/document.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.upsertGcloudServiceAccountAndSaveSecret = exports.accountExists = void 0;
|
|
4
4
|
const child_process_promise_1 = require("child-process-promise");
|
|
5
|
-
const
|
|
5
|
+
const secrets_1 = require("../secrets");
|
|
6
6
|
const serviceAccountNames_1 = require("./serviceAccountNames");
|
|
7
7
|
const accountExists = async (fullIdentifier) => {
|
|
8
8
|
try {
|
|
@@ -39,9 +39,20 @@ const upsertGcloudServiceAccount = async (context, account) => {
|
|
|
39
39
|
const upsertGcloudServiceAccountAndSaveSecret = async (instance, context, account, secretName) => {
|
|
40
40
|
instance.log("upserting service account " + account.name + "...");
|
|
41
41
|
const key = await upsertGcloudServiceAccount(context, account);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
// through the vault (and from there to every enabled ci backend) —
|
|
43
|
+
// the key is a secret like any other, the deploy jobs read it under
|
|
44
|
+
// its declared name. Writing it to gitlab directly would break every
|
|
45
|
+
// project that has no gitlab.
|
|
46
|
+
await (0, secrets_1.writeSecretsAndMirror)(instance, [
|
|
47
|
+
{
|
|
48
|
+
env: context.env,
|
|
49
|
+
componentName: context.name,
|
|
50
|
+
secrets: { [secretName]: key },
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
// a fresh key is created on every run, the previous one is deleted
|
|
54
|
+
// at google — a backup copy of it would only be a dead secret
|
|
55
|
+
{ backup: false });
|
|
45
56
|
instance.log("done!");
|
|
46
57
|
};
|
|
47
58
|
exports.upsertGcloudServiceAccountAndSaveSecret = upsertGcloudServiceAccountAndSaveSecret;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceAccounts.js","sourceRoot":"","sources":["../../../../../src/gcloud/serviceAccounts.ts"],"names":[],"mappings":";;;AAEA,iEAA6C;AAE7C,
|
|
1
|
+
{"version":3,"file":"serviceAccounts.js","sourceRoot":"","sources":["../../../../../src/gcloud/serviceAccounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Config } from "../../../../packages/pipeline/src/index.js";
|
|
2
|
+
import type { IO } from "../core/types";
|
|
3
|
+
/**
|
|
4
|
+
* all secrets declared in the config, with their values read from the
|
|
5
|
+
* vault (github secrets are write-only and can never act as a source)
|
|
6
|
+
*/
|
|
7
|
+
export declare const collectSecretsFromVault: (io: IO, envFilter?: string[]) => Promise<{
|
|
8
|
+
secrets: {
|
|
9
|
+
name: string;
|
|
10
|
+
value: string;
|
|
11
|
+
kind: "secret" | "variable";
|
|
12
|
+
}[];
|
|
13
|
+
missing: string[];
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* derives which github environment(s) each secret/variable must live in
|
|
17
|
+
* by scanning the GENERATED workflows: a `${{ secrets.X }}` / `${{
|
|
18
|
+
* vars.X }}` reference in a job's env targets that job's environment
|
|
19
|
+
* (or the repo level when the job has none). Deriving from the real
|
|
20
|
+
* output means the sync can never drift from what the workflows expect.
|
|
21
|
+
*
|
|
22
|
+
* Environment secrets are the answer to github's cap of 100 secrets
|
|
23
|
+
* per REPO (a multi-env project easily exceeds it): the cap applies
|
|
24
|
+
* per environment instead.
|
|
25
|
+
*/
|
|
26
|
+
export declare const collectSecretTargets: (config: Config) => Promise<Map<string, Set<string>>>;
|
|
27
|
+
/**
|
|
28
|
+
* pushes vault values to github via the gh cli: sensitive ones as
|
|
29
|
+
* secrets (masked), "variable"-kind ones as variables (plain) — each
|
|
30
|
+
* into the environment(s) whose jobs reference them
|
|
31
|
+
*/
|
|
32
|
+
export declare const pushSecretsToGithub: (io: IO, repo: string, secrets: {
|
|
33
|
+
name: string;
|
|
34
|
+
value: string;
|
|
35
|
+
kind: "secret" | "variable";
|
|
36
|
+
}[], targets: Map<string, Set<string>>) => Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* resolves the github repository from the configured git remote
|
|
39
|
+
* (`pipelines.github.gitRemote`, defaults to origin)
|
|
40
|
+
*/
|
|
41
|
+
export declare const getConfiguredGithubRepo: () => Promise<string | undefined>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConfiguredGithubRepo = exports.pushSecretsToGithub = exports.collectSecretTargets = exports.collectSecretsFromVault = void 0;
|
|
4
|
+
const pipeline_1 = require("../../../../packages/pipeline/src/index.js");
|
|
5
|
+
const getProjectConfig_1 = require("../config/getProjectConfig");
|
|
6
|
+
const github_1 = require("../utils/github");
|
|
7
|
+
/**
|
|
8
|
+
* all secrets declared in the config, with their values read from the
|
|
9
|
+
* vault (github secrets are write-only and can never act as a source)
|
|
10
|
+
*/
|
|
11
|
+
const collectSecretsFromVault = async (io, envFilter) => {
|
|
12
|
+
const envAndComponents = await (0, getProjectConfig_1.getAllComponentsWithAllEnvsHierarchical)();
|
|
13
|
+
const kinds = new Map();
|
|
14
|
+
for (const [componentName, envs] of Object.entries(envAndComponents)) {
|
|
15
|
+
for (const env of envs) {
|
|
16
|
+
if (envFilter && !envFilter.includes(env)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const { secretEnvVarKeys, jobOnlyVars } = await (0, getProjectConfig_1.getEnvironment)(env, componentName);
|
|
20
|
+
const keys = [
|
|
21
|
+
...secretEnvVarKeys,
|
|
22
|
+
...jobOnlyVars.build.secretEnvVarKeys,
|
|
23
|
+
...jobOnlyVars.deploy.secretEnvVarKeys,
|
|
24
|
+
];
|
|
25
|
+
keys.forEach(({ key, kind }) => kinds.set((0, pipeline_1.getSecretVarName)(env, componentName, key), kind !== null && kind !== void 0 ? kind : "secret"));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const names = [...kinds.keys()];
|
|
29
|
+
const values = await (await io.getVaultManager()).readSecrets(names, io);
|
|
30
|
+
const secrets = names
|
|
31
|
+
.filter((name) => values[name] !== undefined)
|
|
32
|
+
.map((name) => {
|
|
33
|
+
var _a;
|
|
34
|
+
return ({
|
|
35
|
+
name,
|
|
36
|
+
value: values[name],
|
|
37
|
+
kind: (_a = kinds.get(name)) !== null && _a !== void 0 ? _a : "secret",
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
const missing = names.filter((name) => values[name] === undefined);
|
|
41
|
+
return { secrets, missing };
|
|
42
|
+
};
|
|
43
|
+
exports.collectSecretsFromVault = collectSecretsFromVault;
|
|
44
|
+
/** marker for repo-level (environment-less) targets */
|
|
45
|
+
const REPO_LEVEL = "";
|
|
46
|
+
/**
|
|
47
|
+
* derives which github environment(s) each secret/variable must live in
|
|
48
|
+
* by scanning the GENERATED workflows: a `${{ secrets.X }}` / `${{
|
|
49
|
+
* vars.X }}` reference in a job's env targets that job's environment
|
|
50
|
+
* (or the repo level when the job has none). Deriving from the real
|
|
51
|
+
* output means the sync can never drift from what the workflows expect.
|
|
52
|
+
*
|
|
53
|
+
* Environment secrets are the answer to github's cap of 100 secrets
|
|
54
|
+
* per REPO (a multi-env project easily exceeds it): the cap applies
|
|
55
|
+
* per environment instead.
|
|
56
|
+
*/
|
|
57
|
+
const collectSecretTargets = async (config) => {
|
|
58
|
+
var _a;
|
|
59
|
+
const workflows = await new pipeline_1.GithubBackend().createWorkflows(config);
|
|
60
|
+
const targets = new Map();
|
|
61
|
+
for (const workflow of Object.values(workflows)) {
|
|
62
|
+
for (const job of Object.values(workflow.jobs)) {
|
|
63
|
+
const environment = typeof job.environment === "object"
|
|
64
|
+
? job.environment.name
|
|
65
|
+
: job.environment;
|
|
66
|
+
for (const value of Object.values((_a = job.env) !== null && _a !== void 0 ? _a : {})) {
|
|
67
|
+
if (typeof value !== "string")
|
|
68
|
+
continue;
|
|
69
|
+
for (const match of value.matchAll(/\$\{\{\s*(?:secrets|vars)\.([A-Za-z0-9_]+)\s*\}\}/g)) {
|
|
70
|
+
const name = match[1];
|
|
71
|
+
if (!targets.has(name)) {
|
|
72
|
+
targets.set(name, new Set());
|
|
73
|
+
}
|
|
74
|
+
targets.get(name).add(environment !== null && environment !== void 0 ? environment : REPO_LEVEL);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return targets;
|
|
80
|
+
};
|
|
81
|
+
exports.collectSecretTargets = collectSecretTargets;
|
|
82
|
+
/**
|
|
83
|
+
* pushes vault values to github via the gh cli: sensitive ones as
|
|
84
|
+
* secrets (masked), "variable"-kind ones as variables (plain) — each
|
|
85
|
+
* into the environment(s) whose jobs reference them
|
|
86
|
+
*/
|
|
87
|
+
const pushSecretsToGithub = async (io, repo, secrets, targets) => {
|
|
88
|
+
const environments = [
|
|
89
|
+
...new Set([...targets.values()].flatMap((envs) => [...envs].filter((env) => env !== REPO_LEVEL))),
|
|
90
|
+
];
|
|
91
|
+
for (const environment of environments) {
|
|
92
|
+
await (0, github_1.ensureGithubEnvironment)(repo, environment);
|
|
93
|
+
io.log(`🌍 environment ${environment}`);
|
|
94
|
+
}
|
|
95
|
+
for (const { name, value, kind } of secrets) {
|
|
96
|
+
const envs = targets.get(name);
|
|
97
|
+
if (!envs) {
|
|
98
|
+
io.log(`⏭️ ${name} (not referenced by any generated workflow)`);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
for (const environment of envs) {
|
|
102
|
+
const suffix = environment === REPO_LEVEL ? "" : ` → ${environment}`;
|
|
103
|
+
if (kind === "variable") {
|
|
104
|
+
await (0, github_1.setGithubVariable)(repo, name, value, environment || undefined);
|
|
105
|
+
io.log(`📖 ${name} (variable)${suffix}`);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
await (0, github_1.setGithubSecret)(repo, name, value, environment || undefined);
|
|
109
|
+
io.log(`✅ ${name}${suffix}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
exports.pushSecretsToGithub = pushSecretsToGithub;
|
|
115
|
+
/**
|
|
116
|
+
* resolves the github repository from the configured git remote
|
|
117
|
+
* (`pipelines.github.gitRemote`, defaults to origin)
|
|
118
|
+
*/
|
|
119
|
+
const getConfiguredGithubRepo = async () => {
|
|
120
|
+
const config = await (0, getProjectConfig_1.getProjectConfig)();
|
|
121
|
+
if (!config) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
return (0, github_1.getGithubRepoFromRemote)((0, pipeline_1.getPipelineGitRemote)(config, "github"));
|
|
125
|
+
};
|
|
126
|
+
exports.getConfiguredGithubRepo = getConfiguredGithubRepo;
|
|
127
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../../src/secrets/github.ts"],"names":[],"mappings":"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"}
|