@catladder/pipeline 1.125.1 → 1.126.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/bundles/catladder-gitlab/index.js +1 -1
- package/dist/constants.js +1 -1
- package/dist/deploy/base/deploy.js +1 -1
- package/dist/deploy/cloudRun/deployJob.js +10 -6
- package/dist/deploy/types/googleCloudRun.d.ts +6 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +1 -1
- package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +1 -1
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +1 -1
- package/examples/__snapshots__/cloud-run-non-public.ts.snap +1 -1
- package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +1855 -0
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +2 -2
- package/examples/__snapshots__/cloud-run-with-sql.ts.snap +2 -2
- package/examples/__snapshots__/cloud-run-with-worker.ts.snap +1 -1
- package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +1 -1
- package/examples/__snapshots__/custom-build-job.ts.snap +1 -1
- package/examples/__snapshots__/custom-deploy.ts.snap +1 -1
- package/examples/__snapshots__/custom-sbom-java.ts.snap +1 -1
- package/examples/__snapshots__/kubernetes-application-customization.ts.snap +1 -1
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +1 -1
- package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +1 -1
- package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +2 -2
- package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +1 -1
- package/examples/__snapshots__/meteor-kubernetes.ts.snap +1 -1
- package/examples/__snapshots__/native-app.ts.snap +1 -1
- package/examples/__snapshots__/node-build-with-custom-image.ts.snap +1 -1
- package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +2 -2
- package/examples/cloud-run-post-stop-job.ts +40 -0
- package/package.json +1 -1
- package/src/deploy/base/deploy.ts +1 -1
- package/src/deploy/cloudRun/deployJob.ts +20 -4
- package/src/deploy/types/googleCloudRun.ts +7 -2
|
@@ -1277,7 +1277,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1277
1277
|
],
|
|
1278
1278
|
},
|
|
1279
1279
|
"environment": {
|
|
1280
|
-
"auto_stop_in": "
|
|
1280
|
+
"auto_stop_in": "1 week",
|
|
1281
1281
|
"name": "review/some-commit/api",
|
|
1282
1282
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
1283
1283
|
"url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
@@ -1783,7 +1783,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1783
1783
|
],
|
|
1784
1784
|
},
|
|
1785
1785
|
"environment": {
|
|
1786
|
-
"auto_stop_in": "
|
|
1786
|
+
"auto_stop_in": "1 week",
|
|
1787
1787
|
"name": "review/some-commit/worker",
|
|
1788
1788
|
"on_stop": "worker 🛑 Stop ⚠️ | review ",
|
|
1789
1789
|
"url": "https://pan-test-app-review-mr1234-worker-unknown-host.example.com",
|
|
@@ -1284,7 +1284,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1284
1284
|
],
|
|
1285
1285
|
},
|
|
1286
1286
|
"environment": {
|
|
1287
|
-
"auto_stop_in": "
|
|
1287
|
+
"auto_stop_in": "1 week",
|
|
1288
1288
|
"name": "review/some-commit/api",
|
|
1289
1289
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
1290
1290
|
"url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
@@ -1807,7 +1807,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1807
1807
|
],
|
|
1808
1808
|
},
|
|
1809
1809
|
"environment": {
|
|
1810
|
-
"auto_stop_in": "
|
|
1810
|
+
"auto_stop_in": "1 week",
|
|
1811
1811
|
"name": "review/some-commit/www",
|
|
1812
1812
|
"on_stop": "www 🛑 Stop ⚠️ | review ",
|
|
1813
1813
|
"url": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
|
|
@@ -760,7 +760,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
760
760
|
],
|
|
761
761
|
},
|
|
762
762
|
"environment": {
|
|
763
|
-
"auto_stop_in": "
|
|
763
|
+
"auto_stop_in": "1 week",
|
|
764
764
|
"name": "review/some-commit/api",
|
|
765
765
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
766
766
|
"url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
@@ -670,7 +670,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
670
670
|
],
|
|
671
671
|
},
|
|
672
672
|
"environment": {
|
|
673
|
-
"auto_stop_in": "
|
|
673
|
+
"auto_stop_in": "1 week",
|
|
674
674
|
"name": "review/some-commit/www",
|
|
675
675
|
"on_stop": "www 🛑 Stop ⚠️ | review ",
|
|
676
676
|
"url": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
|
|
@@ -484,7 +484,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
484
484
|
],
|
|
485
485
|
},
|
|
486
486
|
"environment": {
|
|
487
|
-
"auto_stop_in": "
|
|
487
|
+
"auto_stop_in": "1 week",
|
|
488
488
|
"name": "review/some-commit/www",
|
|
489
489
|
"on_stop": "www 🛑 Stop ⚠️ | review ",
|
|
490
490
|
"url": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
|
|
@@ -693,7 +693,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
693
693
|
"allow_failure": false,
|
|
694
694
|
"cache": [],
|
|
695
695
|
"environment": {
|
|
696
|
-
"auto_stop_in": "
|
|
696
|
+
"auto_stop_in": "1 week",
|
|
697
697
|
"name": "review/some-commit/www",
|
|
698
698
|
"on_stop": "www 🛑 Stop ⚠️ | review ",
|
|
699
699
|
"url": "https://unknown-host.example.com",
|
|
@@ -487,7 +487,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
|
|
|
487
487
|
],
|
|
488
488
|
},
|
|
489
489
|
"environment": {
|
|
490
|
-
"auto_stop_in": "
|
|
490
|
+
"auto_stop_in": "1 week",
|
|
491
491
|
"name": "review/some-commit/app",
|
|
492
492
|
"on_stop": "app 🛑 Stop ⚠️ | review ",
|
|
493
493
|
"url": "https://pan-test-app-review-mr1234-app-unknown-host.example.com",
|
|
@@ -1025,7 +1025,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1025
1025
|
"api 🚀 Deploy | review ": {
|
|
1026
1026
|
"allow_failure": false,
|
|
1027
1027
|
"environment": {
|
|
1028
|
-
"auto_stop_in": "
|
|
1028
|
+
"auto_stop_in": "1 week",
|
|
1029
1029
|
"name": "review/some-commit/api",
|
|
1030
1030
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
1031
1031
|
"url": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
@@ -1013,7 +1013,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1013
1013
|
"api 🚀 Deploy | review ": {
|
|
1014
1014
|
"allow_failure": false,
|
|
1015
1015
|
"environment": {
|
|
1016
|
-
"auto_stop_in": "
|
|
1016
|
+
"auto_stop_in": "1 week",
|
|
1017
1017
|
"name": "review/some-commit/api",
|
|
1018
1018
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
1019
1019
|
"url": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
@@ -1017,7 +1017,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1017
1017
|
"api 🚀 Deploy | review ": {
|
|
1018
1018
|
"allow_failure": false,
|
|
1019
1019
|
"environment": {
|
|
1020
|
-
"auto_stop_in": "
|
|
1020
|
+
"auto_stop_in": "1 week",
|
|
1021
1021
|
"name": "review/some-commit/api",
|
|
1022
1022
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
1023
1023
|
"url": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
@@ -1593,7 +1593,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1593
1593
|
"api 🚀 Deploy | review ": {
|
|
1594
1594
|
"allow_failure": false,
|
|
1595
1595
|
"environment": {
|
|
1596
|
-
"auto_stop_in": "
|
|
1596
|
+
"auto_stop_in": "1 week",
|
|
1597
1597
|
"name": "review/some-commit/api",
|
|
1598
1598
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
1599
1599
|
"url": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
@@ -2200,7 +2200,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
2200
2200
|
"www 🚀 Deploy | review ": {
|
|
2201
2201
|
"allow_failure": false,
|
|
2202
2202
|
"environment": {
|
|
2203
|
-
"auto_stop_in": "
|
|
2203
|
+
"auto_stop_in": "1 week",
|
|
2204
2204
|
"name": "review/some-commit/www",
|
|
2205
2205
|
"on_stop": "www 🛑 Stop ⚠️ | review ",
|
|
2206
2206
|
"url": "https://www.mr1234.review.test-app.pan.panter.cloud",
|
|
@@ -1081,7 +1081,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1081
1081
|
"api 🚀 Deploy | review ": {
|
|
1082
1082
|
"allow_failure": false,
|
|
1083
1083
|
"environment": {
|
|
1084
|
-
"auto_stop_in": "
|
|
1084
|
+
"auto_stop_in": "1 week",
|
|
1085
1085
|
"name": "review/some-commit/api",
|
|
1086
1086
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
1087
1087
|
"url": "https://api.mr1234.review.test-app.pan.panter.cloud",
|
|
@@ -1035,7 +1035,7 @@ mongodb:
|
|
|
1035
1035
|
"web 🚀 Deploy | review ": {
|
|
1036
1036
|
"allow_failure": false,
|
|
1037
1037
|
"environment": {
|
|
1038
|
-
"auto_stop_in": "
|
|
1038
|
+
"auto_stop_in": "1 week",
|
|
1039
1039
|
"name": "review/some-commit/web",
|
|
1040
1040
|
"on_stop": "web 🛑 Stop ⚠️ | review ",
|
|
1041
1041
|
"url": "https://web.mr1234.review.my-app.pan.panter.cloud",
|
|
@@ -1112,7 +1112,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1112
1112
|
],
|
|
1113
1113
|
},
|
|
1114
1114
|
"environment": {
|
|
1115
|
-
"auto_stop_in": "
|
|
1115
|
+
"auto_stop_in": "1 week",
|
|
1116
1116
|
"name": "review/some-commit/api",
|
|
1117
1117
|
"on_stop": "api 🛑 Stop ⚠️ | review ",
|
|
1118
1118
|
"url": "https://pan-test-app-review-mr1234-api-unknown-host.example.com",
|
|
@@ -758,7 +758,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
758
758
|
],
|
|
759
759
|
},
|
|
760
760
|
"environment": {
|
|
761
|
-
"auto_stop_in": "
|
|
761
|
+
"auto_stop_in": "1 week",
|
|
762
762
|
"name": "review/some-commit/www",
|
|
763
763
|
"on_stop": "www 🛑 Stop ⚠️ | review ",
|
|
764
764
|
"url": "https://pan-test-app-review-mr1234-www-unknown-host.example.com",
|
|
@@ -781,7 +781,7 @@ jobs:
|
|
|
781
781
|
"app 🚀 Deploy | review ": {
|
|
782
782
|
"allow_failure": false,
|
|
783
783
|
"environment": {
|
|
784
|
-
"auto_stop_in": "
|
|
784
|
+
"auto_stop_in": "1 week",
|
|
785
785
|
"name": "review/some-commit/app",
|
|
786
786
|
"on_stop": "app 🛑 Stop ⚠️ | review ",
|
|
787
787
|
"url": "https://app.mr1234.review.test-app.pan.panter.cloud",
|
|
@@ -2880,7 +2880,7 @@ jobs:
|
|
|
2880
2880
|
"app 🚀 Deploy | review ": {
|
|
2881
2881
|
"allow_failure": false,
|
|
2882
2882
|
"environment": {
|
|
2883
|
-
"auto_stop_in": "
|
|
2883
|
+
"auto_stop_in": "1 week",
|
|
2884
2884
|
"name": "review/some-commit/app",
|
|
2885
2885
|
"on_stop": "app 🛑 Stop ⚠️ | review ",
|
|
2886
2886
|
"url": "https://app.mr1234.review.test-app.pan.panter.cloud",
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Config } from "../src";
|
|
2
|
+
import { createAllPipelines } from "./__utils__/helpers";
|
|
3
|
+
const config: Config = {
|
|
4
|
+
appName: "test-app",
|
|
5
|
+
customerName: "pan",
|
|
6
|
+
components: {
|
|
7
|
+
api: {
|
|
8
|
+
dir: "api",
|
|
9
|
+
build: {
|
|
10
|
+
type: "node",
|
|
11
|
+
},
|
|
12
|
+
deploy: {
|
|
13
|
+
type: "google-cloudrun",
|
|
14
|
+
projectId: "google-project-id",
|
|
15
|
+
region: "europe-west6",
|
|
16
|
+
},
|
|
17
|
+
env: {
|
|
18
|
+
review: {
|
|
19
|
+
deploy: {
|
|
20
|
+
jobs: {
|
|
21
|
+
["drop-db"]: {
|
|
22
|
+
command: [
|
|
23
|
+
"/bin/sh",
|
|
24
|
+
"-c", // in cloud run, you can't use env-vars in commands, so we have to do this trick
|
|
25
|
+
"mongosh \\$MONGO_URL --eval 'db.dropDatabase()'",
|
|
26
|
+
],
|
|
27
|
+
image: "rtsp/mongosh:latest",
|
|
28
|
+
when: "postStop",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
it("matches snapshot", async () => {
|
|
39
|
+
expect(await createAllPipelines(config)).toMatchSnapshot();
|
|
40
|
+
});
|
package/package.json
CHANGED
|
@@ -140,9 +140,15 @@ export const createGoogleCloudRunDeployJobs = (
|
|
|
140
140
|
// lucky, update on the other hand accepts it... so let's just imediatly update it
|
|
141
141
|
|
|
142
142
|
// also we cannot upsert a job, so we have to create it and catch the error and then update
|
|
143
|
+
|
|
144
|
+
const commandArray = Array.isArray(job.command)
|
|
145
|
+
? job.command
|
|
146
|
+
: job.command.split(" ");
|
|
147
|
+
|
|
143
148
|
const commonDeployArgsString = createArgsString({
|
|
144
|
-
command: '"' +
|
|
149
|
+
command: '"' + commandArray.join(",") + '"',
|
|
145
150
|
...commonDeployArgs,
|
|
151
|
+
image: job.image || commonDeployArgs.image,
|
|
146
152
|
memory: job.memory || "512Mi",
|
|
147
153
|
"task-timeout": job.timeout || "10m",
|
|
148
154
|
});
|
|
@@ -161,14 +167,22 @@ export const createGoogleCloudRunDeployJobs = (
|
|
|
161
167
|
.map(({ job, jobName }) => getJobCreateScriptsForJob(jobName, job))
|
|
162
168
|
.flat();
|
|
163
169
|
|
|
164
|
-
const getJobRunScriptForJob = (jobName: string) => {
|
|
165
|
-
return `gcloud beta run jobs execute ${jobName} ${commonArgsString}
|
|
170
|
+
const getJobRunScriptForJob = (jobName: string, wait: boolean) => {
|
|
171
|
+
return `gcloud beta run jobs execute ${jobName} ${commonArgsString}${
|
|
172
|
+
wait ? " --wait" : ""
|
|
173
|
+
}`;
|
|
166
174
|
};
|
|
167
175
|
|
|
168
176
|
const getJobRunScripts = (when: DeployConfigCloudRunJob["when"]) =>
|
|
169
177
|
jobsWithNames
|
|
170
178
|
.filter(({ job }) => job.when === when)
|
|
171
|
-
.map(({ jobName }) =>
|
|
179
|
+
.map(({ jobName }) =>
|
|
180
|
+
getJobRunScriptForJob(
|
|
181
|
+
jobName,
|
|
182
|
+
// wait for completin on stop jobs, since stop will delete the jobs afterwards, so they will fail
|
|
183
|
+
["preStop", "postStop"].includes(when)
|
|
184
|
+
)
|
|
185
|
+
);
|
|
172
186
|
|
|
173
187
|
const getCreateScheduleScripts = () => {
|
|
174
188
|
return jobsWithSchedule
|
|
@@ -253,6 +267,7 @@ export const createGoogleCloudRunDeployJobs = (
|
|
|
253
267
|
|
|
254
268
|
const stopScripts = [
|
|
255
269
|
...gcloudServiceAccountLoginCommands(context),
|
|
270
|
+
...getJobRunScripts("preStop"),
|
|
256
271
|
...(deployConfig.service !== false
|
|
257
272
|
? [`gcloud run services delete ${serviceName} ${commonArgsString}`]
|
|
258
273
|
: []),
|
|
@@ -260,6 +275,7 @@ export const createGoogleCloudRunDeployJobs = (
|
|
|
260
275
|
([name]) =>
|
|
261
276
|
`gcloud run services delete ${serviceName}-${name} ${commonArgsString}`
|
|
262
277
|
),
|
|
278
|
+
...getJobRunScripts("postStop"),
|
|
263
279
|
...getDeleteSchedulesScripts(),
|
|
264
280
|
...getDeleteJobsScripts(),
|
|
265
281
|
...(deployConfig.cloudSql && deployConfig.cloudSql.deleteDatabaseOnStop
|
|
@@ -123,7 +123,12 @@ export type DeployConfigCloudRunJobBase = {
|
|
|
123
123
|
/**
|
|
124
124
|
* command
|
|
125
125
|
*/
|
|
126
|
-
command: string;
|
|
126
|
+
command: string | string[];
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* custom image to use. Defaults to the image from the build
|
|
130
|
+
*/
|
|
131
|
+
image?: string;
|
|
127
132
|
|
|
128
133
|
/**
|
|
129
134
|
* memory limit of the job, defaults to 51Mi
|
|
@@ -151,7 +156,7 @@ export type DeployConfigCloudRunJobWithSchedule =
|
|
|
151
156
|
};
|
|
152
157
|
|
|
153
158
|
export type DeployConfigCloudRunJobNormal = DeployConfigCloudRunJobBase & {
|
|
154
|
-
when: "manual" | "preDeploy" | "postDeploy";
|
|
159
|
+
when: "manual" | "preDeploy" | "postDeploy" | "preStop" | "postStop";
|
|
155
160
|
};
|
|
156
161
|
|
|
157
162
|
export type DeployConfigCloudRunJob =
|