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