@catladder/pipeline 1.134.0 → 1.135.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.
Files changed (36) hide show
  1. package/dist/bundles/catladder-gitlab/index.js +2 -2
  2. package/dist/constants.js +1 -1
  3. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.d.ts +7 -0
  4. package/dist/deploy/cloudRun/createJobs/cloudRunJobs.js +178 -0
  5. package/dist/deploy/cloudRun/createJobs/cloudRunServices.d.ts +4 -0
  6. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +54 -0
  7. package/dist/deploy/cloudRun/createJobs/common.d.ts +18 -0
  8. package/dist/deploy/cloudRun/createJobs/common.js +90 -0
  9. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.d.ts +2 -0
  10. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +56 -0
  11. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.d.ts +2 -0
  12. package/dist/deploy/cloudRun/createJobs/getCloudRunStopScripts.js +52 -0
  13. package/dist/deploy/cloudRun/createJobs/index.d.ts +3 -0
  14. package/dist/deploy/cloudRun/createJobs/index.js +43 -0
  15. package/dist/deploy/cloudRun/createJobs/variables.d.ts +5 -0
  16. package/dist/deploy/cloudRun/createJobs/variables.js +19 -0
  17. package/dist/deploy/cloudRun/index.js +2 -2
  18. package/dist/deploy/types/googleCloudRun.d.ts +9 -0
  19. package/dist/tsconfig.tsbuildinfo +1 -1
  20. package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +5 -5
  21. package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +1839 -0
  22. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +36 -36
  23. package/examples/cloud-run-service-gen2.ts +27 -0
  24. package/package.json +1 -1
  25. package/src/deploy/cloudRun/createJobs/cloudRunJobs.ts +182 -0
  26. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +74 -0
  27. package/src/deploy/cloudRun/createJobs/common.ts +59 -0
  28. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +58 -0
  29. package/src/deploy/cloudRun/createJobs/getCloudRunStopScripts.ts +34 -0
  30. package/src/deploy/cloudRun/createJobs/index.ts +45 -0
  31. package/src/deploy/cloudRun/createJobs/variables.ts +21 -0
  32. package/src/deploy/cloudRun/index.ts +1 -1
  33. package/src/deploy/types/googleCloudRun.ts +11 -1
  34. package/dist/deploy/cloudRun/deployJob.d.ts +0 -3
  35. package/dist/deploy/cloudRun/deployJob.js +0 -261
  36. package/src/deploy/cloudRun/deployJob.ts +0 -318
@@ -287,15 +287,15 @@ COPY --chown=node:node .yarn /app/.yarn",
287
287
  "set -e",
288
288
  "gcloud scheduler jobs update http pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-dev-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
289
289
  "set +e",
290
- "gcloud beta run jobs create pan-test-app-dev-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-migration --memory=512Mi --task-timeout=10m",
290
+ "gcloud run jobs create pan-test-app-dev-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-migration --memory=512Mi --task-timeout=10m",
291
291
  "set -e",
292
- "gcloud beta run jobs update pan-test-app-dev-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-migration --memory=512Mi --task-timeout=10m --env-vars-file=____envvars.yaml",
292
+ "gcloud run jobs update pan-test-app-dev-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-migration --memory=512Mi --task-timeout=10m --env-vars-file=____envvars.yaml",
293
293
  "set +e",
294
- "gcloud beta run jobs create pan-test-app-dev-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-send-reminders --memory=512Mi --task-timeout=15m",
294
+ "gcloud run jobs create pan-test-app-dev-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-send-reminders --memory=512Mi --task-timeout=15m",
295
295
  "set -e",
296
- "gcloud beta run jobs update pan-test-app-dev-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-send-reminders --memory=512Mi --task-timeout=15m --env-vars-file=____envvars.yaml",
296
+ "gcloud run jobs update pan-test-app-dev-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-job-name=pan-test-app-dev-api-send-reminders --memory=512Mi --task-timeout=15m --env-vars-file=____envvars.yaml",
297
297
  "gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
298
- "gcloud beta run jobs execute pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6",
298
+ "gcloud run jobs execute pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6",
299
299
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
300
300
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
301
301
  "gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-dev-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done",
@@ -405,10 +405,10 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
405
405
  "gcloud auth activate-service-account --key-file=<(echo "$CL_dev_api_GCLOUD_DEPLOY_credentialsKey")",
