@catladder/pipeline 1.80.2 → 1.80.4

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.
@@ -151,7 +151,7 @@ exports[`matches snapshot 1`] = `
151
151
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
152
152
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
153
153
  "echo "$ENV_VARS" > ____envvars.yaml",
154
- "gcloud run deploy pan-test-app-dev-www --image asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project asdf --region=asia-east1 --labels customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=custom --env-vars-file=____envvars.yaml --allow-unauthenticated",
154
+ "gcloud run deploy pan-test-app-dev-www --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=custom --env-vars-file=____envvars.yaml --allow-unauthenticated",
155
155
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
156
156
  ],
157
157
  "services": [
@@ -231,7 +231,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CA
231
231
  "echo $CL_dev_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
232
232
  ",
233
233
  "gcloud auth activate-service-account --key-file="./____keyfile.json"",
234
- "gcloud run services delete pan-test-app-dev-www --project asdf --region=asia-east1",
234
+ "gcloud run services delete pan-test-app-dev-www --project=asdf --region=asia-east1",
235
235
  ],
236
236
  "stage": "stop dev",
237
237
  "variables": {
@@ -461,7 +461,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CA
461
461
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
462
462
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
463
463
  "echo "$ENV_VARS" > ____envvars.yaml",
464
- "gcloud run deploy pan-test-app-review-mr1234-www --image asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project asdf --region=asia-east1 --labels customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=custom --env-vars-file=____envvars.yaml --allow-unauthenticated",
464
+ "gcloud run deploy pan-test-app-review-mr1234-www --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=custom --env-vars-file=____envvars.yaml --allow-unauthenticated",
465
465
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
466
466
  ],
467
467
  "services": [
@@ -541,7 +541,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CA
541
541
  "echo $CL_review_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
542
542
  ",
543
543
  "gcloud auth activate-service-account --key-file="./____keyfile.json"",
544
- "gcloud run services delete pan-test-app-review-mr1234-www --project asdf --region=asia-east1",
544
+ "gcloud run services delete pan-test-app-review-mr1234-www --project=asdf --region=asia-east1",
545
545
  ],
546
546
  "stage": "stop review",
547
547
  "variables": {
@@ -868,7 +868,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CA
868
868
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
869
869
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
870
870
  "echo "$ENV_VARS" > ____envvars.yaml",
871
- "gcloud run deploy pan-test-app-prod-www --image asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project asdf --region=asia-east1 --labels customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=custom --env-vars-file=____envvars.yaml --allow-unauthenticated",
871
+ "gcloud run deploy pan-test-app-prod-www --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=custom --env-vars-file=____envvars.yaml --allow-unauthenticated",
872
872
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
873
873
  ],
874
874
  "services": [
@@ -966,7 +966,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CA
966
966
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
967
967
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
968
968
  "echo "$ENV_VARS" > ____envvars.yaml",
969
- "gcloud run deploy pan-test-app-stage-www --image asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project asdf --region=asia-east1 --labels customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=custom --env-vars-file=____envvars.yaml --allow-unauthenticated",
969
+ "gcloud run deploy pan-test-app-stage-www --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=custom --env-vars-file=____envvars.yaml --allow-unauthenticated",
970
970
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
971
971
  ],
972
972
  "services": [
@@ -1046,7 +1046,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CA
1046
1046
  "echo $CL_prod_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1047
1047
  ",
1048
1048
  "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1049
- "gcloud run services delete pan-test-app-prod-www --project asdf --region=asia-east1",
1049
+ "gcloud run services delete pan-test-app-prod-www --project=asdf --region=asia-east1",
1050
1050
  ],
1051
1051
  "stage": "stop prod",
1052
1052
  "variables": {
@@ -1089,7 +1089,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","HOST","ROOT_URL","HOST_CA
1089
1089
  "echo $CL_stage_www_GCLOUD_DEPLOY_credentialsKey > ./____keyfile.json
1090
1090
  ",
1091
1091
  "gcloud auth activate-service-account --key-file="./____keyfile.json"",
1092
- "gcloud run services delete pan-test-app-stage-www --project asdf --region=asia-east1",
1092
+ "gcloud run services delete pan-test-app-stage-www --project=asdf --region=asia-east1",
1093
1093
  ],
1094
1094
  "stage": "stop stage",
1095
1095
  "variables": {
@@ -37,6 +37,22 @@ const config: Config = {
37
37
  },
38
38
  },
39
39
  },
40
+ www: {
41
+ dir: "www",
42
+ build: {
43
+ type: "node",
44
+ },
45
+ deploy: {
46
+ type: "google-cloudrun",
47
+ projectId: "google-project-id",
48
+ region: "europe-west6",
49
+ },
50
+ vars: {
51
+ public: {
52
+ API_URL: "${api:ROOT_URL}",
53
+ },
54
+ },
55
+ },
40
56
  },
41
57
  };
42
58
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@catladder/pipeline",
3
- "version": "1.80.2",
3
+ "version": "1.80.4",
4
4
  "scripts": {
5
5
  "build:tsc": "yarn tsc",
6
6
  "build": "yarn build:compile && yarn build:inline-variables && yarn build:bundle",
@@ -21,11 +21,13 @@ import {
21
21
  } from "./utils/database";
22
22
  import { allowFailureInScripts } from "../../utils/gitlab";
23
23
  import { getCloudRunJobName } from "./utils/jobName";
24
+ import { createArgsString } from "./utils/createArgsString";
24
25
 
25
26
  const setExtraVarsScripts = (deployConfig: DeployConfigCloudRun) => [
26
27
  `export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe ${deployConfig.projectId} --format="value(projectNumber)")`,
27
28
  `echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"`,
