@catladder/cli 0.0.0-next-c177efda → 0.0.0-next-e3ccf7d4
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/bundles/catenv/index.js +49 -12
- package/dist/bundles/cli/index.js +130 -29
- package/dist/cli/src/apps/cli/commands/project/commandConfigSecrets.js +1 -1
- package/dist/cli/src/apps/cli/commands/project/commandConfigSecrets.js.map +1 -1
- package/dist/cli/src/commands/project/commandSecretsSyncGithub.d.ts +17 -3
- package/dist/cli/src/commands/project/commandSecretsSyncGithub.js +60 -11
- package/dist/cli/src/commands/project/commandSecretsSyncGithub.js.map +1 -1
- package/dist/cli/src/utils/github.d.ts +7 -2
- package/dist/cli/src/utils/github.js +21 -6
- package/dist/cli/src/utils/github.js.map +1 -1
- package/dist/pipeline/src/backends/github/GithubBackend.js +10 -3
- package/dist/pipeline/src/backends/github/GithubBackend.js.map +1 -1
- package/dist/pipeline/src/backends/github/createGithubJobs.js +32 -7
- package/dist/pipeline/src/backends/github/createGithubJobs.js.map +1 -1
- package/dist/pipeline/src/backends/gitlab/GitlabBackend.js +6 -1
- package/dist/pipeline/src/backends/gitlab/GitlabBackend.js.map +1 -1
- package/dist/pipeline/src/constants.js +1 -1
- package/dist/pipeline/src/types/config.d.ts +10 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/apps/cli/commands/project/commandConfigSecrets.ts +7 -1
- package/src/commands/project/commandSecretsSyncGithub.ts +81 -9
- package/src/utils/github.ts +50 -5
|
@@ -1530,6 +1530,7 @@ const path_1 = __nccwpck_require__(16928);
|
|
|
1530
1530
|
const createAllJobs_1 = __nccwpck_require__(83671);
|
|
1531
1531
|
const config_1 = __nccwpck_require__(96925);
|
|
1532
1532
|
const ciVariables_1 = __nccwpck_require__(25474);
|
|
1533
|
+
const index_1 = __nccwpck_require__(93243);
|
|
1533
1534
|
const createGithubJobs_1 = __nccwpck_require__(14016);
|
|
1534
1535
|
const jobImagesPlan_1 = __nccwpck_require__(11585);
|
|
1535
1536
|
const scriptFunctions_1 = __nccwpck_require__(75759);
|
|
@@ -1607,6 +1608,12 @@ class GithubBackend {
|
|
|
1607
1608
|
*/
|
|
1608
1609
|
async createWorkflows(config, images = this.createImagesPlan(config), scripts = new scriptFiles_1.GithubScriptFiles()) {
|
|
1609
1610
|
const workflows = {};
|
|
1611
|
+
// per-pipeline-type variables (pipelines.github.runnerVariables);
|
|
1612
|
+
// workflow-level env, so job-level runnerVariables take precedence
|
|
1613
|
+
const workflowEnv = {
|
|
1614
|
+
...ciVariables_1.GITHUB_INJECTED_WORKFLOW_ENV,
|
|
1615
|
+
...(0, index_1.getPipelineOptions)(config, this.type).runnerVariables
|
|
1616
|
+
};
|
|
1610
1617
|
const reviewStopJobs = {};
|
|
1611
1618
|
const manualJobs = {};
|
|
1612
1619
|
for (const trigger of config_1.ALL_PIPELINE_TRIGGERS) {
|
|
@@ -1641,7 +1648,7 @@ class GithubBackend {
|
|
|
1641
1648
|
workflows[`${GENERATED_FILE_PREFIX}${workflowFileName(trigger)}`] = {
|
|
1642
1649
|
...TRIGGER_WORKFLOWS[trigger],
|
|
1643
1650
|
...workflowPermissions(images),
|
|
1644
|
-
env:
|
|
1651
|
+
env: workflowEnv,
|
|
1645
1652
|
jobs: {
|
|
1646
1653
|
...makeEnsureImageGithubJobs(images),
|
|
1647
1654
|
...jobs
|
|
@@ -1658,7 +1665,7 @@ class GithubBackend {
|
|
|
1658
1665
|
}
|
|
1659
1666
|
},
|
|
1660
1667
|
...workflowPermissions(images),
|
|
1661
|
-
env:
|
|
1668
|
+
env: workflowEnv,
|
|
1662
1669
|
jobs: {
|
|
1663
1670
|
...makeEnsureImageGithubJobs(images),
|
|
1664
1671
|
...reviewStopJobs
|
|
@@ -1681,7 +1688,7 @@ class GithubBackend {
|
|
|
1681
1688
|
}
|
|
1682
1689
|
},
|
|
1683
1690
|
...workflowPermissions(images),
|
|
1684
|
-
env:
|
|
1691
|
+
env: workflowEnv,
|
|
1685
1692
|
jobs: {
|
|
1686
1693
|
...makeEnsureImageGithubJobs(images),
|
|
1687
1694
|
...Object.fromEntries(Object.entries(manualJobs).map(([id, job]) => [id, {
|
|
@@ -1997,6 +2004,36 @@ const makeGithubJob = (context, job, allJobs, uploadProviderIds, images, scripts
|
|
|
1997
2004
|
...getReferencedSecretsEnv(runScript, secretKinds),
|
|
1998
2005
|
CL_JOB_IMAGE: image !== null && image !== void 0 ? image : "runner"
|
|
1999
2006
|
};
|
|
2007
|
+
/**
|
|
2008
|
+
* the github environment of the job — serving two purposes:
|
|
2009
|
+
* deployment tracking on deploy jobs, and access to environment
|
|
2010
|
+
* secrets (the repo-level cap of 100 secrets doesn't scale to
|
|
2011
|
+
* multiple envs). Names are keyed by env NAME, never env type: an
|
|
2012
|
+
* app can have several envs of the same type.
|
|
2013
|
+
*
|
|
2014
|
+
* - deploy jobs: `<env>-<component>` — static (unlike the former
|
|
2015
|
+
* per-PR review names), so environment secrets can attach, and
|
|
2016
|
+
* each component keeps its own deployment badge/url in the
|
|
2017
|
+
* github ui. For review, PRs share the component's environment:
|
|
2018
|
+
* a newer PR's deploy marks the previous one Inactive (the badge,
|
|
2019
|
+
* not the app) — the price of a static name.
|
|
2020
|
+
* - other jobs referencing secrets join the shared `<env>`
|
|
2021
|
+
* environment — deliberately NOT the per-component one, whose
|
|
2022
|
+
* Active deploy badge their deployment records would displace.
|
|
2023
|
+
* NOTE: build-time and deploy-time vars are not differentiated
|
|
2024
|
+
* yet, so this environment holds roughly ALL of the env's
|
|
2025
|
+
* secrets (the build's dotenv references every component).
|
|
2026
|
+
* - jobs without secret references get no environment
|
|
2027
|
+
*/
|
|
2028
|
+
const referencesSecrets = Object.values(env).some(value => typeof value === "string" && (value.includes("${{ secrets.") || value.includes("${{ vars.")));
|
|
2029
|
+
const githubEnvironment = job.environment && isComponent ? {
|
|
2030
|
+
name: `${context.env}-${context.name}`,
|
|
2031
|
+
...(createsJobEnv ? {
|
|
2032
|
+
url: "${{ steps.main.outputs.url }}"
|
|
2033
|
+
} : {})
|
|
2034
|
+
} : referencesSecrets ? {
|
|
2035
|
+
name: context.env
|
|
2036
|
+
} : undefined;
|
|
2000
2037
|
const githubJob = {
|
|
2001
2038
|
name: githubJobName(context, job.name),
|
|
2002
2039
|
"runs-on": "ubuntu-latest",
|
|
@@ -2018,13 +2055,8 @@ const makeGithubJob = (context, job, allJobs, uploadProviderIds, images, scripts
|
|
|
2018
2055
|
...(Object.keys(services).length > 0 ? {
|
|
2019
2056
|
services
|
|
2020
2057
|
} : {}),
|
|
2021
|
-
...(
|
|
2022
|
-
environment:
|
|
2023
|
-
name: context.environment.envType === "review" ? `review-pr\${{ github.event.number }}-${context.name}` : `${context.env}-${context.name}`,
|
|
2024
|
-
...(createsJobEnv ? {
|
|
2025
|
-
url: "${{ steps.main.outputs.url }}"
|
|
2026
|
-
} : {})
|
|
2027
|
-
}
|
|
2058
|
+
...(githubEnvironment ? {
|
|
2059
|
+
environment: githubEnvironment
|
|
2028
2060
|
} : {}),
|
|
2029
2061
|
env,
|
|
2030
2062
|
steps: [...(skipCheckout ? [] : [{
|
|
@@ -2303,6 +2335,7 @@ const config_1 = __nccwpck_require__(96925);
|
|
|
2303
2335
|
const createAllJobs_1 = __nccwpck_require__(83671);
|
|
2304
2336
|
const jobImagesPlan_1 = __nccwpck_require__(11585);
|
|
2305
2337
|
const shippedCatci_1 = __nccwpck_require__(93401);
|
|
2338
|
+
const index_1 = __nccwpck_require__(93243);
|
|
2306
2339
|
const createGitlabJobs_1 = __nccwpck_require__(80512);
|
|
2307
2340
|
const createGitlabPipeline_1 = __nccwpck_require__(61862);
|
|
2308
2341
|
const gitlabReleaseJobs_1 = __nccwpck_require__(35531);
|
|
@@ -2466,7 +2499,11 @@ class GitlabBackend {
|
|
|
2466
2499
|
context: null
|
|
2467
2500
|
}]))
|
|
2468
2501
|
},
|
|
2469
|
-
variables:
|
|
2502
|
+
variables: {
|
|
2503
|
+
...config.runnerVariables,
|
|
2504
|
+
// per-pipeline-type variables (pipelines.gitlab.runnerVariables)
|
|
2505
|
+
...(0, index_1.getPipelineOptions)(config, this.type).runnerVariables
|
|
2506
|
+
}
|
|
2470
2507
|
});
|
|
2471
2508
|
}
|
|
2472
2509
|
}
|
|
@@ -5212,7 +5249,7 @@ Object.defineProperty(exports, "__esModule", ({
|
|
|
5212
5249
|
value: true
|
|
5213
5250
|
}));
|
|
5214
5251
|
exports.DOCKER_REGISTRY = exports.PIPELINE_IMAGE_TAG = void 0;
|
|
5215
|
-
exports.PIPELINE_IMAGE_TAG = "next-
|
|
5252
|
+
exports.PIPELINE_IMAGE_TAG = "next-e3ccf7d4" || 0;
|
|
5216
5253
|
exports.DOCKER_REGISTRY = "git.panter.ch:5001/catladder/catladder" || 0;
|
|
5217
5254
|
|
|
5218
5255
|
/***/ }),
|
|
@@ -560,7 +560,7 @@ const mirrorSecretsToCiBackends = async (instance, config, envAndComponents, val
|
|
|
560
560
|
return;
|
|
561
561
|
}
|
|
562
562
|
instance.log(`mirroring ${secrets.length} secrets to github ('${repo}')...`);
|
|
563
|
-
await (0, commandSecretsSyncGithub_1.pushSecretsToGithub)(instance, repo, secrets);
|
|
563
|
+
await (0, commandSecretsSyncGithub_1.pushSecretsToGithub)(instance, repo, secrets, await (0, commandSecretsSyncGithub_1.collectSecretTargets)(config));
|
|
564
564
|
};
|
|
565
565
|
const projectConfigSecrets = async (io, envComponent) => {
|
|
566
566
|
if (!envComponent) {
|
|
@@ -3392,7 +3392,7 @@ exports.commandSecretsClearBackups = (0, defineCommand_1.defineCommand)({
|
|
|
3392
3392
|
Object.defineProperty(exports, "__esModule", ({
|
|
3393
3393
|
value: true
|
|
3394
3394
|
}));
|
|
3395
|
-
exports.commandSecretsSyncGithub = exports.getConfiguredGithubRepo = exports.pushSecretsToGithub = exports.collectSecretsFromVault = void 0;
|
|
3395
|
+
exports.commandSecretsSyncGithub = exports.getConfiguredGithubRepo = exports.pushSecretsToGithub = exports.collectSecretTargets = exports.collectSecretsFromVault = void 0;
|
|
3396
3396
|
const pipeline_1 = __nccwpck_require__(60241);
|
|
3397
3397
|
const getProjectConfig_1 = __nccwpck_require__(50001);
|
|
3398
3398
|
const defineCommand_1 = __nccwpck_require__(39489);
|
|
@@ -3437,22 +3437,71 @@ const collectSecretsFromVault = async (io, envFilter) => {
|
|
|
3437
3437
|
};
|
|
3438
3438
|
};
|
|
3439
3439
|
exports.collectSecretsFromVault = collectSecretsFromVault;
|
|
3440
|
+
/** marker for repo-level (environment-less) targets */
|
|
3441
|
+
const REPO_LEVEL = "";
|
|
3440
3442
|
/**
|
|
3441
|
-
*
|
|
3442
|
-
*
|
|
3443
|
+
* derives which github environment(s) each secret/variable must live in
|
|
3444
|
+
* by scanning the GENERATED workflows: a `${{ secrets.X }}` / `${{
|
|
3445
|
+
* vars.X }}` reference in a job's env targets that job's environment
|
|
3446
|
+
* (or the repo level when the job has none). Deriving from the real
|
|
3447
|
+
* output means the sync can never drift from what the workflows expect.
|
|
3448
|
+
*
|
|
3449
|
+
* Environment secrets are the answer to github's cap of 100 secrets
|
|
3450
|
+
* per REPO (a multi-env project easily exceeds it): the cap applies
|
|
3451
|
+
* per environment instead.
|
|
3452
|
+
*/
|
|
3453
|
+
const collectSecretTargets = async config => {
|
|
3454
|
+
var _a;
|
|
3455
|
+
const workflows = await new pipeline_1.GithubBackend().createWorkflows(config);
|
|
3456
|
+
const targets = new Map();
|
|
3457
|
+
for (const workflow of Object.values(workflows)) {
|
|
3458
|
+
for (const job of Object.values(workflow.jobs)) {
|
|
3459
|
+
const environment = typeof job.environment === "object" ? job.environment.name : job.environment;
|
|
3460
|
+
for (const value of Object.values((_a = job.env) !== null && _a !== void 0 ? _a : {})) {
|
|
3461
|
+
if (typeof value !== "string") continue;
|
|
3462
|
+
for (const match of value.matchAll(/\$\{\{\s*(?:secrets|vars)\.([A-Za-z0-9_]+)\s*\}\}/g)) {
|
|
3463
|
+
const name = match[1];
|
|
3464
|
+
if (!targets.has(name)) {
|
|
3465
|
+
targets.set(name, new Set());
|
|
3466
|
+
}
|
|
3467
|
+
targets.get(name).add(environment !== null && environment !== void 0 ? environment : REPO_LEVEL);
|
|
3468
|
+
}
|
|
3469
|
+
}
|
|
3470
|
+
}
|
|
3471
|
+
}
|
|
3472
|
+
return targets;
|
|
3473
|
+
};
|
|
3474
|
+
exports.collectSecretTargets = collectSecretTargets;
|
|
3475
|
+
/**
|
|
3476
|
+
* pushes vault values to github via the gh cli: sensitive ones as
|
|
3477
|
+
* secrets (masked), "variable"-kind ones as variables (plain) — each
|
|
3478
|
+
* into the environment(s) whose jobs reference them
|
|
3443
3479
|
*/
|
|
3444
|
-
const pushSecretsToGithub = async (io, repo, secrets) => {
|
|
3480
|
+
const pushSecretsToGithub = async (io, repo, secrets, targets) => {
|
|
3481
|
+
const environments = [...new Set([...targets.values()].flatMap(envs => [...envs].filter(env => env !== REPO_LEVEL)))];
|
|
3482
|
+
for (const environment of environments) {
|
|
3483
|
+
await (0, github_1.ensureGithubEnvironment)(repo, environment);
|
|
3484
|
+
io.log(`🌍 environment ${environment}`);
|
|
3485
|
+
}
|
|
3445
3486
|
for (const {
|
|
3446
3487
|
name,
|
|
3447
3488
|
value,
|
|
3448
3489
|
kind
|
|
3449
3490
|
} of secrets) {
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
io.log(
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3491
|
+
const envs = targets.get(name);
|
|
3492
|
+
if (!envs) {
|
|
3493
|
+
io.log(`⏭️ ${name} (not referenced by any generated workflow)`);
|
|
3494
|
+
continue;
|
|
3495
|
+
}
|
|
3496
|
+
for (const environment of envs) {
|
|
3497
|
+
const suffix = environment === REPO_LEVEL ? "" : ` → ${environment}`;
|
|
3498
|
+
if (kind === "variable") {
|
|
3499
|
+
await (0, github_1.setGithubVariable)(repo, name, value, environment || undefined);
|
|
3500
|
+
io.log(`📖 ${name} (variable)${suffix}`);
|
|
3501
|
+
} else {
|
|
3502
|
+
await (0, github_1.setGithubSecret)(repo, name, value, environment || undefined);
|
|
3503
|
+
io.log(`✅ ${name}${suffix}`);
|
|
3504
|
+
}
|
|
3456
3505
|
}
|
|
3457
3506
|
}
|
|
3458
3507
|
};
|
|
@@ -3532,7 +3581,7 @@ exports.commandSecretsSyncGithub = (0, defineCommand_1.defineCommand)({
|
|
|
3532
3581
|
if (!confirmed) {
|
|
3533
3582
|
throw new Error("abort");
|
|
3534
3583
|
}
|
|
3535
|
-
await (0, exports.pushSecretsToGithub)(ctx, repo, secrets);
|
|
3584
|
+
await (0, exports.pushSecretsToGithub)(ctx, repo, secrets, await (0, exports.collectSecretTargets)(config));
|
|
3536
3585
|
ctx.log("");
|
|
3537
3586
|
ctx.log("done! 😻 the github pipeline can use them as ${{ secrets.<NAME> }}");
|
|
3538
3587
|
}
|
|
@@ -5729,7 +5778,7 @@ exports["default"] = async () => {
|
|
|
5729
5778
|
Object.defineProperty(exports, "__esModule", ({
|
|
5730
5779
|
value: true
|
|
5731
5780
|
}));
|
|
5732
|
-
exports.setGithubVariable = exports.setGithubSecret = exports.getGithubRepoFromRemote = exports.isGhAuthenticated = void 0;
|
|
5781
|
+
exports.ensureGithubEnvironment = exports.setGithubVariable = exports.setGithubSecret = exports.getGithubRepoFromRemote = exports.isGhAuthenticated = void 0;
|
|
5733
5782
|
const child_process_1 = __nccwpck_require__(35317);
|
|
5734
5783
|
const util_1 = __nccwpck_require__(39023);
|
|
5735
5784
|
const execFile = (0, util_1.promisify)(child_process_1.execFile);
|
|
@@ -5762,9 +5811,9 @@ const getGithubRepoFromRemote = async remoteName => {
|
|
|
5762
5811
|
}
|
|
5763
5812
|
};
|
|
5764
5813
|
exports.getGithubRepoFromRemote = getGithubRepoFromRemote;
|
|
5765
|
-
const ghSetViaStdin = (kind, repo, name, value) => new Promise((resolve, reject) => {
|
|
5814
|
+
const ghSetViaStdin = (kind, repo, name, value, environment) => new Promise((resolve, reject) => {
|
|
5766
5815
|
var _a, _b;
|
|
5767
|
-
const child = (0, child_process_1.spawn)("gh", [kind, "set", name, "--repo", repo], {
|
|
5816
|
+
const child = (0, child_process_1.spawn)("gh", [kind, "set", name, "--repo", repo, ...(environment ? ["--env", environment] : [])], {
|
|
5768
5817
|
stdio: ["pipe", "ignore", "pipe"]
|
|
5769
5818
|
});
|
|
5770
5819
|
let stderr = "";
|
|
@@ -5777,14 +5826,29 @@ const ghSetViaStdin = (kind, repo, name, value) => new Promise((resolve, reject)
|
|
|
5777
5826
|
* sets a github actions repository secret via the gh cli.
|
|
5778
5827
|
* The value is passed via stdin so it never shows up in a process list.
|
|
5779
5828
|
*/
|
|
5780
|
-
const setGithubSecret = async (repo, name, value) => ghSetViaStdin("secret", repo, name, value);
|
|
5829
|
+
const setGithubSecret = async (repo, name, value, environment) => ghSetViaStdin("secret", repo, name, value, environment);
|
|
5781
5830
|
exports.setGithubSecret = setGithubSecret;
|
|
5782
5831
|
/**
|
|
5783
5832
|
* sets a github actions repository variable (plain, unmasked) via the
|
|
5784
5833
|
* gh cli — for vault values classified as not sensitive
|
|
5785
5834
|
*/
|
|
5786
|
-
const setGithubVariable = async (repo, name, value) => ghSetViaStdin("variable", repo, name, value);
|
|
5835
|
+
const setGithubVariable = async (repo, name, value, environment) => ghSetViaStdin("variable", repo, name, value, environment);
|
|
5787
5836
|
exports.setGithubVariable = setGithubVariable;
|
|
5837
|
+
/**
|
|
5838
|
+
* creates the github environment when it does not exist (idempotent —
|
|
5839
|
+
* PUT with an empty body leaves existing settings untouched)
|
|
5840
|
+
*/
|
|
5841
|
+
const ensureGithubEnvironment = async (repo, environment) => new Promise((resolve, reject) => {
|
|
5842
|
+
var _a;
|
|
5843
|
+
const child = (0, child_process_1.spawn)("gh", ["api", "-X", "PUT", `repos/${repo}/environments/${encodeURIComponent(environment)}`], {
|
|
5844
|
+
stdio: ["ignore", "ignore", "pipe"]
|
|
5845
|
+
});
|
|
5846
|
+
let stderr = "";
|
|
5847
|
+
(_a = child.stderr) === null || _a === void 0 ? void 0 : _a.on("data", data => stderr += data);
|
|
5848
|
+
child.on("error", reject);
|
|
5849
|
+
child.on("close", code => code === 0 ? resolve() : reject(new Error(`creating github environment ${environment} failed: ${stderr.trim()}`)));
|
|
5850
|
+
});
|
|
5851
|
+
exports.ensureGithubEnvironment = ensureGithubEnvironment;
|
|
5788
5852
|
|
|
5789
5853
|
/***/ }),
|
|
5790
5854
|
|
|
@@ -6781,6 +6845,7 @@ const path_1 = __nccwpck_require__(16928);
|
|
|
6781
6845
|
const createAllJobs_1 = __nccwpck_require__(83671);
|
|
6782
6846
|
const config_1 = __nccwpck_require__(96925);
|
|
6783
6847
|
const ciVariables_1 = __nccwpck_require__(25474);
|
|
6848
|
+
const index_1 = __nccwpck_require__(93243);
|
|
6784
6849
|
const createGithubJobs_1 = __nccwpck_require__(14016);
|
|
6785
6850
|
const jobImagesPlan_1 = __nccwpck_require__(11585);
|
|
6786
6851
|
const scriptFunctions_1 = __nccwpck_require__(75759);
|
|
@@ -6858,6 +6923,12 @@ class GithubBackend {
|
|
|
6858
6923
|
*/
|
|
6859
6924
|
async createWorkflows(config, images = this.createImagesPlan(config), scripts = new scriptFiles_1.GithubScriptFiles()) {
|
|
6860
6925
|
const workflows = {};
|
|
6926
|
+
// per-pipeline-type variables (pipelines.github.runnerVariables);
|
|
6927
|
+
// workflow-level env, so job-level runnerVariables take precedence
|
|
6928
|
+
const workflowEnv = {
|
|
6929
|
+
...ciVariables_1.GITHUB_INJECTED_WORKFLOW_ENV,
|
|
6930
|
+
...(0, index_1.getPipelineOptions)(config, this.type).runnerVariables
|
|
6931
|
+
};
|
|
6861
6932
|
const reviewStopJobs = {};
|
|
6862
6933
|
const manualJobs = {};
|
|
6863
6934
|
for (const trigger of config_1.ALL_PIPELINE_TRIGGERS) {
|
|
@@ -6892,7 +6963,7 @@ class GithubBackend {
|
|
|
6892
6963
|
workflows[`${GENERATED_FILE_PREFIX}${workflowFileName(trigger)}`] = {
|
|
6893
6964
|
...TRIGGER_WORKFLOWS[trigger],
|
|
6894
6965
|
...workflowPermissions(images),
|
|
6895
|
-
env:
|
|
6966
|
+
env: workflowEnv,
|
|
6896
6967
|
jobs: {
|
|
6897
6968
|
...makeEnsureImageGithubJobs(images),
|
|
6898
6969
|
...jobs
|
|
@@ -6909,7 +6980,7 @@ class GithubBackend {
|
|
|
6909
6980
|
}
|
|
6910
6981
|
},
|
|
6911
6982
|
...workflowPermissions(images),
|
|
6912
|
-
env:
|
|
6983
|
+
env: workflowEnv,
|
|
6913
6984
|
jobs: {
|
|
6914
6985
|
...makeEnsureImageGithubJobs(images),
|
|
6915
6986
|
...reviewStopJobs
|
|
@@ -6932,7 +7003,7 @@ class GithubBackend {
|
|
|
6932
7003
|
}
|
|
6933
7004
|
},
|
|
6934
7005
|
...workflowPermissions(images),
|
|
6935
|
-
env:
|
|
7006
|
+
env: workflowEnv,
|
|
6936
7007
|
jobs: {
|
|
6937
7008
|
...makeEnsureImageGithubJobs(images),
|
|
6938
7009
|
...Object.fromEntries(Object.entries(manualJobs).map(([id, job]) => [id, {
|
|
@@ -7248,6 +7319,36 @@ const makeGithubJob = (context, job, allJobs, uploadProviderIds, images, scripts
|
|
|
7248
7319
|
...getReferencedSecretsEnv(runScript, secretKinds),
|
|
7249
7320
|
CL_JOB_IMAGE: image !== null && image !== void 0 ? image : "runner"
|
|
7250
7321
|
};
|
|
7322
|
+
/**
|
|
7323
|
+
* the github environment of the job — serving two purposes:
|
|
7324
|
+
* deployment tracking on deploy jobs, and access to environment
|
|
7325
|
+
* secrets (the repo-level cap of 100 secrets doesn't scale to
|
|
7326
|
+
* multiple envs). Names are keyed by env NAME, never env type: an
|
|
7327
|
+
* app can have several envs of the same type.
|
|
7328
|
+
*
|
|
7329
|
+
* - deploy jobs: `<env>-<component>` — static (unlike the former
|
|
7330
|
+
* per-PR review names), so environment secrets can attach, and
|
|
7331
|
+
* each component keeps its own deployment badge/url in the
|
|
7332
|
+
* github ui. For review, PRs share the component's environment:
|
|
7333
|
+
* a newer PR's deploy marks the previous one Inactive (the badge,
|
|
7334
|
+
* not the app) — the price of a static name.
|
|
7335
|
+
* - other jobs referencing secrets join the shared `<env>`
|
|
7336
|
+
* environment — deliberately NOT the per-component one, whose
|
|
7337
|
+
* Active deploy badge their deployment records would displace.
|
|
7338
|
+
* NOTE: build-time and deploy-time vars are not differentiated
|
|
7339
|
+
* yet, so this environment holds roughly ALL of the env's
|
|
7340
|
+
* secrets (the build's dotenv references every component).
|
|
7341
|
+
* - jobs without secret references get no environment
|
|
7342
|
+
*/
|
|
7343
|
+
const referencesSecrets = Object.values(env).some(value => typeof value === "string" && (value.includes("${{ secrets.") || value.includes("${{ vars.")));
|
|
7344
|
+
const githubEnvironment = job.environment && isComponent ? {
|
|
7345
|
+
name: `${context.env}-${context.name}`,
|
|
7346
|
+
...(createsJobEnv ? {
|
|
7347
|
+
url: "${{ steps.main.outputs.url }}"
|
|
7348
|
+
} : {})
|
|
7349
|
+
} : referencesSecrets ? {
|
|
7350
|
+
name: context.env
|
|
7351
|
+
} : undefined;
|
|
7251
7352
|
const githubJob = {
|
|
7252
7353
|
name: githubJobName(context, job.name),
|
|
7253
7354
|
"runs-on": "ubuntu-latest",
|
|
@@ -7269,13 +7370,8 @@ const makeGithubJob = (context, job, allJobs, uploadProviderIds, images, scripts
|
|
|
7269
7370
|
...(Object.keys(services).length > 0 ? {
|
|
7270
7371
|
services
|
|
7271
7372
|
} : {}),
|
|
7272
|
-
...(
|
|
7273
|
-
environment:
|
|
7274
|
-
name: context.environment.envType === "review" ? `review-pr\${{ github.event.number }}-${context.name}` : `${context.env}-${context.name}`,
|
|
7275
|
-
...(createsJobEnv ? {
|
|
7276
|
-
url: "${{ steps.main.outputs.url }}"
|
|
7277
|
-
} : {})
|
|
7278
|
-
}
|
|
7373
|
+
...(githubEnvironment ? {
|
|
7374
|
+
environment: githubEnvironment
|
|
7279
7375
|
} : {}),
|
|
7280
7376
|
env,
|
|
7281
7377
|
steps: [...(skipCheckout ? [] : [{
|
|
@@ -7554,6 +7650,7 @@ const config_1 = __nccwpck_require__(96925);
|
|
|
7554
7650
|
const createAllJobs_1 = __nccwpck_require__(83671);
|
|
7555
7651
|
const jobImagesPlan_1 = __nccwpck_require__(11585);
|
|
7556
7652
|
const shippedCatci_1 = __nccwpck_require__(93401);
|
|
7653
|
+
const index_1 = __nccwpck_require__(93243);
|
|
7557
7654
|
const createGitlabJobs_1 = __nccwpck_require__(80512);
|
|
7558
7655
|
const createGitlabPipeline_1 = __nccwpck_require__(61862);
|
|
7559
7656
|
const gitlabReleaseJobs_1 = __nccwpck_require__(35531);
|
|
@@ -7717,7 +7814,11 @@ class GitlabBackend {
|
|
|
7717
7814
|
context: null
|
|
7718
7815
|
}]))
|
|
7719
7816
|
},
|
|
7720
|
-
variables:
|
|
7817
|
+
variables: {
|
|
7818
|
+
...config.runnerVariables,
|
|
7819
|
+
// per-pipeline-type variables (pipelines.gitlab.runnerVariables)
|
|
7820
|
+
...(0, index_1.getPipelineOptions)(config, this.type).runnerVariables
|
|
7821
|
+
}
|
|
7721
7822
|
});
|
|
7722
7823
|
}
|
|
7723
7824
|
}
|
|
@@ -10463,7 +10564,7 @@ Object.defineProperty(exports, "__esModule", ({
|
|
|
10463
10564
|
value: true
|
|
10464
10565
|
}));
|
|
10465
10566
|
exports.DOCKER_REGISTRY = exports.PIPELINE_IMAGE_TAG = void 0;
|
|
10466
|
-
exports.PIPELINE_IMAGE_TAG = "next-
|
|
10567
|
+
exports.PIPELINE_IMAGE_TAG = "next-e3ccf7d4" || 0;
|
|
10467
10568
|
exports.DOCKER_REGISTRY = "git.panter.ch:5001/catladder/catladder" || 0;
|
|
10468
10569
|
|
|
10469
10570
|
/***/ }),
|
|
@@ -166,7 +166,7 @@ const mirrorSecretsToCiBackends = async (instance, config, envAndComponents, val
|
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
168
|
instance.log(`mirroring ${secrets.length} secrets to github ('${repo}')...`);
|
|
169
|
-
await (0, commandSecretsSyncGithub_1.pushSecretsToGithub)(instance, repo, secrets);
|
|
169
|
+
await (0, commandSecretsSyncGithub_1.pushSecretsToGithub)(instance, repo, secrets, await (0, commandSecretsSyncGithub_1.collectSecretTargets)(config));
|
|
170
170
|
};
|
|
171
171
|
const projectConfigSecrets = async (io, envComponent) => {
|
|
172
172
|
if (!envComponent) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commandConfigSecrets.js","sourceRoot":"","sources":["../../../../../../../src/apps/cli/commands/project/commandConfigSecrets.ts"],"names":[],"mappings":";;;AAAA,kDAI6B;AAE7B,6CAA2C;AAC3C,yCAAuC;AAEvC,0EAQ6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"commandConfigSecrets.js","sourceRoot":"","sources":["../../../../../../../src/apps/cli/commands/project/commandConfigSecrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Config } from "../../../../pipeline/src/index.js";
|
|
1
2
|
import type { IO } from "../../core/types";
|
|
2
3
|
/**
|
|
3
4
|
* all secrets declared in the config, with their values read from the
|
|
@@ -12,14 +13,27 @@ export declare const collectSecretsFromVault: (io: IO, envFilter?: string[]) =>
|
|
|
12
13
|
missing: string[];
|
|
13
14
|
}>;
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
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
|
|
17
31
|
*/
|
|
18
32
|
export declare const pushSecretsToGithub: (io: IO, repo: string, secrets: {
|
|
19
33
|
name: string;
|
|
20
34
|
value: string;
|
|
21
35
|
kind: "secret" | "variable";
|
|
22
|
-
}[]) => Promise<void>;
|
|
36
|
+
}[], targets: Map<string, Set<string>>) => Promise<void>;
|
|
23
37
|
/**
|
|
24
38
|
* resolves the github repository from the configured git remote
|
|
25
39
|
* (`pipelines.github.gitRemote`, defaults to origin)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.commandSecretsSyncGithub = exports.getConfiguredGithubRepo = exports.pushSecretsToGithub = exports.collectSecretsFromVault = void 0;
|
|
6
|
+
exports.commandSecretsSyncGithub = exports.getConfiguredGithubRepo = exports.pushSecretsToGithub = exports.collectSecretTargets = exports.collectSecretsFromVault = void 0;
|
|
7
7
|
const pipeline_1 = require("../../../../pipeline/src/index.js");
|
|
8
8
|
const getProjectConfig_1 = require("../../config/getProjectConfig");
|
|
9
9
|
const defineCommand_1 = require("../../core/defineCommand");
|
|
@@ -48,22 +48,71 @@ const collectSecretsFromVault = async (io, envFilter) => {
|
|
|
48
48
|
};
|
|
49
49
|
};
|
|
50
50
|
exports.collectSecretsFromVault = collectSecretsFromVault;
|
|
51
|
+
/** marker for repo-level (environment-less) targets */
|
|
52
|
+
const REPO_LEVEL = "";
|
|
51
53
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
+
* derives which github environment(s) each secret/variable must live in
|
|
55
|
+
* by scanning the GENERATED workflows: a `${{ secrets.X }}` / `${{
|
|
56
|
+
* vars.X }}` reference in a job's env targets that job's environment
|
|
57
|
+
* (or the repo level when the job has none). Deriving from the real
|
|
58
|
+
* output means the sync can never drift from what the workflows expect.
|
|
59
|
+
*
|
|
60
|
+
* Environment secrets are the answer to github's cap of 100 secrets
|
|
61
|
+
* per REPO (a multi-env project easily exceeds it): the cap applies
|
|
62
|
+
* per environment instead.
|
|
54
63
|
*/
|
|
55
|
-
const
|
|
64
|
+
const collectSecretTargets = async config => {
|
|
65
|
+
var _a;
|
|
66
|
+
const workflows = await new pipeline_1.GithubBackend().createWorkflows(config);
|
|
67
|
+
const targets = new Map();
|
|
68
|
+
for (const workflow of Object.values(workflows)) {
|
|
69
|
+
for (const job of Object.values(workflow.jobs)) {
|
|
70
|
+
const environment = typeof job.environment === "object" ? job.environment.name : job.environment;
|
|
71
|
+
for (const value of Object.values((_a = job.env) !== null && _a !== void 0 ? _a : {})) {
|
|
72
|
+
if (typeof value !== "string") continue;
|
|
73
|
+
for (const match of value.matchAll(/\$\{\{\s*(?:secrets|vars)\.([A-Za-z0-9_]+)\s*\}\}/g)) {
|
|
74
|
+
const name = match[1];
|
|
75
|
+
if (!targets.has(name)) {
|
|
76
|
+
targets.set(name, new Set());
|
|
77
|
+
}
|
|
78
|
+
targets.get(name).add(environment !== null && environment !== void 0 ? environment : REPO_LEVEL);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return targets;
|
|
84
|
+
};
|
|
85
|
+
exports.collectSecretTargets = collectSecretTargets;
|
|
86
|
+
/**
|
|
87
|
+
* pushes vault values to github via the gh cli: sensitive ones as
|
|
88
|
+
* secrets (masked), "variable"-kind ones as variables (plain) — each
|
|
89
|
+
* into the environment(s) whose jobs reference them
|
|
90
|
+
*/
|
|
91
|
+
const pushSecretsToGithub = async (io, repo, secrets, targets) => {
|
|
92
|
+
const environments = [...new Set([...targets.values()].flatMap(envs => [...envs].filter(env => env !== REPO_LEVEL)))];
|
|
93
|
+
for (const environment of environments) {
|
|
94
|
+
await (0, github_1.ensureGithubEnvironment)(repo, environment);
|
|
95
|
+
io.log(`🌍 environment ${environment}`);
|
|
96
|
+
}
|
|
56
97
|
for (const {
|
|
57
98
|
name,
|
|
58
99
|
value,
|
|
59
100
|
kind
|
|
60
101
|
} of secrets) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
io.log(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
102
|
+
const envs = targets.get(name);
|
|
103
|
+
if (!envs) {
|
|
104
|
+
io.log(`⏭️ ${name} (not referenced by any generated workflow)`);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
for (const environment of envs) {
|
|
108
|
+
const suffix = environment === REPO_LEVEL ? "" : ` → ${environment}`;
|
|
109
|
+
if (kind === "variable") {
|
|
110
|
+
await (0, github_1.setGithubVariable)(repo, name, value, environment || undefined);
|
|
111
|
+
io.log(`📖 ${name} (variable)${suffix}`);
|
|
112
|
+
} else {
|
|
113
|
+
await (0, github_1.setGithubSecret)(repo, name, value, environment || undefined);
|
|
114
|
+
io.log(`✅ ${name}${suffix}`);
|
|
115
|
+
}
|
|
67
116
|
}
|
|
68
117
|
}
|
|
69
118
|
};
|
|
@@ -143,7 +192,7 @@ exports.commandSecretsSyncGithub = (0, defineCommand_1.defineCommand)({
|
|
|
143
192
|
if (!confirmed) {
|
|
144
193
|
throw new Error("abort");
|
|
145
194
|
}
|
|
146
|
-
await (0, exports.pushSecretsToGithub)(ctx, repo, secrets);
|
|
195
|
+
await (0, exports.pushSecretsToGithub)(ctx, repo, secrets, await (0, exports.collectSecretTargets)(config));
|
|
147
196
|
ctx.log("");
|
|
148
197
|
ctx.log("done! 😻 the github pipeline can use them as ${{ secrets.<NAME> }}");
|
|
149
198
|
}
|
|
@@ -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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"}
|
|
@@ -12,9 +12,14 @@ export declare const getGithubRepoFromRemote: (remoteName: string) => Promise<st
|
|
|
12
12
|
* sets a github actions repository secret via the gh cli.
|
|
13
13
|
* The value is passed via stdin so it never shows up in a process list.
|
|
14
14
|
*/
|
|
15
|
-
export declare const setGithubSecret: (repo: string, name: string, value: string) => Promise<void>;
|
|
15
|
+
export declare const setGithubSecret: (repo: string, name: string, value: string, environment?: string) => Promise<void>;
|
|
16
16
|
/**
|
|
17
17
|
* sets a github actions repository variable (plain, unmasked) via the
|
|
18
18
|
* gh cli — for vault values classified as not sensitive
|
|
19
19
|
*/
|
|
20
|
-
export declare const setGithubVariable: (repo: string, name: string, value: string) => Promise<void>;
|
|
20
|
+
export declare const setGithubVariable: (repo: string, name: string, value: string, environment?: string) => Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* creates the github environment when it does not exist (idempotent —
|
|
23
|
+
* PUT with an empty body leaves existing settings untouched)
|
|
24
|
+
*/
|
|
25
|
+
export declare const ensureGithubEnvironment: (repo: string, environment: string) => Promise<void>;
|