406
406
  "gcloud run services delete pan-test-app-dev-api --project=google-project-id --region=europe-west6",
407
407
  "gcloud scheduler jobs delete pan-test-app-dev-api-send-reminders-scheduler --project=google-project-id --location=europe-west6",
408
- "gcloud beta run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-dev-api-migration --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
409
- "gcloud beta run jobs delete pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6",
410
- "gcloud beta run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-dev-api-send-reminders --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
411
- "gcloud beta run jobs delete pan-test-app-dev-api-send-reminders --project=google-project-id --region=europe-west6",
408
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-dev-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
409
+ "gcloud run jobs delete pan-test-app-dev-api-migration --project=google-project-id --region=europe-west6",
410
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-dev-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
411
+ "gcloud run jobs delete pan-test-app-dev-api-send-reminders --project=google-project-id --region=europe-west6",
412
412
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/api --quiet --delete-tags",
413
413
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
414
414
  "echo Disabling component in Dependency Track",
@@ -1349,15 +1349,15 @@ COPY --chown=node:node .yarn /app/.yarn",
1349
1349
  "set -e",
1350
1350
  "gcloud scheduler jobs update http pan-test-app-review-mr1234-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-review-mr1234-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
1351
1351
  "set +e",
1352
- "gcloud beta run jobs create pan-test-app-review-mr1234-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-migration --memory=512Mi --task-timeout=10m",
1352
+ "gcloud run jobs create pan-test-app-review-mr1234-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-migration --memory=512Mi --task-timeout=10m",
1353
1353
  "set -e",
1354
- "gcloud beta run jobs update pan-test-app-review-mr1234-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-migration --memory=512Mi --task-timeout=10m --env-vars-file=____envvars.yaml",
1354
+ "gcloud run jobs update pan-test-app-review-mr1234-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-migration --memory=512Mi --task-timeout=10m --env-vars-file=____envvars.yaml",
1355
1355
  "set +e",
1356
- "gcloud beta run jobs create pan-test-app-review-mr1234-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-send-reminders --memory=512Mi --task-timeout=15m",
1356
+ "gcloud run jobs create pan-test-app-review-mr1234-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-send-reminders --memory=512Mi --task-timeout=15m",
1357
1357
  "set -e",
1358
- "gcloud beta run jobs update pan-test-app-review-mr1234-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-send-reminders --memory=512Mi --task-timeout=15m --env-vars-file=____envvars.yaml",
1358
+ "gcloud run jobs update pan-test-app-review-mr1234-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-job-name=pan-test-app-review-mr1234-api-send-reminders --memory=512Mi --task-timeout=15m --env-vars-file=____envvars.yaml",
1359
1359
  "gcloud run deploy pan-test-app-review-mr1234-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/api/mr1234:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=pan-test-app-review-mr1234-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
1360
- "gcloud beta run jobs execute pan-test-app-review-mr1234-api-migration --project=google-project-id --region=europe-west6",
1360
+ "gcloud run jobs execute pan-test-app-review-mr1234-api-migration --project=google-project-id --region=europe-west6",
1361
1361
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
1362
1362
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
1363
1363
  "gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-review-mr1234-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done",
@@ -1470,10 +1470,10 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1470
1470
  "gcloud auth activate-service-account --key-file=<(echo "$CL_review_api_GCLOUD_DEPLOY_credentialsKey")",
1471
1471
  "gcloud run services delete pan-test-app-review-mr1234-api --project=google-project-id --region=europe-west6",
1472
1472
  "gcloud scheduler jobs delete pan-test-app-review-mr1234-api-send-reminders-scheduler --project=google-project-id --location=europe-west6",
1473
- "gcloud beta run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-review-mr1234-api-migration --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
1474
- "gcloud beta run jobs delete pan-test-app-review-mr1234-api-migration --project=google-project-id --region=europe-west6",
1475
- "gcloud beta run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-review-mr1234-api-send-reminders --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
1476
- "gcloud beta run jobs delete pan-test-app-review-mr1234-api-send-reminders --project=google-project-id --region=europe-west6",
1473
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-review-mr1234-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
1474
+ "gcloud run jobs delete pan-test-app-review-mr1234-api-migration --project=google-project-id --region=europe-west6",
1475
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-review-mr1234-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
1476
+ "gcloud run jobs delete pan-test-app-review-mr1234-api-send-reminders --project=google-project-id --region=europe-west6",
1477
1477
  "echo "deleting database pan-test-app-review-mr1234-api..."",
