@catladder/pipeline 3.35.0 → 3.36.1

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 (61) hide show
  1. package/dist/constants.js +1 -1
  2. package/dist/deploy/base/deploy.js +7 -4
  3. package/dist/deploy/base/stop.js +0 -5
  4. package/dist/tsconfig.tsbuildinfo +1 -1
  5. package/examples/__snapshots__/automatic-releases.test.ts.snap +0 -8
  6. package/examples/__snapshots__/cloud-run-execute-script-on-deploy.test.ts.snap +0 -8
  7. package/examples/__snapshots__/cloud-run-existing-image.test.ts.snap +657 -0
  8. package/examples/__snapshots__/cloud-run-health-check-defaults.test.ts.snap +0 -8
  9. package/examples/__snapshots__/cloud-run-health-check-only-startup.test.ts.snap +0 -8
  10. package/examples/__snapshots__/cloud-run-health-check.test.ts.snap +0 -8
  11. package/examples/__snapshots__/cloud-run-http2.test.ts.snap +0 -8
  12. package/examples/__snapshots__/cloud-run-llama.test.ts.snap +0 -8
  13. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +0 -8
  14. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +0 -8
  15. package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +0 -8
  16. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +0 -8
  17. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +0 -8
  18. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +0 -8
  19. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +0 -8
  20. package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +0 -8
  21. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +0 -8
  22. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +0 -8
  23. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +0 -8
  24. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +0 -8
  25. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +0 -8
  26. package/examples/__snapshots__/cloud-run-with-agents.test.ts.snap +0 -8
  27. package/examples/__snapshots__/cloud-run-with-gpu.test.ts.snap +0 -8
  28. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +0 -8
  29. package/examples/__snapshots__/cloud-run-with-sql-legacy-jobs.test.ts.snap +0 -8
  30. package/examples/__snapshots__/cloud-run-with-sql-multiple-dbs.test.ts.snap +0 -24
  31. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +0 -16
  32. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +0 -8
  33. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +0 -8
  34. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +0 -8
  35. package/examples/__snapshots__/custom-build-job.test.ts.snap +0 -8
  36. package/examples/__snapshots__/custom-deploy.test.ts.snap +0 -2
  37. package/examples/__snapshots__/custom-docker-file.test.ts.snap +0 -8
  38. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +0 -8
  39. package/examples/__snapshots__/custom-verify-job.test.ts.snap +0 -8
  40. package/examples/__snapshots__/git-submodule.test.ts.snap +0 -8
  41. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +0 -8
  42. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +0 -8
  43. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +0 -16
  44. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +0 -8
  45. package/examples/__snapshots__/local-dot-env.test.ts.snap +0 -8
  46. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +0 -8
  47. package/examples/__snapshots__/multiline-var.test.ts.snap +0 -24
  48. package/examples/__snapshots__/native-app.test.ts.snap +0 -8
  49. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +0 -8
  50. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +0 -8
  51. package/examples/__snapshots__/override-secrets.test.ts.snap +0 -8
  52. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +0 -8
  53. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +0 -8
  54. package/examples/__snapshots__/referencing-other-vars.test.ts.snap +0 -24
  55. package/examples/__snapshots__/workspace-api-www-turbo-cache.test.ts.snap +0 -16
  56. package/examples/__snapshots__/workspace-api-www.test.ts.snap +0 -16
  57. package/examples/cloud-run-existing-image.test.ts +12 -0
  58. package/examples/cloud-run-existing-image.ts +26 -0
  59. package/package.json +1 -1
  60. package/src/deploy/base/deploy.ts +37 -32
  61. package/src/deploy/base/stop.ts +0 -6
