@catladder/cli 0.0.0-remove-env-mode-none-9b62fbb1 → 0.0.0-remove-sbom-91cda0a4

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.
Files changed (104) hide show
  1. package/dist/bundles/catci/index.js +2028 -2142
  2. package/dist/bundles/catenv/index.js +1774 -1692
  3. package/dist/bundles/cli/index.js +9668 -9694
  4. package/dist/cli/src/apps/catenv/catenv.d.ts +4 -1
  5. package/dist/cli/src/apps/catenv/catenv.js +5 -1
  6. package/dist/cli/src/apps/catenv/catenv.js.map +1 -1
  7. package/dist/cli/src/apps/catenv/verboseBanner.d.ts +1 -0
  8. package/dist/cli/src/apps/catenv/verboseBanner.js +30 -0
  9. package/dist/cli/src/apps/catenv/verboseBanner.js.map +1 -0
  10. package/dist/cli/src/apps/cli/commands/project/cloudSql/commandProjectRestoreDb.js +40 -14
  11. package/dist/cli/src/apps/cli/commands/project/cloudSql/commandProjectRestoreDb.js.map +1 -1
  12. package/dist/cli/src/catenv.js +5 -2
  13. package/dist/cli/src/catenv.js.map +1 -1
  14. package/dist/cli/src/config/getProjectConfig.d.ts +3 -1
  15. package/dist/cli/src/config/getProjectConfig.js +2 -2
  16. package/dist/cli/src/config/getProjectConfig.js.map +1 -1
  17. package/dist/cli/src/gcloud/cloudSql/copyDb.js +6 -3
  18. package/dist/cli/src/gcloud/cloudSql/copyDb.js.map +1 -1
  19. package/dist/cli/src/gcloud/cloudSql/parseConnectionString.d.ts +9 -0
  20. package/dist/cli/src/gcloud/cloudSql/parseConnectionString.js +22 -0
  21. package/dist/cli/src/gcloud/cloudSql/parseConnectionString.js.map +1 -0
  22. package/dist/pipeline/src/build/artifacts/createBuildJobArtifact.js +7 -2
  23. package/dist/pipeline/src/build/artifacts/createBuildJobArtifact.js.map +1 -1
  24. package/dist/pipeline/src/build/base/index.js +0 -3
  25. package/dist/pipeline/src/build/base/index.js.map +1 -1
  26. package/dist/pipeline/src/build/custom/testJob.js +22 -11
  27. package/dist/pipeline/src/build/custom/testJob.js.map +1 -1
  28. package/dist/pipeline/src/build/docker.d.ts +1 -1
  29. package/dist/pipeline/src/build/docker.js +21 -7
  30. package/dist/pipeline/src/build/docker.js.map +1 -1
  31. package/dist/pipeline/src/build/node/cache.js +14 -2
  32. package/dist/pipeline/src/build/node/cache.js.map +1 -1
  33. package/dist/pipeline/src/build/node/testJob.js +22 -11
  34. package/dist/pipeline/src/build/node/testJob.js.map +1 -1
  35. package/dist/pipeline/src/build/node/yarn.d.ts +2 -1
  36. package/dist/pipeline/src/build/node/yarn.js +16 -3
  37. package/dist/pipeline/src/build/node/yarn.js.map +1 -1
  38. package/dist/pipeline/src/build/rails/index.js +2 -2
  39. package/dist/pipeline/src/build/rails/index.js.map +1 -1
  40. package/dist/pipeline/src/build/rails/{test.js → testJob.js} +1 -1
  41. package/dist/pipeline/src/build/rails/testJob.js.map +1 -0
  42. package/dist/pipeline/src/build/types.d.ts +25 -11
  43. package/dist/pipeline/src/build/types.js.map +1 -1
  44. package/dist/pipeline/src/config/readConfig.js +20 -1
  45. package/dist/pipeline/src/config/readConfig.js.map +1 -1
  46. package/dist/pipeline/src/context/getEnvironmentVariables.d.ts +4 -4
  47. package/dist/pipeline/src/context/getEnvironmentVariables.js +8 -8
  48. package/dist/pipeline/src/context/getEnvironmentVariables.js.map +1 -1
  49. package/dist/pipeline/src/defaults/index.js +0 -1
  50. package/dist/pipeline/src/defaults/index.js.map +1 -1
  51. package/dist/pipeline/src/deploy/base/deploy.js +34 -35
  52. package/dist/pipeline/src/deploy/base/deploy.js.map +1 -1
  53. package/dist/pipeline/src/deploy/base/stop.js +0 -6
  54. package/dist/pipeline/src/deploy/base/stop.js.map +1 -1
  55. package/dist/pipeline/src/deploy/cloudRun/createJobs/cloudRunServices.js +1 -0
  56. package/dist/pipeline/src/deploy/cloudRun/createJobs/cloudRunServices.js.map +1 -1
  57. package/dist/pipeline/src/deploy/cloudRun/createJobs/execute/onDeploy.js +39 -36
  58. package/dist/pipeline/src/deploy/cloudRun/createJobs/execute/onDeploy.js.map +1 -1
  59. package/dist/pipeline/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +0 -2
  60. package/dist/pipeline/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js.map +1 -1
  61. package/dist/pipeline/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +0 -2
  62. package/dist/pipeline/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.js.map +1 -1
  63. package/dist/pipeline/src/deploy/custom/deployJob.js +1 -6
  64. package/dist/pipeline/src/deploy/custom/deployJob.js.map +1 -1
  65. package/dist/pipeline/src/deploy/kubernetes/deployJob.js +1 -7
  66. package/dist/pipeline/src/deploy/kubernetes/deployJob.js.map +1 -1
  67. package/dist/pipeline/src/deploy/kubernetes/mongodb.d.ts +4 -0
  68. package/dist/pipeline/src/deploy/kubernetes/mongodb.js +4 -0
  69. package/dist/pipeline/src/deploy/kubernetes/mongodb.js.map +1 -1
  70. package/dist/pipeline/src/deploy/types/executeBase.d.ts +24 -0
  71. package/dist/pipeline/src/deploy/types/executeBase.js +3 -0
  72. package/dist/pipeline/src/deploy/types/executeBase.js.map +1 -0
  73. package/dist/pipeline/src/deploy/types/googleCloudRun.d.ts +13 -5
  74. package/dist/pipeline/src/deploy/types/googleCloudRun.js.map +1 -1
  75. package/dist/pipeline/src/index.d.ts +1 -0
  76. package/dist/pipeline/src/index.js +1 -0
  77. package/dist/pipeline/src/index.js.map +1 -1
  78. package/dist/pipeline/src/pipeline/gitlab/gitlabReleaseJobs.d.ts +2 -0
  79. package/dist/pipeline/src/pipeline/gitlab/gitlabReleaseJobs.js +5 -3
  80. package/dist/pipeline/src/pipeline/gitlab/gitlabReleaseJobs.js.map +1 -1
  81. package/dist/pipeline/src/types/config.d.ts +5 -1
  82. package/dist/pipeline/src/utils/measureTime.d.ts +6 -0
  83. package/dist/pipeline/src/utils/measureTime.js +42 -0
  84. package/dist/pipeline/src/utils/measureTime.js.map +1 -0
  85. package/dist/tsconfig.tsbuildinfo +1 -1
  86. package/package.json +3 -3
  87. package/src/apps/catenv/catenv.ts +8 -2
  88. package/src/apps/catenv/verboseBanner.ts +33 -0
  89. package/src/apps/cli/commands/project/cloudSql/commandProjectRestoreDb.ts +41 -16
  90. package/src/catenv.ts +6 -2
  91. package/src/config/getProjectConfig.ts +2 -1
  92. package/src/gcloud/cloudSql/copyDb.ts +7 -3
  93. package/src/gcloud/cloudSql/parseConnectionString.ts +28 -0
  94. package/dist/pipeline/src/build/rails/test.js.map +0 -1
  95. package/dist/pipeline/src/build/sbom.d.ts +0 -5
  96. package/dist/pipeline/src/build/sbom.js +0 -45
  97. package/dist/pipeline/src/build/sbom.js.map +0 -1
  98. package/dist/pipeline/src/deploy/sbom.d.ts +0 -4
  99. package/dist/pipeline/src/deploy/sbom.js +0 -30
  100. package/dist/pipeline/src/deploy/sbom.js.map +0 -1
  101. package/dist/pipeline/src/pipeline/yarn/yarnUtils.d.ts +0 -5
  102. package/dist/pipeline/src/pipeline/yarn/yarnUtils.js +0 -51
  103. package/dist/pipeline/src/pipeline/yarn/yarnUtils.js.map +0 -1
  104. /package/dist/pipeline/src/build/rails/{test.d.ts → testJob.d.ts} +0 -0