1478
1478
  "echo "👆 this can take multiple attemps (3-5min), because google cloud run may still have a connection to the database after the cloud run service is shut down"",
1479
1479
  "
@@ -2532,15 +2532,15 @@ COPY --chown=node:node .yarn /app/.yarn",
2532
2532
  "set -e",
2533
2533
  "gcloud scheduler jobs update http pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-prod-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
2534
2534
  "set +e",
2535
- "gcloud beta run jobs create pan-test-app-prod-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-migration --memory=512Mi --task-timeout=10m",
2535
+ "gcloud run jobs create pan-test-app-prod-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-migration --memory=512Mi --task-timeout=10m",
2536
2536
  "set -e",
2537
- "gcloud beta run jobs update pan-test-app-prod-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-migration --memory=512Mi --task-timeout=10m --env-vars-file=____envvars.yaml",
2537
+ "gcloud run jobs update pan-test-app-prod-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-migration --memory=512Mi --task-timeout=10m --env-vars-file=____envvars.yaml",
2538
2538
  "set +e",
2539
- "gcloud beta run jobs create pan-test-app-prod-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-send-reminders --memory=512Mi --task-timeout=15m",
2539
+ "gcloud run jobs create pan-test-app-prod-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-send-reminders --memory=512Mi --task-timeout=15m",
2540
2540
  "set -e",
2541
- "gcloud beta run jobs update pan-test-app-prod-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-send-reminders --memory=512Mi --task-timeout=15m --env-vars-file=____envvars.yaml",
2541
+ "gcloud run jobs update pan-test-app-prod-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-job-name=pan-test-app-prod-api-send-reminders --memory=512Mi --task-timeout=15m --env-vars-file=____envvars.yaml",
2542
2542
  "gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
2543
- "gcloud beta run jobs execute pan-test-app-prod-api-migration --project=google-project-id --region=europe-west6",
2543
+ "gcloud run jobs execute pan-test-app-prod-api-migration --project=google-project-id --region=europe-west6",
2544
2544
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
2545
2545
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
2546
2546
  "gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-prod-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | tail -n +6 | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done",
@@ -2676,15 +2676,15 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2676
2676
  "set -e",
2677
2677
  "gcloud scheduler jobs update http pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location=europe-west6 --schedule="0 * * * *" --max-retry-attempts=0 --uri="https://europe-west6-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/google-project-id/jobs/pan-test-app-stage-api-send-reminders:run" --http-method=POST --oauth-service-account-email=$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
2678
2678
  "set +e",
2679
- "gcloud beta run jobs create pan-test-app-stage-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-migration --memory=512Mi --task-timeout=10m",
2679
+ "gcloud run jobs create pan-test-app-stage-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-migration --memory=512Mi --task-timeout=10m",
2680
2680
  "set -e",
2681
- "gcloud beta run jobs update pan-test-app-stage-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-migration --memory=512Mi --task-timeout=10m --env-vars-file=____envvars.yaml",
2681
+ "gcloud run jobs update pan-test-app-stage-api-migration --command="yarn,migrate" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-migration --memory=512Mi --task-timeout=10m --env-vars-file=____envvars.yaml",
2682
2682
  "set +e",
2683
- "gcloud beta run jobs create pan-test-app-stage-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-send-reminders --memory=512Mi --task-timeout=15m",
2683
+ "gcloud run jobs create pan-test-app-stage-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-send-reminders --memory=512Mi --task-timeout=15m",
2684
2684
  "set -e",
2685
- "gcloud beta run jobs update pan-test-app-stage-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-send-reminders --memory=512Mi --task-timeout=15m --env-vars-file=____envvars.yaml",
2685
+ "gcloud run jobs update pan-test-app-stage-api-send-reminders --command="yarn,job:send-reminders" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-job-name=pan-test-app-stage-api-send-reminders --memory=512Mi --task-timeout=15m --env-vars-file=____envvars.yaml",
2686
2686
  "gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api:$DOCKER_IMAGE_TAG --project=google-project-id --region=europe-west6 --set-cloudsql-instances=projectId:region:instancename --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-api --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=5 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost",
2687
- "gcloud beta run jobs execute pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6",
2687
+ "gcloud run jobs execute pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6",
2688
2688
  "echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"",
2689
2689
  "echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"",
