@catladder/pipeline 1.146.1 → 1.146.2

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 (122) hide show
  1. package/dist/build/base/createAppBuildJob.d.ts +2 -2
  2. package/dist/build/base/createAppBuildJob.js +1 -1
  3. package/dist/build/base/index.d.ts +2 -2
  4. package/dist/build/base/writeBuildInfo.d.ts +2 -2
  5. package/dist/build/base/writeDotEnv.d.ts +2 -2
  6. package/dist/build/custom/buildJob.d.ts +2 -2
  7. package/dist/build/custom/index.d.ts +2 -2
  8. package/dist/build/custom/testJob.d.ts +2 -2
  9. package/dist/build/docker.d.ts +9 -9
  10. package/dist/build/index.d.ts +2 -2
  11. package/dist/build/node/buildJob.d.ts +2 -2
  12. package/dist/build/node/buildJob.js +6 -6
  13. package/dist/build/node/cache.d.ts +5 -5
  14. package/dist/build/node/cache.js +4 -4
  15. package/dist/build/node/index.d.ts +4 -4
  16. package/dist/build/node/meteor.d.ts +2 -2
  17. package/dist/build/node/meteor.js +2 -2
  18. package/dist/build/node/testJob.d.ts +2 -2
  19. package/dist/build/node/testJob.js +6 -6
  20. package/dist/build/node/yarn.d.ts +4 -4
  21. package/dist/build/node/yarn.js +1 -1
  22. package/dist/build/rails/build.d.ts +2 -2
  23. package/dist/build/rails/index.d.ts +2 -2
  24. package/dist/build/rails/test.d.ts +2 -2
  25. package/dist/build/sbom.d.ts +2 -2
  26. package/dist/build/sbom.js +1 -1
  27. package/dist/bundles/catladder-gitlab/index.js +1 -1
  28. package/dist/constants.js +1 -1
  29. package/dist/context/getEnvironment.d.ts +2 -2
  30. package/dist/context/getEnvironmentContext.d.ts +2 -2
  31. package/dist/context/getEnvironmentVariables.d.ts +4 -4
  32. package/dist/context/getLabels.d.ts +2 -2
  33. package/dist/context/index.d.ts +7 -3
  34. package/dist/context/index.js +12 -3
  35. package/dist/deploy/base/deploy.d.ts +2 -2
  36. package/dist/deploy/base/index.d.ts +2 -2
  37. package/dist/deploy/base/rollback.d.ts +2 -2
  38. package/dist/deploy/base/stop.d.ts +2 -2
  39. package/dist/deploy/cloudRun/artifactsRegistry.d.ts +7 -7
  40. package/dist/deploy/cloudRun/cleanup.d.ts +2 -2
  41. package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -2
  42. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +6 -6
  43. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +3 -3
  44. package/dist/deploy/cloudRun/createJobs/common.d.ts +4 -4
  45. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -2
  46. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -2
  47. package/dist/deploy/cloudRun/createJobs/index.d.ts +2 -2
  48. package/dist/deploy/cloudRun/utils/database.d.ts +3 -3
  49. package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
  50. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -2
  51. package/dist/deploy/custom/deployJob.d.ts +2 -2
  52. package/dist/deploy/custom/deployJob.js +1 -1
  53. package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
  54. package/dist/deploy/index.d.ts +2 -2
  55. package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -3
  56. package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
  57. package/dist/deploy/kubernetes/kubeEnv.d.ts +2 -2
  58. package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
  59. package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
  60. package/dist/deploy/sbom.d.ts +4 -4
  61. package/dist/deploy/utils.d.ts +2 -2
  62. package/dist/pipeline/createJobsForComponent.d.ts +2 -2
  63. package/dist/pipeline/createJobsForComponent.js +1 -1
  64. package/dist/tsconfig.tsbuildinfo +1 -1
  65. package/dist/types/config.d.ts +2 -2
  66. package/dist/types/context.d.ts +16 -2
  67. package/package.json +1 -1
  68. package/src/build/base/createAppBuildJob.ts +3 -3
  69. package/src/build/base/index.ts +2 -2
  70. package/src/build/base/writeBuildInfo.ts +2 -2
  71. package/src/build/base/writeDotEnv.ts +2 -2
  72. package/src/build/custom/__tests__/testJob.test.ts +5 -5
  73. package/src/build/custom/buildJob.ts +4 -2
  74. package/src/build/custom/index.ts +2 -2
  75. package/src/build/custom/testJob.ts +4 -2
  76. package/src/build/docker.ts +9 -9
  77. package/src/build/index.ts +2 -2
  78. package/src/build/node/buildJob.ts +13 -9
  79. package/src/build/node/cache.ts +9 -9
  80. package/src/build/node/index.ts +6 -4
  81. package/src/build/node/meteor.ts +10 -5
  82. package/src/build/node/testJob.ts +11 -8
  83. package/src/build/node/yarn.ts +6 -8
  84. package/src/build/rails/build.ts +4 -2
  85. package/src/build/rails/index.ts +2 -2
  86. package/src/build/rails/test.ts +4 -2
  87. package/src/build/sbom.ts +4 -4
  88. package/src/context/getEnvironment.ts +2 -2
  89. package/src/context/getEnvironmentContext.ts +2 -2
  90. package/src/context/getEnvironmentVariables.ts +7 -4
  91. package/src/context/getLabels.ts +2 -2
  92. package/src/context/index.ts +15 -5
  93. package/src/deploy/base/deploy.ts +2 -2
  94. package/src/deploy/base/index.ts +2 -2
  95. package/src/deploy/base/rollback.ts +2 -2
  96. package/src/deploy/base/stop.ts +2 -2
  97. package/src/deploy/cloudRun/artifactsRegistry.ts +12 -7
  98. package/src/deploy/cloudRun/cleanup.ts +2 -2
  99. package/src/deploy/cloudRun/cloudRunRevisions.ts +3 -3
  100. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +10 -10
  101. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +3 -3
  102. package/src/deploy/cloudRun/createJobs/common.ts +4 -4
  103. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +5 -2
  104. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +2 -2
  105. package/src/deploy/cloudRun/createJobs/index.ts +2 -2
  106. package/src/deploy/cloudRun/utils/database.ts +3 -3
  107. package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +4 -2
  108. package/src/deploy/cloudRun/utils/getServiceName.ts +2 -2
  109. package/src/deploy/custom/deployJob.ts +7 -3
  110. package/src/deploy/dockerTag/deployJob.ts +4 -2
  111. package/src/deploy/index.ts +2 -2
  112. package/src/deploy/kubernetes/cloudSql/index.ts +3 -3
  113. package/src/deploy/kubernetes/deployJob.ts +2 -2
  114. package/src/deploy/kubernetes/kubeEnv.ts +2 -2
  115. package/src/deploy/kubernetes/kubeValues.ts +3 -3
  116. package/src/deploy/kubernetes/mongodb.ts +8 -8
  117. package/src/deploy/sbom.ts +8 -4
  118. package/src/deploy/utils.ts +2 -2
  119. package/src/pipeline/createJobsForComponent.ts +11 -7
  120. package/src/pipeline/gitlab/createGitlabJobs.ts +2 -2
  121. package/src/types/config.ts +2 -2
  122. package/src/types/context.ts +18 -2
