@catladder/pipeline 1.146.0 → 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.
- package/dist/build/base/createAppBuildJob.d.ts +2 -2
- package/dist/build/base/createAppBuildJob.js +1 -1
- package/dist/build/base/index.d.ts +2 -2
- package/dist/build/base/writeBuildInfo.d.ts +2 -2
- package/dist/build/base/writeDotEnv.d.ts +2 -2
- package/dist/build/custom/buildJob.d.ts +2 -2
- package/dist/build/custom/index.d.ts +2 -2
- package/dist/build/custom/testJob.d.ts +2 -2
- package/dist/build/docker.d.ts +9 -9
- package/dist/build/index.d.ts +2 -2
- package/dist/build/node/buildJob.d.ts +2 -2
- package/dist/build/node/buildJob.js +6 -6
- package/dist/build/node/cache.d.ts +5 -5
- package/dist/build/node/cache.js +4 -4
- package/dist/build/node/index.d.ts +4 -4
- package/dist/build/node/meteor.d.ts +2 -2
- package/dist/build/node/meteor.js +2 -2
- package/dist/build/node/testJob.d.ts +2 -2
- package/dist/build/node/testJob.js +6 -6
- package/dist/build/node/yarn.d.ts +4 -4
- package/dist/build/node/yarn.js +1 -1
- package/dist/build/rails/build.d.ts +2 -2
- package/dist/build/rails/index.d.ts +2 -2
- package/dist/build/rails/test.d.ts +2 -2
- package/dist/build/sbom.d.ts +2 -2
- package/dist/build/sbom.js +1 -1
- package/dist/bundles/catladder-gitlab/index.js +1 -1
- package/dist/constants.js +1 -1
- package/dist/context/getEnvironment.d.ts +2 -2
- package/dist/context/getEnvironmentContext.d.ts +2 -2
- package/dist/context/getEnvironmentVariables.d.ts +4 -4
- package/dist/context/getLabels.d.ts +2 -2
- package/dist/context/index.d.ts +7 -3
- package/dist/context/index.js +12 -3
- package/dist/deploy/base/deploy.d.ts +2 -2
- package/dist/deploy/base/index.d.ts +2 -2
- package/dist/deploy/base/rollback.d.ts +2 -2
- package/dist/deploy/base/stop.d.ts +2 -2
- package/dist/deploy/cloudRun/artifactsRegistry.d.ts +7 -7
- package/dist/deploy/cloudRun/cleanup.d.ts +2 -2
- package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +6 -6
- package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +3 -3
- package/dist/deploy/cloudRun/createJobs/common.d.ts +4 -4
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -2
- package/dist/deploy/cloudRun/createJobs/index.d.ts +2 -2
- package/dist/deploy/cloudRun/utils/database.d.ts +3 -3
- package/dist/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.d.ts +2 -2
- package/dist/deploy/cloudRun/utils/getServiceName.d.ts +2 -2
- package/dist/deploy/custom/deployJob.d.ts +2 -2
- package/dist/deploy/custom/deployJob.js +1 -1
- package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
- package/dist/deploy/index.d.ts +2 -2
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -3
- package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
- package/dist/deploy/kubernetes/kubeEnv.d.ts +2 -2
- package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
- package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
- package/dist/deploy/sbom.d.ts +4 -4
- package/dist/deploy/utils.d.ts +2 -2
- package/dist/pipeline/createJobsForComponent.d.ts +2 -2
- package/dist/pipeline/createJobsForComponent.js +1 -1
- package/dist/pipeline/generatePipelineFiles.js +15 -5
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/config.d.ts +2 -2
- package/dist/types/context.d.ts +16 -2
- package/package.json +1 -1
- package/src/build/base/createAppBuildJob.ts +3 -3
- package/src/build/base/index.ts +2 -2
- package/src/build/base/writeBuildInfo.ts +2 -2
- package/src/build/base/writeDotEnv.ts +2 -2
- package/src/build/custom/__tests__/testJob.test.ts +5 -5
- package/src/build/custom/buildJob.ts +4 -2
- package/src/build/custom/index.ts +2 -2
- package/src/build/custom/testJob.ts +4 -2
- package/src/build/docker.ts +9 -9
- package/src/build/index.ts +2 -2
- package/src/build/node/buildJob.ts +13 -9
- package/src/build/node/cache.ts +9 -9
- package/src/build/node/index.ts +6 -4
- package/src/build/node/meteor.ts +10 -5
- package/src/build/node/testJob.ts +11 -8
- package/src/build/node/yarn.ts +6 -8
- package/src/build/rails/build.ts +4 -2
- package/src/build/rails/index.ts +2 -2
- package/src/build/rails/test.ts +4 -2
- package/src/build/sbom.ts +4 -4
- package/src/context/getEnvironment.ts +2 -2
- package/src/context/getEnvironmentContext.ts +2 -2
- package/src/context/getEnvironmentVariables.ts +7 -4
- package/src/context/getLabels.ts +2 -2
- package/src/context/index.ts +15 -5
- package/src/deploy/base/deploy.ts +2 -2
- package/src/deploy/base/index.ts +2 -2
- package/src/deploy/base/rollback.ts +2 -2
- package/src/deploy/base/stop.ts +2 -2
- package/src/deploy/cloudRun/artifactsRegistry.ts +12 -7
- package/src/deploy/cloudRun/cleanup.ts +2 -2
- package/src/deploy/cloudRun/cloudRunRevisions.ts +3 -3
- package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +10 -10
- package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +3 -3
- package/src/deploy/cloudRun/createJobs/common.ts +4 -4
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +5 -2
- package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +2 -2
- package/src/deploy/cloudRun/createJobs/index.ts +2 -2
- package/src/deploy/cloudRun/utils/database.ts +3 -3
- package/src/deploy/cloudRun/utils/gcloudServiceAccountLoginCommands.ts +4 -2
- package/src/deploy/cloudRun/utils/getServiceName.ts +2 -2
- package/src/deploy/custom/deployJob.ts +7 -3
- package/src/deploy/dockerTag/deployJob.ts +4 -2
- package/src/deploy/index.ts +2 -2
- package/src/deploy/kubernetes/cloudSql/index.ts +3 -3
- package/src/deploy/kubernetes/deployJob.ts +2 -2
- package/src/deploy/kubernetes/kubeEnv.ts +2 -2
- package/src/deploy/kubernetes/kubeValues.ts +3 -3
- package/src/deploy/kubernetes/mongodb.ts +8 -8
- package/src/deploy/sbom.ts +8 -4
- package/src/deploy/utils.ts +2 -2
- package/src/pipeline/createJobsForComponent.ts +11 -7
- package/src/pipeline/generatePipelineFiles.ts +20 -11
- package/src/pipeline/gitlab/createGitlabJobs.ts +2 -2
- package/src/types/config.ts +2 -2
- package/src/types/context.ts +18 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
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 = (
|
|
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") {
|
package/src/build/docker.ts
CHANGED
|
@@ -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 {
|
|
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:
|
|
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
|
-
}:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
157
|
+
export const hasDockerfile = (context: ComponentContext) =>
|
|
158
158
|
existsSync(path.join(context.componentConfig.dir, "Dockerfile"));
|
package/src/build/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
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:
|
|
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 {
|
|
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 = (
|
|
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
|
|
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(
|
|
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
|
},
|
package/src/build/node/cache.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { join } from "path";
|
|
2
2
|
import slugify from "slugify";
|
|
3
|
-
import type {
|
|
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:
|
|
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.
|
|
21
|
+
key: slugify(context.dir) + "-yarn",
|
|
22
22
|
policy,
|
|
23
|
-
paths: [join(context.
|
|
23
|
+
paths: [join(context.dir, ".yarn")],
|
|
24
24
|
},
|
|
25
25
|
];
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export const getNodeModulesCache = (
|
|
29
|
-
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.
|
|
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.
|
|
52
|
+
: [join(context.dir, "node_modules")]),
|
|
53
53
|
],
|
|
54
54
|
},
|
|
55
55
|
];
|
|
56
56
|
};
|
|
57
57
|
export const getNodeCache = (
|
|
58
|
-
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:
|
|
67
|
+
export const getNextCache = (context: ComponentContext): GitlabJobCache[] => [
|
|
68
68
|
{
|
|
69
69
|
key: context.componentName + "-next-cache",
|
|
70
70
|
policy: "pull-push",
|
package/src/build/node/index.ts
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import type {
|
|
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:
|
|
7
|
+
export const createNodeJobs = (context: ComponentContext): CatladderJob[] => {
|
|
8
8
|
return [...createNodeTestJobs(context), ...createNodeBuildJobs(context)];
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
export const createStorybookJobs = (
|
|
11
|
+
export const createStorybookJobs = (
|
|
12
|
+
context: ComponentContext,
|
|
13
|
+
): CatladderJob[] => {
|
|
12
14
|
return [...createNodeBuildJobs(context)];
|
|
13
15
|
};
|
|
14
16
|
|
|
15
|
-
export const createMeteorJobs = (context:
|
|
17
|
+
export const createMeteorJobs = (context: ComponentContext): CatladderJob[] => {
|
|
16
18
|
return [...createNodeTestJobs(context), ...createMeteorBuildJobs(context)];
|
|
17
19
|
};
|
package/src/build/node/meteor.ts
CHANGED
|
@@ -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 {
|
|
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:
|
|
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 = (
|
|
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: [
|
|
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 {
|
|
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 = (
|
|
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"]),
|
package/src/build/node/yarn.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BashExpression } from "../../bash/BashExpression";
|
|
2
|
-
import type {
|
|
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:
|
|
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:
|
|
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:
|
|
29
|
+
context: BuildContext,
|
|
30
30
|
options?: {
|
|
31
31
|
noCustomPostInstall: boolean;
|
|
32
32
|
},
|
|
33
33
|
) => {
|
|
34
34
|
const postInstall =
|
|
35
|
-
"postInstall" in context.
|
|
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:
|
|
53
|
+
export const getDockerAppCopyAndBuildScript = (context: BuildContext) => {
|
|
56
54
|
if (context.packageManagerInfo?.isClassic) {
|
|
57
55
|
return new BashExpression(
|
|
58
56
|
`
|
package/src/build/rails/build.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
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 = (
|
|
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
|
package/src/build/rails/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
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:
|
|
6
|
+
export const createRailsJobs = (context: ComponentContext): CatladderJob[] => {
|
|
7
7
|
return [...createRailsTestJobs(context), ...createRailsBuildJobs(context)];
|
|
8
8
|
};
|
package/src/build/rails/test.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type {
|
|
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 = (
|
|
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 {
|
|
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:
|
|
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.
|
|
16
|
+
: context.buildContext.dir
|
|
17
17
|
}`,
|
|
18
18
|
];
|
|
19
19
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
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:
|
|
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 {
|
|
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
|
-
}:
|
|
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
|
-
|
|
4
|
+
ComponentContext,
|
|
5
5
|
EnvironmentEnvVarPart as EnvironmentVariables,
|
|
6
6
|
} from "../types";
|
|
7
7
|
import type { DevLocalEnvConfig } from "../types/config";
|
|
8
8
|
|
|
9
|
-
import type {
|
|
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:
|
|
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 = (
|
|
201
|
+
export const getSecretVarNameForContext = (
|
|
202
|
+
context: ComponentContext,
|
|
203
|
+
key: string,
|
|
204
|
+
) =>
|
|
202
205
|
getSecretVarName(context.environment.shortName, context.componentName, key);
|
package/src/context/getLabels.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import slugify from "slugify";
|
|
2
|
-
import type {
|
|
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:
|
|
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),
|
package/src/context/index.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
|
26
|
-
ctx:
|
|
27
|
-
): Promise<
|
|
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 {
|
|
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:
|
|
27
|
+
context: ComponentContext,
|
|
28
28
|
jobDefinition: DeployJobDefinition,
|
|
29
29
|
): CatladderJob => {
|
|
30
30
|
const hasDocker = requiresDockerBuild(context);
|