2690
2690
  "gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-stage-api --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=google-project-id --region=europe-west6 --quiet $revisionname ; done",
@@ -2794,10 +2794,10 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2794
2794
  "gcloud auth activate-service-account --key-file=<(echo "$CL_prod_api_GCLOUD_DEPLOY_credentialsKey")",
2795
2795
  "gcloud run services delete pan-test-app-prod-api --project=google-project-id --region=europe-west6",
2796
2796
  "gcloud scheduler jobs delete pan-test-app-prod-api-send-reminders-scheduler --project=google-project-id --location=europe-west6",
2797
- "gcloud beta run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-prod-api-migration --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
2798
- "gcloud beta run jobs delete pan-test-app-prod-api-migration --project=google-project-id --region=europe-west6",
2799
- "gcloud beta run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-prod-api-send-reminders --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
2800
- "gcloud beta run jobs delete pan-test-app-prod-api-send-reminders --project=google-project-id --region=europe-west6",
2797
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-prod-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
2798
+ "gcloud run jobs delete pan-test-app-prod-api-migration --project=google-project-id --region=europe-west6",
2799
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-prod-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
2800
+ "gcloud run jobs delete pan-test-app-prod-api-send-reminders --project=google-project-id --region=europe-west6",
2801
2801
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/api --quiet --delete-tags",
2802
2802
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
2803
2803
  "echo Disabling component in Dependency Track",
@@ -2845,10 +2845,10 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2845
2845
  "gcloud auth activate-service-account --key-file=<(echo "$CL_stage_api_GCLOUD_DEPLOY_credentialsKey")",
2846
2846
  "gcloud run services delete pan-test-app-stage-api --project=google-project-id --region=europe-west6",
2847
2847
  "gcloud scheduler jobs delete pan-test-app-stage-api-send-reminders-scheduler --project=google-project-id --location=europe-west6",
2848
- "gcloud beta run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-stage-api-migration --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
2849
- "gcloud beta run jobs delete pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6",
2850
- "gcloud beta run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-stage-api-send-reminders --format="value(name)" | xargs -I {} gcloud beta run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
2851
- "gcloud beta run jobs delete pan-test-app-stage-api-send-reminders --project=google-project-id --region=europe-west6",
2848
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-stage-api-migration --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
2849
+ "gcloud run jobs delete pan-test-app-stage-api-migration --project=google-project-id --region=europe-west6",
2850
+ "gcloud run jobs executions list --project=google-project-id --region=europe-west6 --job pan-test-app-stage-api-send-reminders --format="value(name)" | xargs -I {} gcloud run jobs executions delete {} --quiet --project=google-project-id --region=europe-west6",
2851
+ "gcloud run jobs delete pan-test-app-stage-api-send-reminders --project=google-project-id --region=europe-west6",
2852
2852
  "gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/api --quiet --delete-tags",
2853
2853
  "gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/api@$version --quiet --delete-tags; done",
2854
2854
  "echo Disabling component in Dependency Track",
@@ -0,0 +1,27 @@
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
+ service: {
18
+ executionEnvironment: "gen2",
19
+ },
20
+ },
21
+ },
22
+ },
23
+ };
24
+
25
+ it("matches snapshot", async () => {
26
+ expect(await createAllPipelines(config)).toMatchSnapshot();
27
+ });
package/package.json CHANGED
@@ -52,7 +52,7 @@
52
52
  }
53
53
  ],
54
54
  "license": "MIT",