@@ -1,4 +1,4 @@
1
- import type { Context } from "../../types/context";
1
+ import type { ComponentContext } from "../../types/context";
2
2
  import type { CatladderJob } from "../../types/jobs";
3
3
  import { ensureArray, notNil } from "../../utils";
4
4
  import { isOfBuildType } from "../types";
@@ -11,7 +11,9 @@ const RUNNER_CUSTOM_TEST_VARIABLES = {
11
11
  KUBERNETES_MEMORY_LIMIT: "4Gi",
12
12
  };
13
13
 
14
- export const createCustomTestJobs = (context: Context): CatladderJob[] => {
14
+ export const createCustomTestJobs = (
15
+ context: ComponentContext,
16
+ ): CatladderJob[] => {
15
17
  // don't run tests after release
16
18
  // TODO: this will be replaced by using rules
17
19
  if (context.trigger === "taggedRelease") {
@@ -1,7 +1,7 @@
1
1
  import { merge } from "lodash";
2
2
  import { isOfDeployType } from "../deploy";
3
3
  import { getRunnerImage } from "../runner";
4
- import type { Context } from "../types";
4
+ import type { ComponentContext } from "../types";
5
5
  import type { CatladderJob } from "../types/jobs";
6
6
  import { existsSync } from "fs";
7
7
  import path from "path";
@@ -19,7 +19,7 @@ const DOCKER_BUILD_RUNNER_REQUESTS = {
19
19
  KUBERNETES_MEMORY_LIMIT: "2Gi",
20
20
  };
21
21
 
22
- export const getDockerImageVariables = (context: Context) => {
22
+ export const getDockerImageVariables = (context: ComponentContext) => {
23
23
  return {
24
24
  ...(isOfDeployType(context.componentConfig.deploy, "google-cloudrun")
25
25
  ? {
@@ -48,7 +48,7 @@ export const getDockerImageVariables = (context: Context) => {
48
48
  */
49
49
  export const requiresDockerBuild = ({
50
50
  componentConfig: { deploy },
51
- }: Context): boolean =>
51
+ }: ComponentContext): boolean =>
52
52
  isOfDeployType(deploy, "kubernetes", "google-cloudrun", "dockerTag") ||
53
53
  (isOfDeployType(deploy, "custom") && deploy.requiresDocker);
54
54
 
@@ -60,7 +60,7 @@ const getDockerBuildRunnerVariables = () => ({
60
60
  DOCKER_BUILDKIT: "1", // see https://docs.docker.com/develop/develop-images/build_enhancements/
61
61
  });
62
62
 
63
- export const getDockerBuildVariables = (context: Context) => {
63
+ export const getDockerBuildVariables = (context: ComponentContext) => {
64
64
  return {
65
65
  DOCKERFILE_ADDITIONS:
66
66
  context.componentConfig.build.docker?.additionsBegin?.join("\n"),
@@ -76,7 +76,7 @@ export const getDockerBuildVariables = (context: Context) => {
76
76
  export const DOCKER_BUILD_JOB_NAME = "🔨 docker";
77
77
 
78
78
  export const getDockerJobBaseProps = (
79
- context: Context,
79
+ context: ComponentContext,
80
80
  ): Pick<
81
81
  CatladderJob,
82
82
  "image" | "services" | "variables" | "runnerVariables"
@@ -96,7 +96,7 @@ export const getDockerJobBaseProps = (
96
96
 
97
97
  export type DockerBuildJobDefinition = Partial<CatladderJob>;
98
98
  export const createDockerBuildJobBase = (
99
- context: Context,
99
+ context: ComponentContext,
100
100
  { script, ...def }: Partial<CatladderJob>,
101
101
  ): CatladderJob => {
102
102
  return merge(
@@ -118,7 +118,7 @@ export const createDockerBuildJobBase = (
118
118
  );
119
119
  };
120
120
 
121
- export const gitlabDockerLogin = (context: Context) =>
121
+ export const gitlabDockerLogin = (context: ComponentContext) =>
122
122
  isOfDeployType(context.componentConfig.deploy, "google-cloudrun")
123
123
  ? [
124
124
  ...gcloudServiceAccountLoginCommands(context),
@@ -129,7 +129,7 @@ export const gitlabDockerLogin = (context: Context) =>
129
129
  ];
130
130
 
131
131
  export const getDockerBuildDefaultScript = (
132
- context: Context,
132
+ context: ComponentContext,
133
133
  ensureDockerFileScript?: string,
134
134
  ) =>
135
135
  [
@@ -154,5 +154,5 @@ export const getDockerBuildDefaultScript = (
154
154
  ]),
155
155
  ].filter(Boolean);
156
156
 
157
- export const hasDockerfile = (context: Context) =>
157
+ export const hasDockerfile = (context: ComponentContext) =>
158
158
  existsSync(path.join(context.componentConfig.dir, "Dockerfile"));
@@ -1,4 +1,4 @@
1
- import type { Context } from "../types/context";
1
+ import type { ComponentContext } from "../types/context";
2
2
  import type { EnvironmentContext } from "../types/environmentContext";
3
3
 
4
4
  import type { CatladderJob } from "../types/jobs";
@@ -12,7 +12,7 @@ export * from "./node";
12
12
 
13
13
  export type BuildTypes = {
14
14
  [type in BuildConfigType]: {
15
- jobs: (context: Context) => CatladderJob[];
15
+ jobs: (context: ComponentContext) => CatladderJob[];
16
16
  defaults: (
17
17
  envContext: EnvironmentContext<BuildConfigType, any>,
18
18
  ) => Partial<Extract<BuildConfig, { type: type }>>;
@@ -1,6 +1,6 @@
1
1
  import { join } from "path";
2
2
  import { getRunnerImage } from "../../runner";
3
- import type { Context } from "../../types/context";
3
+ import type { ComponentContext } from "../../types/context";
4
4
  import type { CatladderJob } from "../../types/jobs";
5
5
  import { ensureArray } from "../../utils";
6
6
  import { createBuildJobs } from "../base";
@@ -10,7 +10,9 @@ import { getNextCache, getNodeCache, getYarnCache } from "./cache";
10
10
  import { NODE_RUNNER_BUILD_VARIABLES } from "./constants";
11
11
  import { getDockerAppCopyAndBuildScript, getYarnInstall } from "./yarn";
12
12
 
13
- export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
13
+ export const createNodeBuildJobs = (
14
+ context: ComponentContext,
15
+ ): CatladderJob[] => {
14
16
  const buildConfig = context.componentConfig.build;
15
17
 
16
18
  if (!isOfBuildType(buildConfig, "node", "node-static", "storybook")) {
@@ -18,7 +20,7 @@ export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
18
20
  }
19
21
 
20
22
  const defaultImage = getRunnerImage("jobs-default");
21
- const yarnInstall = getYarnInstall(context);
23
+ const yarnInstall = getYarnInstall(context.buildContext);
22
24
 
23
25
  return createBuildJobs(context, {
24
26
  appBuild:
@@ -28,7 +30,7 @@ export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
28
30
  runnerVariables: NODE_RUNNER_BUILD_VARIABLES,
29
31
  cache: [
30
32
  ...(ensureArray(buildConfig.jobCache) ?? []),
31
- ...getNodeCache(context),
33
+ ...getNodeCache(context.buildContext),
32
34
  ...getNextCache(context),
33
35
  ],
34
36
  script: [
@@ -39,8 +41,8 @@ export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
39
41
  paths: [
40
42
  context.componentConfig.dir,
41
43
  // also copy workspace dependencies in monorepo if packages are shared and they create build artifacts
42
- ...(context.packageManagerInfo?.currentWorkspaceDependencies ??
43
- []),
44
+ ...(context.buildContext.packageManagerInfo
45
+ ?.currentWorkspaceDependencies ?? []),
44
46
  ].flatMap((dir) => [
45
47
  join(dir, "__build_info.json"),
46
48
  join(dir, "dist"),
@@ -63,12 +65,14 @@ export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
63
65
  ? "ensureNginxDockerfile"
64
66
  : "ensureNodeDockerfile",
65
67
  ),
66
- cache: [...getYarnCache(context, "pull")],
68
+ cache: [...getYarnCache(context.buildContext, "pull")],
67
69
  variables: {
68
70
  // only required for non static
69
- DOCKER_COPY_AND_INSTALL_APP: getDockerAppCopyAndBuildScript(context),
71
+ DOCKER_COPY_AND_INSTALL_APP: getDockerAppCopyAndBuildScript(
72
+ context.buildContext,
73
+ ),
70
74
  DOCKER_COPY_WORKSPACE_FILES:
71
- context.packageManagerInfo?.pathsToCopyInDocker
75
+ context.buildContext.packageManagerInfo?.pathsToCopyInDocker
72
76
  .map((dir) => `COPY --chown=node:node ${dir} /app/${dir}`)
73
77
  ?.join("\n"),
74
78
  },
@@ -1,11 +1,11 @@
1
1
  import { join } from "path";
2
2
  import slugify from "slugify";
3
- import type { Context } from "../../types/context";
3
+ import type { BuildContext, ComponentContext } from "../../types/context";
4
4
  import type { GitlabJobCache } from "../../types/gitlab-types";
5
5
  import { uniq } from "lodash";
6
6
 
7
7
  export const getYarnCache = (
8
- context: Context,
8
+ context: BuildContext,
9
9
  policy = "pull-push",
10
10
  ): GitlabJobCache[] => {
11
11
  const componentIsInWorkspace =
@@ -18,15 +18,15 @@ export const getYarnCache = (
18
18
  paths: [".yarn"],
19
19
  }
20
20
  : {
21
- key: slugify(context.componentConfig.dir) + "-yarn",
21
+ key: slugify(context.dir) + "-yarn",
22
22
  policy,
23
- paths: [join(context.componentConfig.dir, ".yarn")],
23
+ paths: [join(context.dir, ".yarn")],
24
24
  },
25
25
  ];
26
26
  };
27
27
 
28
28
  export const getNodeModulesCache = (
29
- context: Context,
29
+ context: BuildContext,
30
30
  policy = "pull-push",
31
31
  ): GitlabJobCache[] => {
32
32
  const componentIsInWorkspace =
@@ -39,7 +39,7 @@ export const getNodeModulesCache = (
39
39
  // if component is in a shared workspace, use workspace cache. use individual cache else
40
40
  key: componentIsInWorkspace
41
41
  ? "node-modules-workspace"
42
- : slugify(context.componentConfig.dir) + "-node-modules", // we use the dirname, not the component name, because in certain cases we have two apps in the same directory and want to share the cache, e.g. when having storybook in the same package.json
42
+ : slugify(context.dir) + "-node-modules", // we use the dirname, not the component name, because in certain cases we have two apps in the same directory and want to share the cache, e.g. when having storybook in the same package.json
43
43
  policy,
44
44
  paths: [
45
45
  ...(componentIsInWorkspace
@@ -49,13 +49,13 @@ export const getNodeModulesCache = (
49
49
  join(w.location, "node_modules"),
50
50
  ) ?? []),
51
51
  ])
52
- : [join(context.componentConfig.dir, "node_modules")]),
52
+ : [join(context.dir, "node_modules")]),
53
53
  ],
54
54
  },
55
55
  ];
56
56
  };
57
57
  export const getNodeCache = (
58
- context: Context,
58
+ context: BuildContext,
59
59
  policy = "pull-push",
60
60
  ): GitlabJobCache[] => {
61
61
  return [
@@ -64,7 +64,7 @@ export const getNodeCache = (
64
64
  ];
65
65
  };
66
66
 
67
- export const getNextCache = (context: Context): GitlabJobCache[] => [
67
+ export const getNextCache = (context: ComponentContext): GitlabJobCache[] => [
68
68
  {
69
69
  key: context.componentName + "-next-cache",
70
70
  policy: "pull-push",
@@ -1,17 +1,19 @@
1
- import type { Context } from "../../types/context";
1
+ import type { ComponentContext } from "../../types/context";
2
2
  import type { CatladderJob } from "../../types/jobs";
3
3
  import { createNodeBuildJobs } from "./buildJob";
4
4
  import { createMeteorBuildJobs } from "./meteor";
5
5
  import { createNodeTestJobs } from "./testJob";
6
6
 
7
- export const createNodeJobs = (context: Context): CatladderJob[] => {
7
+ export const createNodeJobs = (context: ComponentContext): CatladderJob[] => {
8
8
  return [...createNodeTestJobs(context), ...createNodeBuildJobs(context)];
9
9
  };
10
10
 
11
- export const createStorybookJobs = (context: Context): CatladderJob[] => {
11
+ export const createStorybookJobs = (
12
+ context: ComponentContext,
13
+ ): CatladderJob[] => {
12
14
  return [...createNodeBuildJobs(context)];
13
15
  };
14
16
 
15
- export const createMeteorJobs = (context: Context): CatladderJob[] => {
17
+ export const createMeteorJobs = (context: ComponentContext): CatladderJob[] => {
16
18
  return [...createNodeTestJobs(context), ...createMeteorBuildJobs(context)];
17
19
  };
@@ -1,7 +1,7 @@
1
1
  import { join } from "path";
2
2
  import { getRunnerImage } from "../../runner";
3
3
  import type { GitlabJobCache } from "../../types";
4
- import type { Context } from "../../types/context";
4
+ import type { ComponentContext } from "../../types/context";
5
5
 
6
6
  import type { CatladderJob } from "../../types/jobs";
7
7
 
@@ -11,7 +11,7 @@ import { isOfBuildType } from "../types";
11
11
  import { getNodeCache } from "./cache";
12
12
  import { getYarnInstall } from "./yarn";
13
13
 
14
- const getMeteorCache = (context: Context): GitlabJobCache[] => [
14
+ const getMeteorCache = (context: ComponentContext): GitlabJobCache[] => [
15
15
  {
16
16
  key: context.componentName + "meteor-build-cache",
17
17
  policy: "pull-push",
@@ -26,20 +26,25 @@ const getMeteorCache = (context: Context): GitlabJobCache[] => [
26
26
  ],
27
27
  },
28
28
  ];
29
- export const createMeteorBuildJobs = (context: Context): CatladderJob[] => {
29
+ export const createMeteorBuildJobs = (
30
+ context: ComponentContext,
31
+ ): CatladderJob[] => {
30
32
  const buildConfig = context.componentConfig.build;
31
33
 
32
34
  if (!isOfBuildType(buildConfig, "meteor")) {
33
35
  throw new Error("deploy config is not meteor");
34
36
  }
35
37
 
36
- const yarnInstall = getYarnInstall(context);
38
+ const yarnInstall = getYarnInstall(context.buildContext);
37
39
 
38
40
  return createBuildJobs(context, {
39
41
  appBuild:
40
42
  buildConfig.buildCommand !== null
41
43
  ? {
42
- cache: [...getNodeCache(context), ...getMeteorCache(context)],
44
+ cache: [
45
+ ...getNodeCache(context.buildContext),
46
+ ...getMeteorCache(context),
47
+ ],
43
48
  image: getRunnerImage("jobs-meteor"),
44
49
  variables: {
45
50
  METEOR_DISABLE_OPTIMISTIC_CACHING: "1", // see https://forums.meteor.com/t/veeery-long-building-time-inside-docker-container/58673/17?u=macrozone
@@ -1,5 +1,5 @@
1
1
  import { getRunnerImage } from "../../runner";
2
- import type { Context } from "../../types/context";
2
+ import type { ComponentContext } from "../../types/context";
3
3
  import type { CatladderJob } from "../../types/jobs";
4
4
  import { ensureArray, notNil } from "../../utils";
5
5
  import { getNodeCache } from "./cache";
@@ -7,7 +7,9 @@ import { NODE_RUNNER_BUILD_VARIABLES } from "./constants";
7
7
  import { ensureNodeVersion, getYarnInstall } from "./yarn";
8
8
  import { createArtifactsConfig } from "../base/createArtifactsConfig";
9
9
 
10
- export const createNodeTestJobs = (context: Context): CatladderJob[] => {
10
+ export const createNodeTestJobs = (
11
+ context: ComponentContext,
12
+ ): CatladderJob[] => {
11
13
  // don't run tests after release
12
14
  // TODO: this will be replaced by using rules
13
15
  if (context.trigger === "taggedRelease") {
@@ -15,6 +17,7 @@ export const createNodeTestJobs = (context: Context): CatladderJob[] => {
15
17
  }
16
18
 
17
19
  const buildConfig = context.componentConfig.build;
20
+
18
21
  const defaultImage = getRunnerImage("jobs-default");
19
22
  const base: Omit<CatladderJob, "script" | "name"> = {
20
23
  variables: {
@@ -27,7 +30,7 @@ export const createNodeTestJobs = (context: Context): CatladderJob[] => {
27
30
  needs: [],
28
31
  envMode: "none",
29
32
  };
30
- const yarnInstall = getYarnInstall(context);
33
+ const yarnInstall = getYarnInstall(context.buildContext);
31
34
  const auditJob: CatladderJob | null =
32
35
  buildConfig.audit !== false
33
36
  ? {
@@ -38,7 +41,7 @@ export const createNodeTestJobs = (context: Context): CatladderJob[] => {
38
41
  script: [
39
42
  `cd ${context.componentConfig.dir}`,
40
43
  ...(ensureArray(buildConfig.audit?.command) ?? [
41
- context.packageManagerInfo?.isClassic
44
+ context.buildContext.packageManagerInfo?.isClassic
42
45
  ? "yarn audit"
43
46
  : "yarn npm audit --environment production", // yarn 2
44
47
  ]),
@@ -58,9 +61,9 @@ export const createNodeTestJobs = (context: Context): CatladderJob[] => {
58
61
  name: "👮 lint",
59
62
  ...base,
60
63
  image: buildConfig.lint?.jobImage ?? defaultImage,
61
- cache: getNodeCache(context),
64
+ cache: getNodeCache(context.buildContext),
62
65
  script: [
63
- ...ensureNodeVersion(context),
66
+ ...ensureNodeVersion(context.buildContext),
64
67
  `cd ${context.componentConfig.dir}`,
65
68
  ...yarnInstall,
66
69
  ...(ensureArray(buildConfig.lint?.command) ?? ["yarn lint"]),
@@ -80,9 +83,9 @@ export const createNodeTestJobs = (context: Context): CatladderJob[] => {
80
83
  ...base,
81
84
  image:
82
85
  buildConfig.test?.jobImage ?? getRunnerImage("jobs-testing-chrome"),
83
- cache: getNodeCache(context),
86
+ cache: getNodeCache(context.buildContext),
84
87
  script: [
85
- ...ensureNodeVersion(context),
88
+ ...ensureNodeVersion(context.buildContext),
86
89
  `cd ${context.componentConfig.dir}`,
87
90
  ...yarnInstall,
88
91
  ...(ensureArray(buildConfig.test?.command) ?? ["yarn test"]),
@@ -1,5 +1,5 @@
1
1
  import { BashExpression } from "../../bash/BashExpression";
2
- import type { Context } from "../../types";
2
+ import type { BuildContext, ComponentContext } from "../../types";
3
3
  import { ensureArray } from "../../utils";
4
4
  import { collapseableSection } from "../../utils/gitlab";
5
5
 
@@ -8,7 +8,7 @@ const YARN_INSTALL_CLASSIC = `yarn install --frozen-lockfile`;
8
8
  // FIXME: check why and when rebuild is needed
9
9
  const YARN_BERRY_PROD_REBUILD = `yarn workspaces focus --production && yarn rebuild`;
10
10
 
11
- const getYarnInstallCommand = (context: Context) => {
11
+ const getYarnInstallCommand = (context: BuildContext) => {
12
12
  if (context.packageManagerInfo?.isClassic) {
13
13
  return YARN_INSTALL_CLASSIC;
14
14
  }
@@ -16,7 +16,7 @@ const getYarnInstallCommand = (context: Context) => {
16
16
  return `yarn install --immutable`;
17
17
  };
18
18
 
19
- export const ensureNodeVersion = (context: Context) =>
19
+ export const ensureNodeVersion = (context: BuildContext) =>
20
20
  collapseableSection(
21
21
  "nodeinstall",
22
22
  "Ensure node version",
@@ -26,15 +26,13 @@ export const ensureNodeVersion = (context: Context) =>
26
26
  ]);
27
27
 
28
28
  export const getYarnInstall = (
29
- context: Context,
29
+ context: BuildContext,
30
30
  options?: {
31
31
  noCustomPostInstall: boolean;
32
32
  },
33
33
  ) => {
34
34
  const postInstall =
35
- "postInstall" in context.componentConfig.build
36
- ? context.componentConfig.build.postInstall
37
- : null;
35
+ "postInstall" in context.config ? context.config.postInstall : null;
38
36
  return [
39
37
  ...ensureNodeVersion(context),
40
38
  ...collapseableSection(
@@ -52,7 +50,7 @@ export const getYarnInstall = (
52
50
 
53
51
  const DOCKER_COPY_FILES = `COPY --chown=node:node $APP_DIR .`;
54
52
 
55
- export const getDockerAppCopyAndBuildScript = (context: Context) => {
53
+ export const getDockerAppCopyAndBuildScript = (context: BuildContext) => {
56
54
  if (context.packageManagerInfo?.isClassic) {
57
55
  return new BashExpression(
58
56
  `
@@ -1,4 +1,4 @@
1
- import type { Context } from "../..";
1
+ import type { ComponentContext } from "../..";
2
2
  import type { CatladderJob } from "../../types/jobs";
3
3
  import { createBuildJobs } from "../base";
4
4
  import {
@@ -8,7 +8,9 @@ import {
8
8
  } from "../docker";
9
9
  import { isOfBuildType } from "../types";
10
10
 
11
- export const createRailsBuildJobs = (context: Context): CatladderJob[] => {
11
+ export const createRailsBuildJobs = (
12
+ context: ComponentContext,
13
+ ): CatladderJob[] => {
12
14
  const buildConfig = context.componentConfig.build;
13
15
  if (!isOfBuildType(buildConfig, "rails")) {
14
16
  // should not happen
@@ -1,8 +1,8 @@
1
- import type { Context } from "../../types";
1
+ import type { ComponentContext } from "../../types";
2
2
  import type { CatladderJob } from "../../types/jobs";
3
3
  import { createRailsBuildJobs } from "./build";
4
4
  import { createRailsTestJobs } from "./test";
5
5
 
6
- export const createRailsJobs = (context: Context): CatladderJob[] => {
6
+ export const createRailsJobs = (context: ComponentContext): CatladderJob[] => {
7
7
  return [...createRailsTestJobs(context), ...createRailsBuildJobs(context)];
8
8
  };
@@ -1,8 +1,10 @@
1
- import type { Context } from "../..";
1
+ import type { ComponentContext } from "../..";
2
2
  import type { CatladderJob } from "../../types/jobs";
3
3
  import { ensureArray, notNil } from "../../utils";
4
4
 
5
- export const createRailsTestJobs = (context: Context): CatladderJob[] => {
5
+ export const createRailsTestJobs = (
6
+ context: ComponentContext,
7
+ ): CatladderJob[] => {
6
8
  // don't run tests after release
7
9
  // TODO: this will be replaced by using rules
8
10
  if (context.trigger === "taggedRelease") {
package/src/build/sbom.ts CHANGED
@@ -1,19 +1,19 @@
1
- import type { Context } from "../types/context";
1
+ import type { ComponentContext } from "../types/context";
2
2
  import type { CatladderJob } from "../types/jobs";
3
3
  import { ensureArray } from "../utils";
4
4
 
5
5
  export const SBOM_BUILD_JOB_NAME = "🧾 sbom";
6
6
  export const SBOM_FILE = "__sbom.json";
7
7
 
8
- export const createSbomBuildJob = (context: Context): CatladderJob => {
8
+ export const createSbomBuildJob = (context: ComponentContext): CatladderJob => {
9
9
  const buildConfig = context.componentConfig.build;
10
10
 
11
11
  const defaultImage = "aquasec/trivy:0.38.3";
12
12
  const defaultScript = [
13
13
  `trivy fs --quiet --format cyclonedx --output "${SBOM_FILE}" ${
14
- context.packageManagerInfo?.componentIsInWorkspace
14
+ context.buildContext.packageManagerInfo?.componentIsInWorkspace
15
15
  ? "."
16
- : context.componentConfig.dir
16
+ : context.buildContext.dir
17
17
  }`,
18
18
  ];
19
19
 
@@ -1,11 +1,11 @@
1
- import type { CreateContextContext } from "..";
1
+ import type { CreateComponentContextContext } from "..";
2
2
 
3
3
  import type { Environment } from "../types/context";
4
4
  import { getEnvironmentContext } from "./getEnvironmentContext";
5
5
  import { getEnvironmentVariables } from "./getEnvironmentVariables";
6
6
 
7
7
  export const getEnvironment = async (
8
- ctx: CreateContextContext,
8
+ ctx: CreateComponentContextContext,
9
9
  ): Promise<Environment> => {
10
10
  const { env } = ctx;
11
11
  const variables = await getEnvironmentVariables(ctx);
@@ -1,4 +1,4 @@
1
- import type { CreateContextContext } from "..";
1
+ import type { CreateComponentContextContext } from "..";
2
2
  import type { StringOrBashExpression } from "../bash/BashExpression";
3
3
  import { joinBashExpressions } from "../bash/BashExpression";
4
4
 
@@ -22,7 +22,7 @@ export const getEnvironmentContext = ({
22
22
  componentName,
23
23
  config,
24
24
  pipelineType,
25
- }: CreateContextContext): EnvironmentContext<any, any> => {
25
+ }: CreateComponentContextContext): EnvironmentContext<any, any> => {
26
26
  const envConfigRaw = getEnvConfig(config, componentName, env);
27
27
  const envType = getEnvType(env, envConfigRaw);
28
28
  const reviewSlug = getReviewSlug(envConfigRaw, env, pipelineType);
@@ -1,12 +1,12 @@
1
1
  import { merge } from "lodash";
2
2
  import { DEPLOY_TYPES } from "../deploy";
3
3
  import type {
4
- Context,
4
+ ComponentContext,
5
5
  EnvironmentEnvVarPart as EnvironmentVariables,
6
6
  } from "../types";
7
7
  import type { DevLocalEnvConfig } from "../types/config";
8
8
 
9
- import type { CreateContextContext, UnspecifiedEnvVars } from "..";
9
+ import type { CreateComponentContextContext, UnspecifiedEnvVars } from "..";
10
10
  import type { StringOrBashExpression } from "../bash/BashExpression";
11
11
  import { getBashVariable, joinBashExpressions } from "../bash/BashExpression";
12
12
  import type { EnvironmentContext } from "../types/environmentContext";
@@ -52,7 +52,7 @@ export type PredefinedVariables = BasePredefinedVariables & {
52
52
  };
53
53
 
54
54
  export const getEnvironmentVariables = async (
55
- ctx: CreateContextContext,
55
+ ctx: CreateComponentContextContext,
56
56
  alreadyVisited: Record<string, Record<string, boolean>> = {}, // to prevent endless loop
57
57
  ): Promise<EnvironmentVariables> => {
58
58
  const environmentContext = getEnvironmentContext(ctx);
@@ -198,5 +198,8 @@ const addIndexVar = <V extends Record<string, unknown>>(
198
198
  _ALL_ENV_VAR_KEYS: JSON.stringify(Object.keys(vars)),
199
199
  });
200
200
 
201
- export const getSecretVarNameForContext = (context: Context, key: string) =>
201
+ export const getSecretVarNameForContext = (
202
+ context: ComponentContext,
203
+ key: string,
204
+ ) =>
202
205
  getSecretVarName(context.environment.shortName, context.componentName, key);
@@ -1,5 +1,5 @@
1
1
  import slugify from "slugify";
2
- import type { Context } from "../types";
2
+ import type { ComponentContext } from "../types";
3
3
 
4
4
  const sanitize = (value?: string) => {
5
5
  if (!value) return value;
@@ -7,7 +7,7 @@ const sanitize = (value?: string) => {
7
7
  // slugify should do the job
8
8
  return slugify(value).toLowerCase();
9
9
  };
10
- export const getLabels = (context: Context) => {
10
+ export const getLabels = (context: ComponentContext) => {
11
11
  const labels = {
12
12
  "customer-name": sanitize(context.fullConfig.customerName),
13
13
  "component-name": sanitize(context.componentName),
@@ -4,7 +4,7 @@ import { DEPLOY_TYPES } from "../deploy";
4
4
  import type { DeployConfig, DeployConfigType } from "../deploy/types";
5
5
  import type { PipelineType } from "../types";
6
6
  import type { Config, PipelineTrigger } from "../types/config";
7
- import type { Context, PackageManagerInfo } from "../types/context";
7
+ import type { ComponentContext, PackageManagerInfo } from "../types/context";
8
8
  import type { PartialDeep } from "../types/utils";
9
9
  import { mergeWithMergingArrays } from "../utils";
10
10
  import { getEnvironment } from "./getEnvironment";
@@ -13,7 +13,7 @@ import { getEnvironmentContext } from "./getEnvironmentContext";
13
13
  export * from "./getEnvironment";
14
14
  export * from "./getEnvironmentVariables";
15
15
 
16
- export type CreateContextContext = {
16
+ export type CreateComponentContextContext = {
17
17
  config: Config;
18
18
  componentName: string;
19
19
  env: string;
@@ -22,9 +22,9 @@ export type CreateContextContext = {
22
22
  packageManagerInfo?: PackageManagerInfo;
23
23
  };
24
24
 
25
- export const createContext = async (
26
- ctx: CreateContextContext,
27
- ): Promise<Context> => {
25
+ export const createComponentContext = async (
26
+ ctx: CreateComponentContextContext,
27
+ ): Promise<ComponentContext> => {
28
28
  if (!/^[a-z0-9-]+$/.test(ctx.componentName)) {
29
29
  throw new Error(
30
30
  "componentName may only contain lower case letters, numbers and -",
@@ -59,6 +59,11 @@ export const createContext = async (
59
59
  return {
60
60
  fullConfig: ctx.config,
61
61
  componentConfig,
62
+ buildContext: {
63
+ dir: componentConfig.dir,
64
+ packageManagerInfo: ctx.packageManagerInfo,
65
+ config: componentConfig.build,
66
+ },
62
67
  componentName: ctx.componentName,
63
68
  environment: await getEnvironment(ctx),
64
69
  packageManagerInfo: ctx.packageManagerInfo,
@@ -66,3 +71,8 @@ export const createContext = async (
66
71
  trigger: ctx.trigger,
67
72
  };
68
73
  };
74
+
75
+ /**
76
+ * @deprecated use createComponentContext instead
77
+ */
78
+ export const createContext = createComponentContext;
@@ -3,7 +3,7 @@ import {
3
3
  requiresDockerBuild,
4
4
  } from "../../build/docker";
5
5
  import { SBOM_BUILD_JOB_NAME } from "../../build/sbom";
6
- import type { Context } from "../../types/context";
6
+ import type { ComponentContext } from "../../types/context";
7
7
  import type { CatladderJob } from "../../types/jobs";
8
8
  import { sbomDeactivated } from "../sbom";
9
9
  import { contextIsStoppable } from "../utils";
@@ -24,7 +24,7 @@ export type DeployJobDefinition = Pick<
24
24
  | "runnerVariables"
25
25
  >;
26
26
  export const createDeployJob = (
27
- context: Context,
27
+ context: ComponentContext,
28
28
  jobDefinition: DeployJobDefinition,
29
29
  ): CatladderJob => {
30
30
  const hasDocker = requiresDockerBuild(context);