@@ -0,0 +1,657 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`matches snapshot for cloud-run-existing-image local pipeline YAML 1`] = `
4
+ "image: path/to/docker/jobs-default:the-version
5
+ stages:
6
+ - setup
7
+ - setup dev
8
+ - setup review
9
+ - setup stage
10
+ - setup prod
11
+ - test
12
+ - test dev
13
+ - test review
14
+ - test stage
15
+ - test prod
16
+ - build
17
+ - build dev
18
+ - build review
19
+ - build stage
20
+ - build prod
21
+ - deploy
22
+ - deploy dev
23
+ - deploy review
24
+ - deploy stage
25
+ - deploy prod
26
+ - verify
27
+ - verify dev
28
+ - verify review
29
+ - verify stage
30
+ - verify prod
31
+ - agents
32
+ - agents dev
33
+ - agents review
34
+ - agents stage
35
+ - agents prod
36
+ - rollback
37
+ - rollback dev
38
+ - rollback review
39
+ - rollback stage
40
+ - rollback prod
41
+ - stop
42
+ - stop dev
43
+ - stop review
44
+ - stop stage
45
+ - stop prod
46
+ - release
47
+ variables:
48
+ FF_USE_FASTZIP: 'true'
49
+ ARTIFACT_COMPRESSION_LEVEL: fast
50
+ CACHE_COMPRESSION_LEVEL: fast
51
+ TRANSFER_METER_FREQUENCY: 5s
52
+ GIT_DEPTH: '1'
53
+ workflow:
54
+ name: $PIPELINE_ICON $PIPELINE_NAME
55
+ rules:
56
+ - if: $CI_PIPELINE_SOURCE == "trigger"
57
+ variables:
58
+ PIPELINE_ICON: 🤖
59
+ PIPELINE_NAME: Thinking...
60
+ - if: $CI_MERGE_REQUEST_ID
61
+ variables:
62
+ PIPELINE_ICON: 🐱🔨
63
+ PIPELINE_NAME: mr$CI_MERGE_REQUEST_IID - $CI_MERGE_REQUEST_TITLE
64
+ - if: $CI_COMMIT_TAG
65
+ variables:
66
+ PIPELINE_ICON: 🐱📦
67
+ PIPELINE_NAME: Release $CI_COMMIT_TAG
68
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
69
+ variables:
70
+ PIPELINE_ICON: 🐱🔨
71
+ PIPELINE_NAME: Main - $CI_COMMIT_TITLE
72
+ - when: always
73
+ variables:
74
+ PIPELINE_ICON: 🐱❓
75
+ PIPELINE_NAME: Default
76
+ before_script:
77
+ - |-
78
+ function escapeForDotEnv () {
79
+ input="\${1:-$(cat)}"
80
+ input="\${input//$'\\n'/\\\\n}"
81
+ if [[ "$input" == *\\\\n* ]]; then
82
+ if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
83
+ printf "\\"%s\\"\\n" "$input"
84
+ elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
85
+ printf "\`%s\`\\n" "$input"
86
+ elif [[ "$input" == *\\"* ]]; then
87
+ printf "'%s'\\n" "$input"
88
+ else
89
+ printf "\\"%s\\"\\n" "$input"
90
+ fi
91
+ else
92
+ printf "%s\\n" "$input"
93
+ fi
94
+ }
95
+ - |-
96
+ function collapseable_section_start () {
97
+ local section_title="\${1}"
98
+ local section_description="\${2:-$section_title}"
99
+ echo -e "section_start:\`date +%s\`:\${section_title}[collapsed=true]\\r\\e[0K\${section_description}"
100
+ }
101
+ - |-
102
+ function collapseable_section_end () {
103
+ local section_title="\${1}"
104
+ echo -e "section_end:\`date +%s\`:\${section_title}\\r\\e[0K"
105
+ }
106
+ 'www 🚀 Deploy | dev ':
107
+ stage: deploy dev
108
+ image: path/to/docker/gcloud:the-version
109
+ variables:
110
+ KUBERNETES_CPU_REQUEST: '0.22'
111
+ KUBERNETES_MEMORY_REQUEST: 200Mi
112
+ KUBERNETES_MEMORY_LIMIT: 400Mi
113
+ script:
114
+ - collapseable_section_start "injectvars" "Injecting variables"
115
+ - export ENV_SHORT="dev"
116
+ - export APP_DIR="app"
117
+ - export ENV_TYPE="dev"
118
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
119
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
120
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
121
+ - export HOSTNAME="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
122
+ - export ROOT_URL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
123
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
124
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
125
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
126
+ - export DEPLOY_CLOUD_RUN_REGION="europe-west6"
127
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_dev_www_GCLOUD_DEPLOY_credentialsKey"
128
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix"
129
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
130
+ - export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
131
+ - export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www"
132
+ - export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"
133
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
134
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
135
+ - collapseable_section_end "injectvars"
136
+ - collapseable_section_start "prepare" "Prepare..."
137
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")
138
+ - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
139
+ - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
140
+ - collapseable_section_end "prepare"
141
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
142
+ - |
143
+ cat > ____envvars.yaml <<EOF
144
+ ENV_SHORT: |-
145
+ dev
146
+ APP_DIR: |-
147
+ app
148
+ ENV_TYPE: |-
149
+ dev
150
+ BUILD_INFO_BUILD_ID: |-
151
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
152
+ BUILD_INFO_BUILD_TIME: |-
153
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
154
+ BUILD_INFO_CURRENT_VERSION: |-
155
+ $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
156
+ HOSTNAME: |-
157
+ $(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
158
+ ROOT_URL: |-
159
+ $(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
160
+ HOSTNAME_INTERNAL: |-
161
+ $(printf %s "$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
162
+ ROOT_URL_INTERNAL: |-
163
+ $(printf %s "https://$(printf %s "pan-test-app-dev-www-$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
164
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
165
+ google-project-id
166
+ DEPLOY_CLOUD_RUN_REGION: |-
167
+ europe-west6
168
+ GCLOUD_RUN_canonicalHostSuffix: |-
169
+ $(printf %s "$CL_dev_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
170
+ _ALL_ENV_VAR_KEYS: |-
171
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
172
+
173
+ EOF
174
+ - collapseable_section_end "writeenvvars"
175
+ - collapseable_section_start "deploy" "Deploy to cloud run"
176
+ - gcloud run deploy pan-test-app-dev-www --command="" --image=gcr.io/google-project-id/my-image:latest --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=dev,env-name=dev,build-type=disabled,cloud-run-service-name=pan-test-app-dev-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
177
+ - collapseable_section_end "deploy"
178
+ - collapseable_section_start "cleanup" "Cleanup"
179
+ - set +e
180
+ - gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-dev-www --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
181
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www --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/dev/www@$version --quiet --delete-tags; done
182
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done
183
+ - set -e
184
+ - collapseable_section_end "cleanup"
185
+ - echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
186
+ environment:
187
+ name: dev/www
188
+ url: $CL_GITLAB_ENVIRONMENT_URL
189
+ on_stop: 'www 🛑 Stop ⚠️ | dev '
190
+ auto_stop_in: 4 weeks
191
+ artifacts:
192
+ reports:
193
+ dotenv: gitlab_environment.env
194
+ rules:
195
+ - when: never
196
+ if: $CI_PIPELINE_SOURCE == "trigger"
197
+ - when: on_success
198
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
199
+ needs: []
200
+ retry: &a1
201
+ max: 2
202
+ interruptible: true
203
+ allow_failure: false
204
+ 'www 🛑 Stop ⚠️ | dev ':
205
+ stage: stop dev
206
+ image: path/to/docker/gcloud:the-version
207
+ variables:
208
+ KUBERNETES_CPU_REQUEST: '0.22'
209
+ KUBERNETES_MEMORY_REQUEST: 200Mi
210
+ KUBERNETES_MEMORY_LIMIT: 400Mi
211
+ GIT_STRATEGY: none
212
+ script:
213
+ - collapseable_section_start "injectvars" "Injecting variables"
214
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
215
+ - collapseable_section_end "injectvars"
216
+ - set +e
217
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_www_GCLOUD_DEPLOY_credentialsKey")
218
+ - gcloud run services delete pan-test-app-dev-www --project=google-project-id --region=europe-west6
219
+ - gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/dev/www --quiet --delete-tags
220
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done
221
+ - set -e
222
+ environment:
223
+ name: dev/www
224
+ action: stop
225
+ rules:
226
+ - when: never
227
+ if: $CI_PIPELINE_SOURCE == "trigger"
228
+ - when: manual
229
+ if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_COMMIT_MESSAGE !~ /^chore\\(release\\).*/
230
+ needs: []
231
+ retry: *a1
232
+ interruptible: true
233
+ allow_failure: true
234
+ 'www 🚀 Deploy | review ':
235
+ stage: deploy review
236
+ image: path/to/docker/gcloud:the-version
237
+ variables:
238
+ KUBERNETES_CPU_REQUEST: '0.22'
239
+ KUBERNETES_MEMORY_REQUEST: 200Mi
240
+ KUBERNETES_MEMORY_LIMIT: 400Mi
241
+ script:
242
+ - collapseable_section_start "injectvars" "Injecting variables"
243
+ - export ENV_SHORT="review"
244
+ - export APP_DIR="app"
245
+ - export ENV_TYPE="review"
246
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
247
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
248
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
249
+ - export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
250
+ - export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
251
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
252
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
253
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
254
+ - export DEPLOY_CLOUD_RUN_REGION="europe-west6"
255
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_review_www_GCLOUD_DEPLOY_credentialsKey"
256
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_review_www_GCLOUD_RUN_canonicalHostSuffix"
257
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
258
+ - export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
259
+ - export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
260
+ - export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"
261
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
262
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
263
+ - collapseable_section_end "injectvars"
264
+ - collapseable_section_start "prepare" "Prepare..."
265
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")
266
+ - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
267
+ - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
268
+ - collapseable_section_end "prepare"
269
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
270
+ - |
271
+ cat > ____envvars.yaml <<EOF
272
+ ENV_SHORT: |-
273
+ review
274
+ APP_DIR: |-
275
+ app
276
+ ENV_TYPE: |-
277
+ review
278
+ BUILD_INFO_BUILD_ID: |-
279
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
280
+ BUILD_INFO_BUILD_TIME: |-
281
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
282
+ BUILD_INFO_CURRENT_VERSION: |-
283
+ $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
284
+ HOSTNAME: |-
285
+ $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
286
+ ROOT_URL: |-
287
+ $(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
288
+ HOSTNAME_INTERNAL: |-
289
+ $(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
290
+ ROOT_URL_INTERNAL: |-
291
+ $(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www-$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
292
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
293
+ google-project-id
294
+ DEPLOY_CLOUD_RUN_REGION: |-
295
+ europe-west6
296
+ GCLOUD_RUN_canonicalHostSuffix: |-
297
+ $(printf %s "$CL_review_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
298
+ _ALL_ENV_VAR_KEYS: |-
299
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
300
+
301
+ EOF
302
+ - collapseable_section_end "writeenvvars"
303
+ - collapseable_section_start "deploy" "Deploy to cloud run"
304
+ - gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --command="" --image=gcr.io/google-project-id/my-image:latest --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=review,env-name=review,build-type=disabled,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
305
+ - collapseable_section_end "deploy"
306
+ - collapseable_section_start "cleanup" "Cleanup"
307
+ - set +e
308
+ - gcloud run revisions list --project=google-project-id --region=europe-west6 --service=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --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
309
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --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/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })@$version --quiet --delete-tags; done
310
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done
311
+ - set +e
312
+ - gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www --quiet --delete-tags
313
+ - set -e
314
+ - set -e
315
+ - collapseable_section_end "cleanup"
316
+ - echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
317
+ environment:
318
+ name: review/$CI_COMMIT_REF_NAME/www
319
+ url: $CL_GITLAB_ENVIRONMENT_URL
320
+ on_stop: 'www 🛑 Stop ⚠️ | review '
321
+ auto_stop_in: 1 week
322
+ artifacts:
323
+ reports:
324
+ dotenv: gitlab_environment.env
325
+ rules:
326
+ - when: never
327
+ if: $CI_PIPELINE_SOURCE == "trigger"
328
+ - when: on_success
329
+ if: $CI_MERGE_REQUEST_ID
330
+ needs: []
331
+ retry: *a1
332
+ interruptible: true
333
+ allow_failure: false
334
+ 'www 🛑 Stop ⚠️ | review ':
335
+ stage: stop review
336
+ image: path/to/docker/gcloud:the-version
337
+ variables:
338
+ KUBERNETES_CPU_REQUEST: '0.22'
339
+ KUBERNETES_MEMORY_REQUEST: 200Mi
340
+ KUBERNETES_MEMORY_LIMIT: 400Mi
341
+ GIT_STRATEGY: none
342
+ script:
343
+ - collapseable_section_start "injectvars" "Injecting variables"
344
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
345
+ - collapseable_section_end "injectvars"
346
+ - set +e
347
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_review_www_GCLOUD_DEPLOY_credentialsKey")
348
+ - gcloud run services delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-www" | awk '{print tolower($0)}') --project=google-project-id --region=europe-west6
349
+ - gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --quiet --delete-tags
350
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done
351
+ - set +e
352
+ - gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/review/www --quiet --delete-tags
353
+ - set -e
354
+ - set -e
355
+ environment:
356
+ name: review/$CI_COMMIT_REF_NAME/www
357
+ action: stop
358
+ rules:
359
+ - when: never
360
+ if: $CI_PIPELINE_SOURCE == "trigger"
361
+ - when: manual
362
+ if: $CI_MERGE_REQUEST_ID
363
+ needs: []
364
+ retry: *a1
365
+ interruptible: true
366
+ allow_failure: true
367
+ 'www 🚀 Deploy | stage ':
368
+ stage: deploy stage
369
+ image: path/to/docker/gcloud:the-version
370
+ variables:
371
+ KUBERNETES_CPU_REQUEST: '0.22'
372
+ KUBERNETES_MEMORY_REQUEST: 200Mi
373
+ KUBERNETES_MEMORY_LIMIT: 400Mi
374
+ script:
375
+ - collapseable_section_start "injectvars" "Injecting variables"
376
+ - export ENV_SHORT="stage"
377
+ - export APP_DIR="app"
378
+ - export ENV_TYPE="stage"
379
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
380
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
381
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
382
+ - export HOSTNAME="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
383
+ - export ROOT_URL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
384
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
385
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
386
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
387
+ - export DEPLOY_CLOUD_RUN_REGION="europe-west6"
388
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_stage_www_GCLOUD_DEPLOY_credentialsKey"
389
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix"
390
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
391
+ - export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
392
+ - export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www"
393
+ - export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"
394
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
395
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
396
+ - collapseable_section_end "injectvars"
397
+ - collapseable_section_start "prepare" "Prepare..."
398
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")
399
+ - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
400
+ - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
401
+ - collapseable_section_end "prepare"
402
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
403
+ - |
404
+ cat > ____envvars.yaml <<EOF
405
+ ENV_SHORT: |-
406
+ stage
407
+ APP_DIR: |-
408
+ app
409
+ ENV_TYPE: |-
410
+ stage
411
+ BUILD_INFO_BUILD_ID: |-
412
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
413
+ BUILD_INFO_BUILD_TIME: |-
414
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
415
+ BUILD_INFO_CURRENT_VERSION: |-
416
+ $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
417
+ HOSTNAME: |-
418
+ $(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
419
+ ROOT_URL: |-
420
+ $(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
421
+ HOSTNAME_INTERNAL: |-
422
+ $(printf %s "$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
423
+ ROOT_URL_INTERNAL: |-
424
+ $(printf %s "https://$(printf %s "pan-test-app-stage-www-$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
425
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
426
+ google-project-id
427
+ DEPLOY_CLOUD_RUN_REGION: |-
428
+ europe-west6
429
+ GCLOUD_RUN_canonicalHostSuffix: |-
430
+ $(printf %s "$CL_stage_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
431
+ _ALL_ENV_VAR_KEYS: |-
432
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
433
+
434
+ EOF
435
+ - collapseable_section_end "writeenvvars"
436
+ - collapseable_section_start "deploy" "Deploy to cloud run"
437
+ - gcloud run deploy pan-test-app-stage-www --command="" --image=gcr.io/google-project-id/my-image:latest --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=stage,env-name=stage,build-type=disabled,cloud-run-service-name=pan-test-app-stage-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
438
+ - collapseable_section_end "deploy"
439
+ - collapseable_section_start "cleanup" "Cleanup"
440
+ - set +e
441
+ - gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-stage-www --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
442
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www --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/stage/www@$version --quiet --delete-tags; done
443
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done
444
+ - set -e
445
+ - collapseable_section_end "cleanup"
446
+ - echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
447
+ environment:
448
+ name: stage/www
449
+ url: $CL_GITLAB_ENVIRONMENT_URL
450
+ on_stop: 'www 🛑 Stop ⚠️ | stage '
451
+ artifacts:
452
+ reports:
453
+ dotenv: gitlab_environment.env
454
+ rules:
455
+ - when: never
456
+ if: $CI_PIPELINE_SOURCE == "trigger"
457
+ - when: on_success
458
+ if: $CI_COMMIT_TAG
459
+ needs: []
460
+ retry: *a1
461
+ interruptible: true
462
+ allow_failure: false
463
+ 'www 🛑 Stop ⚠️ | stage ':
464
+ stage: stop stage
465
+ image: path/to/docker/gcloud:the-version
466
+ variables:
467
+ KUBERNETES_CPU_REQUEST: '0.22'
468
+ KUBERNETES_MEMORY_REQUEST: 200Mi
469
+ KUBERNETES_MEMORY_LIMIT: 400Mi
470
+ GIT_STRATEGY: none
471
+ script:
472
+ - collapseable_section_start "injectvars" "Injecting variables"
473
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
474
+ - collapseable_section_end "injectvars"
475
+ - set +e
476
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_www_GCLOUD_DEPLOY_credentialsKey")
477
+ - gcloud run services delete pan-test-app-stage-www --project=google-project-id --region=europe-west6
478
+ - gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/stage/www --quiet --delete-tags
479
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done
480
+ - set -e
481
+ environment:
482
+ name: stage/www
483
+ action: stop
484
+ rules:
485
+ - when: never
486
+ if: $CI_PIPELINE_SOURCE == "trigger"
487
+ - when: manual
488
+ if: $CI_COMMIT_TAG
489
+ needs: []
490
+ retry: *a1
491
+ interruptible: true
492
+ allow_failure: true
493
+ 'www 🚀 Deploy | prod ':
494
+ stage: deploy prod
495
+ image: path/to/docker/gcloud:the-version
496
+ variables:
497
+ KUBERNETES_CPU_REQUEST: '0.22'
498
+ KUBERNETES_MEMORY_REQUEST: 200Mi
499
+ KUBERNETES_MEMORY_LIMIT: 400Mi
500
+ script:
501
+ - collapseable_section_start "injectvars" "Injecting variables"
502
+ - export ENV_SHORT="prod"
503
+ - export APP_DIR="app"
504
+ - export ENV_TYPE="prod"
505
+ - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
506
+ - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
507
+ - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
508
+ - export HOSTNAME="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
509
+ - export ROOT_URL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
510
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
511
+ - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
512
+ - export DEPLOY_CLOUD_RUN_PROJECT_ID="google-project-id"
513
+ - export DEPLOY_CLOUD_RUN_REGION="europe-west6"
514
+ - export GCLOUD_DEPLOY_credentialsKey="$CL_prod_www_GCLOUD_DEPLOY_credentialsKey"
515
+ - export GCLOUD_RUN_canonicalHostSuffix="$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix"
516
+ - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\"]"
517
+ - export DOCKER_REGISTRY="europe-west6-docker.pkg.dev"
518
+ - export DOCKER_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www"
519
+ - export DOCKER_CACHE_IMAGE="europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www"
520
+ - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
521
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
522
+ - collapseable_section_end "injectvars"
523
+ - collapseable_section_start "prepare" "Prepare..."
524
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")
525
+ - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe google-project-id --format="value(projectNumber)")
526
+ - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
527
+ - collapseable_section_end "prepare"
528
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
529
+ - |
530
+ cat > ____envvars.yaml <<EOF
531
+ ENV_SHORT: |-
532
+ prod
533
+ APP_DIR: |-
534
+ app
535
+ ENV_TYPE: |-
536
+ prod
537
+ BUILD_INFO_BUILD_ID: |-
538
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
539
+ BUILD_INFO_BUILD_TIME: |-
540
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
541
+ BUILD_INFO_CURRENT_VERSION: |-
542
+ $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed '1!s/^/ /')
543
+ HOSTNAME: |-
544
+ $(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
545
+ ROOT_URL: |-
546
+ $(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
547
+ HOSTNAME_INTERNAL: |-
548
+ $(printf %s "$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
549
+ ROOT_URL_INTERNAL: |-
550
+ $(printf %s "https://$(printf %s "pan-test-app-prod-www-$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
551
+ DEPLOY_CLOUD_RUN_PROJECT_ID: |-
552
+ google-project-id
553
+ DEPLOY_CLOUD_RUN_REGION: |-
554
+ europe-west6
555
+ GCLOUD_RUN_canonicalHostSuffix: |-
556
+ $(printf %s "$CL_prod_www_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
557
+ _ALL_ENV_VAR_KEYS: |-
558
+ ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix"]
559
+
560
+ EOF
561
+ - collapseable_section_end "writeenvvars"
562
+ - collapseable_section_start "deploy" "Deploy to cloud run"
563
+ - gcloud run deploy pan-test-app-prod-www --command="" --image=gcr.io/google-project-id/my-image:latest --project=google-project-id --region=europe-west6 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=prod,env-name=prod,build-type=disabled,cloud-run-service-name=pan-test-app-prod-www --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
564
+ - collapseable_section_end "deploy"
565
+ - collapseable_section_start "cleanup" "Cleanup"
566
+ - set +e
567
+ - gcloud run revisions list --project=google-project-id --region=europe-west6 --service=pan-test-app-prod-www --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
568
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www@$version --quiet --delete-tags; done
569
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done
570
+ - set -e
571
+ - collapseable_section_end "cleanup"
572
+ - echo "CL_GITLAB_ENVIRONMENT_URL=$ROOT_URL" >> gitlab_environment.env
573
+ environment:
574
+ name: prod/www
575
+ url: $CL_GITLAB_ENVIRONMENT_URL
576
+ on_stop: 'www 🛑 Stop ⚠️ | prod '
577
+ artifacts:
578
+ reports:
579
+ dotenv: gitlab_environment.env
580
+ rules:
581
+ - when: never
582
+ if: $CI_PIPELINE_SOURCE == "trigger"
583
+ - when: manual
584
+ if: $CI_COMMIT_TAG
585
+ needs: []
586
+ retry: *a1
587
+ interruptible: true
588
+ allow_failure: true
589
+ 'www 🛑 Stop ⚠️ | prod ':
590
+ stage: stop prod
591
+ image: path/to/docker/gcloud:the-version
592
+ variables:
593
+ KUBERNETES_CPU_REQUEST: '0.22'
594
+ KUBERNETES_MEMORY_REQUEST: 200Mi
595
+ KUBERNETES_MEMORY_LIMIT: 400Mi
596
+ GIT_STRATEGY: none
597
+ script:
598
+ - collapseable_section_start "injectvars" "Injecting variables"
599
+ - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
600
+ - collapseable_section_end "injectvars"
601
+ - set +e
602
+ - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_www_GCLOUD_DEPLOY_credentialsKey")
603
+ - gcloud run services delete pan-test-app-prod-www --project=google-project-id --region=europe-west6
604
+ - gcloud artifacts docker images delete europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/prod/www --quiet --delete-tags
605
+ - gcloud artifacts docker images list europe-west6-docker.pkg.dev/google-project-id/catladder-deploy/pan-test-app/caches/www --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/www@$version --quiet --delete-tags; done
606
+ - set -e
607
+ environment:
608
+ name: prod/www
609
+ action: stop
610
+ rules:
611
+ - when: never
612
+ if: $CI_PIPELINE_SOURCE == "trigger"
613
+ - when: manual
614
+ if: $CI_COMMIT_TAG
615
+ needs: []
616
+ retry: *a1
617
+ interruptible: true
618
+ allow_failure: true
619
+ create release:
620
+ stage: release
621
+ image: path/to/docker/semantic-release:the-version
622
+ script:
623
+ - semanticRelease
624
+ after_script:
625
+ - echo '👉 If this job failed with access denied, the project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
626
+ rules:
627
+ - &a2
628
+ if: $CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/
629
+ when: never
630
+ - &a3
631
+ if: $CI_PIPELINE_SOURCE == "trigger"
632
+ when: never
633
+ - &a4
634
+ if: $CI_PIPELINE_SOURCE == "schedule"
635
+ when: never
636
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
637
+ when: manual
638
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
639
+ when: manual
640
+ ⚠️ force create release:
641
+ stage: release
642
+ image: path/to/docker/semantic-release:the-version
643
+ script:
644
+ - semanticRelease
645
+ after_script:
646
+ - echo '👉 If this job failed with access denied, the project access token might be invald - run \`project-renew-token\` in catladder CLI to fix.'
647
+ rules:
648
+ - *a2
649
+ - *a3
650
+ - *a4
651
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
652
+ when: manual
653
+ - if: $CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/
654
+ when: manual
655
+ needs: []
656
+ "
657
+ `;