package/package.json CHANGED
@@ -53,7 +53,7 @@
53
53
  }
54
54
  ],
55
55
  "license": "MIT",
56
- "version": "0.0.0-remove-env-mode-none-9b62fbb1",
56
+ "version": "0.0.0-remove-sbom-91cda0a4",
57
57
  "scripts": {
58
58
  "lint": "eslint \"src/**/*.ts\"",
59
59
  "lint:fix": "eslint \"src/**/*.ts\" --fix",
@@ -103,14 +103,14 @@
103
103
  "prettier": "^3.3.3",
104
104
  "tmp-promise": "^2.0.2",
105
105
  "ts-results-es": "^4.2.0",
106
- "tsc-alias": "^1.8.10",
106
+ "tsc-alias": "^1.8.16",
107
107
  "tsc-watch": "^7.2.0",
108
108
  "typescript": "^5.4.5",
109
109
  "vorpal": "^1.12.0",
110
110
  "yaml": "^2.5.0"
111
111
  },
112
112
  "dependencies": {
113
- "tsx": "^4.19.0"
113
+ "tsx": "^4.21.0"
114
114
  },
115
115
  "stableVersion": "0.0.0"
116
116
  }
@@ -1,21 +1,27 @@
1
1
  import { getProjectConfig } from "../../config/getProjectConfig";
