@catladder/cli 5.0.0 → 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/release/changesetsReleaseJob.js +3 -0
- package/dist/apps/cli/src/release/changesetsReleaseJob.js.map +1 -1
- package/dist/apps/cli/src/release/releaseEntry.d.ts +12 -0
- package/dist/apps/cli/src/release/releaseEntry.js +71 -0
- package/dist/apps/cli/src/release/releaseEntry.js.map +1 -0
- 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/catci/index.js +4 -4
- package/dist/bundles/catenv/index.js +115 -13
- package/dist/bundles/cli/index.js +749 -431
- package/dist/bundles/runner-images/semantic-release/Dockerfile +1 -0
- package/dist/bundles/runner-images/semantic-release/scripts/semanticRelease +14 -4
- 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-releases/SKILL.md +16 -2
- 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/runner-images/semantic-release/Dockerfile +1 -0
- package/dist/runner-images/semantic-release/scripts/semanticRelease +14 -4
- 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-releases/SKILL.md +16 -2
- 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/release/__tests__/releaseEntry.test.ts +88 -0
- package/src/release/changesetsReleaseJob.ts +3 -0
- package/src/release/releaseEntry.ts +86 -0
- 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
|
@@ -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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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./github"), exports);
|
|
18
|
+
__exportStar(require("./writeSecrets"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/secrets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,iDAA+B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IO } from "../core/types";
|
|
2
|
+
import type { WriteSecretsOptions } from "../vault/types";
|
|
3
|
+
/** secrets of one env of one component, ready to be written */
|
|
4
|
+
export type SecretsWrite = {
|
|
5
|
+
env: string;
|
|
6
|
+
componentName: string;
|
|
7
|
+
secrets: Record<string, unknown>;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* the one door for writing secret values: they go into the vault (the
|
|
11
|
+
* source of truth) and are mirrored to every enabled CI backend —
|
|
12
|
+
* which vault and which backends exist is invisible to the caller.
|
|
13
|
+
*
|
|
14
|
+
* Everything that produces a secret value must come through here: the
|
|
15
|
+
* secrets commands, but also the credentials `project setup`
|
|
16
|
+
* provisions (gcloud service account keys, kubernetes tokens).
|
|
17
|
+
*/
|
|
18
|
+
export declare const writeSecretsAndMirror: (io: IO, writes: SecretsWrite[], options?: WriteSecretsOptions) => Promise<void>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeSecretsAndMirror = 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
|
+
const gitlab_1 = require("../utils/gitlab");
|
|
8
|
+
const github_2 = require("./github");
|
|
9
|
+
/**
|
|
10
|
+
* the one door for writing secret values: they go into the vault (the
|
|
11
|
+
* source of truth) and are mirrored to every enabled CI backend —
|
|
12
|
+
* which vault and which backends exist is invisible to the caller.
|
|
13
|
+
*
|
|
14
|
+
* Everything that produces a secret value must come through here: the
|
|
15
|
+
* secrets commands, but also the credentials `project setup`
|
|
16
|
+
* provisions (gcloud service account keys, kubernetes tokens).
|
|
17
|
+
*/
|
|
18
|
+
const writeSecretsAndMirror = async (io, writes, options = {}) => {
|
|
19
|
+
const config = await (0, getProjectConfig_1.getProjectConfig)();
|
|
20
|
+
if (!config) {
|
|
21
|
+
throw new Error("no catladder config found");
|
|
22
|
+
}
|
|
23
|
+
io.log("");
|
|
24
|
+
io.log("writing secrets to the vault, please wait...");
|
|
25
|
+
io.log("");
|
|
26
|
+
for (const { env, componentName, secrets } of writes) {
|
|
27
|
+
io.log("writing " + env + ":" + componentName + "...\n");
|
|
28
|
+
await (await io.getVaultManager()).writeSecrets(env, componentName, secrets, io, options);
|
|
29
|
+
io.log("");
|
|
30
|
+
io.log("✅ " + env + ":" + componentName);
|
|
31
|
+
io.log("--------------------------------\n");
|
|
32
|
+
}
|
|
33
|
+
await mirrorSecretsToCiBackends(io, config, writes, options);
|
|
34
|
+
};
|
|
35
|
+
exports.writeSecretsAndMirror = writeSecretsAndMirror;
|
|
36
|
+
/**
|
|
37
|
+
* the vault is the source of truth; every enabled CI backend receives
|
|
38
|
+
* a mirrored copy of the written secrets (gitlab variables, github
|
|
39
|
+
* secrets), so all CI systems stay in sync
|
|
40
|
+
*/
|
|
41
|
+
const mirrorSecretsToCiBackends = async (io, config, writes, options) => {
|
|
42
|
+
var _a;
|
|
43
|
+
const enabled = (0, pipeline_1.getEnabledPipelineTypes)(config);
|
|
44
|
+
// gitlab mirror (unless gitlab is the vault itself, then it is
|
|
45
|
+
// already written)
|
|
46
|
+
if ((0, pipeline_1.getVaultConfig)(config).type !== "gitlab" && enabled.includes("gitlab")) {
|
|
47
|
+
for (const { env, componentName, secrets } of writes) {
|
|
48
|
+
await (0, gitlab_1.upsertAllVariables)(io, secrets, env, componentName, (_a = options.backup) !== null && _a !== void 0 ? _a : true);
|
|
49
|
+
}
|
|
50
|
+
io.log("✅ mirrored to gitlab");
|
|
51
|
+
}
|
|
52
|
+
if (!enabled.includes("github")) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const kinds = new Map();
|
|
56
|
+
for (const { env, componentName } of writes) {
|
|
57
|
+
const { secretEnvVarKeys, jobOnlyVars } = await (0, getProjectConfig_1.getEnvironment)(env, componentName);
|
|
58
|
+
[
|
|
59
|
+
...secretEnvVarKeys,
|
|
60
|
+
...jobOnlyVars.build.secretEnvVarKeys,
|
|
61
|
+
...jobOnlyVars.deploy.secretEnvVarKeys,
|
|
62
|
+
].forEach(({ key, kind }) => kinds.set((0, pipeline_1.getSecretVarName)(env, componentName, key), kind !== null && kind !== void 0 ? kind : "secret"));
|
|
63
|
+
}
|
|
64
|
+
const secrets = writes.flatMap(({ env, componentName, secrets }) => Object.entries(secrets).map(([key, value]) => {
|
|
65
|
+
var _a;
|
|
66
|
+
const name = (0, pipeline_1.getSecretVarName)(env, componentName, key);
|
|
67
|
+
return {
|
|
68
|
+
name,
|
|
69
|
+
value: typeof value === "string" ? value : JSON.stringify(value !== null && value !== void 0 ? value : ""),
|
|
70
|
+
kind: (_a = kinds.get(name)) !== null && _a !== void 0 ? _a : "secret",
|
|
71
|
+
};
|
|
72
|
+
}));
|
|
73
|
+
if (secrets.length === 0) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (!(await (0, github_1.isGhAuthenticated)())) {
|
|
77
|
+
io.log("⚠️ github pipeline is enabled, but the github cli (gh) is not authenticated — run `project secrets-sync-github` later to mirror the secrets");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const repo = await (0, github_2.getConfiguredGithubRepo)();
|
|
81
|
+
if (!repo) {
|
|
82
|
+
io.log("⚠️ github pipeline is enabled, but no github repository was found — run `project secrets-sync-github` later to mirror the secrets");
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
io.log(`mirroring ${secrets.length} secrets to github ('${repo}')...`);
|
|
86
|
+
await (0, github_2.pushSecretsToGithub)(io, repo, secrets, await (0, github_2.collectSecretTargets)(config));
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=writeSecrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writeSecrets.js","sourceRoot":"","sources":["../../../../../src/secrets/writeSecrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,16 @@ import type { IO } from "../core/types";
|
|
|
3
3
|
export declare const hasGitlabToken: () => Promise<boolean>;
|
|
4
4
|
export declare const setupGitlabToken: (io: IO) => Promise<void>;
|
|
5
5
|
export declare const getGitlabToken: (io: IO | null) => Promise<string>;
|
|
6
|
+
/**
|
|
7
|
+
* a gitlab api call that came back 404. Carries the path so a caller
|
|
8
|
+
* that wants to treat "does not exist yet" as normal can say so
|
|
9
|
+
* (`instanceof`) instead of matching on a message.
|
|
10
|
+
*/
|
|
11
|
+
export declare class GitlabNotFoundError extends Error {
|
|
12
|
+
readonly path: string;
|
|
13
|
+
readonly host: string;
|
|
14
|
+
constructor(path: string, host: string);
|
|
15
|
+
}
|
|
6
16
|
type Method = "GET" | "PUT" | "POST" | "DELETE";
|
|
7
17
|
export declare const doGitlabRequest: <T = any>(io: IO | null, path: string, data?: any, method?: Method) => Promise<T>;
|
|
8
18
|
/**
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.upsertAllVariables = exports.clearBackups = exports.getVariableValueByRawName = exports.getAllVariables = exports.getProjectInfo = exports.doGitlabRequestAllPages = exports.doGitlabRequest = exports.getGitlabToken = exports.setupGitlabToken = exports.hasGitlabToken = void 0;
|
|
6
|
+
exports.upsertAllVariables = exports.clearBackups = exports.getVariableValueByRawName = exports.getAllVariables = exports.getProjectInfo = exports.doGitlabRequestAllPages = exports.doGitlabRequest = exports.GitlabNotFoundError = exports.getGitlabToken = exports.setupGitlabToken = exports.hasGitlabToken = void 0;
|
|
7
7
|
const pipeline_1 = require("../../../../packages/pipeline/src/index.js");
|
|
8
8
|
const lodash_es_1 = require("lodash-es");
|
|
9
9
|
const memoizee_1 = __importDefault(require("memoizee"));
|
|
@@ -55,6 +55,20 @@ const getGitlabToken = async (io) => {
|
|
|
55
55
|
return (0, preferences_1.getPreference)(TOKEN_KEY);
|
|
56
56
|
};
|
|
57
57
|
exports.getGitlabToken = getGitlabToken;
|
|
58
|
+
/**
|
|
59
|
+
* a gitlab api call that came back 404. Carries the path so a caller
|
|
60
|
+
* that wants to treat "does not exist yet" as normal can say so
|
|
61
|
+
* (`instanceof`) instead of matching on a message.
|
|
62
|
+
*/
|
|
63
|
+
class GitlabNotFoundError extends Error {
|
|
64
|
+
constructor(path, host) {
|
|
65
|
+
super(`gitlab api: ${path} not found on ${host}`);
|
|
66
|
+
this.path = path;
|
|
67
|
+
this.host = host;
|
|
68
|
+
this.name = "GitlabNotFoundError";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.GitlabNotFoundError = GitlabNotFoundError;
|
|
58
72
|
const doGitlabRequest = async (io, path, data = undefined, method = "GET") => {
|
|
59
73
|
const [rootToken, { gitRemoteHost }] = await Promise.all([
|
|
60
74
|
(0, exports.getGitlabToken)(io),
|
|
@@ -76,7 +90,7 @@ const doGitlabRequest = async (io, path, data = undefined, method = "GET") => {
|
|
|
76
90
|
return null;
|
|
77
91
|
}
|
|
78
92
|
if (result.status === 404) {
|
|
79
|
-
throw new
|
|
93
|
+
throw new GitlabNotFoundError(path, gitRemoteHost);
|
|
80
94
|
}
|
|
81
95
|
throw new Error(`Could not send request to gitlab api ${path}: ${result.status} "${result.statusText}".\nResponse: ${JSON.stringify(await result.json(), null, 2)}`);
|
|
82
96
|
};
|
|
@@ -102,9 +116,20 @@ const doGitlabRequestAllPages = async (io, path) => {
|
|
|
102
116
|
};
|
|
103
117
|
exports.doGitlabRequestAllPages = doGitlabRequestAllPages;
|
|
104
118
|
const getProjectInfo = async (io) => {
|
|
105
|
-
const { gitRemotePath } = await (0, gitProjectInformation_1.getGitRemoteHostAndPath)();
|
|
106
|
-
|
|
107
|
-
|
|
119
|
+
const { gitRemoteHost, gitRemotePath } = await (0, gitProjectInformation_1.getGitRemoteHostAndPath)();
|
|
120
|
+
try {
|
|
121
|
+
return await (0, exports.doGitlabRequest)(io, `projects/${encodeURIComponent(gitRemotePath)}`);
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
if (e instanceof GitlabNotFoundError) {
|
|
125
|
+
// the classic: the remote is not a gitlab at all (a github one,
|
|
126
|
+
// say), so the request goes to a host without /api/v4 and every
|
|
127
|
+
// path answers 404
|
|
128
|
+
throw new Error(`no gitlab project '${gitRemotePath}' on '${gitRemoteHost}'. ` +
|
|
129
|
+
"Check the git remote and `pipelines` in catladder.ts — this command talks to the gitlab api.");
|
|
130
|
+
}
|
|
131
|
+
throw e;
|
|
132
|
+
}
|
|
108
133
|
};
|
|
109
134
|
exports.getProjectInfo = getProjectInfo;
|
|
110
135
|
exports.getAllVariables = (0, memoizee_1.default)(async (io, n = 5) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../../../../src/utils/gitlab.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAuD;AACvD,yCAA0C;AAC1C,wDAAgC;AAChC,4DAA+B;AAC/B,gDAAwB;AAExB,+CAA4E;AAC5E,wEAAuE;AAEvE,MAAM,SAAS,GAAG,8BAA8B,CAAC;AAE1C,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,IAAA,2BAAa,EAAC,SAAS,CAAC,CAAC;AAA5D,QAAA,cAAc,kBAA8C;AAClE,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAAM,EAAE,EAAE;IAC/C,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACX,EAAE,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IACxE,EAAE,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAC5D,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC7B,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACX,EAAE,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAClD,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5D,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAChB,IAAA,+CAAuB,GAAE;KAC1B,CAAC,CAAC;IAEH,IAAA,cAAI,EAAC,WAAW,aAAa,yCAAyC,CAAC,CAAC;IAExE,EAAE,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAExD,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC;QAC1C,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,6BAA6B;KACvC,CAAC,CAAC;IACH,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAA,2BAAa,EAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAChD,CAAC;AACH,CAAC,CAAC;AA1BW,QAAA,gBAAgB,oBA0B3B;AACK,MAAM,cAAc,GAAG,KAAK,EAAE,EAAa,EAAE,EAAE;IACpD,IAAI,CAAC,CAAC,MAAM,IAAA,sBAAc,GAAE,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CACX,4DAA4D,CAC7D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YACpB,+DAA+D;YAC/D,qDAAqD;YACrD,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,CAAC;QACJ,CAAC;QACD,MAAM,IAAA,wBAAgB,EAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAA,2BAAa,EAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC;AAlBW,QAAA,cAAc,kBAkBzB;
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../../../../src/utils/gitlab.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,5 +20,11 @@ export declare class BitwardenVault implements SecretsVault {
|
|
|
20
20
|
allowPrompt: boolean);
|
|
21
21
|
private session;
|
|
22
22
|
readAllSecrets(io: IO | null): Promise<Record<string, string>>;
|
|
23
|
+
/**
|
|
24
|
+
* upserts into the item's yaml note. The note is rewritten as a
|
|
25
|
+
* whole, so the values that are not part of this write have to be
|
|
26
|
+
* carried over — a single-key write (`secrets-set`, a credential
|
|
27
|
+
* provisioned by `project setup`) must not drop the rest.
|
|
28
|
+
*/
|
|
23
29
|
writeSecrets(io: IO, env: string, componentName: string, secrets: Record<string, unknown>): Promise<void>;
|
|
24
30
|
}
|
|
@@ -75,7 +75,14 @@ class BitwardenVault {
|
|
|
75
75
|
}
|
|
76
76
|
return secrets;
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* upserts into the item's yaml note. The note is rewritten as a
|
|
80
|
+
* whole, so the values that are not part of this write have to be
|
|
81
|
+
* carried over — a single-key write (`secrets-set`, a credential
|
|
82
|
+
* provisioned by `project setup`) must not drop the rest.
|
|
83
|
+
*/
|
|
78
84
|
async writeSecrets(io, env, componentName, secrets) {
|
|
85
|
+
var _a;
|
|
79
86
|
const { config, collectionName } = this;
|
|
80
87
|
const bwSession = await this.session(io);
|
|
81
88
|
const collection = await findCollection(bwSession, collectionName);
|
|
@@ -88,7 +95,10 @@ class BitwardenVault {
|
|
|
88
95
|
"--search",
|
|
89
96
|
name,
|
|
90
97
|
])).find((item) => item.name === name);
|
|
91
|
-
const
|
|
98
|
+
const previous = (existing === null || existing === void 0 ? void 0 : existing.notes)
|
|
99
|
+
? ((_a = (0, yaml_1.parse)(existing.notes)) !== null && _a !== void 0 ? _a : {})
|
|
100
|
+
: {};
|
|
101
|
+
const notes = (0, yaml_1.stringify)({ ...previous, ...secrets });
|
|
92
102
|
if (existing) {
|
|
93
103
|
await (0, bw_1.runBw)(bwSession, [
|
|
94
104
|
"edit",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitwardenVault.js","sourceRoot":"","sources":["../../../../../src/vault/BitwardenVault.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BitwardenVault.js","sourceRoot":"","sources":["../../../../../src/vault/BitwardenVault.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IO } from "../core/types";
|
|
2
|
-
import type { SecretsVault } from "./types";
|
|
2
|
+
import type { SecretsVault, WriteSecretsOptions } from "./types";
|
|
3
3
|
/**
|
|
4
4
|
* the legacy (and default) vault: the gitlab project variables double
|
|
5
5
|
* as the secret store
|
|
@@ -7,5 +7,5 @@ import type { SecretsVault } from "./types";
|
|
|
7
7
|
export declare class GitlabVault implements SecretsVault {
|
|
8
8
|
readonly id = "gitlab";
|
|
9
9
|
readAllSecrets(io: IO | null): Promise<Record<string, string>>;
|
|
10
|
-
writeSecrets(io: IO, env: string, componentName: string, secrets: Record<string, unknown
|
|
10
|
+
writeSecrets(io: IO, env: string, componentName: string, secrets: Record<string, unknown>, options?: WriteSecretsOptions): Promise<void>;
|
|
11
11
|
}
|
|
@@ -14,8 +14,9 @@ class GitlabVault {
|
|
|
14
14
|
const variables = await (0, gitlab_1.getAllVariables)(io);
|
|
15
15
|
return Object.fromEntries(variables.map((v) => [v.key, v.value]));
|
|
16
16
|
}
|
|
17
|
-
async writeSecrets(io, env, componentName, secrets) {
|
|
18
|
-
|
|
17
|
+
async writeSecrets(io, env, componentName, secrets, options = {}) {
|
|
18
|
+
var _a;
|
|
19
|
+
await (0, gitlab_1.upsertAllVariables)(io, secrets, env, componentName, (_a = options.backup) !== null && _a !== void 0 ? _a : true);
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
exports.GitlabVault = GitlabVault;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitlabVault.js","sourceRoot":"","sources":["../../../../../src/vault/GitlabVault.ts"],"names":[],"mappings":";;;AACA,4CAAsE;AAGtE;;;GAGG;AACH,MAAa,WAAW;IAAxB;QACW,OAAE,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"GitlabVault.js","sourceRoot":"","sources":["../../../../../src/vault/GitlabVault.ts"],"names":[],"mappings":";;;AACA,4CAAsE;AAGtE;;;GAGG;AACH,MAAa,WAAW;IAAxB;QACW,OAAE,GAAG,QAAQ,CAAC;IAsBzB,CAAC;IApBC,KAAK,CAAC,cAAc,CAAC,EAAa;QAChC,MAAM,SAAS,GAAG,MAAM,IAAA,wBAAe,EAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,EAAM,EACN,GAAW,EACX,aAAqB,EACrB,OAAgC,EAChC,UAA+B,EAAE;;QAEjC,MAAM,IAAA,2BAAkB,EACtB,EAAE,EACF,OAAO,EACP,GAAG,EACH,aAAa,EACb,MAAA,OAAO,CAAC,MAAM,mCAAI,IAAI,CACvB,CAAC;IACJ,CAAC;CACF;AAvBD,kCAuBC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Config } from "../../../../packages/pipeline/src/index.js";
|
|
2
2
|
import type { IO } from "../core/types";
|
|
3
|
-
import type { SecretsMode, SecretsVault } from "./types";
|
|
3
|
+
import type { SecretsMode, SecretsVault, WriteSecretsOptions } from "./types";
|
|
4
4
|
export type VaultManagerOptions = {
|
|
5
5
|
mode?: SecretsMode;
|
|
6
6
|
/**
|
|
@@ -33,7 +33,7 @@ export declare class VaultManager {
|
|
|
33
33
|
* writes secrets of one env/component to the vault and updates the
|
|
34
34
|
* local cache (write-through, "local" env only)
|
|
35
35
|
*/
|
|
36
|
-
writeSecrets(env: string, componentName: string, secrets: Record<string, unknown>, io?: IO | null): Promise<void>;
|
|
36
|
+
writeSecrets(env: string, componentName: string, secrets: Record<string, unknown>, io?: IO | null, options?: WriteSecretsOptions): Promise<void>;
|
|
37
37
|
/**
|
|
38
38
|
* the subset of the vault secrets that may be cached: the declared
|
|
39
39
|
* secrets of the "local" env, per component, as a hierarchy
|
|
@@ -72,11 +72,11 @@ class VaultManager {
|
|
|
72
72
|
* writes secrets of one env/component to the vault and updates the
|
|
73
73
|
* local cache (write-through, "local" env only)
|
|
74
74
|
*/
|
|
75
|
-
async writeSecrets(env, componentName, secrets, io = this.io) {
|
|
75
|
+
async writeSecrets(env, componentName, secrets, io = this.io, options = {}) {
|
|
76
76
|
if (!io) {
|
|
77
77
|
throw new Error("writing to the vault requires an interactive context");
|
|
78
78
|
}
|
|
79
|
-
await this.vault.writeSecrets(io, env, componentName, secrets);
|
|
79
|
+
await this.vault.writeSecrets(io, env, componentName, secrets, options);
|
|
80
80
|
if (env === CACHED_ENV) {
|
|
81
81
|
await (0, cache_1.updateSecretsCache)(this.vault.id, env, componentName, Object.fromEntries(Object.entries(secrets).map(([key, value]) => [
|
|
82
82
|
key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VaultManager.js","sourceRoot":"","sources":["../../../../../src/vault/VaultManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"VaultManager.js","sourceRoot":"","sources":["../../../../../src/vault/VaultManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,9 +17,23 @@ export type SecretsVault = {
|
|
|
17
17
|
readAllSecrets(io: IO | null): Promise<Record<string, string>>;
|
|
18
18
|
/**
|
|
19
19
|
* upserts the secrets of one env and component
|
|
20
|
-
* (keys as declared in the config, not the raw variable names)
|
|
20
|
+
* (keys as declared in the config, not the raw variable names).
|
|
21
|
+
* Upsert, not replace: values that are not part of `secrets` stay
|
|
22
|
+
* untouched.
|
|
21
23
|
*/
|
|
22
|
-
writeSecrets(io: IO, env: string, componentName: string, secrets: Record<string, unknown
|
|
24
|
+
writeSecrets(io: IO, env: string, componentName: string, secrets: Record<string, unknown>, options?: WriteSecretsOptions): Promise<void>;
|
|
25
|
+
};
|
|
26
|
+
export type WriteSecretsOptions = {
|
|
27
|
+
/**
|
|
28
|
+
* keep the previous value around where the store supports it (the
|
|
29
|
+
* gitlab store writes `<KEY>_backup_<timestamp>` variables) —
|
|
30
|
+
* a hand-written secret's only undo.
|
|
31
|
+
*
|
|
32
|
+
* Machine-provisioned credentials (service account keys, kubernetes
|
|
33
|
+
* tokens) are regenerated on demand and their old value is worthless,
|
|
34
|
+
* so `project setup` writes them with `backup: false`.
|
|
35
|
+
*/
|
|
36
|
+
backup?: boolean;
|
|
23
37
|
};
|
|
24
38
|
/**
|
|
25
39
|
* how secret resolution may interact with the vault:
|