@catladder/pipeline 1.89.0 → 1.89.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/rails/build.js +4 -8
- package/dist/build/rails/test.js +1 -2
- package/dist/bundles/catladder-gitlab/index.js +3 -3
- package/dist/constants.js +1 -1
- package/dist/pipeline/createAllJobs.d.ts +8 -0
- package/dist/pipeline/createAllJobs.js +164 -0
- package/dist/pipeline/createChildPipeline.js +24 -48
- package/dist/pipeline/createJobsForComponent.d.ts +3 -0
- package/dist/pipeline/{createJobs.js → createJobsForComponent.js} +8 -100
- package/dist/pipeline/gitlab/createGitlabJobs.d.ts +14 -0
- package/dist/pipeline/gitlab/createGitlabJobs.js +260 -0
- package/dist/pipeline/index.d.ts +1 -1
- package/dist/pipeline/index.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/build/index.ts +1 -1
- package/src/build/node/cache.ts +2 -2
- package/src/build/rails/build.ts +9 -6
- package/src/build/rails/test.ts +43 -39
- package/src/config/configruedEnvs.ts +2 -8
- package/src/deploy/kubernetes/deployJob.ts +2 -1
- package/src/pipeline/createAllJobs.ts +38 -0
- package/src/pipeline/createChildPipeline.ts +6 -22
- package/src/pipeline/createJobsForComponent.ts +64 -0
- package/src/pipeline/gitlab/createGitlabJobs.ts +149 -0
- package/src/pipeline/index.ts +1 -1
- package/src/types/gitlab-types.ts +8 -6
- package/dist/pipeline/createJobs.d.ts +0 -3
- package/dist/pipeline/gitlab/makeGitlabJob.d.ts +0 -10
- package/dist/pipeline/gitlab/makeGitlabJob.js +0 -75
- package/src/pipeline/createJobs.ts +0 -196
- package/src/pipeline/gitlab/makeGitlabJob.ts +0 -25
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { isFunction, isObject } from "lodash";
|
|
2
|
-
import { BUILD_TYPES } from "../build";
|
|
3
|
-
import { createContext } from "../context";
|
|
4
|
-
import { DEPLOY_TYPES } from "../deploy";
|
|
5
|
-
import type { PipelineJob, PipelineType } from "../types";
|
|
6
|
-
import type { Config, PipelineTrigger } from "../types/config";
|
|
7
|
-
import type { CommitInfo, Context } from "../types/context";
|
|
8
|
-
import type { CatladderJob } from "../types/jobs";
|
|
9
|
-
import { notNil } from "../utils";
|
|
10
|
-
import { getBaseCommitInfo } from "./commitInfo/getCommitInfo";
|
|
11
|
-
import { makeGitlabJob } from "./gitlab/makeGitlabJob";
|
|
12
|
-
import { getPackageManagerInfo } from "./packageManager";
|
|
13
|
-
|
|
14
|
-
const injectDefaultVarsInCustomJobs = (
|
|
15
|
-
context: Context,
|
|
16
|
-
jobs: CatladderJob[]
|
|
17
|
-
) =>
|
|
18
|
-
jobs.map(({ variables, ...job }) => ({
|
|
19
|
-
variables: {
|
|
20
|
-
...(context.environment.envVars ?? {}),
|
|
21
|
-
...(variables ?? {}),
|
|
22
|
-
},
|
|
23
|
-
...job,
|
|
24
|
-
}));
|
|
25
|
-
const getCustomJobs = (context: Context) => {
|
|
26
|
-
if (!context.componentConfig.customJobs) {
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
const rawJobs = isFunction(context.componentConfig.customJobs)
|
|
30
|
-
? context.componentConfig.customJobs(context)
|
|
31
|
-
: context.componentConfig.customJobs;
|
|
32
|
-
return injectDefaultVarsInCustomJobs(context, rawJobs);
|
|
33
|
-
};
|
|
34
|
-
const createRawJobs = (context: Context): CatladderJob[] => {
|
|
35
|
-
if (context.componentConfig.deploy === false) {
|
|
36
|
-
return [];
|
|
37
|
-
}
|
|
38
|
-
const buildJobs =
|
|
39
|
-
BUILD_TYPES[context.componentConfig.build.type].jobs(context);
|
|
40
|
-
const deployJobs =
|
|
41
|
-
DEPLOY_TYPES[context.componentConfig.deploy.type].jobs(context);
|
|
42
|
-
|
|
43
|
-
const customJobs = getCustomJobs(context);
|
|
44
|
-
return [...buildJobs, ...deployJobs, ...customJobs];
|
|
45
|
-
};
|
|
46
|
-
const getFullJobName = (
|
|
47
|
-
name: string,
|
|
48
|
-
componentName: string,
|
|
49
|
-
env?: string | null
|
|
50
|
-
) => {
|
|
51
|
-
if (env) {
|
|
52
|
-
return `${componentName} ${name} | ${env} `;
|
|
53
|
-
}
|
|
54
|
-
return `${componentName} ${name}`;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const getFullReferencedJobName = (
|
|
58
|
-
referencedJobName: string,
|
|
59
|
-
componentName: string,
|
|
60
|
-
env: string,
|
|
61
|
-
allRawJobs: CatladderJob[]
|
|
62
|
-
) => {
|
|
63
|
-
const referencedJob = allRawJobs.find((j) => j.name === referencedJobName);
|
|
64
|
-
if (!referencedJob) {
|
|
65
|
-
throw new Error("unknown job referenced: " + referencedJobName);
|
|
66
|
-
}
|
|
67
|
-
const envToSet = referencedJob.envMode !== "none" ? env : null;
|
|
68
|
-
return getFullJobName(referencedJobName, componentName, envToSet);
|
|
69
|
-
};
|
|
70
|
-
// replaces references to other jobs with the full name
|
|
71
|
-
// the full name contains the componentname and the env name (if any)
|
|
72
|
-
const replaceReferences = (
|
|
73
|
-
job: CatladderJob,
|
|
74
|
-
componentName: string,
|
|
75
|
-
env: string,
|
|
76
|
-
allRawJobs: CatladderJob[]
|
|
77
|
-
): CatladderJob<string> => {
|
|
78
|
-
const stage =
|
|
79
|
-
job.envMode === "stagePerEnv" ? `${job.stage} ${env}` : job.stage;
|
|
80
|
-
|
|
81
|
-
const cleanedNeeds: CatladderJob["needs"] = [
|
|
82
|
-
...(job.needs ?? []),
|
|
83
|
-
// pull in legacy needs from other component, which is now identical to needs
|
|
84
|
-
...(job.needsOtherComponent ?? []),
|
|
85
|
-
];
|
|
86
|
-
const needs: CatladderJob["needs"] = cleanedNeeds?.map((n) =>
|
|
87
|
-
isObject(n)
|
|
88
|
-
? {
|
|
89
|
-
job: getFullReferencedJobName(
|
|
90
|
-
n.job,
|
|
91
|
-
n.componentName ?? componentName,
|
|
92
|
-
env,
|
|
93
|
-
allRawJobs
|
|
94
|
-
),
|
|
95
|
-
artifacts: n.artifacts,
|
|
96
|
-
}
|
|
97
|
-
: getFullReferencedJobName(n, componentName, env, allRawJobs)
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
return {
|
|
101
|
-
...job,
|
|
102
|
-
stage,
|
|
103
|
-
needs,
|
|
104
|
-
environment: job.environment?.on_stop
|
|
105
|
-
? {
|
|
106
|
-
...job.environment,
|
|
107
|
-
on_stop: getFullReferencedJobName(
|
|
108
|
-
job.environment.on_stop,
|
|
109
|
-
componentName,
|
|
110
|
-
env,
|
|
111
|
-
allRawJobs
|
|
112
|
-
),
|
|
113
|
-
}
|
|
114
|
-
: job.environment,
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
// this can be removed once https://gitlab.com/gitlab-org/gitlab/-/issues/220758 is resolved
|
|
119
|
-
const addStageNeeds = (jobs: CatladderJob[]): CatladderJob[] => {
|
|
120
|
-
// when a job defines needsStages, we add these as needs
|
|
121
|
-
return jobs.map((job) => {
|
|
122
|
-
if (!job.needsStages || job.needsStages.length === 0) {
|
|
123
|
-
return job;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const neededJobs = jobs
|
|
127
|
-
.map((j) => {
|
|
128
|
-
const neededStage = job.needsStages?.find((s) => j.stage === s.stage);
|
|
129
|
-
if (neededStage) {
|
|
130
|
-
return {
|
|
131
|
-
job: j.name,
|
|
132
|
-
artifacts: neededStage.artifacts ?? false,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
})
|
|
136
|
-
.filter(notNil);
|
|
137
|
-
return {
|
|
138
|
-
...job,
|
|
139
|
-
|
|
140
|
-
needs: [...(job.needs ?? []), ...neededJobs],
|
|
141
|
-
};
|
|
142
|
-
});
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
export const createJobs = async <T extends PipelineType>(
|
|
146
|
-
type: T,
|
|
147
|
-
envs: string[],
|
|
148
|
-
config: Config,
|
|
149
|
-
componentName: string,
|
|
150
|
-
trigger: PipelineTrigger
|
|
151
|
-
): Promise<Record<string, PipelineJob<T>>> => {
|
|
152
|
-
const commitInfo: CommitInfo = {
|
|
153
|
-
...(await getBaseCommitInfo()),
|
|
154
|
-
trigger,
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
const packageManagerInfo = await getPackageManagerInfo(config, componentName);
|
|
158
|
-
|
|
159
|
-
return envs.reduce(async (acc, env) => {
|
|
160
|
-
const context = await createContext(
|
|
161
|
-
config,
|
|
162
|
-
componentName,
|
|
163
|
-
env,
|
|
164
|
-
commitInfo,
|
|
165
|
-
packageManagerInfo
|
|
166
|
-
);
|
|
167
|
-
const jobs = addStageNeeds(createRawJobs(context));
|
|
168
|
-
|
|
169
|
-
const result = {
|
|
170
|
-
...(await acc),
|
|
171
|
-
...jobs.reduce<Record<string, PipelineJob<T>>>((acc, job) => {
|
|
172
|
-
const jobWithResolvedReferences = replaceReferences(
|
|
173
|
-
job,
|
|
174
|
-
componentName,
|
|
175
|
-
env,
|
|
176
|
-
jobs
|
|
177
|
-
);
|
|
178
|
-
const jobName = getFullJobName(
|
|
179
|
-
job.name,
|
|
180
|
-
componentName,
|
|
181
|
-
job.envMode !== "none" ? env : undefined
|
|
182
|
-
);
|
|
183
|
-
if (type === "gitlab") {
|
|
184
|
-
return {
|
|
185
|
-
...acc,
|
|
186
|
-
[jobName]: makeGitlabJob(
|
|
187
|
-
jobWithResolvedReferences
|
|
188
|
-
) as PipelineJob<T>,
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
throw new Error("not supported");
|
|
192
|
-
}, await Promise.resolve({})),
|
|
193
|
-
};
|
|
194
|
-
return result;
|
|
195
|
-
}, {});
|
|
196
|
-
};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { isObject } from "lodash";
|
|
2
|
-
import { BASE_RETRY } from "../../defaults";
|
|
3
|
-
import type { GitlabJobDef } from "../../types";
|
|
4
|
-
import type { CatladderJob, CatladderJobNeed } from "../../types/jobs";
|
|
5
|
-
const getJobName = (need: CatladderJobNeed) =>
|
|
6
|
-
isObject(need) ? need.job : need;
|
|
7
|
-
|
|
8
|
-
export const makeGitlabJob = ({
|
|
9
|
-
envMode,
|
|
10
|
-
needsStages,
|
|
11
|
-
needsOtherComponent,
|
|
12
|
-
name,
|
|
13
|
-
needs,
|
|
14
|
-
...rest
|
|
15
|
-
}: CatladderJob<string>): GitlabJobDef => {
|
|
16
|
-
return {
|
|
17
|
-
...rest,
|
|
18
|
-
// sort in a predictable manner for snapshot tests
|
|
19
|
-
needs: needs
|
|
20
|
-
? [...needs].sort((a, b) => getJobName(a).localeCompare(getJobName(b)))
|
|
21
|
-
: undefined,
|
|
22
|
-
retry: BASE_RETRY,
|
|
23
|
-
interruptible: true,
|
|
24
|
-
};
|
|
25
|
-
};
|