2
2
  import { printVariables } from "./printVariables";
3
3
  import type { Choice } from "./types";
4
+ import { printVerboseBanner } from "./verboseBanner";
4
5
  import { writeDotEnvFiles } from "./writeDotEnvFiles";
5
6
  import { writeDTsFiles } from "./writeEnvDTs";
6
7
  import {
7
- FileWriter,
8
8
  createCatenvContext,
9
9
  generatePipelineFiles,
10
10
  } from "@catladder/pipeline";
11
11
 
12
- export default async (choice?: Choice) => {
12
+ type Options = {
13
+ verbose?: boolean;
14
+ };
15
+ export default async (choice?: Choice, options?: Options) => {
13
16
  const config = await getProjectConfig();
14
17
  if (!config) {
15
18
  return;
16
19
  }
17
20
 
18
21
  const context = createCatenvContext(config);
22
+ if (options?.verbose) {
23
+ printVerboseBanner();
24
+ }
19
25
 
20
26
  await Promise.all([
21
27
  generatePipelineFiles(context, config.pipelineType ?? "gitlab"),
@@ -0,0 +1,33 @@
1
+ import {
2
+ getEnvironment,
3
+ getProjectConfig,
4
+ } from "../../config/getProjectConfig";
5
+
6
+ export const printVerboseBanner = async () => {
7
+ const config = await getProjectConfig();
8
+ if (!config) {
9
+ return;
10
+ }
11
+
12
+ const allCompontsWithPorts = await Promise.all(
13
+ Object.keys(config.components).map(async (componentName) => {
14
+ const environment = await getEnvironment("local", componentName);
15
+ const port = environment.envVars.PORT;
16
+ if (!port) {
17
+ return null;
18
+ }
19
+ return `${componentName}: http://localhost:${port}`;
20
+ }),
21
+ ).then((lines) => lines.filter(Boolean));
22
+
23
+ const lines = [
24
+ "catenv",
25
+ "-------",
26
+ "running on:",
27
+ "",
28
+ ...allCompontsWithPorts,
29
+ ];
30
+ for (const line of lines) {
31
+ console.log(line);
32
+ }
33
+ };
@@ -1,14 +1,27 @@
1
1
  import type Vorpal from "vorpal";
2
2
  import {
3
+ getAllPipelineContexts,
3
4
  getEnvVarsResolved,
4
5
  getPipelineContextByChoice,
5
6
  } from "../../../../../config/getProjectConfig";
6
7
  import type { CloudSqlBackgroundProxy } from "../../../../../gcloud/cloudSql/startProxy";
7
8
  import { startCloudSqlProxyInBackground } from "../../../../../gcloud/cloudSql/startProxy";
8
- import { envAndComponents } from "../utils/autocompletions";
9
9
 
10
- import { ConnectionStringParser } from "connection-string-parser";
10
+ import { parseConnectionString } from "../../../../../gcloud/cloudSql/parseConnectionString";
11
11
  import { spawnCopyDb } from "../../../../../gcloud/cloudSql/copyDb";
12
+ import type { ComponentContext } from "@catladder/pipeline";
13
+ import { isOfDeployType } from "@catladder/pipeline";
14
+
15
+ const hasCloudSql = (context: ComponentContext) => {
16
+ const deployConfig = context.deploy?.config;
17
+ if (isOfDeployType(deployConfig, "google-cloudrun")) {
18
+ return !!deployConfig.cloudSql;
19
+ }
20
+ if (isOfDeployType(deployConfig, "kubernetes")) {
21
+ return !!deployConfig.values?.cloudsql?.enabled;
22
+ }
23
+ return false;
24
+ };
12
25
 
13
26
  export default async (vorpal: Vorpal) =>
14
27
  vorpal
@@ -17,7 +30,29 @@ export default async (vorpal: Vorpal) =>
17
30
  "restores a project db from one source to another target",
18
31
  )
19
32
  .action(async function restoreDb() {
20
- const envs = await envAndComponents();
33
+ const allContexts = await getAllPipelineContexts(undefined, {
34
+ includeLocal: true,
35
+ });
36
+ const filteredContexts = allContexts.filter(hasCloudSql);
37
+ const sortByEnv = (a: string, b: string) => {
38
+ const aLocal = a.startsWith("local:");
39
+ const bLocal = b.startsWith("local:");
40
+ if (aLocal !== bLocal) return aLocal ? 1 : -1;
41
+ return a.localeCompare(b);
42
+ };
43
+ const envs = filteredContexts
44
+ .map((c) => `${c.env}:${c.name}`)
45
+ .sort(sortByEnv);
46
+ const targetEnvChoices = filteredContexts
47
+ .map((c) => {
48
+ const value = `${c.env}:${c.name}`;
49
+ const isProd = c.environment.envType === "prod";
50
+ return {
51
+ name: isProd ? `⚠️ ${value}` : value,
52
+ value,
53
+ };
54
+ })
55
+ .sort((a, b) => sortByEnv(a.value, b.value));
21
56
 
22
57
  const { sourceEnvAndComponent } = await this.prompt({
23
58
  type: "list",
@@ -60,12 +95,7 @@ export default async (vorpal: Vorpal) =>
60
95
  };
61
96
 
62
97
  if (sourceEnv === "local") {
63
- const parser = new ConnectionStringParser({
64
- scheme: "postgres",
65
- hosts: [],
66
- });
67
-
68
- const parsersResult = parser.parse(
98
+ const parsersResult = parseConnectionString(
69
99
  sourceEnvVars.DATABASE_URL.toString(),
70
100
  );
71
101
  sourcePort = parsersResult.hosts?.[0]?.port;
@@ -88,7 +118,7 @@ export default async (vorpal: Vorpal) =>
88
118
  const { targetEnvAndComponent } = await this.prompt({
89
119
  type: "list",
90
120
  name: "targetEnvAndComponent",
91
- choices: envs,
121
+ choices: targetEnvChoices,
92
122
 
93
123
  message: "target env? 🤔 ",
94
124
  });
@@ -107,12 +137,7 @@ export default async (vorpal: Vorpal) =>
107
137
  );
108
138
 
109
139
  if (targetEnv === "local") {
110
- const parser = new ConnectionStringParser({
111
- scheme: "postgres",
112
- hosts: [],
113
- });
114
-
115
- const parsersResult = parser.parse(
140
+ const parsersResult = parseConnectionString(
116
141
  targetEnvVars.DATABASE_URL.toString(),
117
142
  );
118
143
 
package/src/catenv.ts CHANGED
@@ -9,12 +9,16 @@ if (args.some((arg) => helpFlags.includes(arg))) {
9
9
  const docLink =
10
10
  "https://git.panter.ch/catladder/catladder/-/blob/main/docs/1_VARS.md";
11
11
  console.log(
12
- `\nUsage: catenv [env|env:component]\n\nEnv variable and catenv documentation:\n${docLink}`,
12
+ `\nUsage: catenv [env|env:component] [-v|--verbose]\n\nEnv variable and catenv documentation:\n${docLink}`,
13
13
  );
14
14
  process.exit(0);
15
15
  }
16
16
 
17
- catenv(args[0] ? parseChoice(args[0]) : null).then(() => {
17
+ const verbose = args.some((arg) => arg === "-v" || arg === "--verbose");
18
+ // choise arg is deprecated and will be removed in the future
19
+ const choiceArg = args.find((arg) => arg !== "-v" && arg !== "--verbose");
20
+
21
+ catenv(choiceArg ? parseChoice(choiceArg) : null, { verbose }).then(() => {
18
22
  // we have to exit manually, because we have some file watches
19
23
  process.exit();
20
24
  });
@@ -94,6 +94,7 @@ export const getAllComponentsWithAllEnvsHierarchical = async (): Promise<{
94
94
 
95
95
  export const getAllPipelineContexts = async (
96
96
  onlyComponent?: string | string[],
97
+ { includeLocal = false }: { includeLocal?: boolean } = {},
97
98
  ) => {
98
99
  const onlyComponentsArray = onlyComponent
99
100
  ? Array.isArray(onlyComponent)
@@ -102,7 +103,7 @@ export const getAllPipelineContexts = async (
102
103
  : null;
103
104
  return Promise.all(
104
105
  (await getAllComponentsWithAllEnvsFlat())
105
- .filter((c) => c.env !== "local")
106
+ .filter((c) => includeLocal || c.env !== "local")
106
107
  .filter(
107
108
  (c) =>
108
109
  !onlyComponentsArray || onlyComponentsArray.includes(c.componentName),
@@ -30,15 +30,19 @@ const createCopyDbScript = ({
30
30
  const targetPSQL = (command: string) =>
31
31
  `PGPASSWORD=${targetPassword} psql -p ${targetPort} --host=localhost --user=${targetUsername} -q ${command}`;
32
32
 
33
+ // URL-encode credentials to handle special characters like @, :, /, etc.
34
+ const encodedSourceUsername = encodeURIComponent(sourceUsername);
35
+ const encodedSourcePassword = encodeURIComponent(sourcePassword);
36
+
33
37
  const copyDBScript = `
34
38
  set -e
35
-
36
-
39
+
40
+
37
41
 
38
42
  dumptmp=$(mktemp /tmp/dump.XXXXXX)
39
43
 
40
44
  echo "Dumping file to $dumptmp"
41
- pg_dump --dbname=postgres://${sourceUsername}:${sourcePassword}@localhost:${sourcePort}/${sourceDbName} --no-owner --no-privileges > $dumptmp
45
+ pg_dump --dbname=postgres://${encodedSourceUsername}:${encodedSourcePassword}@localhost:${sourcePort}/${sourceDbName} --no-owner --no-privileges > $dumptmp
42
46
  echo "dump done"
43
47
  ${targetPSQL(
44
48
  `-c 'drop database "${targetDbName}" WITH (FORCE)' 1> /dev/null || true`,
@@ -0,0 +1,28 @@
1
+ import {
2
+ ConnectionStringParser,
3
+ type IConnectionStringParameters,
4
+ } from "connection-string-parser";
5
+
6
+ /**
7
+ * Parses a PostgreSQL connection string.
8
+ * Accepts both postgres:// and postgresql:// schemes and normalizes to postgresql://
9
+ *
10
+ * @param connectionString - The connection string to parse (e.g., "postgresql://user:pass@localhost:5432/dbname")
11
+ * @returns Parsed connection string parameters
12
+ */
13
+ export function parseConnectionString(
14
+ connectionString: string,
15
+ ): IConnectionStringParameters {
16
+ const parser = new ConnectionStringParser({
17
+ scheme: "postgresql",
18
+ hosts: [],
19
+ });
20
+
21
+ // Normalize postgres:// to postgresql:// (the official IANA scheme)
22
+ const normalizedConnectionString = connectionString.replace(
23
+ /^postgres:\/\//,
24
+ "postgresql://",
25
+ );
26
+
27
+ return parser.parse(normalizedConnectionString);
28
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../../../../pipeline/src/build/rails/test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { ComponentContextWithBuild } from "../types/context";
2
- import type { CatladderJob } from "../types/jobs";
3
- export declare const SBOM_BUILD_JOB_NAME = "\uD83E\uDDFE sbom";
4
- export declare const SBOM_FILE = "__sbom.json";
5
- export declare const createSbomBuildJob: (context: ComponentContextWithBuild) => CatladderJob;
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSbomBuildJob = exports.SBOM_FILE = exports.SBOM_BUILD_JOB_NAME = void 0;
4
- const _1 = require(".");
5
- const utils_1 = require("../utils");
6
- exports.SBOM_BUILD_JOB_NAME = "🧾 sbom";
7
- exports.SBOM_FILE = "__sbom.json";
8
- const createSbomBuildJob = (context) => {
9
- var _a, _b, _c, _d;
10
- const buildConfig = context.build.config;
11
- const defaultImage = {
12
- name: "aquasec/trivy:0.58.2",
13
- entrypoint: [""],
14
- };
15
- const defaultScript = [
16
- `trivy fs --quiet --format cyclonedx --output "${exports.SBOM_FILE}" ${context.packageManagerInfo.componentIsInWorkspace
17
- ? "."
18
- : context.build.dir}`,
19
- ];
20
- const image = (0, _1.isStandaloneBuildConfig)(buildConfig) &&
21
- buildConfig.type === "custom" &&
22
- buildConfig.sbom !== false
23
- ? ((_b = (_a = buildConfig.sbom) === null || _a === void 0 ? void 0 : _a.jobImage) !== null && _b !== void 0 ? _b : defaultImage)
24
- : defaultImage;
25
- const script = (0, _1.isStandaloneBuildConfig)(buildConfig) &&
26
- buildConfig.type === "custom" &&
27
- buildConfig.sbom !== false
28
- ? ((_d = (0, utils_1.ensureArrayOrNull)((_c = buildConfig.sbom) === null || _c === void 0 ? void 0 : _c.command)) !== null && _d !== void 0 ? _d : defaultScript)
29
- : defaultScript;
30
- return {
31
- name: exports.SBOM_BUILD_JOB_NAME,
32
- stage: "build",
33
- envMode: "jobPerEnv",
34
- variables: {},
35
- cache: undefined,
36
- image,
37
- script,
38
- allow_failure: true,
39
- artifacts: {
40
- paths: [exports.SBOM_FILE],
41
- },
42
- };
43
- };
44
- exports.createSbomBuildJob = createSbomBuildJob;
45
- //# sourceMappingURL=sbom.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sbom.js","sourceRoot":"","sources":["../../../../../pipeline/src/build/sbom.ts"],"names":[],"mappings":";;;AAAA,wBAA4C;AAG5C,oCAA6C;AAEhC,QAAA,mBAAmB,GAAG,SAAS,CAAC;AAChC,QAAA,SAAS,GAAG,aAAa,CAAC;AAEhC,MAAM,kBAAkB,GAAG,CAChC,OAAkC,EACpB,EAAE;;IAChB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IAEzC,MAAM,YAAY,GAAG;QACnB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,CAAC,EAAE,CAAC;KACjB,CAAC;IACF,MAAM,aAAa,GAAG;QACpB,iDAAiD,iBAAS,KACxD,OAAO,CAAC,kBAAkB,CAAC,sBAAsB;YAC/C,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GACpB,EAAE;KACH,CAAC;IAEF,MAAM,KAAK,GACT,IAAA,0BAAuB,EAAC,WAAW,CAAC;QACpC,WAAW,CAAC,IAAI,KAAK,QAAQ;QAC7B,WAAW,CAAC,IAAI,KAAK,KAAK;QACxB,CAAC,CAAC,CAAC,MAAA,MAAA,WAAW,CAAC,IAAI,0CAAE,QAAQ,mCAAI,YAAY,CAAC;QAC9C,CAAC,CAAC,YAAY,CAAC;IAEnB,MAAM,MAAM,GACV,IAAA,0BAAuB,EAAC,WAAW,CAAC;QACpC,WAAW,CAAC,IAAI,KAAK,QAAQ;QAC7B,WAAW,CAAC,IAAI,KAAK,KAAK;QACxB,CAAC,CAAC,CAAC,MAAA,IAAA,yBAAiB,EAAC,MAAA,WAAW,CAAC,IAAI,0CAAE,OAAO,CAAC,mCAAI,aAAa,CAAC;QACjE,CAAC,CAAC,aAAa,CAAC;IAEpB,OAAO;QACL,IAAI,EAAE,2BAAmB;QACzB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,SAAS;QAChB,KAAK;QACL,MAAM;QACN,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE;YACT,KAAK,EAAE,CAAC,iBAAS,CAAC;SACnB;KACF,CAAC;AACJ,CAAC,CAAC;AA5CW,QAAA,kBAAkB,sBA4C7B"}
@@ -1,4 +0,0 @@
1
- import { type ComponentContext } from "../types/context";
2
- export declare const sbomDeactivated: (context: ComponentContext) => boolean;
3
- export declare const getDependencyTrackUploadScript: (context: ComponentContext) => string[];
4
- export declare const getDependencyTrackDeleteScript: (context: ComponentContext) => string[];
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDependencyTrackDeleteScript = exports.getDependencyTrackUploadScript = exports.sbomDeactivated = void 0;
4
- const BashExpression_1 = require("../bash/BashExpression");
5
- const sbom_1 = require("../build/sbom");
6
- const context_1 = require("../types/context");
7
- const sbomDeactivated = (context) => context.build.type === "disabled" ||
8
- ((0, context_1.componentContextIsStandaloneBuild)(context) &&
9
- context.build.config.type === "custom" &&
10
- context.build.config.sbom === false);
11
- exports.sbomDeactivated = sbomDeactivated;
12
- const getDependencyTrackUploadScript = (context) => {
13
- return (0, exports.sbomDeactivated)(context)
14
- ? []
15
- : [
16
- "echo 'Uploading SBOM to Dependency Track'",
17
- `/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "${context.fullConfig.customerName}-${context.fullConfig.appName}/${context.name}" "${(0, BashExpression_1.getBashVariable)("ROOT_URL")}" "${sbom_1.SBOM_FILE}" vex.json || true`,
18
- ];
19
- };
20
- exports.getDependencyTrackUploadScript = getDependencyTrackUploadScript;
21
- const getDependencyTrackDeleteScript = (context) => {
22
- return (0, exports.sbomDeactivated)(context)
23
- ? []
24
- : [
25
- "echo 'Disabling component in Dependency Track'",
26
- `/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "${context.fullConfig.customerName}-${context.fullConfig.appName}/${context.name}" "${(0, BashExpression_1.getBashVariable)("CI_ENVIRONMENT_URL")}" || true`,
27
- ];
28
- };
29
- exports.getDependencyTrackDeleteScript = getDependencyTrackDeleteScript;
30
- //# sourceMappingURL=sbom.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sbom.js","sourceRoot":"","sources":["../../../../../pipeline/src/deploy/sbom.ts"],"names":[],"mappings":";;;AAAA,2DAAyD;AACzD,wCAA0C;AAC1C,8CAG0B;AAEnB,MAAM,eAAe,GAAG,CAAC,OAAyB,EAAE,EAAE,CAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU;IACjC,CAAC,IAAA,2CAAiC,EAAC,OAAO,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;QACtC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AAJ5B,QAAA,eAAe,mBAIa;AAElC,MAAM,8BAA8B,GAAG,CAC5C,OAAyB,EACf,EAAE;IACZ,OAAO,IAAA,uBAAe,EAAC,OAAO,CAAC;QAC7B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE,2CAA2C;YAC3C,oEAAoE,OAAO,CAAC,UAAU,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,MAAM,IAAA,gCAAe,EAAC,UAAU,CAAC,MAAM,gBAAS,oBAAoB;SACtN,CAAC;AACR,CAAC,CAAC;AATW,QAAA,8BAA8B,kCASzC;AAEK,MAAM,8BAA8B,GAAG,CAC5C,OAAyB,EACf,EAAE;IACZ,OAAO,IAAA,uBAAe,EAAC,OAAO,CAAC;QAC7B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE,gDAAgD;YAChD,qEAAqE,OAAO,CAAC,UAAU,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,MAAM,IAAA,gCAAe,EAAC,oBAAoB,CAAC,WAAW;SACzM,CAAC;AACR,CAAC,CAAC;AATW,QAAA,8BAA8B,kCASzC"}
@@ -1,5 +0,0 @@
1
- import memoizee from "memoizee";
2
- import type { YarnWorkspace } from "../../types";
3
- export declare const getYarnVersion: (() => Promise<string>) & memoizee.Memoized<() => Promise<string>>;
4
- export declare const getWorkspaces: ((isClassic: boolean) => Promise<Array<YarnWorkspace>>) & memoizee.Memoized<(isClassic: boolean) => Promise<Array<YarnWorkspace>>>;
5
- export declare const getWorkspaceDependencies: (ws: YarnWorkspace, allWorkspaces: YarnWorkspace[]) => string[];
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getWorkspaceDependencies = exports.getWorkspaces = exports.getYarnVersion = void 0;
7
- const child_process_promise_1 = require("child-process-promise");
8
- const memoizee_1 = __importDefault(require("memoizee"));
9
- const jsonParse_1 = require("../../utils/jsonParse");
10
- const execOrFail = async (cmd, onFail) => {
11
- try {
12
- return await (0, child_process_promise_1.exec)(cmd).then((r) => r.stdout);
13
- }
14
- catch (e) {
15
- return onFail !== null && onFail !== void 0 ? onFail : null;
16
- }
17
- };
18
- // export for mocking
19
- exports.getYarnVersion = (0, memoizee_1.default)(async () => {
20
- return await execOrFail("yarn --version", "");
21
- }, { promise: true });
22
- // export for mocking
23
- exports.getWorkspaces = (0, memoizee_1.default)(async (isClassic) => {
24
- var _a, _b;
25
- return isClassic
26
- ? Object.values((0, jsonParse_1.jsonParseOrThrow)((_b = (_a = (0, jsonParse_1.jsonParseOrThrow)(await execOrFail("yarn workspaces --json info", "{}"))) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : "{}"))
27
- : (0, jsonParse_1.jsonParseOrThrow)(`[${(await execOrFail("yarn workspaces list --json --verbose", ""))
28
- .trim()
29
- .split("\n")
30
- .join(",")}]`);
31
- }, { promise: true });
32
- // recursivly get all workspace dependencies
33
- const getWorkspaceDependencies = (ws, allWorkspaces) => {
34
- return ws
35
- ? [...ws.workspaceDependencies, ...ws.mismatchedWorkspaceDependencies]
36
- .flatMap((location) => {
37
- // we have to do this recursivly
38
- const otherWorkspace = allWorkspaces.find((w) => w.location === location);
39
- if (otherWorkspace) {
40
- return [
41
- ...(0, exports.getWorkspaceDependencies)(otherWorkspace, allWorkspaces),
42
- otherWorkspace.location,
43
- ];
44
- }
45
- return [];
46
- })
47
- .filter(Boolean)
48
- : [];
49
- };
50
- exports.getWorkspaceDependencies = getWorkspaceDependencies;
51
- //# sourceMappingURL=yarnUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"yarnUtils.js","sourceRoot":"","sources":["../../../../../../pipeline/src/pipeline/yarn/yarnUtils.ts"],"names":[],"mappings":";;;;;;AAAA,iEAA6C;AAC7C,wDAAgC;AAEhC,qDAAyD;AAEzD,MAAM,UAAU,GAAG,KAAK,EAAE,GAAW,EAAE,MAAc,EAAmB,EAAE;IACxE,IAAI,CAAC;QACH,OAAO,MAAM,IAAA,4BAAI,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC;IACxB,CAAC;AACH,CAAC,CAAC;AACF,qBAAqB;AACR,QAAA,cAAc,GAAG,IAAA,kBAAQ,EACpC,KAAK,IAAI,EAAE;IACT,OAAO,MAAM,UAAU,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;AAEF,qBAAqB;AACR,QAAA,aAAa,GAAG,IAAA,kBAAQ,EACnC,KAAK,EAAE,SAAkB,EAAiC,EAAE;;IAC1D,OAAO,SAAS;QACd,CAAC,CAAC,MAAM,CAAC,MAAM,CACX,IAAA,4BAAgB,EACd,MAAA,MAAA,IAAA,4BAAgB,EACd,MAAM,UAAU,CAAC,6BAA6B,EAAE,IAAI,CAAC,CACtD,0CAAE,IAAI,mCAAI,IAAI,CAChB,CACF;QACH,CAAC,CAAC,IAAA,4BAAgB,EACd,IAAI,CAAC,MAAM,UAAU,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC;aAChE,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,IAAI,CAAC,GAAG,CAAC,GAAG,CAChB,CAAC;AACR,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;AAEF,4CAA4C;AACrC,MAAM,wBAAwB,GAAG,CACtC,EAAiB,EACjB,aAA8B,EACpB,EAAE;IACZ,OAAO,EAAE;QACP,CAAC,CAAE,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,+BAA+B,CAAC;aAClE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACpB,gCAAgC;YAEhC,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAC/B,CAAC;YAEF,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO;oBACL,GAAG,IAAA,gCAAwB,EAAC,cAAc,EAAE,aAAa,CAAC;oBAC1D,cAAc,CAAC,QAAQ;iBACxB,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAc;QACjC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC,CAAC;AAvBW,QAAA,wBAAwB,4BAuBnC"}