@catladder/pipeline 1.146.1 → 1.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build/base/createAppBuildJob.d.ts +2 -2
- package/dist/build/base/createAppBuildJob.js +6 -6
- package/dist/build/base/index.d.ts +2 -2
- package/dist/build/base/writeBuildInfo.d.ts +2 -2
- package/dist/build/base/writeBuildInfo.js +1 -1
- package/dist/build/base/writeDotEnv.d.ts +2 -2
- package/dist/build/base/writeDotEnv.js +1 -1
- package/dist/build/custom/__tests__/testJob.test.js +11 -14
- package/dist/build/custom/buildJob.d.ts +2 -2
- package/dist/build/custom/buildJob.js +5 -5
- package/dist/build/custom/index.d.ts +2 -2
- package/dist/build/custom/testJob.d.ts +2 -2
- package/dist/build/custom/testJob.js +5 -5
- package/dist/build/docker.d.ts +32 -15
- package/dist/build/docker.js +41 -20
- package/dist/build/index.d.ts +2 -2
- package/dist/build/node/buildJob.d.ts +2 -2
- package/dist/build/node/buildJob.js +8 -8
- package/dist/build/node/cache.d.ts +5 -5
- package/dist/build/node/cache.js +5 -5
- package/dist/build/node/index.d.ts +4 -4
- package/dist/build/node/meteor.d.ts +2 -2
- package/dist/build/node/meteor.js +6 -6
- package/dist/build/node/testJob.d.ts +2 -2
- package/dist/build/node/testJob.js +11 -11
- 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/build.js +3 -3
- package/dist/build/rails/index.d.ts +2 -2
- package/dist/build/rails/test.d.ts +2 -2
- package/dist/build/rails/test.js +4 -4
- package/dist/build/sbom.d.ts +2 -2
- package/dist/build/sbom.js +2 -2
- package/dist/build/types.d.ts +34 -26
- package/dist/bundles/catladder-gitlab/index.js +2 -2
- 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/getLabels.js +1 -1
- package/dist/context/index.d.ts +7 -3
- package/dist/context/index.js +43 -12
- package/dist/deploy/base/deploy.d.ts +2 -2
- package/dist/deploy/base/deploy.js +9 -8
- 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 -11
- package/dist/deploy/cloudRun/artifactsRegistry.js +8 -9
- package/dist/deploy/cloudRun/cleanup.d.ts +2 -2
- package/dist/deploy/cloudRun/cloudRunRevisions.d.ts +2 -2
- package/dist/deploy/cloudRun/cloudRunRevisions.js +4 -5
- 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/cloudRunServices.js +1 -1
- package/dist/deploy/cloudRun/createJobs/common.js +2 -1
- 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/createJobs/index.js +2 -4
- 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 +7 -10
- package/dist/deploy/dockerTag/deployJob.d.ts +2 -2
- package/dist/deploy/dockerTag/deployJob.js +3 -5
- package/dist/deploy/index.d.ts +2 -2
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +3 -3
- package/dist/deploy/kubernetes/cloudSql/index.js +11 -9
- package/dist/deploy/kubernetes/deployJob.d.ts +2 -2
- package/dist/deploy/kubernetes/deployJob.js +4 -7
- package/dist/deploy/kubernetes/kubeEnv.d.ts +2 -2
- package/dist/deploy/kubernetes/kubeEnv.js +2 -1
- package/dist/deploy/kubernetes/kubeValues.d.ts +2 -2
- package/dist/deploy/kubernetes/kubeValues.js +10 -10
- package/dist/deploy/kubernetes/mongodb.d.ts +2 -2
- package/dist/deploy/kubernetes/mongodb.js +11 -11
- package/dist/deploy/sbom.d.ts +4 -4
- package/dist/deploy/sbom.js +1 -1
- package/dist/deploy/types/index.d.ts +1 -1
- package/dist/deploy/types/index.js +1 -1
- package/dist/deploy/utils.d.ts +2 -2
- package/dist/deploy/utils.js +2 -1
- package/dist/pipeline/createJobsForComponent.d.ts +2 -2
- package/dist/pipeline/createJobsForComponent.js +6 -6
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/config.d.ts +2 -2
- package/dist/types/context.d.ts +28 -2
- package/examples/__snapshots__/cloud-run-storybook.ts.snap +1687 -0
- package/examples/__snapshots__/cloud-run-with-ngnix.ts.snap +1971 -0
- package/examples/cloud-run-storybook.ts +24 -0
- package/examples/cloud-run-with-ngnix.ts +24 -0
- package/package.json +1 -1
- package/src/build/base/createAppBuildJob.ts +9 -9
- package/src/build/base/index.ts +2 -2
- package/src/build/base/writeBuildInfo.ts +3 -3
- package/src/build/base/writeDotEnv.ts +3 -3
- package/src/build/custom/__tests__/testJob.test.ts +8 -11
- package/src/build/custom/buildJob.ts +10 -11
- package/src/build/custom/index.ts +2 -2
- package/src/build/custom/testJob.ts +9 -7
- package/src/build/docker.ts +73 -29
- package/src/build/index.ts +2 -2
- package/src/build/node/buildJob.ts +19 -15
- package/src/build/node/cache.ts +10 -10
- package/src/build/node/index.ts +6 -4
- package/src/build/node/meteor.ts +16 -17
- package/src/build/node/testJob.ts +19 -16
- package/src/build/node/yarn.ts +6 -8
- package/src/build/rails/build.ts +7 -5
- package/src/build/rails/index.ts +2 -2
- package/src/build/rails/test.ts +8 -6
- package/src/build/sbom.ts +5 -5
- package/src/build/types.ts +53 -38
- 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 +3 -3
- package/src/context/index.ts +33 -7
- package/src/deploy/base/deploy.ts +10 -16
- 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 +16 -16
- package/src/deploy/cloudRun/cleanup.ts +2 -2
- package/src/deploy/cloudRun/cloudRunRevisions.ts +6 -8
- package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +10 -10
- package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +4 -4
- package/src/deploy/cloudRun/createJobs/common.ts +1 -1
- 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 +3 -6
- 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 +10 -8
- package/src/deploy/dockerTag/deployJob.ts +6 -7
- package/src/deploy/index.ts +2 -2
- package/src/deploy/kubernetes/cloudSql/index.ts +10 -7
- package/src/deploy/kubernetes/deployJob.ts +3 -6
- package/src/deploy/kubernetes/kubeEnv.ts +3 -3
- package/src/deploy/kubernetes/kubeValues.ts +6 -6
- package/src/deploy/kubernetes/mongodb.ts +14 -14
- package/src/deploy/sbom.ts +9 -6
- package/src/deploy/types/index.ts +2 -2
- package/src/deploy/utils.ts +3 -3
- package/src/pipeline/createJobsForComponent.ts +17 -17
- package/src/pipeline/gitlab/createGitlabJobs.ts +2 -2
- package/src/types/config.ts +4 -2
- package/src/types/context.ts +33 -2
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Config } from "../src";
|
|
2
|
+
import { createAllPipelines } from "./__utils__/helpers";
|
|
3
|
+
|
|
4
|
+
const config: Config = {
|
|
5
|
+
appName: "test-app",
|
|
6
|
+
customerName: "pan",
|
|
7
|
+
components: {
|
|
8
|
+
api: {
|
|
9
|
+
dir: "app",
|
|
10
|
+
build: {
|
|
11
|
+
type: "storybook",
|
|
12
|
+
},
|
|
13
|
+
deploy: {
|
|
14
|
+
type: "google-cloudrun",
|
|
15
|
+
projectId: "asdf",
|
|
16
|
+
region: "asia-east1",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
it("matches snapshot", async () => {
|
|
23
|
+
expect(await createAllPipelines(config)).toMatchSnapshot();
|
|
24
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Config } from "../src";
|
|
2
|
+
import { createAllPipelines } from "./__utils__/helpers";
|
|
3
|
+
|
|
4
|
+
const config: Config = {
|
|
5
|
+
appName: "test-app",
|
|
6
|
+
customerName: "pan",
|
|
7
|
+
components: {
|
|
8
|
+
api: {
|
|
9
|
+
dir: "app",
|
|
10
|
+
build: {
|
|
11
|
+
type: "node-static",
|
|
12
|
+
},
|
|
13
|
+
deploy: {
|
|
14
|
+
type: "google-cloudrun",
|
|
15
|
+
projectId: "asdf",
|
|
16
|
+
region: "asia-east1",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
it("matches snapshot", async () => {
|
|
23
|
+
expect(await createAllPipelines(config)).toMatchSnapshot();
|
|
24
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { merge } from "lodash";
|
|
2
2
|
import { join } from "path";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ComponentContext } from "../..";
|
|
4
4
|
import { getRunnerImage } from "../..";
|
|
5
5
|
import type { CatladderJob } from "../../types/jobs";
|
|
6
6
|
import { ensureArray } from "../../utils";
|
|
@@ -14,7 +14,7 @@ import { writeDotEnv } from "./writeDotEnv";
|
|
|
14
14
|
|
|
15
15
|
export type AppBuildJobDefinition = Partial<CatladderJob>;
|
|
16
16
|
export const createAppBuildJob = (
|
|
17
|
-
context:
|
|
17
|
+
context: ComponentContext,
|
|
18
18
|
{ script, variables, runnerVariables, ...def }: AppBuildJobDefinition,
|
|
19
19
|
): CatladderJob => {
|
|
20
20
|
return merge(
|
|
@@ -29,12 +29,12 @@ export const createAppBuildJob = (
|
|
|
29
29
|
...(variables ?? {}),
|
|
30
30
|
...context.environment.envVars,
|
|
31
31
|
...context.environment.jobOnlyVars.build.envVars,
|
|
32
|
-
...(context.
|
|
32
|
+
...(context.build.config.extraVars ?? {}),
|
|
33
33
|
},
|
|
34
34
|
runnerVariables: {
|
|
35
35
|
...RUNNER_BUILD_RESOURCE_VARIABLES,
|
|
36
36
|
...(runnerVariables ?? {}),
|
|
37
|
-
...(context.
|
|
37
|
+
...(context.build.config.runnerVariables ?? {}),
|
|
38
38
|
},
|
|
39
39
|
|
|
40
40
|
script: [
|
|
@@ -42,15 +42,15 @@ export const createAppBuildJob = (
|
|
|
42
42
|
? writeDotEnv(context)
|
|
43
43
|
: []),
|
|
44
44
|
...writeBuildInfo(context),
|
|
45
|
-
...ensureNodeVersion(context), // in pure node repos, we might want to have the nvmrc file in top-level
|
|
46
|
-
`cd ${context.
|
|
45
|
+
...ensureNodeVersion(context.build), // in pure node repos, we might want to have the nvmrc file in top-level
|
|
46
|
+
`cd ${context.build.dir}`,
|
|
47
47
|
...(ensureArray(script) ?? []),
|
|
48
48
|
],
|
|
49
49
|
artifacts: {
|
|
50
|
-
paths: [join(context.
|
|
50
|
+
paths: [join(context.build.dir, "__build_info.json")],
|
|
51
51
|
reports: {
|
|
52
|
-
junit: context.
|
|
53
|
-
|
|
52
|
+
junit: context.build.config.artifactsReports?.junit?.map((p) =>
|
|
53
|
+
join(context.build.dir, p),
|
|
54
54
|
),
|
|
55
55
|
},
|
|
56
56
|
},
|
package/src/build/base/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sbomDeactivated } from "../../deploy/sbom";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ComponentContext } from "../../types/context";
|
|
3
3
|
import type { CatladderJob } from "../../types/jobs";
|
|
4
4
|
import type { DockerBuildJobDefinition } from "../docker";
|
|
5
5
|
import { createDockerBuildJobBase, requiresDockerBuild } from "../docker";
|
|
@@ -9,7 +9,7 @@ import type { AppBuildJobDefinition } from "./createAppBuildJob";
|
|
|
9
9
|
import { createAppBuildJob } from "./createAppBuildJob";
|
|
10
10
|
|
|
11
11
|
export const createBuildJobs = (
|
|
12
|
-
context:
|
|
12
|
+
context: ComponentContext,
|
|
13
13
|
definitions: {
|
|
14
14
|
appBuild?: AppBuildJobDefinition;
|
|
15
15
|
dockerBuild: DockerBuildJobDefinition;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ComponentContext } from "../../types";
|
|
2
2
|
|
|
3
|
-
export const writeBuildInfo = (context:
|
|
3
|
+
export const writeBuildInfo = (context: ComponentContext) => {
|
|
4
4
|
return [
|
|
5
|
-
`echo '{"id":"${context.environment.envVars.BUILD_INFO_BUILD_ID}","time":"${context.environment.envVars.BUILD_INFO_BUILD_TIME}"}' > ${context.
|
|
5
|
+
`echo '{"id":"${context.environment.envVars.BUILD_INFO_BUILD_ID}","time":"${context.environment.envVars.BUILD_INFO_BUILD_TIME}"}' > ${context.build.dir}/__build_info.json`,
|
|
6
6
|
];
|
|
7
7
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { isNil } from "lodash";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ComponentContext } from "../../types";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* writes a .env file in the components folder
|
|
6
6
|
* @param context
|
|
7
7
|
* @returns
|
|
8
8
|
*/
|
|
9
|
-
export const writeDotEnv = (context:
|
|
9
|
+
export const writeDotEnv = (context: ComponentContext) => {
|
|
10
10
|
const envVars = context.environment.envVars;
|
|
11
11
|
|
|
12
12
|
// make key=value and sanitize multiline
|
|
@@ -19,7 +19,7 @@ export const writeDotEnv = (context: Context) => {
|
|
|
19
19
|
.join("\n");
|
|
20
20
|
|
|
21
21
|
return [
|
|
22
|
-
`cat <<EOF > ${context.
|
|
22
|
+
`cat <<EOF > ${context.build.dir}/.env
|
|
23
23
|
${keyValueString}
|
|
24
24
|
EOF`,
|
|
25
25
|
];
|
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ComponentContext } from "../../..";
|
|
2
2
|
import { createCustomTestJobs } from "../testJob";
|
|
3
3
|
|
|
4
4
|
describe("createCustomTestJobs", () => {
|
|
5
|
-
const
|
|
6
|
-
dir: ".",
|
|
7
|
-
build: { type: "custom", docker: { type: "custom" }, jobImage: "" },
|
|
8
|
-
deploy: {},
|
|
9
|
-
} as Context["componentConfig"];
|
|
10
|
-
const baseContext: Context = {
|
|
5
|
+
const baseContext: ComponentContext = {
|
|
11
6
|
componentName: "testComponent",
|
|
12
7
|
environment: {
|
|
13
8
|
jobOnlyVars: {
|
|
14
9
|
build: {},
|
|
15
10
|
},
|
|
16
11
|
},
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
build: {
|
|
13
|
+
config: { type: "custom", docker: { type: "custom" }, jobImage: "" },
|
|
14
|
+
},
|
|
15
|
+
} as ComponentContext;
|
|
19
16
|
|
|
20
17
|
it("throws error when not build type custom", () => {
|
|
21
|
-
|
|
18
|
+
baseContext.build.config.type = "node";
|
|
22
19
|
expect(() => createCustomTestJobs(baseContext)).toThrowError(
|
|
23
20
|
"deploy config is not custom",
|
|
24
21
|
);
|
|
25
|
-
|
|
22
|
+
baseContext.build.config.type = "custom";
|
|
26
23
|
});
|
|
27
24
|
|
|
28
25
|
it("returns empty array if no audit, lint, and test definition", () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from "path";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ComponentContext } from "../../types/context";
|
|
3
3
|
import { ensureArray } from "../../utils";
|
|
4
|
-
import {
|
|
4
|
+
import { getDockerBuildScriptWithBuiltInDockerFile } from "../docker";
|
|
5
5
|
import { isOfBuildType } from "../types";
|
|
6
6
|
|
|
7
7
|
import type { CatladderJob } from "../../types/jobs";
|
|
@@ -13,8 +13,10 @@ const RUNNER_BUILD_VARIABLES = {
|
|
|
13
13
|
KUBERNETES_MEMORY_LIMIT: "4Gi",
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
export const createCustomBuildJobs = (
|
|
17
|
-
|
|
16
|
+
export const createCustomBuildJobs = (
|
|
17
|
+
context: ComponentContext,
|
|
18
|
+
): CatladderJob[] => {
|
|
19
|
+
const buildConfig = context.build.config;
|
|
18
20
|
|
|
19
21
|
if (!isOfBuildType(buildConfig, "custom")) {
|
|
20
22
|
throw new Error("deploy config is not custom");
|
|
@@ -31,10 +33,10 @@ export const createCustomBuildJobs = (context: Context): CatladderJob[] => {
|
|
|
31
33
|
script: [...(ensureArray(buildConfig.buildCommand) ?? [])],
|
|
32
34
|
artifacts: {
|
|
33
35
|
paths: [
|
|
34
|
-
join(context.
|
|
35
|
-
join(context.
|
|
36
|
+
join(context.build.dir, "__build_info.json"),
|
|
37
|
+
join(context.build.dir, "dist"),
|
|
36
38
|
...(buildConfig.artifactsPaths?.map((path) =>
|
|
37
|
-
join(context.
|
|
39
|
+
join(context.build.dir, path),
|
|
38
40
|
) ?? []),
|
|
39
41
|
],
|
|
40
42
|
expire_in: "1 day",
|
|
@@ -42,10 +44,7 @@ export const createCustomBuildJobs = (context: Context): CatladderJob[] => {
|
|
|
42
44
|
}
|
|
43
45
|
: undefined,
|
|
44
46
|
dockerBuild: {
|
|
45
|
-
script:
|
|
46
|
-
context,
|
|
47
|
-
buildConfig.docker?.type === "nginx" ? "ensureNginxDockerfile" : "",
|
|
48
|
-
),
|
|
47
|
+
script: getDockerBuildScriptWithBuiltInDockerFile(context),
|
|
49
48
|
|
|
50
49
|
variables: {},
|
|
51
50
|
},
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ComponentContext } from "../../types/context";
|
|
2
2
|
import type { CatladderJob } from "../../types/jobs";
|
|
3
3
|
import { createCustomBuildJobs } from "./buildJob";
|
|
4
4
|
import { createCustomTestJobs } from "./testJob";
|
|
5
5
|
|
|
6
|
-
export const createCustomJobs = (context:
|
|
6
|
+
export const createCustomJobs = (context: ComponentContext): CatladderJob[] => {
|
|
7
7
|
return [...createCustomTestJobs(context), ...createCustomBuildJobs(context)];
|
|
8
8
|
};
|
|
@@ -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,14 +11,16 @@ 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") {
|
|
18
20
|
return [];
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
const buildConfig = context.
|
|
23
|
+
const buildConfig = context.build.config;
|
|
22
24
|
|
|
23
25
|
if (!isOfBuildType(buildConfig, "custom")) {
|
|
24
26
|
throw new Error("deploy config is not custom");
|
|
@@ -26,7 +28,7 @@ export const createCustomTestJobs = (context: Context): CatladderJob[] => {
|
|
|
26
28
|
|
|
27
29
|
const base: Omit<CatladderJob, "script" | "name"> = {
|
|
28
30
|
variables: {
|
|
29
|
-
APP_PATH: context.
|
|
31
|
+
APP_PATH: context.build.dir,
|
|
30
32
|
...context.environment.jobOnlyVars.build.envVars,
|
|
31
33
|
...(buildConfig.extraVars ?? {}),
|
|
32
34
|
},
|
|
@@ -46,7 +48,7 @@ export const createCustomTestJobs = (context: Context): CatladderJob[] => {
|
|
|
46
48
|
script: [...(ensureArray(buildConfig.audit?.command) ?? [])],
|
|
47
49
|
allow_failure: true,
|
|
48
50
|
...createArtifactsConfig(
|
|
49
|
-
context.
|
|
51
|
+
context.build.dir,
|
|
50
52
|
buildConfig.audit?.artifactsReports,
|
|
51
53
|
buildConfig.audit?.artifacts,
|
|
52
54
|
),
|
|
@@ -61,7 +63,7 @@ export const createCustomTestJobs = (context: Context): CatladderJob[] => {
|
|
|
61
63
|
image: buildConfig.lint?.jobImage ?? buildConfig.jobImage,
|
|
62
64
|
script: [...(ensureArray(buildConfig.lint?.command) ?? [])],
|
|
63
65
|
...createArtifactsConfig(
|
|
64
|
-
context.
|
|
66
|
+
context.build.dir,
|
|
65
67
|
buildConfig.lint?.artifactsReports,
|
|
66
68
|
buildConfig.lint?.artifacts,
|
|
67
69
|
),
|
|
@@ -75,7 +77,7 @@ export const createCustomTestJobs = (context: Context): CatladderJob[] => {
|
|
|
75
77
|
image: buildConfig.test?.jobImage ?? buildConfig.jobImage,
|
|
76
78
|
script: [...(ensureArray(buildConfig.test?.command) ?? [])],
|
|
77
79
|
...createArtifactsConfig(
|
|
78
|
-
context.
|
|
80
|
+
context.build.dir,
|
|
79
81
|
buildConfig.test?.artifactsReports,
|
|
80
82
|
buildConfig.test?.artifacts,
|
|
81
83
|
),
|
package/src/build/docker.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { merge } from "lodash";
|
|
2
|
-
import { isOfDeployType } from "../deploy";
|
|
3
|
-
import { getRunnerImage } from "../runner";
|
|
4
|
-
import type { Context } from "../types";
|
|
5
|
-
import type { CatladderJob } from "../types/jobs";
|
|
6
1
|
import { existsSync } from "fs";
|
|
2
|
+
import { merge } from "lodash";
|
|
7
3
|
import path from "path";
|
|
8
|
-
import {
|
|
4
|
+
import type { BuildConfig, BuildConfigDocker } from ".";
|
|
5
|
+
import { isOfDeployType } from "../deploy";
|
|
9
6
|
import {
|
|
10
7
|
getArtifactsRegistryBuildCacheImage,
|
|
11
8
|
getArtifactsRegistryHost,
|
|
12
9
|
getArtifactsRegistryImageName,
|
|
13
10
|
} from "../deploy/cloudRun/artifactsRegistry";
|
|
14
11
|
import { gcloudServiceAccountLoginCommands } from "../deploy/cloudRun/utils/gcloudServiceAccountLoginCommands";
|
|
12
|
+
import { getRunnerImage } from "../runner";
|
|
13
|
+
import type { ComponentContext } from "../types";
|
|
14
|
+
import type { CatladderJob } from "../types/jobs";
|
|
15
|
+
import { collapseableSection } from "../utils/gitlab";
|
|
15
16
|
|
|
16
17
|
const DOCKER_BUILD_RUNNER_REQUESTS = {
|
|
17
18
|
KUBERNETES_CPU_REQUEST: "0.5",
|
|
@@ -19,9 +20,10 @@ const DOCKER_BUILD_RUNNER_REQUESTS = {
|
|
|
19
20
|
KUBERNETES_MEMORY_LIMIT: "2Gi",
|
|
20
21
|
};
|
|
21
22
|
|
|
22
|
-
export const getDockerImageVariables = (context:
|
|
23
|
+
export const getDockerImageVariables = (context: ComponentContext) => {
|
|
24
|
+
const deployConfig = context.deploy?.config;
|
|
23
25
|
return {
|
|
24
|
-
...(isOfDeployType(
|
|
26
|
+
...(isOfDeployType(deployConfig, "google-cloudrun")
|
|
25
27
|
? {
|
|
26
28
|
DOCKER_REGISTRY: getArtifactsRegistryHost(context),
|
|
27
29
|
DOCKER_IMAGE: getArtifactsRegistryImageName(context),
|
|
@@ -46,11 +48,19 @@ export const getDockerImageVariables = (context: Context) => {
|
|
|
46
48
|
/**
|
|
47
49
|
* Weather the context requires a docker build
|
|
48
50
|
*/
|
|
49
|
-
export const requiresDockerBuild = ({
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
export const requiresDockerBuild = (context: ComponentContext): boolean => {
|
|
52
|
+
const deployConfig = context.deploy?.config;
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
isOfDeployType(
|
|
56
|
+
deployConfig,
|
|
57
|
+
"kubernetes",
|
|
58
|
+
"google-cloudrun",
|
|
59
|
+
"dockerTag",
|
|
60
|
+
) ||
|
|
61
|
+
(isOfDeployType(deployConfig, "custom") && deployConfig.requiresDocker)
|
|
62
|
+
);
|
|
63
|
+
};
|
|
54
64
|
|
|
55
65
|
// those need to be runner variables
|
|
56
66
|
const getDockerBuildRunnerVariables = () => ({
|
|
@@ -60,13 +70,25 @@ const getDockerBuildRunnerVariables = () => ({
|
|
|
60
70
|
DOCKER_BUILDKIT: "1", // see https://docs.docker.com/develop/develop-images/build_enhancements/
|
|
61
71
|
});
|
|
62
72
|
|
|
63
|
-
|
|
73
|
+
const getDockerAdditions = (build: BuildConfig) => {
|
|
74
|
+
if (!("docker" in build)) return {};
|
|
75
|
+
if (!build.docker) return {};
|
|
76
|
+
|
|
64
77
|
return {
|
|
65
78
|
DOCKERFILE_ADDITIONS:
|
|
66
|
-
|
|
79
|
+
"additionsBegin" in build.docker
|
|
80
|
+
? build.docker.additionsBegin?.join("\n")
|
|
81
|
+
: undefined,
|
|
67
82
|
DOCKERFILE_ADDITIONS_END:
|
|
68
|
-
|
|
69
|
-
|
|
83
|
+
"additionsEnd" in build.docker
|
|
84
|
+
? build.docker.additionsEnd?.join("\n")
|
|
85
|
+
: undefined,
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
export const getDockerBuildVariables = (context: ComponentContext) => {
|
|
89
|
+
return {
|
|
90
|
+
...getDockerAdditions(context.build.config),
|
|
91
|
+
APP_DIR: context.build.dir,
|
|
70
92
|
DOCKER_DIR: ".", // relative to componentdir
|
|
71
93
|
|
|
72
94
|
...getDockerImageVariables(context),
|
|
@@ -75,9 +97,7 @@ export const getDockerBuildVariables = (context: Context) => {
|
|
|
75
97
|
|
|
76
98
|
export const DOCKER_BUILD_JOB_NAME = "🔨 docker";
|
|
77
99
|
|
|
78
|
-
export const getDockerJobBaseProps = (
|
|
79
|
-
context: Context,
|
|
80
|
-
): Pick<
|
|
100
|
+
export const getDockerJobBaseProps = (): Pick<
|
|
81
101
|
CatladderJob,
|
|
82
102
|
"image" | "services" | "variables" | "runnerVariables"
|
|
83
103
|
> => {
|
|
@@ -96,7 +116,7 @@ export const getDockerJobBaseProps = (
|
|
|
96
116
|
|
|
97
117
|
export type DockerBuildJobDefinition = Partial<CatladderJob>;
|
|
98
118
|
export const createDockerBuildJobBase = (
|
|
99
|
-
context:
|
|
119
|
+
context: ComponentContext,
|
|
100
120
|
{ script, ...def }: Partial<CatladderJob>,
|
|
101
121
|
): CatladderJob => {
|
|
102
122
|
return merge(
|
|
@@ -104,7 +124,7 @@ export const createDockerBuildJobBase = (
|
|
|
104
124
|
name: DOCKER_BUILD_JOB_NAME,
|
|
105
125
|
envMode: "jobPerEnv",
|
|
106
126
|
stage: "build",
|
|
107
|
-
...getDockerJobBaseProps(
|
|
127
|
+
...getDockerJobBaseProps(),
|
|
108
128
|
script: script || [],
|
|
109
129
|
},
|
|
110
130
|
{
|
|
@@ -118,8 +138,8 @@ export const createDockerBuildJobBase = (
|
|
|
118
138
|
);
|
|
119
139
|
};
|
|
120
140
|
|
|
121
|
-
export const gitlabDockerLogin = (context:
|
|
122
|
-
isOfDeployType(context.
|
|
141
|
+
export const gitlabDockerLogin = (context: ComponentContext) =>
|
|
142
|
+
context.deploy && isOfDeployType(context.deploy.config, "google-cloudrun")
|
|
123
143
|
? [
|
|
124
144
|
...gcloudServiceAccountLoginCommands(context),
|
|
125
145
|
`gcloud auth configure-docker ${getArtifactsRegistryHost(context)}`,
|
|
@@ -128,12 +148,36 @@ export const gitlabDockerLogin = (context: Context) =>
|
|
|
128
148
|
"docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
|
|
129
149
|
];
|
|
130
150
|
|
|
151
|
+
const BUILT_IN_ENSURE_DOCKERFILE_SCRIPTS = {
|
|
152
|
+
meteor: "ensureMeteorDockerfile",
|
|
153
|
+
node: "ensureNodeDockerfile",
|
|
154
|
+
nginx: "ensureNginxDockerfile",
|
|
155
|
+
custom: null,
|
|
156
|
+
} satisfies {
|
|
157
|
+
[type in BuildConfigDocker["type"]]: string | null;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export const getDockerBuildScriptWithBuiltInDockerFile = (
|
|
161
|
+
context: ComponentContext,
|
|
162
|
+
defaultType?: BuildConfigDocker["type"],
|
|
163
|
+
) => {
|
|
164
|
+
const type =
|
|
165
|
+
"docker" in context.componentConfig.build &&
|
|
166
|
+
context.componentConfig.build.docker &&
|
|
167
|
+
"type" in context.componentConfig.build.docker
|
|
168
|
+
? context.componentConfig.build.docker?.type
|
|
169
|
+
: defaultType;
|
|
170
|
+
return getDockerBuildDefaultScript(
|
|
171
|
+
context,
|
|
172
|
+
type ? BUILT_IN_ENSURE_DOCKERFILE_SCRIPTS[type] : null,
|
|
173
|
+
);
|
|
174
|
+
};
|
|
131
175
|
export const getDockerBuildDefaultScript = (
|
|
132
|
-
context:
|
|
133
|
-
ensureDockerFileScript?: string,
|
|
176
|
+
context: ComponentContext,
|
|
177
|
+
ensureDockerFileScript?: string | null,
|
|
134
178
|
) =>
|
|
135
179
|
[
|
|
136
|
-
ensureDockerFileScript,
|
|
180
|
+
ensureDockerFileScript ?? undefined,
|
|
137
181
|
...collapseableSection(
|
|
138
182
|
"docker-login",
|
|
139
183
|
"Docker Login",
|
|
@@ -154,5 +198,5 @@ export const getDockerBuildDefaultScript = (
|
|
|
154
198
|
]),
|
|
155
199
|
].filter(Boolean);
|
|
156
200
|
|
|
157
|
-
export const hasDockerfile = (context:
|
|
158
|
-
existsSync(path.join(context.
|
|
201
|
+
export const hasDockerfile = (context: ComponentContext) =>
|
|
202
|
+
existsSync(path.join(context.build.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,24 +1,26 @@
|
|
|
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";
|
|
7
|
-
import {
|
|
7
|
+
import { getDockerBuildScriptWithBuiltInDockerFile } from "../docker";
|
|
8
8
|
import { isOfBuildType } from "../types";
|
|
9
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 = (
|
|
14
|
-
|
|
13
|
+
export const createNodeBuildJobs = (
|
|
14
|
+
context: ComponentContext,
|
|
15
|
+
): CatladderJob[] => {
|
|
16
|
+
const buildConfig = context.build.config;
|
|
15
17
|
|
|
16
18
|
if (!isOfBuildType(buildConfig, "node", "node-static", "storybook")) {
|
|
17
19
|
throw new Error("deploy config is not node, node-static or storybook");
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
const defaultImage = getRunnerImage("jobs-default");
|
|
21
|
-
const yarnInstall = getYarnInstall(context);
|
|
23
|
+
const yarnInstall = getYarnInstall(context.build);
|
|
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.build),
|
|
32
34
|
...getNextCache(context),
|
|
33
35
|
],
|
|
34
36
|
script: [
|
|
@@ -37,10 +39,10 @@ export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
|
|
|
37
39
|
],
|
|
38
40
|
artifacts: {
|
|
39
41
|
paths: [
|
|
40
|
-
context.
|
|
42
|
+
context.build.dir,
|
|
41
43
|
// also copy workspace dependencies in monorepo if packages are shared and they create build artifacts
|
|
42
|
-
...(context.packageManagerInfo
|
|
43
|
-
[]),
|
|
44
|
+
...(context.build.packageManagerInfo
|
|
45
|
+
?.currentWorkspaceDependencies ?? []),
|
|
44
46
|
].flatMap((dir) => [
|
|
45
47
|
join(dir, "__build_info.json"),
|
|
46
48
|
join(dir, "dist"),
|
|
@@ -57,18 +59,20 @@ export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
|
|
|
57
59
|
: undefined,
|
|
58
60
|
|
|
59
61
|
dockerBuild: {
|
|
60
|
-
script:
|
|
62
|
+
script: getDockerBuildScriptWithBuiltInDockerFile(
|
|
61
63
|
context,
|
|
62
64
|
buildConfig.type === "node-static" || buildConfig.type === "storybook"
|
|
63
|
-
? "
|
|
64
|
-
: "
|
|
65
|
+
? "nginx"
|
|
66
|
+
: "node",
|
|
65
67
|
),
|
|
66
|
-
cache: [...getYarnCache(context, "pull")],
|
|
68
|
+
cache: [...getYarnCache(context.build, "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.build,
|
|
73
|
+
),
|
|
70
74
|
DOCKER_COPY_WORKSPACE_FILES:
|
|
71
|
-
context.packageManagerInfo?.pathsToCopyInDocker
|
|
75
|
+
context.build.packageManagerInfo?.pathsToCopyInDocker
|
|
72
76
|
.map((dir) => `COPY --chown=node:node ${dir} /app/${dir}`)
|
|
73
77
|
?.join("\n"),
|
|
74
78
|
},
|