55
- "version": "1.134.0",
55
+ "version": "1.135.0",
56
56
  "scripts": {
57
57
  "build:tsc": "yarn tsc",
58
58
  "build": "yarn build:compile && yarn build:inline-variables && yarn build:bundle",
@@ -0,0 +1,182 @@
1
+ import type { Context } from "../../../types/context";
2
+ import { allowFailureInScripts } from "../../../utils/gitlab";
3
+
4
+ import type {
5
+ DeployConfigCloudRunJob,
6
+ DeployConfigCloudRunJobWithSchedule,
7
+ } from "../../types/googleCloudRun";
8
+ import { createArgsString } from "../utils/createArgsString";
9
+ import { getCloudRunJobName } from "../utils/jobName";
10
+ import {
11
+ gcloudRunCmd,
12
+ gcloudSchedulerCmd,
13
+ getCloudRunDeployConfig,
14
+ getCommonCloudRunArgs,
15
+ getCommonDeployArgs,
16
+ makeLabelString,
17
+ } from "./common";
18
+ import { getLabels } from "../../../context/getLabels";
19
+
20
+ const getJobRunScriptForJob = (
21
+ context: Context,
22
+ jobName: string,
23
+ wait: boolean
24
+ ) => {
25
+ const commonArgs = getCommonCloudRunArgs(context);
26
+
27
+ const commonArgsString = createArgsString(commonArgs);
28
+ return `${gcloudRunCmd()} jobs execute ${jobName} ${commonArgsString}${
29
+ wait ? " --wait" : ""
30
+ }`;
31
+ };
32
+
33
+ export const getDeleteSchedulesScripts = (context: Context) => {
34
+ const deployConfig = getCloudRunDeployConfig(context);
35
+ const jobsWithSchedule = getCloudRunJobsWithSchedule(context);
36
+ const argsString = createArgsString({
37
+ project: deployConfig.projectId,
38
+ location: deployConfig.region,
39
+ });
40
+ return jobsWithSchedule
41
+ .map(({ schedulerName }) => {
42
+ return [
43
+ `${gcloudSchedulerCmd()} jobs delete ${schedulerName} ${argsString}`,
44
+ ];
45
+ })
46
+ .flat();
47
+ };
48
+
49
+ export const getDeleteJobsScripts = (context: Context) => {
50
+ const commonArgs = getCommonCloudRunArgs(context);
51
+ const commonArgsString = createArgsString(commonArgs);
52
+ const jobsWithNames = getCloudRunJobsWithNames(context);
53
+
54
+ return jobsWithNames.flatMap(({ jobName }) => [
55
+ // first delete all job executions. Otherwise delete might fail if one of those is still running
56
+ `${gcloudRunCmd()} jobs executions list ${commonArgsString} --job ${jobName} --format="value(name)" | xargs -I {} ${gcloudRunCmd()} jobs executions delete {} --quiet ${commonArgsString}`,
57
+ `${gcloudRunCmd()} jobs delete ${jobName} ${commonArgsString}`,
58
+ ]);
59
+ };
60
+
61
+ export const getJobRunScripts = (
62
+ context: Context,
63
+ when: DeployConfigCloudRunJob["when"]
64
+ ) => {
65
+ const jobsWithNames = getCloudRunJobsWithNames(context);
66
+ return jobsWithNames
67
+ .filter(({ job }) => job.when === when)
68
+ .map(({ jobName }) =>
69
+ getJobRunScriptForJob(
70
+ context,
71
+ jobName,
72
+ // wait for completin on stop jobs, since stop will delete the jobs afterwards, so they will fail
73
+ ["preStop", "postStop"].includes(when)
74
+ )
75
+ );
76
+ };
77
+
78
+ export const getJobCreateScripts = (context: Context) => {
79
+ const jobsWithNames = getCloudRunJobsWithNames(context);
80
+
81
+ return jobsWithNames
82
+ .map(({ job, jobName }) => getJobCreateScriptsForJob(context, jobName, job))
83
+ .flat();
84
+ };
85
+
86
+ const getJobCreateScriptsForJob = (
87
+ context: Context,
88
+ jobName: string,
89
+ job: DeployConfigCloudRunJob
90
+ ) => {
91
+ const commonDeployArgs = getCommonDeployArgs(context);
92
+
93
+ // due to some oversight from google, jobs create does not accept `--env-vars-file` 🤦
94
+ // lucky, update on the other hand accepts it... so let's just imediatly update it
95
+ // also we cannot upsert a job, so we have to create it and catch the error and then update
96
+ const commandArray = Array.isArray(job.command)
97
+ ? job.command
98
+ : job.command.split(" ");
99
+
100
+ const commonDeployArgsString = createArgsString({
101
+ command: '"' + commandArray.join(",") + '"',
102
+ ...commonDeployArgs,
103
+ labels: makeLabelString({
104
+ ...getLabels(context),
105
+ "cloud-run-job-name": jobName,
106
+ }),
107
+ image: job.image || commonDeployArgs.image,
108
+ memory: job.memory || "512Mi",
109
+ "task-timeout": job.timeout || "10m",
110
+ });
111
+
112
+ const argsString = `${jobName} ${commonDeployArgsString}`;
113
+ return [
114
+ ...allowFailureInScripts([`${gcloudRunCmd()} jobs create ${argsString}`]),
115
+ `${gcloudRunCmd()} jobs update ${argsString} --env-vars-file=____envvars.yaml`,
116
+ ];
117
+ };
118
+
119
+ export const getCreateScheduleScripts = (context: Context) => {
120
+ const jobsWithSchedule = getCloudRunJobsWithSchedule(context);
121
+ const deployConfig = getCloudRunDeployConfig(context);
122
+
123
+ return jobsWithSchedule
124
+ .map(({ job, jobName, schedulerName }) => {
125
+ const argsString = createArgsString({
126
+ project: deployConfig.projectId,
127
+ location: deployConfig.region,
128
+ schedule: `"${job.schedule}"`,
129
+ "max-retry-attempts": job.maxRetryAttempts ?? 0,
130
+
131
+ uri: `"https://${deployConfig.region}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${deployConfig.projectId}/jobs/${jobName}:run"`,
132
+ "http-method": "POST",
133
+ "oauth-service-account-email":
134
+ "$GCLOUD_PROJECT_NUMBER-compute@developer.gserviceaccount.com",
135
+ });
136
+ const commonArgs = `http ${schedulerName} ${argsString}`;
137
+ return [
138
+ ...allowFailureInScripts([
139
+ `${gcloudSchedulerCmd()} jobs create ${commonArgs}`,
140
+ ]),
141
+ `${gcloudSchedulerCmd()} jobs update ${commonArgs}`,
142
+ ];
143
+ })
144
+ .flat();
145
+ };
146
+
147
+ const getCloudRunJobsWithSchedule = (context: Context) => {
148
+ const jobsWithNames = getCloudRunJobsWithNames(context);
149
+
150
+ return jobsWithNames
151
+ .filter(
152
+ (
153
+ entry
154
+ ): entry is {
155
+ jobName: string;
156
+ job: DeployConfigCloudRunJobWithSchedule;
157
+ } => entry.job.when === "schedule"
158
+ )
159
+ .map(({ job, jobName }) => ({
160
+ job,
161
+ jobName,
162
+ schedulerName: jobName + "-scheduler",
163
+ }));
164
+ };
165
+
166
+ const getCloudRunJobsWithNames = (context: Context) => {
167
+ const deployConfig = getCloudRunDeployConfig(context);
168
+
169
+ const getFullJobName = (name: string) =>
170
+ getCloudRunJobName(context.environment.fullName, name);
171
+
172
+ const jobsWithNames = Object.entries(deployConfig.jobs ?? {})
173
+ // filter out disabled jobs
174
+ .filter((entry): entry is [string, DeployConfigCloudRunJob] =>
175
+ Boolean(entry[1])
176
+ )
177
+ .map(([name, job]) => ({
178
+ jobName: getFullJobName(name),
179
+ job,
180
+ }));
181
+ return jobsWithNames;
182
+ };
@@ -0,0 +1,74 @@
1
+ import { getLabels } from "../../../context/getLabels";
2
+ import type { Context } from "../../../types/context";
3
+
4
+ import type { DeployConfigCloudRunService } from "../../types/googleCloudRun";
5
+ import { createArgsString } from "../utils/createArgsString";
6
+ import { getServiceName } from "../utils/getServiceName";
7
+ import {
8
+ gcloudRunCmd,
9
+ getCommonCloudRunArgs,
10
+ getCommonDeployArgs,
11
+ makeLabelString,
12
+ } from "./common";
13
+
14
+ export const getServiceDeployScript = (
15
+ context: Context,
16
+ service: DeployConfigCloudRunService | true | undefined,
17
+ nameSuffix?: string
18
+ ) => {
19
+ const commonDeployArgs = getCommonDeployArgs(context);
20
+
21
+ const serviceName = getServiceName(context);
22
+
23
+ const customConfig = service !== true ? service : undefined;
24
+ const command =
25
+ service !== true
26
+ ? service?.command ?? context.componentConfig.build.startCommand
27
+ : undefined;
28
+
29
+ const commandArray = command
30
+ ? Array.isArray(command)
31
+ ? command
32
+ : command.split(" ")
33
+ : undefined;
34
+ const fullServiceName = `${serviceName}${nameSuffix ?? ""}`;
35
+ const argsString = createArgsString({
36
+ // command as empty string resets it to default (uses the image's entrypoint)
37
+ command: commandArray ? '"' + commandArray.join(",") + '"' : '""',
38
+ ...commonDeployArgs,
39
+ labels: makeLabelString({
40
+ ...getLabels(context),
41
+ "cloud-run-service-name": fullServiceName,
42
+ }),
43
+ "env-vars-file": "____envvars.yaml",
44
+ "min-instances": customConfig?.minInstances ?? 0,
45
+ "max-instances": customConfig?.maxInstances ?? 100,
46
+ "cpu-throttling": customConfig?.noCpuThrottling !== true,
47
+ memory: customConfig?.memory,
48
+ "allow-unauthenticated": customConfig?.allowUnauthenticated ?? true,
49
+ ingress: customConfig?.ingress ?? "all",
50
+ "cpu-boost": true,
51
+ "execution-environment": customConfig?.executionEnvironment,
52
+ });
53
+
54
+ return `${gcloudRunCmd()} deploy ${fullServiceName} ${argsString}`;
55
+ };
56
+
57
+ export const getServiceDeleteScript = (
58
+ context: Context,
59
+ serviceSuffix?: string
60
+ ) => {
61
+ const commonArgs = getCommonCloudRunArgs(context);
62
+
63
+ const commonArgsString = createArgsString(commonArgs);
64
+
65
+ const serviceName = getServiceName(context);
66
+
67
+ const fullServiceName = serviceSuffix
68
+ ? `${serviceName}-${serviceSuffix}`
69
+ : serviceName;
70
+
71
+ return [
72
+ `${gcloudRunCmd()} services delete ${fullServiceName} ${commonArgsString}`,
73
+ ];
74
+ };
@@ -0,0 +1,59 @@
1
+ import type { Context } from "../../../types/context";
2
+
3
+ import { isOfDeployType } from "../../types";
4
+ import type { DeployConfigCloudRun } from "../../types/googleCloudRun";
5
+ import { getArtifactsRegistryImage } from "../artifactsRegistry";
6
+
7
+ export const gcloudCmd = (version?: "beta") => {
8
+ return version ? `gcloud ${version}` : "gcloud";
9
+ };
10
+ export const gcloudRunCmd = (version?: "beta") => {
11
+ return `${gcloudCmd(version)} run`;
12
+ };
13
+
14
+ export const gcloudSchedulerCmd = (version?: "beta") => {
15
+ return `${gcloudCmd(version)} scheduler`;
16
+ };
17
+
18
+ export const setGoogleProjectNumberScript = (
19
+ deployConfig: DeployConfigCloudRun
20
+ ) => [
21
+ `export GCLOUD_PROJECT_NUMBER=$(${gcloudCmd()} projects describe ${
22
+ deployConfig.projectId
23
+ } --format="value(projectNumber)")`,
24
+ `echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"`,
25
+ ];
26
+
27
+ export const makeLabelString = (obj: Record<string, unknown>) =>
28
+ Object.entries(obj)
29
+ .map(([key, value]) => `${key}=${value}`)
30
+ .join(",");
31
+
32
+ export const getCloudRunDeployConfig = (context: Context) => {
33
+ const deployConfig = context.componentConfig.deploy;
34
+ if (!isOfDeployType(deployConfig, "google-cloudrun")) {
35
+ // should not happen
36
+ throw new Error("deploy config is wrong");
37
+ }
38
+ return deployConfig;
39
+ };
40
+
41
+ export function getCommonCloudRunArgs(context: Context) {
42
+ const deployConfig = getCloudRunDeployConfig(context);
43
+ return {
44
+ project: deployConfig.projectId,
45
+ region: deployConfig.region,
46
+ };
47
+ }
48
+
49
+ export function getCommonDeployArgs(context: Context) {
50
+ const commonArgs = getCommonCloudRunArgs(context);
51
+ const deployConfig = getCloudRunDeployConfig(context);
52
+ return {
53
+ image: getArtifactsRegistryImage(context),
54
+ ...commonArgs,
55
+ "set-cloudsql-instances": deployConfig.cloudSql
56
+ ? deployConfig.cloudSql.instanceConnectionName
57
+ : undefined,
58
+ };
59
+ }
@@ -0,0 +1,58 @@
1
+ import type { Context } from "../../../types/context";
2
+ import { collapseableSection } from "../../../utils/gitlab";
3
+ import { getDependencyTrackUploadScript } from "../../sbom";
4
+
5
+ import { getRemoveOldRevisionsAndImagesCommand } from "../cleanup";
6
+ import { getDatabaseCreateScript } from "../utils/database";
7
+ import { gcloudServiceAccountLoginCommands } from "../utils/gcloudServiceAccountLoginCommands";
8
+ import {
9
+ getCreateScheduleScripts,
10
+ getJobCreateScripts,
11
+ getJobRunScripts,
12
+ } from "./cloudRunJobs";
13
+ import { getServiceDeployScript } from "./cloudRunServices";
14
+ import {
15
+ getCloudRunDeployConfig,
16
+ setGoogleProjectNumberScript,
17
+ } from "./common";
18
+
19
+ export function getCloudRunDeployScripts(context: Context) {
20
+ const deployConfig = getCloudRunDeployConfig(context);
21
+ return [
22
+ ...collapseableSection(
23
+ "prepare",
24
+ "Prepare..."
25
+ )([
26
+ ...gcloudServiceAccountLoginCommands(context),
27
+ ...setGoogleProjectNumberScript(deployConfig),
28
+ ]),
29
+ ...collapseableSection(
30
+ "deploy",
31
+ "Deploy to cloud run"
32
+ )([
33
+ `echo "$ENV_VARS" > ____envvars.yaml`, // TODO: split secrets out
34
+ ...(deployConfig.cloudSql
35
+ ? getDatabaseCreateScript(context, deployConfig) // we create the db, so that we can also delete it afterwards
36
+ : []),
37
+ ...getCreateScheduleScripts(context),
38
+ ...getJobCreateScripts(context),
39
+ ...getJobRunScripts(context, "preDeploy"),
40
+
41
+ ...(deployConfig.service !== false
42
+ ? [getServiceDeployScript(context, deployConfig.service)]
43
+ : []),
44
+ ...Object.entries(deployConfig.additionalServices ?? {}).map(
45
+ ([name, service]) =>
46
+ getServiceDeployScript(context, service, "-" + name)
47
+ ),
48
+ ...getJobRunScripts(context, "postDeploy"),
49
+ ]),
50
+ ...collapseableSection(
51
+ "cleanup",
52
+ "Cleanup"
53
+ )(
54
+ getRemoveOldRevisionsAndImagesCommand(context, "postDeploy") // we cleanup inactive images both on deploy and stop
55
+ ),
56
+ ...getDependencyTrackUploadScript(context),
57
+ ];
58
+ }
@@ -0,0 +1,34 @@
1
+ import type { Context } from "../../../types/context";
2
+ import { getDependencyTrackDeleteScript } from "../../sbom";
3
+
4
+ import { getRemoveOldRevisionsAndImagesCommand } from "../cleanup";
5
+ import { getDatabaseDeleteScript } from "../utils/database";
6
+ import { gcloudServiceAccountLoginCommands } from "../utils/gcloudServiceAccountLoginCommands";
7
+ import {
8
+ getDeleteJobsScripts,
9
+ getDeleteSchedulesScripts,
10
+ getJobRunScripts,
11
+ } from "./cloudRunJobs";
12
+ import { getServiceDeleteScript } from "./cloudRunServices";
13
+ import { getCloudRunDeployConfig } from "./common";
14
+
15
+ export function getCloudRunStopScripts(context: Context) {
16
+ const deployConfig = getCloudRunDeployConfig(context);
17
+ return [
18
+ ...gcloudServiceAccountLoginCommands(context),
19
+ ...getJobRunScripts(context, "preStop"),
20
+ ...(deployConfig.service !== false ? getServiceDeleteScript(context) : []),
21
+ ...Object.entries(deployConfig.additionalServices ?? {}).flatMap(([name]) =>
22
+ getServiceDeleteScript(context, name)
23
+ ),
24
+ ...getJobRunScripts(context, "postStop"),
25
+ ...getDeleteSchedulesScripts(context),
26
+ ...getDeleteJobsScripts(context),
27
+ ...(deployConfig.cloudSql && deployConfig.cloudSql.deleteDatabaseOnStop
28
+ ? getDatabaseDeleteScript(context, deployConfig)
29
+ : []),
30
+
31
+ ...getRemoveOldRevisionsAndImagesCommand(context, "onStop"), // we cleanup inactive images both on deploy and stop
32
+ ...getDependencyTrackDeleteScript(context),
33
+ ];
34
+ }