28
29
  ];
30
+
29
31
  export const createGoogleCloudRunDeployJobs = (
30
32
  context: Context
31
33
  ): CatladderJob[] => {
@@ -60,11 +62,20 @@ export const createGoogleCloudRunDeployJobs = (
60
62
  .map(([key, value]) => `${key}=${value}`)
61
63
  .join(",");
62
64
 
63
- const commonArgs = `--project ${deployConfig.projectId} --region=${deployConfig.region}`;
64
- const cloudRunArgs = deployConfig.cloudSql
65
- ? `--set-cloudsql-instances=${deployConfig.cloudSql.instanceConnectionName}`
66
- : "";
67
- const commonDeployArgs = `--image ${gcloudImageName} ${commonArgs} ${cloudRunArgs} --labels ${labelsString}`;
65
+ const commonArgs = {
66
+ project: deployConfig.projectId,
67
+ region: deployConfig.region,
68
+ };
69
+
70
+ const commonDeployArgs = {
71
+ image: gcloudImageName,
72
+ ...commonArgs,
73
+ "set-cloudsql-instances": deployConfig.cloudSql
74
+ ? deployConfig.cloudSql.instanceConnectionName
75
+ : undefined,
76
+ labels: labelsString,
77
+ };
78
+
68
79
  const serviceName = context.environment.fullName.toLowerCase();
69
80
 
70
81
  const getFullJobName = (name: string) =>
@@ -104,25 +115,16 @@ export const createGoogleCloudRunDeployJobs = (
104
115
  ? service?.command ?? context.componentConfig.build.startCommand
105
116
  : undefined;
106
117
 
107
- const commandArg = command
108
- ? `--command="${command.split(" ").join(",")}"`
109
- : "";
110
-
111
- const args = {
118
+ const argsString = createArgsString({
119
+ command: command ? '"' + command.split(" ").join(",") + '"' : undefined, // not sure if quotes are needed
120
+ ...commonDeployArgs,
121
+ "env-vars-file": "____envvars.yaml",
112
122
  "allow-unauthenticated": true,
113
123
  "min-instances": customConfig?.minInstances,
114
124
  "max-instances": customConfig?.maxInstances,
115
125
  "no-cpu-throttling": customConfig?.noCpuThrottling,
116
- } as const;
117
-
118
- const argsString = Object.entries(args)
119
- .filter(([, value]) => !isNil(value))
120
- .map(([key, value]) => `--${key}${value !== true ? `=${value}` : ""}`)
121
- .join(" ");
122
-
123
- return `gcloud run deploy ${serviceName}${
124
- nameSuffix ?? ""
125
- } ${commandArg} ${commonDeployArgs} --env-vars-file=____envvars.yaml ${argsString}`;
126
+ });
127
+ return `gcloud run deploy ${serviceName}${nameSuffix ?? ""} ${argsString}`;
126
128
  };
127
129
 
128
130
  const getJobCreateScriptsForJob = (
@@ -133,22 +135,28 @@ export const createGoogleCloudRunDeployJobs = (
133
135
  // lucky, update on the other hand accepts it... so let's just imediatly update it
134
136
 
135
137
  // also we cannot upsert a job, so we have to create it and catch the error and then update
136
- const args = `${jobName} --command="${job.command
137
- .split(" ")
138
- .join(",")}" ${commonDeployArgs} --memory=${job.memory || "512Mi"}`;
138
+ const commonDeployArgsString = createArgsString({
139
+ command: '"' + job.command.split(" ").join(",") + '"',
140
+ ...commonDeployArgs,
141
+ memory: job.memory || "512Mi",
142
+ });
143
+
144
+ const argsString = `${jobName} ${commonDeployArgsString}`;
139
145
  return [
140
- ...allowFailureInScripts([`gcloud beta run jobs create ${args}`]),
141
- `gcloud beta run jobs update ${args} --env-vars-file=____envvars.yaml`,
146
+ ...allowFailureInScripts([`gcloud beta run jobs create ${argsString}`]),
147
+ `gcloud beta run jobs update ${argsString} --env-vars-file=____envvars.yaml`,
142
148
  ];
143
149
  };
144
150
 
151
+ const commonArgsString = createArgsString(commonArgs);
152
+
145
153
  const getJobCreateScripts = () =>
146
154
  jobsWithNames
147
155
  .map(({ job, jobName }) => getJobCreateScriptsForJob(jobName, job))
148
156
  .flat();
149
157
 
150
158
  const getJobRunScriptForJob = (jobName: string) => {
151
- return `gcloud beta run jobs execute ${jobName} ${commonArgs}`;
159
+ return `gcloud beta run jobs execute ${jobName} ${commonArgsString}`;
152
160
  };
153
161
 
154
162
  const getJobRunScripts = (when: DeployConfigCloudRunJob["when"]) =>
@@ -159,11 +167,16 @@ export const createGoogleCloudRunDeployJobs = (
159
167
  const getCreateScheduleScripts = () => {
160
168
  return jobsWithSchedule
161
169
  .map(({ job, jobName, schedulerName }) => {
162
- const commonArgs = `http ${schedulerName} --project=${deployConfig.projectId} --location ${deployConfig.region} \
163
- --schedule="${job.schedule}" \
164
- --uri="https://${deployConfig.region}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${deployConfig.projectId}/jobs/${jobName}:run" \
165
- --http-method POST \
166
- --oauth-service-account-email $GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com`;
170
+ const argsString = createArgsString({
171
+ project: deployConfig.projectId,
172
+ location: deployConfig.region,
173
+ schedule: `"${job.schedule}"`,
174
+ uri: `"https://${deployConfig.region}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${deployConfig.projectId}/jobs/${jobName}:run"`,
175
+ "http-method": "POST",
176
+ "oauth-service-account-email":
177
+ "$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
178
+ });
179
+ const commonArgs = `http ${schedulerName} ${argsString}`;
167
180
  return [
168
181
  ...allowFailureInScripts([
169
182
  `gcloud scheduler jobs create ${commonArgs}`,
@@ -175,11 +188,15 @@ export const createGoogleCloudRunDeployJobs = (
175
188
  };
176
189
 
177
190
  const getDeleteSchedulesScripts = () => {
191
+ const argsString = createArgsString({
192
+ project: deployConfig.projectId,
193
+ location: deployConfig.region,
194
+ });
178
195
  return jobsWithSchedule
179
196
  .map(({ schedulerName }) => {
180
197
  return [
181
198
  ...allowFailureInScripts([
182
- `gcloud scheduler jobs delete ${schedulerName} --project=${deployConfig.projectId} --location ${deployConfig.region}`,
199
+ `gcloud scheduler jobs delete ${schedulerName} ${argsString}`,
183
200
  ]),
184
201
  ];
185
202
  })
@@ -188,7 +205,8 @@ export const createGoogleCloudRunDeployJobs = (
188
205
 
189
206
  const getDeleteJobsScripts = () =>
190
207
  jobsWithNames.map(
191
- ({ jobName }) => `gcloud beta run jobs delete ${jobName} ${commonArgs}`
208
+ ({ jobName }) =>
209
+ `gcloud beta run jobs delete ${jobName} ${commonArgsString}`
192
210
  );
193
211
 
194
212
  const deployScripts = [
@@ -217,11 +235,11 @@ export const createGoogleCloudRunDeployJobs = (
217
235
  const stopScripts = [
218
236
  ...gcloudServiceAccountLoginCommands(context),
219
237
  ...(deployConfig.service !== false
220
- ? [`gcloud run services delete ${serviceName} ${commonArgs}`]
238
+ ? [`gcloud run services delete ${serviceName} ${commonArgsString}`]
221
239
  : []),
222
240
  ...Object.entries(deployConfig.additionalServices ?? {}).map(
223
241
  ([name]) =>
224
- `gcloud run services delete ${serviceName}-${name} ${commonArgs}`
242
+ `gcloud run services delete ${serviceName}-${name} ${commonArgsString}`
225
243
  ),
226
244
  ...getDeleteSchedulesScripts(),
227
245
  ...getDeleteJobsScripts(),
@@ -0,0 +1,19 @@
1
+ import { isNil } from "lodash";
2
+
3
+ /**
4
+ * creates arguments string:
5
+ *
6
+ * --key=value
7
+ *
8
+ * - undefined or null values will get removed completly
9
+ * - true will just be "--key"
10
+ * @param args args record
11
+ * @returns
12
+ */
13
+ export const createArgsString = (
14
+ args: Record<string, string | number | true | undefined>
15
+ ) =>
16
+ Object.entries(args)
17
+ .filter(([, value]) => !isNil(value))
18
+ .map(([key, value]) => `--${key}${value !== true ? `=${value}` : ""}`)
19
+ .join(" ");