@catladder/pipeline 1.170.1 → 2.0.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 (192) hide show
  1. package/dist/bash/BashExpression.d.ts +1 -6
  2. package/dist/bash/BashExpression.js +2 -15
  3. package/dist/bash/bashEscape.d.ts +34 -0
  4. package/dist/bash/bashEscape.js +114 -0
  5. package/dist/bash/bashYaml.js +25 -2
  6. package/dist/bash/getInjectVarsScript.js +4 -2
  7. package/dist/bash/index.d.ts +2 -0
  8. package/dist/bash/index.js +26 -0
  9. package/dist/build/base/createAppBuildJob.js +3 -3
  10. package/dist/build/base/writeDotEnv.js +6 -4
  11. package/dist/build/custom/testJob.js +12 -12
  12. package/dist/build/docker.d.ts +3 -3
  13. package/dist/build/node/buildJob.js +1 -1
  14. package/dist/build/node/cache.d.ts +2 -4
  15. package/dist/build/node/cache.js +3 -24
  16. package/dist/build/node/testJob.js +11 -11
  17. package/dist/build/rails/build.js +1 -1
  18. package/dist/build/rails/test.js +8 -8
  19. package/dist/build/types.d.ts +0 -10
  20. package/dist/constants.js +1 -1
  21. package/dist/context/createComponentContext.js +0 -1
  22. package/dist/context/getEnvConfig.js +2 -1
  23. package/dist/context/getEnvironment.js +1 -2
  24. package/dist/context/getEnvironmentVariables.d.ts +5 -6
  25. package/dist/context/getEnvironmentVariables.js +50 -38
  26. package/dist/deploy/base/deploy.js +3 -3
  27. package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +2 -2
  28. package/dist/deploy/cloudRun/index.js +2 -2
  29. package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
  30. package/dist/deploy/kubernetes/cloudSql/index.d.ts +2 -2
  31. package/dist/deploy/kubernetes/cloudSql/index.js +3 -14
  32. package/dist/deploy/kubernetes/deployJob.js +1 -3
  33. package/dist/deploy/kubernetes/index.js +2 -2
  34. package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -3
  35. package/dist/deploy/kubernetes/kubeValues.d.ts +3 -4
  36. package/dist/deploy/kubernetes/kubeValues.js +2 -3
  37. package/dist/deploy/types/base.d.ts +0 -6
  38. package/dist/deploy/types/kubernetes.d.ts +1 -34
  39. package/dist/globalScriptFunctions/index.d.ts +14 -0
  40. package/dist/globalScriptFunctions/index.js +37 -0
  41. package/dist/index.d.ts +3 -1
  42. package/dist/index.js +3 -1
  43. package/dist/pipeline/gitlab/createGitlabJobs.js +3 -5
  44. package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +1 -0
  45. package/dist/pipeline/gitlab/createGitlabPipeline.js +38 -2
  46. package/dist/pipeline/packageManager.js +1 -1
  47. package/dist/runner/index.d.ts +1 -1
  48. package/dist/tsconfig.tsbuildinfo +1 -1
  49. package/dist/types/config.d.ts +6 -9
  50. package/dist/types/context.d.ts +2 -9
  51. package/dist/types/gitlab-types.d.ts +1 -0
  52. package/dist/types/jobs.d.ts +0 -8
  53. package/dist/utils/gitlab.js +4 -1
  54. package/dist/utils/writeFiles.js +1 -7
  55. package/dist/variables/VariableValue.d.ts +3 -0
  56. package/dist/variables/VariableValue.js +5 -0
  57. package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
  58. package/dist/variables/VariableValueContainingReferences.js +97 -0
  59. package/dist/variables/__tests__/resolveAllReferences.test.js +219 -0
  60. package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
  61. package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
  62. package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
  63. package/dist/variables/__tests__/resolveReferencesOnce.test.js +202 -0
  64. package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
  65. package/dist/variables/__tests__/variableValue.test.js +36 -0
  66. package/dist/variables/resolveAllReferences.d.ts +3 -0
  67. package/dist/{bash/replaceAsync.js → variables/resolveAllReferences.js} +60 -40
  68. package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
  69. package/dist/variables/resolveAllReferencesOnce.js +191 -0
  70. package/dist/variables/resolveReferencesOnce.d.ts +8 -0
  71. package/dist/variables/resolveReferencesOnce.js +22 -0
  72. package/examples/__snapshots__/cloud-run-http2.test.ts.snap +312 -238
  73. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +312 -238
  74. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +312 -222
  75. package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1436 -0
  76. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +312 -238
  77. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +316 -238
  78. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +312 -238
  79. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +313 -238
  80. package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +312 -238
  81. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +312 -238
  82. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +312 -238
  83. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +312 -238
  84. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +316 -238
  85. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +294 -220
  86. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +312 -238
  87. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +652 -486
  88. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +282 -288
  89. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +312 -238
  90. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +284 -194
  91. package/examples/__snapshots__/custom-build-job.test.ts.snap +278 -188
  92. package/examples/__snapshots__/custom-deploy.test.ts.snap +220 -154
  93. package/examples/__snapshots__/custom-envs.test.ts.snap +216 -126
  94. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +278 -188
  95. package/examples/__snapshots__/git-submodule.test.ts.snap +312 -238
  96. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +231 -253
  97. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +240 -262
  98. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +504 -506
  99. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +239 -261
  100. package/examples/__snapshots__/local-dot-env.test.ts.snap +236 -238
  101. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +236 -242
  102. package/examples/__snapshots__/multiline-var.test.ts.snap +1355 -973
  103. package/examples/__snapshots__/native-app.test.ts.snap +438 -392
  104. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +312 -238
  105. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +312 -238
  106. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +186 -188
  107. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +162 -164
  108. package/examples/__snapshots__/referencing-other-vars.test.ts.snap +971 -765
  109. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +330 -228
  110. package/examples/__snapshots__/{workspace-api-www-custom-cache.test.ts.snap → workspace-api-www-turbo-cache.test.ts.snap} +457 -499
  111. package/examples/__snapshots__/workspace-api-www.test.ts.snap +452 -482
  112. package/examples/{workspace-api-www-custom-cache.test.ts → cloud-run-nextjs.test.ts} +2 -2
  113. package/examples/cloud-run-nextjs.ts +28 -0
  114. package/examples/cloud-run-with-sql.ts +0 -1
  115. package/examples/kubernetes-application-customization.ts +1 -0
  116. package/examples/kubernetes-with-cloud-sql.ts +1 -0
  117. package/examples/kubernetes-with-jobs.ts +1 -0
  118. package/examples/kubernetes-with-mongodb.ts +1 -0
  119. package/examples/meteor-kubernetes.ts +1 -1
  120. package/examples/native-app.ts +10 -7
  121. package/examples/rails-k8s-with-worker.ts +7 -1
  122. package/examples/{kubernetes-with-cloud-sql-legacy.test.ts → workspace-api-www-turbo-cache.test.ts} +2 -2
  123. package/examples/{workspace-api-www-custom-cache.ts → workspace-api-www-turbo-cache.ts} +4 -3
  124. package/examples/workspace-api-www.ts +3 -2
  125. package/package.json +2 -6
  126. package/src/bash/BashExpression.ts +0 -13
  127. package/src/bash/bashEscape.ts +158 -0
  128. package/src/bash/bashYaml.ts +36 -2
  129. package/src/bash/getInjectVarsScript.ts +11 -2
  130. package/src/bash/index.ts +2 -0
  131. package/src/build/base/createAppBuildJob.ts +0 -1
  132. package/src/build/base/writeDotEnv.ts +6 -6
  133. package/src/build/custom/testJob.ts +0 -1
  134. package/src/build/node/buildJob.ts +2 -2
  135. package/src/build/node/cache.ts +0 -29
  136. package/src/build/node/testJob.ts +0 -1
  137. package/src/build/rails/build.ts +0 -1
  138. package/src/build/rails/test.ts +0 -1
  139. package/src/build/types.ts +0 -13
  140. package/src/context/createComponentContext.ts +0 -1
  141. package/src/context/getEnvConfig.ts +2 -2
  142. package/src/context/getEnvironment.ts +1 -1
  143. package/src/context/getEnvironmentContext.ts +1 -1
  144. package/src/context/getEnvironmentVariables.ts +44 -51
  145. package/src/deploy/base/deploy.ts +1 -1
  146. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +4 -12
  147. package/src/deploy/cloudRun/index.ts +2 -2
  148. package/src/deploy/kubernetes/cloudSql/index.ts +3 -16
  149. package/src/deploy/kubernetes/deployJob.ts +0 -2
  150. package/src/deploy/kubernetes/index.ts +2 -2
  151. package/src/deploy/kubernetes/kubeEnv.ts +3 -3
  152. package/src/deploy/kubernetes/kubeValues.ts +5 -8
  153. package/src/deploy/types/base.ts +0 -6
  154. package/src/deploy/types/kubernetes.ts +1 -36
  155. package/src/globalScriptFunctions/index.ts +30 -0
  156. package/src/index.ts +2 -0
  157. package/src/pipeline/gitlab/createGitlabJobs.ts +1 -4
  158. package/src/pipeline/gitlab/createGitlabPipeline.ts +8 -1
  159. package/src/pipeline/packageManager.ts +7 -5
  160. package/src/runner/index.ts +0 -1
  161. package/src/types/config.ts +6 -9
  162. package/src/types/context.ts +3 -9
  163. package/src/types/gitlab-types.ts +1 -0
  164. package/src/types/jobs.ts +0 -8
  165. package/src/utils/gitlab.ts +19 -2
  166. package/src/utils/writeFiles.ts +1 -2
  167. package/src/variables/VariableValue.ts +6 -0
  168. package/src/variables/VariableValueContainingReferences.ts +89 -0
  169. package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
  170. package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
  171. package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
  172. package/src/variables/__tests__/variableValue.test.ts +73 -0
  173. package/src/variables/resolveAllReferences.ts +46 -0
  174. package/src/variables/resolveAllReferencesOnce.ts +44 -0
  175. package/src/variables/resolveReferencesOnce.ts +29 -0
  176. package/bin/catladder-gitlab-dev.js +0 -3
  177. package/bin/catladder-gitlab.js +0 -3
  178. package/dist/bash/replaceAsync.d.ts +0 -2
  179. package/dist/bundles/catladder-gitlab/index.js +0 -15
  180. package/dist/context/__tests__/resolveReferences.test.js +0 -368
  181. package/dist/context/resolveReferences.d.ts +0 -6
  182. package/dist/context/resolveReferences.js +0 -286
  183. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -85
  184. package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -33
  185. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +0 -1795
  186. package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -35
  187. package/scripts/bundle +0 -2
  188. package/src/bash/replaceAsync.ts +0 -49
  189. package/src/context/__tests__/resolveReferences.test.ts +0 -148
  190. package/src/context/resolveReferences.ts +0 -93
  191. package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -35
  192. /package/dist/{context/__tests__/resolveReferences.test.d.ts → variables/__tests__/resolveAllReferences.test.d.ts} +0 -0
@@ -45,6 +45,36 @@ variables:
45
45
  CACHE_COMPRESSION_LEVEL: fast
46
46
  TRANSFER_METER_FREQUENCY: 5s
47
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
+ }
48
78
  app1 🛡 audit:
49
79
  stage: test
50
80
  image: path/to/docker/jobs-default:the-version
@@ -53,9 +83,9 @@ app1 🛡 audit:
53
83
  KUBERNETES_MEMORY_REQUEST: 1Gi
54
84
  KUBERNETES_MEMORY_LIMIT: 4Gi
55
85
  script:
56
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
86
+ - collapseable_section_start "injectvars" "Injecting variables"
57
87
  - export APP_PATH="app1"
58
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
88
+ - collapseable_section_end "injectvars"
59
89
  - cd app1
60
90
  - yarn npm audit --environment production
61
91
  rules:
@@ -79,21 +109,21 @@ app1 👮 lint:
79
109
  KUBERNETES_MEMORY_REQUEST: 1Gi
80
110
  KUBERNETES_MEMORY_LIMIT: 4Gi
81
111
  script:
82
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
112
+ - collapseable_section_start "injectvars" "Injecting variables"
83
113
  - export APP_PATH="app1"
84
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
85
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
114
+ - collapseable_section_end "injectvars"
115
+ - collapseable_section_start "nodeinstall" "Ensure node version"
86
116
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
87
117
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
88
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
118
+ - collapseable_section_end "nodeinstall"
89
119
  - cd app1
90
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
120
+ - collapseable_section_start "nodeinstall" "Ensure node version"
91
121
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
92
122
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
93
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
94
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
123
+ - collapseable_section_end "nodeinstall"
124
+ - collapseable_section_start "yarninstall" "Yarn install"
95
125
  - yarn install --immutable
96
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
126
+ - collapseable_section_end "yarninstall"
97
127
  - yarn lint
98
128
  cache:
99
129
  - key: app1-yarn
@@ -120,21 +150,21 @@ app1 🧪 test:
120
150
  KUBERNETES_MEMORY_REQUEST: 1Gi
121
151
  KUBERNETES_MEMORY_LIMIT: 4Gi
122
152
  script:
123
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
153
+ - collapseable_section_start "injectvars" "Injecting variables"
124
154
  - export APP_PATH="app1"
125
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
126
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
155
+ - collapseable_section_end "injectvars"
156
+ - collapseable_section_start "nodeinstall" "Ensure node version"
127
157
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
128
158
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
129
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
159
+ - collapseable_section_end "nodeinstall"
130
160
  - cd app1
131
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
161
+ - collapseable_section_start "nodeinstall" "Ensure node version"
132
162
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
133
163
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
134
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
135
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
164
+ - collapseable_section_end "nodeinstall"
165
+ - collapseable_section_start "yarninstall" "Yarn install"
136
166
  - yarn install --immutable
137
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
167
+ - collapseable_section_end "yarninstall"
138
168
  - yarn test
139
169
  cache:
140
170
  - key: app1-yarn
@@ -161,17 +191,16 @@ app1 🧪 test:
161
191
  KUBERNETES_MEMORY_REQUEST: 1Gi
162
192
  KUBERNETES_MEMORY_LIMIT: 4Gi
163
193
  script:
164
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
194
+ - collapseable_section_start "injectvars" "Injecting variables"
165
195
  - export ENV_SHORT="dev"
166
196
  - export APP_DIR="app1"
167
197
  - export ENV_TYPE="dev"
168
198
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
169
199
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
170
200
  - 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")"
171
- - export HOST="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
201
+ - export HOSTNAME="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
172
202
  - export ROOT_URL="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
173
- - export HOST_INTERNAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
174
- - export HOST_CANONICAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
203
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
175
204
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
176
205
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
177
206
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -189,21 +218,49 @@ app1 🧪 test:
189
218
  app1 single quote: '
190
219
  app1 doouble quote: \\"
191
220
  "
192
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
193
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
221
+ - 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\\",\\"foo\\",\\"multiline\\"]"
222
+ - collapseable_section_end "injectvars"
223
+ - collapseable_section_start "write-dotenv-app1" "write dot env for app1"
224
+ - |-
225
+ cat <<EOF > app1/.env
226
+ ENV_SHORT=dev
227
+ APP_DIR=app1
228
+ ENV_TYPE=dev
229
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
230
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
231
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
232
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
233
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
234
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
235
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_app1_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
236
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
237
+ foo=foo-value
238
+ multiline=$(printf %s "app1 line1
239
+ app1 line2
240
+ app1 line3
241
+
242
+ the url of self: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
243
+
244
+
245
+ app1 single quote: '
246
+ app1 doouble quote: \\"
247
+ " | escapeForDotEnv)
248
+ _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","foo","multiline"]
249
+ EOF
250
+ - collapseable_section_end "write-dotenv-app1"
194
251
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app1/__build_info.json
195
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
252
+ - collapseable_section_start "nodeinstall" "Ensure node version"
196
253
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
197
254
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
198
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
255
+ - collapseable_section_end "nodeinstall"
199
256
  - cd app1
200
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
257
+ - collapseable_section_start "nodeinstall" "Ensure node version"
201
258
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
202
259
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
203
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
204
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
260
+ - collapseable_section_end "nodeinstall"
261
+ - collapseable_section_start "yarninstall" "Yarn install"
205
262
  - yarn install --immutable
206
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
263
+ - collapseable_section_end "yarninstall"
207
264
  - yarn build
208
265
  cache:
209
266
  - key: app1-yarn
@@ -214,15 +271,13 @@ app1 🧪 test:
214
271
  policy: pull-push
215
272
  paths:
216
273
  - app1/node_modules
217
- - key: app1-next-cache
218
- policy: pull-push
219
- paths:
220
- - app1/.next/cache
221
274
  artifacts:
222
275
  paths:
223
276
  - app1/__build_info.json
224
277
  - app1/.next
225
278
  - app1/dist
279
+ exclude:
280
+ - app1/.env
226
281
  expire_in: 1 day
227
282
  when: always
228
283
  reports: {}
@@ -250,7 +305,7 @@ app1 🧪 test:
250
305
  KUBERNETES_MEMORY_REQUEST: 1Gi
251
306
  KUBERNETES_MEMORY_LIMIT: 2Gi
252
307
  script:
253
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
308
+ - collapseable_section_start "injectvars" "Injecting variables"
254
309
  - export APP_DIR="app1"
255
310
  - export DOCKER_BUILD_CONTEXT="."
256
311
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
@@ -266,20 +321,20 @@ app1 🧪 test:
266
321
  COPY --chown=node:node app1/yarn.lock /app/app1/yarn.lock
267
322
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
268
323
  COPY --chown=node:node .yarn /app/.yarn"
269
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
324
+ - collapseable_section_end "injectvars"
270
325
  - ensureNodeDockerfile
271
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
326
+ - collapseable_section_start "docker-login" "Docker Login"
272
327
  - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app1_GCLOUD_DEPLOY_credentialsKey")
273
328
  - gcloud auth configure-docker asia-east1-docker.pkg.dev
274
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
275
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
329
+ - collapseable_section_end "docker-login"
330
+ - collapseable_section_start "docker-build" "Docker build"
276
331
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
277
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
278
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
332
+ - collapseable_section_end "docker-build"
333
+ - collapseable_section_start "docker-push" "Docker push and tag"
279
334
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
280
335
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
281
336
  - docker push $DOCKER_CACHE_IMAGE
282
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
337
+ - collapseable_section_end "docker-push"
283
338
  cache:
284
339
  - key: app1-yarn
285
340
  policy: pull
@@ -298,8 +353,8 @@ app1 🧪 test:
298
353
  image: aquasec/trivy:0.38.3
299
354
  variables: {}
300
355
  script:
301
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
302
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
356
+ - collapseable_section_start "injectvars" "Injecting variables"
357
+ - collapseable_section_end "injectvars"
303
358
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" app1
304
359
  artifacts:
305
360
  paths:
@@ -320,17 +375,16 @@ app1 🧪 test:
320
375
  KUBERNETES_MEMORY_REQUEST: 200Mi
321
376
  KUBERNETES_MEMORY_LIMIT: 400Mi
322
377
  script:
323
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
378
+ - collapseable_section_start "injectvars" "Injecting variables"
324
379
  - export ENV_SHORT="dev"
325
380
  - export APP_DIR="app1"
326
381
  - export ENV_TYPE="dev"
327
382
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
328
383
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
329
384
  - 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")"
330
- - export HOST="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
385
+ - export HOSTNAME="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
331
386
  - export ROOT_URL="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
332
- - export HOST_INTERNAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
333
- - export HOST_CANONICAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
387
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
334
388
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
335
389
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
336
390
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -348,19 +402,19 @@ app1 🧪 test:
348
402
  app1 single quote: '
349
403
  app1 doouble quote: \\"
350
404
  "
351
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
405
+ - 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\\",\\"foo\\",\\"multiline\\"]"
352
406
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
353
407
  - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app1"
354
408
  - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1"
355
409
  - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
356
410
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
357
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
358
- - echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
411
+ - collapseable_section_end "injectvars"
412
+ - collapseable_section_start "prepare" "Prepare..."
359
413
  - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app1_GCLOUD_DEPLOY_credentialsKey")
360
414
  - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
361
415
  - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
362
- - echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
363
- - echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
416
+ - collapseable_section_end "prepare"
417
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
364
418
  - |
365
419
  cat > ____envvars.yaml <<EOF
366
420
  ENV_SHORT: |-
@@ -370,53 +424,51 @@ app1 🧪 test:
370
424
  ENV_TYPE: |-
371
425
  dev
372
426
  BUILD_INFO_BUILD_ID: |-
373
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
427
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
374
428
  BUILD_INFO_BUILD_TIME: |-
375
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
429
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
376
430
  BUILD_INFO_CURRENT_VERSION: |-
377
- $(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 's/^/ /')
378
- HOST: |-
379
- $(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
431
+ $(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/^/ /')
432
+ HOSTNAME: |-
433
+ $(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
380
434
  ROOT_URL: |-
381
- $(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
382
- HOST_INTERNAL: |-
383
- $(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
384
- HOST_CANONICAL: |-
385
- $(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
435
+ $(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
436
+ HOSTNAME_INTERNAL: |-
437
+ $(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
386
438
  ROOT_URL_INTERNAL: |-
387
- $(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
439
+ $(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
388
440
  DEPLOY_CLOUD_RUN_PROJECT_ID: |-
389
441
  asdf
390
442
  DEPLOY_CLOUD_RUN_REGION: |-
391
443
  asia-east1
392
444
  GCLOUD_RUN_canonicalHostSuffix: |-
393
- $(printf %s "$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
445
+ $(printf %s "$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
394
446
  foo: |-
395
447
  foo-value
396
448
  multiline: |-
397
- $(printf %s "app1 line1
398
- app1 line2
399
- app1 line3
400
-
401
- the url of self: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
402
-
403
-
404
- app1 single quote: '
405
- app1 doouble quote: \\"
406
- " | sed 's/^/ /')
449
+ app1 line1
450
+ app1 line2
451
+ app1 line3
452
+
453
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
454
+
455
+
456
+ app1 single quote: '
457
+ app1 doouble quote: "
458
+
407
459
  _ALL_ENV_VAR_KEYS: |-
408
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
460
+ ["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","foo","multiline"]
409
461
 
410
462
  EOF
411
- - echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
412
- - echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
463
+ - collapseable_section_end "writeenvvars"
464
+ - collapseable_section_start "deploy" "Deploy to cloud run"
413
465
  - gcloud run deploy pan-test-app-dev-app1 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app1:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app1,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-app1 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
414
- - echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
415
- - echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
466
+ - collapseable_section_end "deploy"
467
+ - collapseable_section_start "cleanup" "Cleanup"
416
468
  - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-dev-app1 --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=asdf --region=asia-east1 --quiet $revisionname ; done
417
469
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app1@$version --quiet --delete-tags; done
418
470
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1@$version --quiet --delete-tags; done
419
- - echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
471
+ - collapseable_section_end "cleanup"
420
472
  - echo 'Uploading SBOM to Dependency Track'
421
473
  - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app1" "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
422
474
  - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
@@ -458,9 +510,9 @@ app1 🧪 test:
458
510
  KUBERNETES_MEMORY_LIMIT: 400Mi
459
511
  GIT_STRATEGY: none
460
512
  script:
461
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
513
+ - collapseable_section_start "injectvars" "Injecting variables"
462
514
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
463
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
515
+ - collapseable_section_end "injectvars"
464
516
  - set +e
465
517
  - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app1_GCLOUD_DEPLOY_credentialsKey")
466
518
  - gcloud run services delete pan-test-app-dev-app1 --project=asdf --region=asia-east1
@@ -496,17 +548,16 @@ app1 🧪 test:
496
548
  KUBERNETES_MEMORY_REQUEST: 1Gi
497
549
  KUBERNETES_MEMORY_LIMIT: 4Gi
498
550
  script:
499
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
551
+ - collapseable_section_start "injectvars" "Injecting variables"
500
552
  - export ENV_SHORT="review"
501
553
  - export APP_DIR="app1"
502
554
  - export ENV_TYPE="review"
503
555
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
504
556
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
505
557
  - 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")"
506
- - export HOST="$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
558
+ - 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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
507
559
  - 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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
508
- - export HOST_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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
509
- - export HOST_CANONICAL="$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
560
+ - 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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
510
561
  - 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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
511
562
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
512
563
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -524,21 +575,49 @@ app1 🧪 test:
524
575
  app1 single quote: '
525
576
  app1 doouble quote: \\"
526
577
  "
527
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
528
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
578
+ - 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\\",\\"foo\\",\\"multiline\\"]"
579
+ - collapseable_section_end "injectvars"
580
+ - collapseable_section_start "write-dotenv-app1" "write dot env for app1"
581
+ - |-
582
+ cat <<EOF > app1/.env
583
+ ENV_SHORT=review
584
+ APP_DIR=app1
585
+ ENV_TYPE=review
586
+ HOSTNAME=$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
587
+ ROOT_URL=$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
588
+ HOSTNAME_INTERNAL=$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
589
+ ROOT_URL_INTERNAL=$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
590
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
591
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
592
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_app1_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
593
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
594
+ foo=foo-value
595
+ multiline=$(printf %s "app1 line1
596
+ app1 line2
597
+ app1 line3
598
+
599
+ the url of self: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
600
+
601
+
602
+ app1 single quote: '
603
+ app1 doouble quote: \\"
604
+ " | escapeForDotEnv)
605
+ _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","foo","multiline"]
606
+ EOF
607
+ - collapseable_section_end "write-dotenv-app1"
529
608
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app1/__build_info.json
530
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
609
+ - collapseable_section_start "nodeinstall" "Ensure node version"
531
610
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
532
611
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
533
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
612
+ - collapseable_section_end "nodeinstall"
534
613
  - cd app1
535
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
614
+ - collapseable_section_start "nodeinstall" "Ensure node version"
536
615
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
537
616
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
538
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
539
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
617
+ - collapseable_section_end "nodeinstall"
618
+ - collapseable_section_start "yarninstall" "Yarn install"
540
619
  - yarn install --immutable
541
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
620
+ - collapseable_section_end "yarninstall"
542
621
  - yarn build
543
622
  cache:
544
623
  - key: app1-yarn
@@ -549,15 +628,13 @@ app1 🧪 test:
549
628
  policy: pull-push
550
629
  paths:
551
630
  - app1/node_modules
552
- - key: app1-next-cache
553
- policy: pull-push
554
- paths:
555
- - app1/.next/cache
556
631
  artifacts:
557
632
  paths:
558
633
  - app1/__build_info.json
559
634
  - app1/.next
560
635
  - app1/dist
636
+ exclude:
637
+ - app1/.env
561
638
  expire_in: 1 day
562
639
  when: always
563
640
  reports: {}
@@ -583,7 +660,7 @@ app1 🧪 test:
583
660
  KUBERNETES_MEMORY_REQUEST: 1Gi
584
661
  KUBERNETES_MEMORY_LIMIT: 2Gi
585
662
  script:
586
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
663
+ - collapseable_section_start "injectvars" "Injecting variables"
587
664
  - export APP_DIR="app1"
588
665
  - export DOCKER_BUILD_CONTEXT="."
589
666
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
@@ -599,20 +676,20 @@ app1 🧪 test:
599
676
  COPY --chown=node:node app1/yarn.lock /app/app1/yarn.lock
600
677
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
601
678
  COPY --chown=node:node .yarn /app/.yarn"
602
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
679
+ - collapseable_section_end "injectvars"
603
680
  - ensureNodeDockerfile
604
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
681
+ - collapseable_section_start "docker-login" "Docker Login"
605
682
  - gcloud auth activate-service-account --key-file=<(echo "$CL_review_app1_GCLOUD_DEPLOY_credentialsKey")
606
683
  - gcloud auth configure-docker asia-east1-docker.pkg.dev
607
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
608
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
684
+ - collapseable_section_end "docker-login"
685
+ - collapseable_section_start "docker-build" "Docker build"
609
686
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
610
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
611
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
687
+ - collapseable_section_end "docker-build"
688
+ - collapseable_section_start "docker-push" "Docker push and tag"
612
689
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
613
690
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
614
691
  - docker push $DOCKER_CACHE_IMAGE
615
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
692
+ - collapseable_section_end "docker-push"
616
693
  cache:
617
694
  - key: app1-yarn
618
695
  policy: pull
@@ -629,8 +706,8 @@ app1 🧪 test:
629
706
  image: aquasec/trivy:0.38.3
630
707
  variables: {}
631
708
  script:
632
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
633
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
709
+ - collapseable_section_start "injectvars" "Injecting variables"
710
+ - collapseable_section_end "injectvars"
634
711
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" app1
635
712
  artifacts:
636
713
  paths:
@@ -649,17 +726,16 @@ app1 🧪 test:
649
726
  KUBERNETES_MEMORY_REQUEST: 200Mi
650
727
  KUBERNETES_MEMORY_LIMIT: 400Mi
651
728
  script:
652
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
729
+ - collapseable_section_start "injectvars" "Injecting variables"
653
730
  - export ENV_SHORT="review"
654
731
  - export APP_DIR="app1"
655
732
  - export ENV_TYPE="review"
656
733
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
657
734
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
658
735
  - 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")"
659
- - export HOST="$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
736
+ - 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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
660
737
  - 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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
661
- - export HOST_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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
662
- - export HOST_CANONICAL="$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
738
+ - 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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
663
739
  - 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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
664
740
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
665
741
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -677,19 +753,19 @@ app1 🧪 test:
677
753
  app1 single quote: '
678
754
  app1 doouble quote: \\"
679
755
  "
680
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
756
+ - 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\\",\\"foo\\",\\"multiline\\"]"
681
757
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
682
758
  - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
683
759
  - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1"
684
760
  - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
685
761
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
686
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
687
- - echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
762
+ - collapseable_section_end "injectvars"
763
+ - collapseable_section_start "prepare" "Prepare..."
688
764
  - gcloud auth activate-service-account --key-file=<(echo "$CL_review_app1_GCLOUD_DEPLOY_credentialsKey")
689
765
  - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
690
766
  - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
691
- - echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
692
- - echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
767
+ - collapseable_section_end "prepare"
768
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
693
769
  - |
694
770
  cat > ____envvars.yaml <<EOF
695
771
  ENV_SHORT: |-
@@ -699,56 +775,54 @@ app1 🧪 test:
699
775
  ENV_TYPE: |-
700
776
  review
701
777
  BUILD_INFO_BUILD_ID: |-
702
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
778
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
703
779
  BUILD_INFO_BUILD_TIME: |-
704
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
780
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
705
781
  BUILD_INFO_CURRENT_VERSION: |-
706
- $(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 's/^/ /')
707
- HOST: |-
708
- $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
782
+ $(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/^/ /')
783
+ HOSTNAME: |-
784
+ $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
709
785
  ROOT_URL: |-
710
- $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
711
- HOST_INTERNAL: |-
712
- $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
713
- HOST_CANONICAL: |-
714
- $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
786
+ $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
787
+ HOSTNAME_INTERNAL: |-
788
+ $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
715
789
  ROOT_URL_INTERNAL: |-
716
- $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
790
+ $(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
717
791
  DEPLOY_CLOUD_RUN_PROJECT_ID: |-
718
792
  asdf
719
793
  DEPLOY_CLOUD_RUN_REGION: |-
720
794
  asia-east1
721
795
  GCLOUD_RUN_canonicalHostSuffix: |-
722
- $(printf %s "$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
796
+ $(printf %s "$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
723
797
  foo: |-
724
798
  foo-value
725
799
  multiline: |-
726
- $(printf %s "app1 line1
727
- app1 line2
728
- app1 line3
729
-
730
- the url of self: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
731
-
732
-
733
- app1 single quote: '
734
- app1 doouble quote: \\"
735
- " | sed 's/^/ /')
800
+ app1 line1
801
+ app1 line2
802
+ app1 line3
803
+
804
+ the url of self: "$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
805
+
806
+
807
+ app1 single quote: '
808
+ app1 doouble quote: "
809
+
736
810
  _ALL_ENV_VAR_KEYS: |-
737
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
811
+ ["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","foo","multiline"]
738
812
 
739
813
  EOF
740
- - echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
741
- - echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
814
+ - collapseable_section_end "writeenvvars"
815
+ - collapseable_section_start "deploy" "Deploy to cloud run"
742
816
  - 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"; })-app1" | awk '{print tolower($0)}') --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app1,app-name=test-app,env-type=review,env-name=review,build-type=node,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"; })-app1" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
743
- - echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
744
- - echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
817
+ - collapseable_section_end "deploy"
818
+ - collapseable_section_start "cleanup" "Cleanup"
745
819
  - gcloud run revisions list --project=asdf --region=asia-east1 --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"; })-app1" | 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=asdf --region=asia-east1 --quiet $revisionname ; done
746
820
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1/$([ -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 asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1/$([ -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
747
821
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1@$version --quiet --delete-tags; done
748
822
  - set +e
749
823
  - gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1 --quiet --delete-tags
750
824
  - set -e
751
- - echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
825
+ - collapseable_section_end "cleanup"
752
826
  - echo 'Uploading SBOM to Dependency Track'
753
827
  - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app1" "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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
754
828
  - echo "CL_GITLAB_ENVIRONMENT_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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
@@ -788,9 +862,9 @@ app1 🧪 test:
788
862
  KUBERNETES_MEMORY_LIMIT: 400Mi
789
863
  GIT_STRATEGY: none
790
864
  script:
791
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
865
+ - collapseable_section_start "injectvars" "Injecting variables"
792
866
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
793
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
867
+ - collapseable_section_end "injectvars"
794
868
  - set +e
795
869
  - gcloud auth activate-service-account --key-file=<(echo "$CL_review_app1_GCLOUD_DEPLOY_credentialsKey")
796
870
  - 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"; })-app1" | awk '{print tolower($0)}') --project=asdf --region=asia-east1
@@ -827,17 +901,16 @@ app1 🧪 test:
827
901
  KUBERNETES_MEMORY_REQUEST: 1Gi
828
902
  KUBERNETES_MEMORY_LIMIT: 4Gi
829
903
  script:
830
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
904
+ - collapseable_section_start "injectvars" "Injecting variables"
831
905
  - export ENV_SHORT="stage"
832
906
  - export APP_DIR="app1"
833
907
  - export ENV_TYPE="stage"
834
908
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
835
909
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
836
910
  - 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")"
837
- - export HOST="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
911
+ - export HOSTNAME="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
838
912
  - export ROOT_URL="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
839
- - export HOST_INTERNAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
840
- - export HOST_CANONICAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
913
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
841
914
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
842
915
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
843
916
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -855,21 +928,49 @@ app1 🧪 test:
855
928
  app1 single quote: '
856
929
  app1 doouble quote: \\"
857
930
  "
858
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
859
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
931
+ - 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\\",\\"foo\\",\\"multiline\\"]"
932
+ - collapseable_section_end "injectvars"
933
+ - collapseable_section_start "write-dotenv-app1" "write dot env for app1"
934
+ - |-
935
+ cat <<EOF > app1/.env
936
+ ENV_SHORT=stage
937
+ APP_DIR=app1
938
+ ENV_TYPE=stage
939
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
940
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
941
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
942
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
943
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
944
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
945
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_app1_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
946
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
947
+ foo=foo-value
948
+ multiline=$(printf %s "app1 line1
949
+ app1 line2
950
+ app1 line3
951
+
952
+ the url of self: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
953
+
954
+
955
+ app1 single quote: '
956
+ app1 doouble quote: \\"
957
+ " | escapeForDotEnv)
958
+ _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","foo","multiline"]
959
+ EOF
960
+ - collapseable_section_end "write-dotenv-app1"
860
961
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app1/__build_info.json
861
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
962
+ - collapseable_section_start "nodeinstall" "Ensure node version"
862
963
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
863
964
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
864
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
965
+ - collapseable_section_end "nodeinstall"
865
966
  - cd app1
866
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
967
+ - collapseable_section_start "nodeinstall" "Ensure node version"
867
968
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
868
969
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
869
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
870
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
970
+ - collapseable_section_end "nodeinstall"
971
+ - collapseable_section_start "yarninstall" "Yarn install"
871
972
  - yarn install --immutable
872
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
973
+ - collapseable_section_end "yarninstall"
873
974
  - yarn build
874
975
  cache:
875
976
  - key: app1-yarn
@@ -880,15 +981,13 @@ app1 🧪 test:
880
981
  policy: pull-push
881
982
  paths:
882
983
  - app1/node_modules
883
- - key: app1-next-cache
884
- policy: pull-push
885
- paths:
886
- - app1/.next/cache
887
984
  artifacts:
888
985
  paths:
889
986
  - app1/__build_info.json
890
987
  - app1/.next
891
988
  - app1/dist
989
+ exclude:
990
+ - app1/.env
892
991
  expire_in: 1 day
893
992
  when: always
894
993
  reports: {}
@@ -914,7 +1013,7 @@ app1 🧪 test:
914
1013
  KUBERNETES_MEMORY_REQUEST: 1Gi
915
1014
  KUBERNETES_MEMORY_LIMIT: 2Gi
916
1015
  script:
917
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1016
+ - collapseable_section_start "injectvars" "Injecting variables"
918
1017
  - export APP_DIR="app1"
919
1018
  - export DOCKER_BUILD_CONTEXT="."
920
1019
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
@@ -930,20 +1029,20 @@ app1 🧪 test:
930
1029
  COPY --chown=node:node app1/yarn.lock /app/app1/yarn.lock
931
1030
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
932
1031
  COPY --chown=node:node .yarn /app/.yarn"
933
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1032
+ - collapseable_section_end "injectvars"
934
1033
  - ensureNodeDockerfile
935
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
1034
+ - collapseable_section_start "docker-login" "Docker Login"
936
1035
  - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app1_GCLOUD_DEPLOY_credentialsKey")
937
1036
  - gcloud auth configure-docker asia-east1-docker.pkg.dev
938
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
939
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
1037
+ - collapseable_section_end "docker-login"
1038
+ - collapseable_section_start "docker-build" "Docker build"
940
1039
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
941
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
942
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
1040
+ - collapseable_section_end "docker-build"
1041
+ - collapseable_section_start "docker-push" "Docker push and tag"
943
1042
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
944
1043
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
945
1044
  - docker push $DOCKER_CACHE_IMAGE
946
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
1045
+ - collapseable_section_end "docker-push"
947
1046
  cache:
948
1047
  - key: app1-yarn
949
1048
  policy: pull
@@ -960,8 +1059,8 @@ app1 🧪 test:
960
1059
  image: aquasec/trivy:0.38.3
961
1060
  variables: {}
962
1061
  script:
963
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
964
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1062
+ - collapseable_section_start "injectvars" "Injecting variables"
1063
+ - collapseable_section_end "injectvars"
965
1064
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" app1
966
1065
  artifacts:
967
1066
  paths:
@@ -980,17 +1079,16 @@ app1 🧪 test:
980
1079
  KUBERNETES_MEMORY_REQUEST: 200Mi
981
1080
  KUBERNETES_MEMORY_LIMIT: 400Mi
982
1081
  script:
983
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1082
+ - collapseable_section_start "injectvars" "Injecting variables"
984
1083
  - export ENV_SHORT="stage"
985
1084
  - export APP_DIR="app1"
986
1085
  - export ENV_TYPE="stage"
987
1086
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
988
1087
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
989
1088
  - 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")"
990
- - export HOST="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1089
+ - export HOSTNAME="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
991
1090
  - export ROOT_URL="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
992
- - export HOST_INTERNAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
993
- - export HOST_CANONICAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1091
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
994
1092
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
995
1093
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
996
1094
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -1008,19 +1106,19 @@ app1 🧪 test:
1008
1106
  app1 single quote: '
1009
1107
  app1 doouble quote: \\"
1010
1108
  "
1011
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
1109
+ - 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\\",\\"foo\\",\\"multiline\\"]"
1012
1110
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
1013
1111
  - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app1"
1014
1112
  - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1"
1015
1113
  - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
1016
1114
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
1017
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1018
- - echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
1115
+ - collapseable_section_end "injectvars"
1116
+ - collapseable_section_start "prepare" "Prepare..."
1019
1117
  - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app1_GCLOUD_DEPLOY_credentialsKey")
1020
1118
  - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
1021
1119
  - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
1022
- - echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
1023
- - echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
1120
+ - collapseable_section_end "prepare"
1121
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
1024
1122
  - |
1025
1123
  cat > ____envvars.yaml <<EOF
1026
1124
  ENV_SHORT: |-
@@ -1030,53 +1128,51 @@ app1 🧪 test:
1030
1128
  ENV_TYPE: |-
1031
1129
  stage
1032
1130
  BUILD_INFO_BUILD_ID: |-
1033
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1131
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
1034
1132
  BUILD_INFO_BUILD_TIME: |-
1035
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1133
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
1036
1134
  BUILD_INFO_CURRENT_VERSION: |-
1037
- $(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 's/^/ /')
1038
- HOST: |-
1039
- $(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1135
+ $(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/^/ /')
1136
+ HOSTNAME: |-
1137
+ $(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1040
1138
  ROOT_URL: |-
1041
- $(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1042
- HOST_INTERNAL: |-
1043
- $(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1044
- HOST_CANONICAL: |-
1045
- $(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1139
+ $(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1140
+ HOSTNAME_INTERNAL: |-
1141
+ $(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1046
1142
  ROOT_URL_INTERNAL: |-
1047
- $(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1143
+ $(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1048
1144
  DEPLOY_CLOUD_RUN_PROJECT_ID: |-
1049
1145
  asdf
1050
1146
  DEPLOY_CLOUD_RUN_REGION: |-
1051
1147
  asia-east1
1052
1148
  GCLOUD_RUN_canonicalHostSuffix: |-
1053
- $(printf %s "$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
1149
+ $(printf %s "$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
1054
1150
  foo: |-
1055
1151
  foo-value
1056
1152
  multiline: |-
1057
- $(printf %s "app1 line1
1058
- app1 line2
1059
- app1 line3
1060
-
1061
- the url of self: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
1062
-
1063
-
1064
- app1 single quote: '
1065
- app1 doouble quote: \\"
1066
- " | sed 's/^/ /')
1153
+ app1 line1
1154
+ app1 line2
1155
+ app1 line3
1156
+
1157
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
1158
+
1159
+
1160
+ app1 single quote: '
1161
+ app1 doouble quote: "
1162
+
1067
1163
  _ALL_ENV_VAR_KEYS: |-
1068
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
1164
+ ["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","foo","multiline"]
1069
1165
 
1070
1166
  EOF
1071
- - echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
1072
- - echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
1167
+ - collapseable_section_end "writeenvvars"
1168
+ - collapseable_section_start "deploy" "Deploy to cloud run"
1073
1169
  - gcloud run deploy pan-test-app-stage-app1 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app1:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app1,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-app1 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
1074
- - echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
1075
- - echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
1170
+ - collapseable_section_end "deploy"
1171
+ - collapseable_section_start "cleanup" "Cleanup"
1076
1172
  - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-stage-app1 --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=asdf --region=asia-east1 --quiet $revisionname ; done
1077
1173
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app1@$version --quiet --delete-tags; done
1078
1174
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1@$version --quiet --delete-tags; done
1079
- - echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
1175
+ - collapseable_section_end "cleanup"
1080
1176
  - echo 'Uploading SBOM to Dependency Track'
1081
1177
  - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app1" "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
1082
1178
  - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
@@ -1109,9 +1205,9 @@ app1 🧪 test:
1109
1205
  KUBERNETES_MEMORY_LIMIT: 400Mi
1110
1206
  GIT_STRATEGY: none
1111
1207
  script:
1112
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1208
+ - collapseable_section_start "injectvars" "Injecting variables"
1113
1209
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
1114
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1210
+ - collapseable_section_end "injectvars"
1115
1211
  - set +e
1116
1212
  - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app1_GCLOUD_DEPLOY_credentialsKey")
1117
1213
  - gcloud run services delete pan-test-app-stage-app1 --project=asdf --region=asia-east1
@@ -1145,17 +1241,16 @@ app1 🧪 test:
1145
1241
  KUBERNETES_MEMORY_REQUEST: 1Gi
1146
1242
  KUBERNETES_MEMORY_LIMIT: 4Gi
1147
1243
  script:
1148
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1244
+ - collapseable_section_start "injectvars" "Injecting variables"
1149
1245
  - export ENV_SHORT="prod"
1150
1246
  - export APP_DIR="app1"
1151
1247
  - export ENV_TYPE="prod"
1152
1248
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1153
1249
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1154
1250
  - 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")"
1155
- - export HOST="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1251
+ - export HOSTNAME="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1156
1252
  - export ROOT_URL="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1157
- - export HOST_INTERNAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1158
- - export HOST_CANONICAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1253
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1159
1254
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1160
1255
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
1161
1256
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -1173,21 +1268,49 @@ app1 🧪 test:
1173
1268
  app1 single quote: '
1174
1269
  app1 doouble quote: \\"
1175
1270
  "
1176
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
1177
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1271
+ - 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\\",\\"foo\\",\\"multiline\\"]"
1272
+ - collapseable_section_end "injectvars"
1273
+ - collapseable_section_start "write-dotenv-app1" "write dot env for app1"
1274
+ - |-
1275
+ cat <<EOF > app1/.env
1276
+ ENV_SHORT=prod
1277
+ APP_DIR=app1
1278
+ ENV_TYPE=prod
1279
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1280
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1281
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1282
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1283
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
1284
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
1285
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_app1_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
1286
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
1287
+ foo=foo-value
1288
+ multiline=$(printf %s "app1 line1
1289
+ app1 line2
1290
+ app1 line3
1291
+
1292
+ the url of self: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
1293
+
1294
+
1295
+ app1 single quote: '
1296
+ app1 doouble quote: \\"
1297
+ " | escapeForDotEnv)
1298
+ _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","foo","multiline"]
1299
+ EOF
1300
+ - collapseable_section_end "write-dotenv-app1"
1178
1301
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app1/__build_info.json
1179
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1302
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1180
1303
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1181
1304
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1182
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1305
+ - collapseable_section_end "nodeinstall"
1183
1306
  - cd app1
1184
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1307
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1185
1308
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1186
1309
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1187
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1188
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1310
+ - collapseable_section_end "nodeinstall"
1311
+ - collapseable_section_start "yarninstall" "Yarn install"
1189
1312
  - yarn install --immutable
1190
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1313
+ - collapseable_section_end "yarninstall"
1191
1314
  - yarn build
1192
1315
  cache:
1193
1316
  - key: app1-yarn
@@ -1198,15 +1321,13 @@ app1 🧪 test:
1198
1321
  policy: pull-push
1199
1322
  paths:
1200
1323
  - app1/node_modules
1201
- - key: app1-next-cache
1202
- policy: pull-push
1203
- paths:
1204
- - app1/.next/cache
1205
1324
  artifacts:
1206
1325
  paths:
1207
1326
  - app1/__build_info.json
1208
1327
  - app1/.next
1209
1328
  - app1/dist
1329
+ exclude:
1330
+ - app1/.env
1210
1331
  expire_in: 1 day
1211
1332
  when: always
1212
1333
  reports: {}
@@ -1232,7 +1353,7 @@ app1 🧪 test:
1232
1353
  KUBERNETES_MEMORY_REQUEST: 1Gi
1233
1354
  KUBERNETES_MEMORY_LIMIT: 2Gi
1234
1355
  script:
1235
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1356
+ - collapseable_section_start "injectvars" "Injecting variables"
1236
1357
  - export APP_DIR="app1"
1237
1358
  - export DOCKER_BUILD_CONTEXT="."
1238
1359
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
@@ -1248,20 +1369,20 @@ app1 🧪 test:
1248
1369
  COPY --chown=node:node app1/yarn.lock /app/app1/yarn.lock
1249
1370
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1250
1371
  COPY --chown=node:node .yarn /app/.yarn"
1251
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1372
+ - collapseable_section_end "injectvars"
1252
1373
  - ensureNodeDockerfile
1253
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
1374
+ - collapseable_section_start "docker-login" "Docker Login"
1254
1375
  - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app1_GCLOUD_DEPLOY_credentialsKey")
1255
1376
  - gcloud auth configure-docker asia-east1-docker.pkg.dev
1256
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
1257
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
1377
+ - collapseable_section_end "docker-login"
1378
+ - collapseable_section_start "docker-build" "Docker build"
1258
1379
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
1259
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
1260
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
1380
+ - collapseable_section_end "docker-build"
1381
+ - collapseable_section_start "docker-push" "Docker push and tag"
1261
1382
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
1262
1383
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
1263
1384
  - docker push $DOCKER_CACHE_IMAGE
1264
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
1385
+ - collapseable_section_end "docker-push"
1265
1386
  cache:
1266
1387
  - key: app1-yarn
1267
1388
  policy: pull
@@ -1278,8 +1399,8 @@ app1 🧪 test:
1278
1399
  image: aquasec/trivy:0.38.3
1279
1400
  variables: {}
1280
1401
  script:
1281
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1282
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1402
+ - collapseable_section_start "injectvars" "Injecting variables"
1403
+ - collapseable_section_end "injectvars"
1283
1404
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" app1
1284
1405
  artifacts:
1285
1406
  paths:
@@ -1298,17 +1419,16 @@ app1 🧪 test:
1298
1419
  KUBERNETES_MEMORY_REQUEST: 200Mi
1299
1420
  KUBERNETES_MEMORY_LIMIT: 400Mi
1300
1421
  script:
1301
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1422
+ - collapseable_section_start "injectvars" "Injecting variables"
1302
1423
  - export ENV_SHORT="prod"
1303
1424
  - export APP_DIR="app1"
1304
1425
  - export ENV_TYPE="prod"
1305
1426
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1306
1427
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1307
1428
  - 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")"
1308
- - export HOST="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1429
+ - export HOSTNAME="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1309
1430
  - export ROOT_URL="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1310
- - export HOST_INTERNAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1311
- - export HOST_CANONICAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1431
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1312
1432
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1313
1433
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
1314
1434
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -1326,19 +1446,19 @@ app1 🧪 test:
1326
1446
  app1 single quote: '
1327
1447
  app1 doouble quote: \\"
1328
1448
  "
1329
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
1449
+ - 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\\",\\"foo\\",\\"multiline\\"]"
1330
1450
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
1331
1451
  - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app1"
1332
1452
  - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1"
1333
1453
  - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
1334
1454
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
1335
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1336
- - echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
1455
+ - collapseable_section_end "injectvars"
1456
+ - collapseable_section_start "prepare" "Prepare..."
1337
1457
  - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app1_GCLOUD_DEPLOY_credentialsKey")
1338
1458
  - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
1339
1459
  - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
1340
- - echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
1341
- - echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
1460
+ - collapseable_section_end "prepare"
1461
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
1342
1462
  - |
1343
1463
  cat > ____envvars.yaml <<EOF
1344
1464
  ENV_SHORT: |-
@@ -1348,53 +1468,51 @@ app1 🧪 test:
1348
1468
  ENV_TYPE: |-
1349
1469
  prod
1350
1470
  BUILD_INFO_BUILD_ID: |-
1351
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1471
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
1352
1472
  BUILD_INFO_BUILD_TIME: |-
1353
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1473
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
1354
1474
  BUILD_INFO_CURRENT_VERSION: |-
1355
- $(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 's/^/ /')
1356
- HOST: |-
1357
- $(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1475
+ $(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/^/ /')
1476
+ HOSTNAME: |-
1477
+ $(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1358
1478
  ROOT_URL: |-
1359
- $(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1360
- HOST_INTERNAL: |-
1361
- $(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1362
- HOST_CANONICAL: |-
1363
- $(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1479
+ $(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1480
+ HOSTNAME_INTERNAL: |-
1481
+ $(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1364
1482
  ROOT_URL_INTERNAL: |-
1365
- $(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1483
+ $(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1366
1484
  DEPLOY_CLOUD_RUN_PROJECT_ID: |-
1367
1485
  asdf
1368
1486
  DEPLOY_CLOUD_RUN_REGION: |-
1369
1487
  asia-east1
1370
1488
  GCLOUD_RUN_canonicalHostSuffix: |-
1371
- $(printf %s "$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
1489
+ $(printf %s "$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
1372
1490
  foo: |-
1373
1491
  foo-value
1374
1492
  multiline: |-
1375
- $(printf %s "app1 line1
1376
- app1 line2
1377
- app1 line3
1378
-
1379
- the url of self: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
1380
-
1381
-
1382
- app1 single quote: '
1383
- app1 doouble quote: \\"
1384
- " | sed 's/^/ /')
1493
+ app1 line1
1494
+ app1 line2
1495
+ app1 line3
1496
+
1497
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
1498
+
1499
+
1500
+ app1 single quote: '
1501
+ app1 doouble quote: "
1502
+
1385
1503
  _ALL_ENV_VAR_KEYS: |-
1386
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
1504
+ ["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","foo","multiline"]
1387
1505
 
1388
1506
  EOF
1389
- - echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
1390
- - echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
1507
+ - collapseable_section_end "writeenvvars"
1508
+ - collapseable_section_start "deploy" "Deploy to cloud run"
1391
1509
  - gcloud run deploy pan-test-app-prod-app1 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app1:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app1,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-app1 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
1392
- - echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
1393
- - echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
1510
+ - collapseable_section_end "deploy"
1511
+ - collapseable_section_start "cleanup" "Cleanup"
1394
1512
  - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-prod-app1 --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=asdf --region=asia-east1 --quiet $revisionname ; done
1395
1513
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app1@$version --quiet --delete-tags; done
1396
1514
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1@$version --quiet --delete-tags; done
1397
- - echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
1515
+ - collapseable_section_end "cleanup"
1398
1516
  - echo 'Uploading SBOM to Dependency Track'
1399
1517
  - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app1" "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
1400
1518
  - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
@@ -1427,9 +1545,9 @@ app1 🧪 test:
1427
1545
  KUBERNETES_MEMORY_LIMIT: 400Mi
1428
1546
  GIT_STRATEGY: none
1429
1547
  script:
1430
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1548
+ - collapseable_section_start "injectvars" "Injecting variables"
1431
1549
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
1432
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1550
+ - collapseable_section_end "injectvars"
1433
1551
  - set +e
1434
1552
  - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app1_GCLOUD_DEPLOY_credentialsKey")
1435
1553
  - gcloud run services delete pan-test-app-prod-app1 --project=asdf --region=asia-east1
@@ -1463,9 +1581,9 @@ app2 🛡 audit:
1463
1581
  KUBERNETES_MEMORY_REQUEST: 1Gi
1464
1582
  KUBERNETES_MEMORY_LIMIT: 4Gi
1465
1583
  script:
1466
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1584
+ - collapseable_section_start "injectvars" "Injecting variables"
1467
1585
  - export APP_PATH="app2"
1468
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1586
+ - collapseable_section_end "injectvars"
1469
1587
  - cd app2
1470
1588
  - yarn npm audit --environment production
1471
1589
  rules:
@@ -1485,21 +1603,21 @@ app2 👮 lint:
1485
1603
  KUBERNETES_MEMORY_REQUEST: 1Gi
1486
1604
  KUBERNETES_MEMORY_LIMIT: 4Gi
1487
1605
  script:
1488
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1606
+ - collapseable_section_start "injectvars" "Injecting variables"
1489
1607
  - export APP_PATH="app2"
1490
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1491
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1608
+ - collapseable_section_end "injectvars"
1609
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1492
1610
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1493
1611
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1494
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1612
+ - collapseable_section_end "nodeinstall"
1495
1613
  - cd app2
1496
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1614
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1497
1615
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1498
1616
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1499
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1500
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1617
+ - collapseable_section_end "nodeinstall"
1618
+ - collapseable_section_start "yarninstall" "Yarn install"
1501
1619
  - yarn install --immutable
1502
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1620
+ - collapseable_section_end "yarninstall"
1503
1621
  - yarn lint
1504
1622
  cache:
1505
1623
  - key: app2-yarn
@@ -1526,21 +1644,21 @@ app2 🧪 test:
1526
1644
  KUBERNETES_MEMORY_REQUEST: 1Gi
1527
1645
  KUBERNETES_MEMORY_LIMIT: 4Gi
1528
1646
  script:
1529
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1647
+ - collapseable_section_start "injectvars" "Injecting variables"
1530
1648
  - export APP_PATH="app2"
1531
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1532
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1649
+ - collapseable_section_end "injectvars"
1650
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1533
1651
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1534
1652
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1535
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1653
+ - collapseable_section_end "nodeinstall"
1536
1654
  - cd app2
1537
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1655
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1538
1656
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1539
1657
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1540
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1541
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1658
+ - collapseable_section_end "nodeinstall"
1659
+ - collapseable_section_start "yarninstall" "Yarn install"
1542
1660
  - yarn install --immutable
1543
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1661
+ - collapseable_section_end "yarninstall"
1544
1662
  - yarn test
1545
1663
  cache:
1546
1664
  - key: app2-yarn
@@ -1567,17 +1685,16 @@ app2 🧪 test:
1567
1685
  KUBERNETES_MEMORY_REQUEST: 1Gi
1568
1686
  KUBERNETES_MEMORY_LIMIT: 4Gi
1569
1687
  script:
1570
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1688
+ - collapseable_section_start "injectvars" "Injecting variables"
1571
1689
  - export ENV_SHORT="dev"
1572
1690
  - export APP_DIR="app2"
1573
1691
  - export ENV_TYPE="dev"
1574
1692
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1575
1693
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1576
1694
  - 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")"
1577
- - export HOST="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1695
+ - export HOSTNAME="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1578
1696
  - export ROOT_URL="https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1579
- - export HOST_INTERNAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1580
- - export HOST_CANONICAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1697
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1581
1698
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1582
1699
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
1583
1700
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -1597,24 +1714,57 @@ app2 🧪 test:
1597
1714
 
1598
1715
  value from app1:
1599
1716
  -------
1600
- \${multiline_from_app1}
1717
+ Unresolvable reference: \${app2:multiline_from_app1}
1601
1718
  --------
1602
1719
  "
1603
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
1604
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1720
+ - 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\\",\\"foo\\",\\"multiline\\"]"
1721
+ - collapseable_section_end "injectvars"
1722
+ - collapseable_section_start "write-dotenv-app2" "write dot env for app2"
1723
+ - |-
1724
+ cat <<EOF > app2/.env
1725
+ ENV_SHORT=dev
1726
+ APP_DIR=app2
1727
+ ENV_TYPE=dev
1728
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1729
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1730
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1731
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
1732
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
1733
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
1734
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_app2_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
1735
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
1736
+ foo=foo-value
1737
+ multiline=$(printf %s "app2 yeah
1738
+ app2 yeah2
1739
+ app2 yeah3
1740
+
1741
+ app2 single quote: '
1742
+ app2 doouble quote: \\"
1743
+
1744
+ the url of self: \\"https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
1745
+ the url of app1: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
1746
+
1747
+ value from app1:
1748
+ -------
1749
+ Unresolvable reference: \${app2:multiline_from_app1}
1750
+ --------
1751
+ " | escapeForDotEnv)
1752
+ _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","foo","multiline"]
1753
+ EOF
1754
+ - collapseable_section_end "write-dotenv-app2"
1605
1755
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app2/__build_info.json
1606
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1756
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1607
1757
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1608
1758
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1609
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1759
+ - collapseable_section_end "nodeinstall"
1610
1760
  - cd app2
1611
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1761
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1612
1762
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1613
1763
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1614
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1615
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1764
+ - collapseable_section_end "nodeinstall"
1765
+ - collapseable_section_start "yarninstall" "Yarn install"
1616
1766
  - yarn install --immutable
1617
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1767
+ - collapseable_section_end "yarninstall"
1618
1768
  - yarn build
1619
1769
  cache:
1620
1770
  - key: app2-yarn
@@ -1625,15 +1775,13 @@ app2 🧪 test:
1625
1775
  policy: pull-push
1626
1776
  paths:
1627
1777
  - app2/node_modules
1628
- - key: app2-next-cache
1629
- policy: pull-push
1630
- paths:
1631
- - app2/.next/cache
1632
1778
  artifacts:
1633
1779
  paths:
1634
1780
  - app2/__build_info.json
1635
1781
  - app2/.next
1636
1782
  - app2/dist
1783
+ exclude:
1784
+ - app2/.env
1637
1785
  expire_in: 1 day
1638
1786
  when: always
1639
1787
  reports: {}
@@ -1661,7 +1809,7 @@ app2 🧪 test:
1661
1809
  KUBERNETES_MEMORY_REQUEST: 1Gi
1662
1810
  KUBERNETES_MEMORY_LIMIT: 2Gi
1663
1811
  script:
1664
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1812
+ - collapseable_section_start "injectvars" "Injecting variables"
1665
1813
  - export APP_DIR="app2"
1666
1814
  - export DOCKER_BUILD_CONTEXT="."
1667
1815
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
@@ -1677,20 +1825,20 @@ app2 🧪 test:
1677
1825
  COPY --chown=node:node app2/yarn.lock /app/app2/yarn.lock
1678
1826
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1679
1827
  COPY --chown=node:node .yarn /app/.yarn"
1680
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1828
+ - collapseable_section_end "injectvars"
1681
1829
  - ensureNodeDockerfile
1682
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
1830
+ - collapseable_section_start "docker-login" "Docker Login"
1683
1831
  - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app2_GCLOUD_DEPLOY_credentialsKey")
1684
1832
  - gcloud auth configure-docker asia-east1-docker.pkg.dev
1685
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
1686
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
1833
+ - collapseable_section_end "docker-login"
1834
+ - collapseable_section_start "docker-build" "Docker build"
1687
1835
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
1688
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
1689
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
1836
+ - collapseable_section_end "docker-build"
1837
+ - collapseable_section_start "docker-push" "Docker push and tag"
1690
1838
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
1691
1839
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
1692
1840
  - docker push $DOCKER_CACHE_IMAGE
1693
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
1841
+ - collapseable_section_end "docker-push"
1694
1842
  cache:
1695
1843
  - key: app2-yarn
1696
1844
  policy: pull
@@ -1709,8 +1857,8 @@ app2 🧪 test:
1709
1857
  image: aquasec/trivy:0.38.3
1710
1858
  variables: {}
1711
1859
  script:
1712
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1713
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1860
+ - collapseable_section_start "injectvars" "Injecting variables"
1861
+ - collapseable_section_end "injectvars"
1714
1862
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" app2
1715
1863
  artifacts:
1716
1864
  paths:
@@ -1731,17 +1879,16 @@ app2 🧪 test:
1731
1879
  KUBERNETES_MEMORY_REQUEST: 200Mi
1732
1880
  KUBERNETES_MEMORY_LIMIT: 400Mi
1733
1881
  script:
1734
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1882
+ - collapseable_section_start "injectvars" "Injecting variables"
1735
1883
  - export ENV_SHORT="dev"
1736
1884
  - export APP_DIR="app2"
1737
1885
  - export ENV_TYPE="dev"
1738
1886
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1739
1887
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1740
1888
  - 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")"
1741
- - export HOST="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1889
+ - export HOSTNAME="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1742
1890
  - export ROOT_URL="https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1743
- - export HOST_INTERNAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1744
- - export HOST_CANONICAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1891
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1745
1892
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1746
1893
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
1747
1894
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -1761,22 +1908,22 @@ app2 🧪 test:
1761
1908
 
1762
1909
  value from app1:
1763
1910
  -------
1764
- \${multiline_from_app1}
1911
+ Unresolvable reference: \${app2:multiline_from_app1}
1765
1912
  --------
1766
1913
  "
1767
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
1914
+ - 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\\",\\"foo\\",\\"multiline\\"]"
1768
1915
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
1769
1916
  - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app2"
1770
1917
  - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2"
1771
1918
  - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
1772
1919
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
1773
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1774
- - echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
1920
+ - collapseable_section_end "injectvars"
1921
+ - collapseable_section_start "prepare" "Prepare..."
1775
1922
  - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app2_GCLOUD_DEPLOY_credentialsKey")
1776
1923
  - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
1777
1924
  - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
1778
- - echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
1779
- - echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
1925
+ - collapseable_section_end "prepare"
1926
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
1780
1927
  - |
1781
1928
  cat > ____envvars.yaml <<EOF
1782
1929
  ENV_SHORT: |-
@@ -1786,58 +1933,56 @@ app2 🧪 test:
1786
1933
  ENV_TYPE: |-
1787
1934
  dev
1788
1935
  BUILD_INFO_BUILD_ID: |-
1789
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1936
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
1790
1937
  BUILD_INFO_BUILD_TIME: |-
1791
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1938
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
1792
1939
  BUILD_INFO_CURRENT_VERSION: |-
1793
- $(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 's/^/ /')
1794
- HOST: |-
1795
- $(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1940
+ $(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/^/ /')
1941
+ HOSTNAME: |-
1942
+ $(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1796
1943
  ROOT_URL: |-
1797
- $(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1798
- HOST_INTERNAL: |-
1799
- $(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1800
- HOST_CANONICAL: |-
1801
- $(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1944
+ $(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1945
+ HOSTNAME_INTERNAL: |-
1946
+ $(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1802
1947
  ROOT_URL_INTERNAL: |-
1803
- $(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
1948
+ $(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
1804
1949
  DEPLOY_CLOUD_RUN_PROJECT_ID: |-
1805
1950
  asdf
1806
1951
  DEPLOY_CLOUD_RUN_REGION: |-
1807
1952
  asia-east1
1808
1953
  GCLOUD_RUN_canonicalHostSuffix: |-
1809
- $(printf %s "$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
1954
+ $(printf %s "$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
1810
1955
  foo: |-
1811
1956
  foo-value
1812
1957
  multiline: |-
1813
- $(printf %s "app2 yeah
1814
- app2 yeah2
1815
- app2 yeah3
1816
-
1817
- app2 single quote: '
1818
- app2 doouble quote: \\"
1819
-
1820
- the url of self: \\"https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
1821
- the url of app1: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
1822
-
1823
- value from app1:
1824
- -------
1825
- \${multiline_from_app1}
1826
- --------
1827
- " | sed 's/^/ /')
1958
+ app2 yeah
1959
+ app2 yeah2
1960
+ app2 yeah3
1961
+
1962
+ app2 single quote: '
1963
+ app2 doouble quote: "
1964
+
1965
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
1966
+ the url of app1: "$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
1967
+
1968
+ value from app1:
1969
+ -------
1970
+ Unresolvable reference: \${app2:multiline_from_app1}
1971
+ --------
1972
+
1828
1973
  _ALL_ENV_VAR_KEYS: |-
1829
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
1974
+ ["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","foo","multiline"]
1830
1975
 
1831
1976
  EOF
1832
- - echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
1833
- - echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
1977
+ - collapseable_section_end "writeenvvars"
1978
+ - collapseable_section_start "deploy" "Deploy to cloud run"
1834
1979
  - gcloud run deploy pan-test-app-dev-app2 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app2:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app2,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-app2 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
1835
- - echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
1836
- - echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
1980
+ - collapseable_section_end "deploy"
1981
+ - collapseable_section_start "cleanup" "Cleanup"
1837
1982
  - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-dev-app2 --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=asdf --region=asia-east1 --quiet $revisionname ; done
1838
1983
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app2@$version --quiet --delete-tags; done
1839
1984
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2@$version --quiet --delete-tags; done
1840
- - echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
1985
+ - collapseable_section_end "cleanup"
1841
1986
  - echo 'Uploading SBOM to Dependency Track'
1842
1987
  - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app2" "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
1843
1988
  - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
@@ -1879,9 +2024,9 @@ app2 🧪 test:
1879
2024
  KUBERNETES_MEMORY_LIMIT: 400Mi
1880
2025
  GIT_STRATEGY: none
1881
2026
  script:
1882
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2027
+ - collapseable_section_start "injectvars" "Injecting variables"
1883
2028
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
1884
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2029
+ - collapseable_section_end "injectvars"
1885
2030
  - set +e
1886
2031
  - gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app2_GCLOUD_DEPLOY_credentialsKey")
1887
2032
  - gcloud run services delete pan-test-app-dev-app2 --project=asdf --region=asia-east1
@@ -1917,17 +2062,16 @@ app2 🧪 test:
1917
2062
  KUBERNETES_MEMORY_REQUEST: 1Gi
1918
2063
  KUBERNETES_MEMORY_LIMIT: 4Gi
1919
2064
  script:
1920
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2065
+ - collapseable_section_start "injectvars" "Injecting variables"
1921
2066
  - export ENV_SHORT="review"
1922
2067
  - export APP_DIR="app2"
1923
2068
  - export ENV_TYPE="review"
1924
2069
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1925
2070
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1926
2071
  - 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")"
1927
- - export HOST="$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2072
+ - 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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1928
2073
  - 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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1929
- - export HOST_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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1930
- - export HOST_CANONICAL="$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2074
+ - 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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1931
2075
  - 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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
1932
2076
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
1933
2077
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -1947,24 +2091,57 @@ app2 🧪 test:
1947
2091
 
1948
2092
  value from app1:
1949
2093
  -------
1950
- \${multiline_from_app1}
2094
+ Unresolvable reference: \${app2:multiline_from_app1}
1951
2095
  --------
1952
2096
  "
1953
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
1954
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2097
+ - 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\\",\\"foo\\",\\"multiline\\"]"
2098
+ - collapseable_section_end "injectvars"
2099
+ - collapseable_section_start "write-dotenv-app2" "write dot env for app2"
2100
+ - |-
2101
+ cat <<EOF > app2/.env
2102
+ ENV_SHORT=review
2103
+ APP_DIR=app2
2104
+ ENV_TYPE=review
2105
+ HOSTNAME=$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2106
+ ROOT_URL=$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2107
+ HOSTNAME_INTERNAL=$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2108
+ ROOT_URL_INTERNAL=$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2109
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
2110
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
2111
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_app2_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
2112
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
2113
+ foo=foo-value
2114
+ multiline=$(printf %s "app2 yeah
2115
+ app2 yeah2
2116
+ app2 yeah3
2117
+
2118
+ app2 single quote: '
2119
+ app2 doouble quote: \\"
2120
+
2121
+ the url of self: \\"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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2122
+ the url of app1: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2123
+
2124
+ value from app1:
2125
+ -------
2126
+ Unresolvable reference: \${app2:multiline_from_app1}
2127
+ --------
2128
+ " | escapeForDotEnv)
2129
+ _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","foo","multiline"]
2130
+ EOF
2131
+ - collapseable_section_end "write-dotenv-app2"
1955
2132
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app2/__build_info.json
1956
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2133
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1957
2134
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1958
2135
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1959
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2136
+ - collapseable_section_end "nodeinstall"
1960
2137
  - cd app2
1961
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2138
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1962
2139
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1963
2140
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1964
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1965
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
2141
+ - collapseable_section_end "nodeinstall"
2142
+ - collapseable_section_start "yarninstall" "Yarn install"
1966
2143
  - yarn install --immutable
1967
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
2144
+ - collapseable_section_end "yarninstall"
1968
2145
  - yarn build
1969
2146
  cache:
1970
2147
  - key: app2-yarn
@@ -1975,15 +2152,13 @@ app2 🧪 test:
1975
2152
  policy: pull-push
1976
2153
  paths:
1977
2154
  - app2/node_modules
1978
- - key: app2-next-cache
1979
- policy: pull-push
1980
- paths:
1981
- - app2/.next/cache
1982
2155
  artifacts:
1983
2156
  paths:
1984
2157
  - app2/__build_info.json
1985
2158
  - app2/.next
1986
2159
  - app2/dist
2160
+ exclude:
2161
+ - app2/.env
1987
2162
  expire_in: 1 day
1988
2163
  when: always
1989
2164
  reports: {}
@@ -2009,7 +2184,7 @@ app2 🧪 test:
2009
2184
  KUBERNETES_MEMORY_REQUEST: 1Gi
2010
2185
  KUBERNETES_MEMORY_LIMIT: 2Gi
2011
2186
  script:
2012
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2187
+ - collapseable_section_start "injectvars" "Injecting variables"
2013
2188
  - export APP_DIR="app2"
2014
2189
  - export DOCKER_BUILD_CONTEXT="."
2015
2190
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
@@ -2025,20 +2200,20 @@ app2 🧪 test:
2025
2200
  COPY --chown=node:node app2/yarn.lock /app/app2/yarn.lock
2026
2201
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2027
2202
  COPY --chown=node:node .yarn /app/.yarn"
2028
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2203
+ - collapseable_section_end "injectvars"
2029
2204
  - ensureNodeDockerfile
2030
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
2205
+ - collapseable_section_start "docker-login" "Docker Login"
2031
2206
  - gcloud auth activate-service-account --key-file=<(echo "$CL_review_app2_GCLOUD_DEPLOY_credentialsKey")
2032
2207
  - gcloud auth configure-docker asia-east1-docker.pkg.dev
2033
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
2034
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
2208
+ - collapseable_section_end "docker-login"
2209
+ - collapseable_section_start "docker-build" "Docker build"
2035
2210
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
2036
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
2037
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
2211
+ - collapseable_section_end "docker-build"
2212
+ - collapseable_section_start "docker-push" "Docker push and tag"
2038
2213
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
2039
2214
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
2040
2215
  - docker push $DOCKER_CACHE_IMAGE
2041
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
2216
+ - collapseable_section_end "docker-push"
2042
2217
  cache:
2043
2218
  - key: app2-yarn
2044
2219
  policy: pull
@@ -2055,8 +2230,8 @@ app2 🧪 test:
2055
2230
  image: aquasec/trivy:0.38.3
2056
2231
  variables: {}
2057
2232
  script:
2058
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2059
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2233
+ - collapseable_section_start "injectvars" "Injecting variables"
2234
+ - collapseable_section_end "injectvars"
2060
2235
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" app2
2061
2236
  artifacts:
2062
2237
  paths:
@@ -2075,17 +2250,16 @@ app2 🧪 test:
2075
2250
  KUBERNETES_MEMORY_REQUEST: 200Mi
2076
2251
  KUBERNETES_MEMORY_LIMIT: 400Mi
2077
2252
  script:
2078
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2253
+ - collapseable_section_start "injectvars" "Injecting variables"
2079
2254
  - export ENV_SHORT="review"
2080
2255
  - export APP_DIR="app2"
2081
2256
  - export ENV_TYPE="review"
2082
2257
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2083
2258
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2084
2259
  - 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")"
2085
- - export HOST="$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2260
+ - 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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2086
2261
  - 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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2087
- - export HOST_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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2088
- - export HOST_CANONICAL="$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2262
+ - 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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2089
2263
  - 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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2090
2264
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
2091
2265
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -2105,22 +2279,22 @@ app2 🧪 test:
2105
2279
 
2106
2280
  value from app1:
2107
2281
  -------
2108
- \${multiline_from_app1}
2282
+ Unresolvable reference: \${app2:multiline_from_app1}
2109
2283
  --------
2110
2284
  "
2111
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
2285
+ - 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\\",\\"foo\\",\\"multiline\\"]"
2112
2286
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
2113
2287
  - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
2114
2288
  - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2"
2115
2289
  - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
2116
2290
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
2117
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2118
- - echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
2291
+ - collapseable_section_end "injectvars"
2292
+ - collapseable_section_start "prepare" "Prepare..."
2119
2293
  - gcloud auth activate-service-account --key-file=<(echo "$CL_review_app2_GCLOUD_DEPLOY_credentialsKey")
2120
2294
  - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
2121
2295
  - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
2122
- - echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
2123
- - echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
2296
+ - collapseable_section_end "prepare"
2297
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
2124
2298
  - |
2125
2299
  cat > ____envvars.yaml <<EOF
2126
2300
  ENV_SHORT: |-
@@ -2130,61 +2304,59 @@ app2 🧪 test:
2130
2304
  ENV_TYPE: |-
2131
2305
  review
2132
2306
  BUILD_INFO_BUILD_ID: |-
2133
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2307
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
2134
2308
  BUILD_INFO_BUILD_TIME: |-
2135
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2309
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
2136
2310
  BUILD_INFO_CURRENT_VERSION: |-
2137
- $(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 's/^/ /')
2138
- HOST: |-
2139
- $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2311
+ $(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/^/ /')
2312
+ HOSTNAME: |-
2313
+ $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2140
2314
  ROOT_URL: |-
2141
- $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2142
- HOST_INTERNAL: |-
2143
- $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2144
- HOST_CANONICAL: |-
2145
- $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2315
+ $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2316
+ HOSTNAME_INTERNAL: |-
2317
+ $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2146
2318
  ROOT_URL_INTERNAL: |-
2147
- $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2319
+ $(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2148
2320
  DEPLOY_CLOUD_RUN_PROJECT_ID: |-
2149
2321
  asdf
2150
2322
  DEPLOY_CLOUD_RUN_REGION: |-
2151
2323
  asia-east1
2152
2324
  GCLOUD_RUN_canonicalHostSuffix: |-
2153
- $(printf %s "$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
2325
+ $(printf %s "$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
2154
2326
  foo: |-
2155
2327
  foo-value
2156
2328
  multiline: |-
2157
- $(printf %s "app2 yeah
2158
- app2 yeah2
2159
- app2 yeah3
2160
-
2161
- app2 single quote: '
2162
- app2 doouble quote: \\"
2163
-
2164
- the url of self: \\"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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2165
- the url of app1: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2166
-
2167
- value from app1:
2168
- -------
2169
- \${multiline_from_app1}
2170
- --------
2171
- " | sed 's/^/ /')
2329
+ app2 yeah
2330
+ app2 yeah2
2331
+ app2 yeah3
2332
+
2333
+ app2 single quote: '
2334
+ app2 doouble quote: "
2335
+
2336
+ the url of self: "$(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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
2337
+ the url of app1: "$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
2338
+
2339
+ value from app1:
2340
+ -------
2341
+ Unresolvable reference: \${app2:multiline_from_app1}
2342
+ --------
2343
+
2172
2344
  _ALL_ENV_VAR_KEYS: |-
2173
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
2345
+ ["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","foo","multiline"]
2174
2346
 
2175
2347
  EOF
2176
- - echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
2177
- - echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
2348
+ - collapseable_section_end "writeenvvars"
2349
+ - collapseable_section_start "deploy" "Deploy to cloud run"
2178
2350
  - 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"; })-app2" | awk '{print tolower($0)}') --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app2,app-name=test-app,env-type=review,env-name=review,build-type=node,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"; })-app2" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
2179
- - echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
2180
- - echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
2351
+ - collapseable_section_end "deploy"
2352
+ - collapseable_section_start "cleanup" "Cleanup"
2181
2353
  - gcloud run revisions list --project=asdf --region=asia-east1 --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"; })-app2" | 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=asdf --region=asia-east1 --quiet $revisionname ; done
2182
2354
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2/$([ -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 asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2/$([ -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
2183
2355
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2@$version --quiet --delete-tags; done
2184
2356
  - set +e
2185
2357
  - gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2 --quiet --delete-tags
2186
2358
  - set -e
2187
- - echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
2359
+ - collapseable_section_end "cleanup"
2188
2360
  - echo 'Uploading SBOM to Dependency Track'
2189
2361
  - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app2" "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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
2190
2362
  - echo "CL_GITLAB_ENVIRONMENT_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"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
@@ -2224,9 +2396,9 @@ app2 🧪 test:
2224
2396
  KUBERNETES_MEMORY_LIMIT: 400Mi
2225
2397
  GIT_STRATEGY: none
2226
2398
  script:
2227
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2399
+ - collapseable_section_start "injectvars" "Injecting variables"
2228
2400
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
2229
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2401
+ - collapseable_section_end "injectvars"
2230
2402
  - set +e
2231
2403
  - gcloud auth activate-service-account --key-file=<(echo "$CL_review_app2_GCLOUD_DEPLOY_credentialsKey")
2232
2404
  - 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"; })-app2" | awk '{print tolower($0)}') --project=asdf --region=asia-east1
@@ -2263,17 +2435,16 @@ app2 🧪 test:
2263
2435
  KUBERNETES_MEMORY_REQUEST: 1Gi
2264
2436
  KUBERNETES_MEMORY_LIMIT: 4Gi
2265
2437
  script:
2266
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2438
+ - collapseable_section_start "injectvars" "Injecting variables"
2267
2439
  - export ENV_SHORT="stage"
2268
2440
  - export APP_DIR="app2"
2269
2441
  - export ENV_TYPE="stage"
2270
2442
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2271
2443
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2272
2444
  - 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")"
2273
- - export HOST="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2445
+ - export HOSTNAME="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2274
2446
  - export ROOT_URL="https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2275
- - export HOST_INTERNAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2276
- - export HOST_CANONICAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2447
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2277
2448
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2278
2449
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
2279
2450
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -2293,24 +2464,57 @@ app2 🧪 test:
2293
2464
 
2294
2465
  value from app1:
2295
2466
  -------
2296
- \${multiline_from_app1}
2467
+ Unresolvable reference: \${app2:multiline_from_app1}
2297
2468
  --------
2298
2469
  "
2299
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
2300
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2470
+ - 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\\",\\"foo\\",\\"multiline\\"]"
2471
+ - collapseable_section_end "injectvars"
2472
+ - collapseable_section_start "write-dotenv-app2" "write dot env for app2"
2473
+ - |-
2474
+ cat <<EOF > app2/.env
2475
+ ENV_SHORT=stage
2476
+ APP_DIR=app2
2477
+ ENV_TYPE=stage
2478
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2479
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2480
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2481
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2482
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
2483
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
2484
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_app2_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
2485
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
2486
+ foo=foo-value
2487
+ multiline=$(printf %s "app2 yeah
2488
+ app2 yeah2
2489
+ app2 yeah3
2490
+
2491
+ app2 single quote: '
2492
+ app2 doouble quote: \\"
2493
+
2494
+ the url of self: \\"https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2495
+ the url of app1: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2496
+
2497
+ value from app1:
2498
+ -------
2499
+ Unresolvable reference: \${app2:multiline_from_app1}
2500
+ --------
2501
+ " | escapeForDotEnv)
2502
+ _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","foo","multiline"]
2503
+ EOF
2504
+ - collapseable_section_end "write-dotenv-app2"
2301
2505
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app2/__build_info.json
2302
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2506
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2303
2507
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2304
2508
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2305
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2509
+ - collapseable_section_end "nodeinstall"
2306
2510
  - cd app2
2307
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2511
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2308
2512
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2309
2513
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2310
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2311
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
2514
+ - collapseable_section_end "nodeinstall"
2515
+ - collapseable_section_start "yarninstall" "Yarn install"
2312
2516
  - yarn install --immutable
2313
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
2517
+ - collapseable_section_end "yarninstall"
2314
2518
  - yarn build
2315
2519
  cache:
2316
2520
  - key: app2-yarn
@@ -2321,15 +2525,13 @@ app2 🧪 test:
2321
2525
  policy: pull-push
2322
2526
  paths:
2323
2527
  - app2/node_modules
2324
- - key: app2-next-cache
2325
- policy: pull-push
2326
- paths:
2327
- - app2/.next/cache
2328
2528
  artifacts:
2329
2529
  paths:
2330
2530
  - app2/__build_info.json
2331
2531
  - app2/.next
2332
2532
  - app2/dist
2533
+ exclude:
2534
+ - app2/.env
2333
2535
  expire_in: 1 day
2334
2536
  when: always
2335
2537
  reports: {}
@@ -2355,7 +2557,7 @@ app2 🧪 test:
2355
2557
  KUBERNETES_MEMORY_REQUEST: 1Gi
2356
2558
  KUBERNETES_MEMORY_LIMIT: 2Gi
2357
2559
  script:
2358
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2560
+ - collapseable_section_start "injectvars" "Injecting variables"
2359
2561
  - export APP_DIR="app2"
2360
2562
  - export DOCKER_BUILD_CONTEXT="."
2361
2563
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
@@ -2371,20 +2573,20 @@ app2 🧪 test:
2371
2573
  COPY --chown=node:node app2/yarn.lock /app/app2/yarn.lock
2372
2574
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2373
2575
  COPY --chown=node:node .yarn /app/.yarn"
2374
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2576
+ - collapseable_section_end "injectvars"
2375
2577
  - ensureNodeDockerfile
2376
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
2578
+ - collapseable_section_start "docker-login" "Docker Login"
2377
2579
  - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app2_GCLOUD_DEPLOY_credentialsKey")
2378
2580
  - gcloud auth configure-docker asia-east1-docker.pkg.dev
2379
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
2380
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
2581
+ - collapseable_section_end "docker-login"
2582
+ - collapseable_section_start "docker-build" "Docker build"
2381
2583
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
2382
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
2383
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
2584
+ - collapseable_section_end "docker-build"
2585
+ - collapseable_section_start "docker-push" "Docker push and tag"
2384
2586
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
2385
2587
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
2386
2588
  - docker push $DOCKER_CACHE_IMAGE
2387
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
2589
+ - collapseable_section_end "docker-push"
2388
2590
  cache:
2389
2591
  - key: app2-yarn
2390
2592
  policy: pull
@@ -2401,8 +2603,8 @@ app2 🧪 test:
2401
2603
  image: aquasec/trivy:0.38.3
2402
2604
  variables: {}
2403
2605
  script:
2404
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2405
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2606
+ - collapseable_section_start "injectvars" "Injecting variables"
2607
+ - collapseable_section_end "injectvars"
2406
2608
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" app2
2407
2609
  artifacts:
2408
2610
  paths:
@@ -2421,17 +2623,16 @@ app2 🧪 test:
2421
2623
  KUBERNETES_MEMORY_REQUEST: 200Mi
2422
2624
  KUBERNETES_MEMORY_LIMIT: 400Mi
2423
2625
  script:
2424
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2626
+ - collapseable_section_start "injectvars" "Injecting variables"
2425
2627
  - export ENV_SHORT="stage"
2426
2628
  - export APP_DIR="app2"
2427
2629
  - export ENV_TYPE="stage"
2428
2630
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2429
2631
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2430
2632
  - 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")"
2431
- - export HOST="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2633
+ - export HOSTNAME="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2432
2634
  - export ROOT_URL="https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2433
- - export HOST_INTERNAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2434
- - export HOST_CANONICAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2635
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2435
2636
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2436
2637
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
2437
2638
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -2451,22 +2652,22 @@ app2 🧪 test:
2451
2652
 
2452
2653
  value from app1:
2453
2654
  -------
2454
- \${multiline_from_app1}
2655
+ Unresolvable reference: \${app2:multiline_from_app1}
2455
2656
  --------
2456
2657
  "
2457
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
2658
+ - 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\\",\\"foo\\",\\"multiline\\"]"
2458
2659
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
2459
2660
  - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app2"
2460
2661
  - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2"
2461
2662
  - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
2462
2663
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
2463
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2464
- - echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
2664
+ - collapseable_section_end "injectvars"
2665
+ - collapseable_section_start "prepare" "Prepare..."
2465
2666
  - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app2_GCLOUD_DEPLOY_credentialsKey")
2466
2667
  - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
2467
2668
  - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
2468
- - echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
2469
- - echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
2669
+ - collapseable_section_end "prepare"
2670
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
2470
2671
  - |
2471
2672
  cat > ____envvars.yaml <<EOF
2472
2673
  ENV_SHORT: |-
@@ -2476,58 +2677,56 @@ app2 🧪 test:
2476
2677
  ENV_TYPE: |-
2477
2678
  stage
2478
2679
  BUILD_INFO_BUILD_ID: |-
2479
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2680
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
2480
2681
  BUILD_INFO_BUILD_TIME: |-
2481
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2682
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
2482
2683
  BUILD_INFO_CURRENT_VERSION: |-
2483
- $(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 's/^/ /')
2484
- HOST: |-
2485
- $(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2684
+ $(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/^/ /')
2685
+ HOSTNAME: |-
2686
+ $(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2486
2687
  ROOT_URL: |-
2487
- $(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2488
- HOST_INTERNAL: |-
2489
- $(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2490
- HOST_CANONICAL: |-
2491
- $(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2688
+ $(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2689
+ HOSTNAME_INTERNAL: |-
2690
+ $(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2492
2691
  ROOT_URL_INTERNAL: |-
2493
- $(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2692
+ $(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2494
2693
  DEPLOY_CLOUD_RUN_PROJECT_ID: |-
2495
2694
  asdf
2496
2695
  DEPLOY_CLOUD_RUN_REGION: |-
2497
2696
  asia-east1
2498
2697
  GCLOUD_RUN_canonicalHostSuffix: |-
2499
- $(printf %s "$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
2698
+ $(printf %s "$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
2500
2699
  foo: |-
2501
2700
  foo-value
2502
2701
  multiline: |-
2503
- $(printf %s "app2 yeah
2504
- app2 yeah2
2505
- app2 yeah3
2506
-
2507
- app2 single quote: '
2508
- app2 doouble quote: \\"
2509
-
2510
- the url of self: \\"https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2511
- the url of app1: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2512
-
2513
- value from app1:
2514
- -------
2515
- \${multiline_from_app1}
2516
- --------
2517
- " | sed 's/^/ /')
2702
+ app2 yeah
2703
+ app2 yeah2
2704
+ app2 yeah3
2705
+
2706
+ app2 single quote: '
2707
+ app2 doouble quote: "
2708
+
2709
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
2710
+ the url of app1: "$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
2711
+
2712
+ value from app1:
2713
+ -------
2714
+ Unresolvable reference: \${app2:multiline_from_app1}
2715
+ --------
2716
+
2518
2717
  _ALL_ENV_VAR_KEYS: |-
2519
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
2718
+ ["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","foo","multiline"]
2520
2719
 
2521
2720
  EOF
2522
- - echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
2523
- - echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
2721
+ - collapseable_section_end "writeenvvars"
2722
+ - collapseable_section_start "deploy" "Deploy to cloud run"
2524
2723
  - gcloud run deploy pan-test-app-stage-app2 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app2:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app2,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-app2 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
2525
- - echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
2526
- - echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
2724
+ - collapseable_section_end "deploy"
2725
+ - collapseable_section_start "cleanup" "Cleanup"
2527
2726
  - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-stage-app2 --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=asdf --region=asia-east1 --quiet $revisionname ; done
2528
2727
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app2@$version --quiet --delete-tags; done
2529
2728
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2@$version --quiet --delete-tags; done
2530
- - echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
2729
+ - collapseable_section_end "cleanup"
2531
2730
  - echo 'Uploading SBOM to Dependency Track'
2532
2731
  - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app2" "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
2533
2732
  - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
@@ -2560,9 +2759,9 @@ app2 🧪 test:
2560
2759
  KUBERNETES_MEMORY_LIMIT: 400Mi
2561
2760
  GIT_STRATEGY: none
2562
2761
  script:
2563
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2762
+ - collapseable_section_start "injectvars" "Injecting variables"
2564
2763
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
2565
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2764
+ - collapseable_section_end "injectvars"
2566
2765
  - set +e
2567
2766
  - gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app2_GCLOUD_DEPLOY_credentialsKey")
2568
2767
  - gcloud run services delete pan-test-app-stage-app2 --project=asdf --region=asia-east1
@@ -2596,17 +2795,16 @@ app2 🧪 test:
2596
2795
  KUBERNETES_MEMORY_REQUEST: 1Gi
2597
2796
  KUBERNETES_MEMORY_LIMIT: 4Gi
2598
2797
  script:
2599
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2798
+ - collapseable_section_start "injectvars" "Injecting variables"
2600
2799
  - export ENV_SHORT="prod"
2601
2800
  - export APP_DIR="app2"
2602
2801
  - export ENV_TYPE="prod"
2603
2802
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2604
2803
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2605
2804
  - 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")"
2606
- - export HOST="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2805
+ - export HOSTNAME="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2607
2806
  - export ROOT_URL="https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2608
- - export HOST_INTERNAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2609
- - export HOST_CANONICAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2807
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2610
2808
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2611
2809
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
2612
2810
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -2626,24 +2824,57 @@ app2 🧪 test:
2626
2824
 
2627
2825
  value from app1:
2628
2826
  -------
2629
- \${multiline_from_app1}
2827
+ Unresolvable reference: \${app2:multiline_from_app1}
2630
2828
  --------
2631
2829
  "
2632
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
2633
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2830
+ - 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\\",\\"foo\\",\\"multiline\\"]"
2831
+ - collapseable_section_end "injectvars"
2832
+ - collapseable_section_start "write-dotenv-app2" "write dot env for app2"
2833
+ - |-
2834
+ cat <<EOF > app2/.env
2835
+ ENV_SHORT=prod
2836
+ APP_DIR=app2
2837
+ ENV_TYPE=prod
2838
+ HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2839
+ ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2840
+ HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2841
+ ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
2842
+ DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
2843
+ DEPLOY_CLOUD_RUN_REGION=asia-east1
2844
+ GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_app2_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
2845
+ GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
2846
+ foo=foo-value
2847
+ multiline=$(printf %s "app2 yeah
2848
+ app2 yeah2
2849
+ app2 yeah3
2850
+
2851
+ app2 single quote: '
2852
+ app2 doouble quote: \\"
2853
+
2854
+ the url of self: \\"https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2855
+ the url of app1: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2856
+
2857
+ value from app1:
2858
+ -------
2859
+ Unresolvable reference: \${app2:multiline_from_app1}
2860
+ --------
2861
+ " | escapeForDotEnv)
2862
+ _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","foo","multiline"]
2863
+ EOF
2864
+ - collapseable_section_end "write-dotenv-app2"
2634
2865
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app2/__build_info.json
2635
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2866
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2636
2867
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2637
2868
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2638
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2869
+ - collapseable_section_end "nodeinstall"
2639
2870
  - cd app2
2640
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2871
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2641
2872
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2642
2873
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2643
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2644
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
2874
+ - collapseable_section_end "nodeinstall"
2875
+ - collapseable_section_start "yarninstall" "Yarn install"
2645
2876
  - yarn install --immutable
2646
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
2877
+ - collapseable_section_end "yarninstall"
2647
2878
  - yarn build
2648
2879
  cache:
2649
2880
  - key: app2-yarn
@@ -2654,15 +2885,13 @@ app2 🧪 test:
2654
2885
  policy: pull-push
2655
2886
  paths:
2656
2887
  - app2/node_modules
2657
- - key: app2-next-cache
2658
- policy: pull-push
2659
- paths:
2660
- - app2/.next/cache
2661
2888
  artifacts:
2662
2889
  paths:
2663
2890
  - app2/__build_info.json
2664
2891
  - app2/.next
2665
2892
  - app2/dist
2893
+ exclude:
2894
+ - app2/.env
2666
2895
  expire_in: 1 day
2667
2896
  when: always
2668
2897
  reports: {}
@@ -2688,7 +2917,7 @@ app2 🧪 test:
2688
2917
  KUBERNETES_MEMORY_REQUEST: 1Gi
2689
2918
  KUBERNETES_MEMORY_LIMIT: 2Gi
2690
2919
  script:
2691
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2920
+ - collapseable_section_start "injectvars" "Injecting variables"
2692
2921
  - export APP_DIR="app2"
2693
2922
  - export DOCKER_BUILD_CONTEXT="."
2694
2923
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
@@ -2704,20 +2933,20 @@ app2 🧪 test:
2704
2933
  COPY --chown=node:node app2/yarn.lock /app/app2/yarn.lock
2705
2934
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2706
2935
  COPY --chown=node:node .yarn /app/.yarn"
2707
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2936
+ - collapseable_section_end "injectvars"
2708
2937
  - ensureNodeDockerfile
2709
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
2938
+ - collapseable_section_start "docker-login" "Docker Login"
2710
2939
  - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app2_GCLOUD_DEPLOY_credentialsKey")
2711
2940
  - gcloud auth configure-docker asia-east1-docker.pkg.dev
2712
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
2713
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
2941
+ - collapseable_section_end "docker-login"
2942
+ - collapseable_section_start "docker-build" "Docker build"
2714
2943
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
2715
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
2716
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
2944
+ - collapseable_section_end "docker-build"
2945
+ - collapseable_section_start "docker-push" "Docker push and tag"
2717
2946
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
2718
2947
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
2719
2948
  - docker push $DOCKER_CACHE_IMAGE
2720
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
2949
+ - collapseable_section_end "docker-push"
2721
2950
  cache:
2722
2951
  - key: app2-yarn
2723
2952
  policy: pull
@@ -2734,8 +2963,8 @@ app2 🧪 test:
2734
2963
  image: aquasec/trivy:0.38.3
2735
2964
  variables: {}
2736
2965
  script:
2737
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2738
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2966
+ - collapseable_section_start "injectvars" "Injecting variables"
2967
+ - collapseable_section_end "injectvars"
2739
2968
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" app2
2740
2969
  artifacts:
2741
2970
  paths:
@@ -2754,17 +2983,16 @@ app2 🧪 test:
2754
2983
  KUBERNETES_MEMORY_REQUEST: 200Mi
2755
2984
  KUBERNETES_MEMORY_LIMIT: 400Mi
2756
2985
  script:
2757
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2986
+ - collapseable_section_start "injectvars" "Injecting variables"
2758
2987
  - export ENV_SHORT="prod"
2759
2988
  - export APP_DIR="app2"
2760
2989
  - export ENV_TYPE="prod"
2761
2990
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2762
2991
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2763
2992
  - 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")"
2764
- - export HOST="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2993
+ - export HOSTNAME="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2765
2994
  - export ROOT_URL="https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2766
- - export HOST_INTERNAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2767
- - export HOST_CANONICAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2995
+ - export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2768
2996
  - export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
2769
2997
  - export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
2770
2998
  - export DEPLOY_CLOUD_RUN_REGION="asia-east1"
@@ -2784,22 +3012,22 @@ app2 🧪 test:
2784
3012
 
2785
3013
  value from app1:
2786
3014
  -------
2787
- \${multiline_from_app1}
3015
+ Unresolvable reference: \${app2:multiline_from_app1}
2788
3016
  --------
2789
3017
  "
2790
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"multiline\\"]"
3018
+ - 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\\",\\"foo\\",\\"multiline\\"]"
2791
3019
  - export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
2792
3020
  - export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app2"
2793
3021
  - export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2"
2794
3022
  - export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
2795
3023
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
2796
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2797
- - echo -e "\\e[0Ksection_start:$(date +%s):prepare[collapsed=true]\\r\\e[0KPrepare..."
3024
+ - collapseable_section_end "injectvars"
3025
+ - collapseable_section_start "prepare" "Prepare..."
2798
3026
  - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app2_GCLOUD_DEPLOY_credentialsKey")
2799
3027
  - export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
2800
3028
  - 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
2801
- - echo -e "\\e[0Ksection_end:$(date +%s):prepare\\r\\e[0K"
2802
- - echo -e "\\e[0Ksection_start:$(date +%s):writeenvvars[collapsed=true]\\r\\e[0KWrite env vars to file"
3029
+ - collapseable_section_end "prepare"
3030
+ - collapseable_section_start "writeenvvars" "Write env vars to file"
2803
3031
  - |
2804
3032
  cat > ____envvars.yaml <<EOF
2805
3033
  ENV_SHORT: |-
@@ -2809,58 +3037,56 @@ app2 🧪 test:
2809
3037
  ENV_TYPE: |-
2810
3038
  prod
2811
3039
  BUILD_INFO_BUILD_ID: |-
2812
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3040
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
2813
3041
  BUILD_INFO_BUILD_TIME: |-
2814
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3042
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
2815
3043
  BUILD_INFO_CURRENT_VERSION: |-
2816
- $(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 's/^/ /')
2817
- HOST: |-
2818
- $(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3044
+ $(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/^/ /')
3045
+ HOSTNAME: |-
3046
+ $(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2819
3047
  ROOT_URL: |-
2820
- $(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2821
- HOST_INTERNAL: |-
2822
- $(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
2823
- HOST_CANONICAL: |-
2824
- $(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3048
+ $(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
3049
+ HOSTNAME_INTERNAL: |-
3050
+ $(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2825
3051
  ROOT_URL_INTERNAL: |-
2826
- $(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
3052
+ $(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
2827
3053
  DEPLOY_CLOUD_RUN_PROJECT_ID: |-
2828
3054
  asdf
2829
3055
  DEPLOY_CLOUD_RUN_REGION: |-
2830
3056
  asia-east1
2831
3057
  GCLOUD_RUN_canonicalHostSuffix: |-
2832
- $(printf %s "$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | sed 's/^/ /')
3058
+ $(printf %s "$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
2833
3059
  foo: |-
2834
3060
  foo-value
2835
3061
  multiline: |-
2836
- $(printf %s "app2 yeah
2837
- app2 yeah2
2838
- app2 yeah3
2839
-
2840
- app2 single quote: '
2841
- app2 doouble quote: \\"
2842
-
2843
- the url of self: \\"https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2844
- the url of app1: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
2845
-
2846
- value from app1:
2847
- -------
2848
- \${multiline_from_app1}
2849
- --------
2850
- " | sed 's/^/ /')
3062
+ app2 yeah
3063
+ app2 yeah2
3064
+ app2 yeah3
3065
+
3066
+ app2 single quote: '
3067
+ app2 doouble quote: "
3068
+
3069
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
3070
+ the url of app1: "$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
3071
+
3072
+ value from app1:
3073
+ -------
3074
+ Unresolvable reference: \${app2:multiline_from_app1}
3075
+ --------
3076
+
2851
3077
  _ALL_ENV_VAR_KEYS: |-
2852
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","multiline"]
3078
+ ["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","foo","multiline"]
2853
3079
 
2854
3080
  EOF
2855
- - echo -e "\\e[0Ksection_end:$(date +%s):writeenvvars\\r\\e[0K"
2856
- - echo -e "\\e[0Ksection_start:$(date +%s):deploy[collapsed=true]\\r\\e[0KDeploy to cloud run"
3081
+ - collapseable_section_end "writeenvvars"
3082
+ - collapseable_section_start "deploy" "Deploy to cloud run"
2857
3083
  - gcloud run deploy pan-test-app-prod-app2 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app2:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app2,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-app2 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
2858
- - echo -e "\\e[0Ksection_end:$(date +%s):deploy\\r\\e[0K"
2859
- - echo -e "\\e[0Ksection_start:$(date +%s):cleanup[collapsed=true]\\r\\e[0KCleanup"
3084
+ - collapseable_section_end "deploy"
3085
+ - collapseable_section_start "cleanup" "Cleanup"
2860
3086
  - gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-prod-app2 --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=asdf --region=asia-east1 --quiet $revisionname ; done
2861
3087
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app2@$version --quiet --delete-tags; done
2862
3088
  - gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2@$version --quiet --delete-tags; done
2863
- - echo -e "\\e[0Ksection_end:$(date +%s):cleanup\\r\\e[0K"
3089
+ - collapseable_section_end "cleanup"
2864
3090
  - echo 'Uploading SBOM to Dependency Track'
2865
3091
  - /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app2" "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
2866
3092
  - echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
@@ -2893,9 +3119,9 @@ app2 🧪 test:
2893
3119
  KUBERNETES_MEMORY_LIMIT: 400Mi
2894
3120
  GIT_STRATEGY: none
2895
3121
  script:
2896
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3122
+ - collapseable_section_start "injectvars" "Injecting variables"
2897
3123
  - export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
2898
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3124
+ - collapseable_section_end "injectvars"
2899
3125
  - set +e
2900
3126
  - gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app2_GCLOUD_DEPLOY_credentialsKey")
2901
3127
  - gcloud run services delete pan-test-app-prod-app2 --project=asdf --region=asia-east1
@@ -2929,9 +3155,9 @@ kube 🛡 audit:
2929
3155
  KUBERNETES_MEMORY_REQUEST: 1Gi
2930
3156
  KUBERNETES_MEMORY_LIMIT: 4Gi
2931
3157
  script:
2932
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3158
+ - collapseable_section_start "injectvars" "Injecting variables"
2933
3159
  - export APP_PATH="kube"
2934
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3160
+ - collapseable_section_end "injectvars"
2935
3161
  - cd kube
2936
3162
  - yarn npm audit --environment production
2937
3163
  rules:
@@ -2951,21 +3177,21 @@ kube 👮 lint:
2951
3177
  KUBERNETES_MEMORY_REQUEST: 1Gi
2952
3178
  KUBERNETES_MEMORY_LIMIT: 4Gi
2953
3179
  script:
2954
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3180
+ - collapseable_section_start "injectvars" "Injecting variables"
2955
3181
  - export APP_PATH="kube"
2956
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2957
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
3182
+ - collapseable_section_end "injectvars"
3183
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2958
3184
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2959
3185
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2960
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
3186
+ - collapseable_section_end "nodeinstall"
2961
3187
  - cd kube
2962
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
3188
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2963
3189
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2964
3190
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2965
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2966
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
3191
+ - collapseable_section_end "nodeinstall"
3192
+ - collapseable_section_start "yarninstall" "Yarn install"
2967
3193
  - yarn install --immutable
2968
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
3194
+ - collapseable_section_end "yarninstall"
2969
3195
  - yarn lint
2970
3196
  cache:
2971
3197
  - key: kube-yarn
@@ -2992,21 +3218,21 @@ kube 🧪 test:
2992
3218
  KUBERNETES_MEMORY_REQUEST: 1Gi
2993
3219
  KUBERNETES_MEMORY_LIMIT: 4Gi
2994
3220
  script:
2995
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3221
+ - collapseable_section_start "injectvars" "Injecting variables"
2996
3222
  - export APP_PATH="kube"
2997
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2998
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
3223
+ - collapseable_section_end "injectvars"
3224
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2999
3225
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
3000
3226
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
3001
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
3227
+ - collapseable_section_end "nodeinstall"
3002
3228
  - cd kube
3003
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
3229
+ - collapseable_section_start "nodeinstall" "Ensure node version"
3004
3230
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
3005
3231
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
3006
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
3007
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
3232
+ - collapseable_section_end "nodeinstall"
3233
+ - collapseable_section_start "yarninstall" "Yarn install"
3008
3234
  - yarn install --immutable
3009
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
3235
+ - collapseable_section_end "yarninstall"
3010
3236
  - yarn test
3011
3237
  cache:
3012
3238
  - key: kube-yarn
@@ -3033,17 +3259,16 @@ kube 🧪 test:
3033
3259
  KUBERNETES_MEMORY_REQUEST: 1Gi
3034
3260
  KUBERNETES_MEMORY_LIMIT: 4Gi
3035
3261
  script:
3036
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3262
+ - collapseable_section_start "injectvars" "Injecting variables"
3037
3263
  - export ENV_SHORT="dev"
3038
3264
  - export APP_DIR="kube"
3039
3265
  - export ENV_TYPE="dev"
3040
3266
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3041
3267
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3042
3268
  - 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")"
3043
- - export HOST="kube.dev.test-app.pan.panter.cloud"
3269
+ - export HOSTNAME="kube.dev.test-app.pan.panter.cloud"
3044
3270
  - export ROOT_URL="https://kube.dev.test-app.pan.panter.cloud"
3045
- - export HOST_INTERNAL="kube.dev.test-app.pan.panter.cloud"
3046
- - export HOST_CANONICAL="kube.dev.test-app.pan.panter.cloud"
3271
+ - export HOSTNAME_INTERNAL="kube.dev.test-app.pan.panter.cloud"
3047
3272
  - export ROOT_URL_INTERNAL="https://kube.dev.test-app.pan.panter.cloud"
3048
3273
  - export KUBE_NAMESPACE="pan-test-app-dev"
3049
3274
  - export KUBE_APP_NAME="kube"
@@ -3084,21 +3309,71 @@ kube 🧪 test:
3084
3309
 
3085
3310
  --------
3086
3311
  "
3087
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3088
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3312
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3313
+ - collapseable_section_end "injectvars"
3314
+ - collapseable_section_start "write-dotenv-kube" "write dot env for kube"
3315
+ - |-
3316
+ cat <<EOF > kube/.env
3317
+ ENV_SHORT=dev
3318
+ APP_DIR=kube
3319
+ ENV_TYPE=dev
3320
+ HOSTNAME=kube.dev.test-app.pan.panter.cloud
3321
+ ROOT_URL=https://kube.dev.test-app.pan.panter.cloud
3322
+ HOSTNAME_INTERNAL=kube.dev.test-app.pan.panter.cloud
3323
+ ROOT_URL_INTERNAL=https://kube.dev.test-app.pan.panter.cloud
3324
+ KUBE_NAMESPACE=pan-test-app-dev
3325
+ KUBE_APP_NAME=kube
3326
+ KUBE_APP_NAME_PREFIX=
3327
+ multiline_from_app1=$(printf %s "app1 line1
3328
+ app1 line2
3329
+ app1 line3
3330
+
3331
+ the url of self: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3332
+
3333
+
3334
+ app1 single quote: '
3335
+ app1 doouble quote: \\"
3336
+ " | escapeForDotEnv)
3337
+ multiline=$(printf %s "kube yeah
3338
+ kube yeah2
3339
+ kube yeah3
3340
+
3341
+ kube single quote: '
3342
+ kube doouble quote: \\"
3343
+
3344
+ the url of self: \\"https://kube.dev.test-app.pan.panter.cloud\\"
3345
+ the url of app1: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3346
+
3347
+ value from app1:
3348
+ -------
3349
+ app1 line1
3350
+ app1 line2
3351
+ app1 line3
3352
+
3353
+ the url of self: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3354
+
3355
+
3356
+ app1 single quote: '
3357
+ app1 doouble quote: \\"
3358
+
3359
+ --------
3360
+ " | escapeForDotEnv)
3361
+ _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
3362
+ EOF
3363
+ - collapseable_section_end "write-dotenv-kube"
3089
3364
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > kube/__build_info.json
3090
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
3365
+ - collapseable_section_start "nodeinstall" "Ensure node version"
3091
3366
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
3092
3367
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
3093
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
3368
+ - collapseable_section_end "nodeinstall"
3094
3369
  - cd kube
3095
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
3370
+ - collapseable_section_start "nodeinstall" "Ensure node version"
3096
3371
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
3097
3372
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
3098
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
3099
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
3373
+ - collapseable_section_end "nodeinstall"
3374
+ - collapseable_section_start "yarninstall" "Yarn install"
3100
3375
  - yarn install --immutable
3101
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
3376
+ - collapseable_section_end "yarninstall"
3102
3377
  - yarn build
3103
3378
  cache:
3104
3379
  - key: kube-yarn
@@ -3109,15 +3384,13 @@ kube 🧪 test:
3109
3384
  policy: pull-push
3110
3385
  paths:
3111
3386
  - kube/node_modules
3112
- - key: kube-next-cache
3113
- policy: pull-push
3114
- paths:
3115
- - kube/.next/cache
3116
3387
  artifacts:
3117
3388
  paths:
3118
3389
  - kube/__build_info.json
3119
3390
  - kube/.next
3120
3391
  - kube/dist
3392
+ exclude:
3393
+ - kube/.env
3121
3394
  expire_in: 1 day
3122
3395
  when: always
3123
3396
  reports: {}
@@ -3145,7 +3418,7 @@ kube 🧪 test:
3145
3418
  KUBERNETES_MEMORY_REQUEST: 1Gi
3146
3419
  KUBERNETES_MEMORY_LIMIT: 2Gi
3147
3420
  script:
3148
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3421
+ - collapseable_section_start "injectvars" "Injecting variables"
3149
3422
  - export APP_DIR="kube"
3150
3423
  - export DOCKER_BUILD_CONTEXT="."
3151
3424
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -3162,19 +3435,19 @@ kube 🧪 test:
3162
3435
  COPY --chown=node:node kube/yarn.lock /app/kube/yarn.lock
3163
3436
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3164
3437
  COPY --chown=node:node .yarn /app/.yarn"
3165
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3438
+ - collapseable_section_end "injectvars"
3166
3439
  - ensureNodeDockerfile
3167
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
3440
+ - collapseable_section_start "docker-login" "Docker Login"
3168
3441
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
3169
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
3170
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
3442
+ - collapseable_section_end "docker-login"
3443
+ - collapseable_section_start "docker-build" "Docker build"
3171
3444
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
3172
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
3173
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
3445
+ - collapseable_section_end "docker-build"
3446
+ - collapseable_section_start "docker-push" "Docker push and tag"
3174
3447
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
3175
3448
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
3176
3449
  - docker push $DOCKER_CACHE_IMAGE
3177
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
3450
+ - collapseable_section_end "docker-push"
3178
3451
  cache:
3179
3452
  - key: kube-yarn
3180
3453
  policy: pull
@@ -3193,8 +3466,8 @@ kube 🧪 test:
3193
3466
  image: aquasec/trivy:0.38.3
3194
3467
  variables: {}
3195
3468
  script:
3196
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3197
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3469
+ - collapseable_section_start "injectvars" "Injecting variables"
3470
+ - collapseable_section_end "injectvars"
3198
3471
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" kube
3199
3472
  artifacts:
3200
3473
  paths:
@@ -3215,17 +3488,16 @@ kube 🧪 test:
3215
3488
  KUBERNETES_MEMORY_REQUEST: 200Mi
3216
3489
  KUBERNETES_MEMORY_LIMIT: 400Mi
3217
3490
  script:
3218
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3491
+ - collapseable_section_start "injectvars" "Injecting variables"
3219
3492
  - export ENV_SHORT="dev"
3220
3493
  - export APP_DIR="kube"
3221
3494
  - export ENV_TYPE="dev"
3222
3495
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3223
3496
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3224
3497
  - 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")"
3225
- - export HOST="kube.dev.test-app.pan.panter.cloud"
3498
+ - export HOSTNAME="kube.dev.test-app.pan.panter.cloud"
3226
3499
  - export ROOT_URL="https://kube.dev.test-app.pan.panter.cloud"
3227
- - export HOST_INTERNAL="kube.dev.test-app.pan.panter.cloud"
3228
- - export HOST_CANONICAL="kube.dev.test-app.pan.panter.cloud"
3500
+ - export HOSTNAME_INTERNAL="kube.dev.test-app.pan.panter.cloud"
3229
3501
  - export ROOT_URL_INTERNAL="https://kube.dev.test-app.pan.panter.cloud"
3230
3502
  - export KUBE_NAMESPACE="pan-test-app-dev"
3231
3503
  - export KUBE_APP_NAME="kube"
@@ -3266,7 +3538,7 @@ kube 🧪 test:
3266
3538
 
3267
3539
  --------
3268
3540
  "
3269
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3541
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3270
3542
  - export DOCKER_REGISTRY="$CI_REGISTRY"
3271
3543
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/kube"
3272
3544
  - export DOCKER_IMAGE_NAME="dev/kube"
@@ -3278,53 +3550,52 @@ kube 🧪 test:
3278
3550
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
3279
3551
  - export HELM_ARGS=""
3280
3552
  - export COMPONENT_NAME="kube"
3281
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3282
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3553
+ - collapseable_section_end "injectvars"
3283
3554
  - kubectl config set-cluster "kube-pan-test-app-dev-kube" --server="$CL_dev_kube_KUBE_URL" --certificate-authority <(echo $CL_dev_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
3284
3555
  - kubectl config set-credentials "kube-pan-test-app-dev-kube" --token="$CL_dev_kube_KUBE_TOKEN"
3285
3556
  - kubectl config set-context "kube-pan-test-app-dev-kube" --cluster="kube-pan-test-app-dev-kube" --user="kube-pan-test-app-dev-kube" --namespace="pan-test-app-dev"
3286
3557
  - kubectl config use-context "kube-pan-test-app-dev-kube"
3287
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
3558
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
3288
3559
  - |
3289
3560
  cat > __all_values.yml <<EOF
3290
3561
  env:
3291
3562
  secret:
3292
3563
  multiline_from_app1: |-
3293
- $(printf %s "app1 line1
3294
- app1 line2
3295
- app1 line3
3296
-
3297
- the url of self: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3298
-
3299
-
3300
- app1 single quote: '
3301
- app1 doouble quote: \\"
3302
- " | sed 's/^/ /')
3564
+ app1 line1
3565
+ app1 line2
3566
+ app1 line3
3567
+
3568
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
3569
+
3570
+
3571
+ app1 single quote: '
3572
+ app1 doouble quote: "
3573
+
3303
3574
  multiline: |-
3304
- $(printf %s "kube yeah
3305
- kube yeah2
3306
- kube yeah3
3307
-
3308
- kube single quote: '
3309
- kube doouble quote: \\"
3310
-
3311
- the url of self: \\"https://kube.dev.test-app.pan.panter.cloud\\"
3312
- the url of app1: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3313
-
3314
- value from app1:
3315
- -------
3316
- app1 line1
3317
- app1 line2
3318
- app1 line3
3319
-
3320
- the url of self: \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3321
-
3322
-
3323
- app1 single quote: '
3324
- app1 doouble quote: \\"
3325
-
3326
- --------
3327
- " | sed 's/^/ /')
3575
+ kube yeah
3576
+ kube yeah2
3577
+ kube yeah3
3578
+
3579
+ kube single quote: '
3580
+ kube doouble quote: "
3581
+
3582
+ the url of self: "https://kube.dev.test-app.pan.panter.cloud"
3583
+ the url of app1: "$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
3584
+
3585
+ value from app1:
3586
+ -------
3587
+ app1 line1
3588
+ app1 line2
3589
+ app1 line3
3590
+
3591
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
3592
+
3593
+
3594
+ app1 single quote: '
3595
+ app1 doouble quote: "
3596
+
3597
+ --------
3598
+
3328
3599
  public:
3329
3600
  ENV_SHORT: |-
3330
3601
  dev
@@ -3333,18 +3604,16 @@ kube 🧪 test:
3333
3604
  ENV_TYPE: |-
3334
3605
  dev
3335
3606
  BUILD_INFO_BUILD_ID: |-
3336
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3607
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
3337
3608
  BUILD_INFO_BUILD_TIME: |-
3338
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3609
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
3339
3610
  BUILD_INFO_CURRENT_VERSION: |-
3340
- $(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 's/^/ /')
3341
- HOST: |-
3611
+ $(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/^/ /')
3612
+ HOSTNAME: |-
3342
3613
  kube.dev.test-app.pan.panter.cloud
3343
3614
  ROOT_URL: |-
3344
3615
  https://kube.dev.test-app.pan.panter.cloud
3345
- HOST_INTERNAL: |-
3346
- kube.dev.test-app.pan.panter.cloud
3347
- HOST_CANONICAL: |-
3616
+ HOSTNAME_INTERNAL: |-
3348
3617
  kube.dev.test-app.pan.panter.cloud
3349
3618
  ROOT_URL_INTERNAL: |-
3350
3619
  https://kube.dev.test-app.pan.panter.cloud
@@ -3354,7 +3623,7 @@ kube 🧪 test:
3354
3623
  kube
3355
3624
  KUBE_APP_NAME_PREFIX: ""
3356
3625
  _ALL_ENV_VAR_KEYS: |-
3357
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
3626
+ ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
3358
3627
  application:
3359
3628
  host: |-
3360
3629
  kube.dev.test-app.pan.panter.cloud
@@ -3374,7 +3643,7 @@ kube 🧪 test:
3374
3643
  __health
3375
3644
 
3376
3645
  EOF
3377
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
3646
+ - collapseable_section_end "writeallvalues"
3378
3647
  - kubernetesCreateSecret
3379
3648
  - kubernetesDeploy
3380
3649
  - echo 'Uploading SBOM to Dependency Track'
@@ -3419,17 +3688,16 @@ kube 🧪 test:
3419
3688
  KUBERNETES_MEMORY_LIMIT: 400Mi
3420
3689
  GIT_STRATEGY: none
3421
3690
  script:
3422
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3691
+ - collapseable_section_start "injectvars" "Injecting variables"
3423
3692
  - export ENV_SHORT="dev"
3424
3693
  - export APP_DIR="kube"
3425
3694
  - export ENV_TYPE="dev"
3426
3695
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3427
3696
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3428
3697
  - 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")"
3429
- - export HOST="kube.dev.test-app.pan.panter.cloud"
3698
+ - export HOSTNAME="kube.dev.test-app.pan.panter.cloud"
3430
3699
  - export ROOT_URL="https://kube.dev.test-app.pan.panter.cloud"
3431
- - export HOST_INTERNAL="kube.dev.test-app.pan.panter.cloud"
3432
- - export HOST_CANONICAL="kube.dev.test-app.pan.panter.cloud"
3700
+ - export HOSTNAME_INTERNAL="kube.dev.test-app.pan.panter.cloud"
3433
3701
  - export ROOT_URL_INTERNAL="https://kube.dev.test-app.pan.panter.cloud"
3434
3702
  - export KUBE_NAMESPACE="pan-test-app-dev"
3435
3703
  - export KUBE_APP_NAME="kube"
@@ -3470,15 +3738,14 @@ kube 🧪 test:
3470
3738
 
3471
3739
  --------
3472
3740
  "
3473
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3741
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3474
3742
  - export RELEASE_NAME="pan-test-app-dev-kube"
3475
3743
  - export HELM_EXPERIMENTAL_OCI="1"
3476
3744
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-kube"
3477
3745
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
3478
3746
  - export HELM_ARGS=""
3479
3747
  - export COMPONENT_NAME="kube"
3480
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3481
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3748
+ - collapseable_section_end "injectvars"
3482
3749
  - kubectl config set-cluster "kube-pan-test-app-dev-kube" --server="$CL_dev_kube_KUBE_URL" --certificate-authority <(echo $CL_dev_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
3483
3750
  - kubectl config set-credentials "kube-pan-test-app-dev-kube" --token="$CL_dev_kube_KUBE_TOKEN"
3484
3751
  - kubectl config set-context "kube-pan-test-app-dev-kube" --cluster="kube-pan-test-app-dev-kube" --user="kube-pan-test-app-dev-kube" --namespace="pan-test-app-dev"
@@ -3514,17 +3781,16 @@ kube 🧪 test:
3514
3781
  KUBERNETES_MEMORY_LIMIT: 400Mi
3515
3782
  GIT_STRATEGY: none
3516
3783
  script:
3517
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3784
+ - collapseable_section_start "injectvars" "Injecting variables"
3518
3785
  - export ENV_SHORT="dev"
3519
3786
  - export APP_DIR="kube"
3520
3787
  - export ENV_TYPE="dev"
3521
3788
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3522
3789
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3523
3790
  - 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")"
3524
- - export HOST="kube.dev.test-app.pan.panter.cloud"
3791
+ - export HOSTNAME="kube.dev.test-app.pan.panter.cloud"
3525
3792
  - export ROOT_URL="https://kube.dev.test-app.pan.panter.cloud"
3526
- - export HOST_INTERNAL="kube.dev.test-app.pan.panter.cloud"
3527
- - export HOST_CANONICAL="kube.dev.test-app.pan.panter.cloud"
3793
+ - export HOSTNAME_INTERNAL="kube.dev.test-app.pan.panter.cloud"
3528
3794
  - export ROOT_URL_INTERNAL="https://kube.dev.test-app.pan.panter.cloud"
3529
3795
  - export KUBE_NAMESPACE="pan-test-app-dev"
3530
3796
  - export KUBE_APP_NAME="kube"
@@ -3565,15 +3831,14 @@ kube 🧪 test:
3565
3831
 
3566
3832
  --------
3567
3833
  "
3568
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3834
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3569
3835
  - export RELEASE_NAME="pan-test-app-dev-kube"
3570
3836
  - export HELM_EXPERIMENTAL_OCI="1"
3571
3837
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-kube"
3572
3838
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
3573
3839
  - export HELM_ARGS=""
3574
3840
  - export COMPONENT_NAME="kube"
3575
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3576
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3841
+ - collapseable_section_end "injectvars"
3577
3842
  - kubectl config set-cluster "kube-pan-test-app-dev-kube" --server="$CL_dev_kube_KUBE_URL" --certificate-authority <(echo $CL_dev_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
3578
3843
  - kubectl config set-credentials "kube-pan-test-app-dev-kube" --token="$CL_dev_kube_KUBE_TOKEN"
3579
3844
  - kubectl config set-context "kube-pan-test-app-dev-kube" --cluster="kube-pan-test-app-dev-kube" --user="kube-pan-test-app-dev-kube" --namespace="pan-test-app-dev"
@@ -3604,17 +3869,16 @@ kube 🧪 test:
3604
3869
  KUBERNETES_MEMORY_REQUEST: 1Gi
3605
3870
  KUBERNETES_MEMORY_LIMIT: 4Gi
3606
3871
  script:
3607
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3872
+ - collapseable_section_start "injectvars" "Injecting variables"
3608
3873
  - export ENV_SHORT="review"
3609
3874
  - export APP_DIR="kube"
3610
3875
  - export ENV_TYPE="review"
3611
3876
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3612
3877
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3613
3878
  - 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")"
3614
- - export HOST="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3879
+ - export HOSTNAME="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3615
3880
  - export ROOT_URL="https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3616
- - export HOST_INTERNAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3617
- - export HOST_CANONICAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3881
+ - export HOSTNAME_INTERNAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3618
3882
  - export ROOT_URL_INTERNAL="https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3619
3883
  - export KUBE_NAMESPACE="pan-test-app-review"
3620
3884
  - export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-kube"
@@ -3655,21 +3919,71 @@ kube 🧪 test:
3655
3919
 
3656
3920
  --------
3657
3921
  "
3658
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3659
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3922
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3923
+ - collapseable_section_end "injectvars"
3924
+ - collapseable_section_start "write-dotenv-kube" "write dot env for kube"
3925
+ - |-
3926
+ cat <<EOF > kube/.env
3927
+ ENV_SHORT=review
3928
+ APP_DIR=kube
3929
+ ENV_TYPE=review
3930
+ HOSTNAME=$(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | escapeForDotEnv)
3931
+ ROOT_URL=$(printf %s "https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | escapeForDotEnv)
3932
+ HOSTNAME_INTERNAL=$(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | escapeForDotEnv)
3933
+ ROOT_URL_INTERNAL=$(printf %s "https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | escapeForDotEnv)
3934
+ KUBE_NAMESPACE=pan-test-app-review
3935
+ KUBE_APP_NAME=$(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-kube" | escapeForDotEnv)
3936
+ KUBE_APP_NAME_PREFIX=$(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-" | escapeForDotEnv)
3937
+ multiline_from_app1=$(printf %s "app1 line1
3938
+ app1 line2
3939
+ app1 line3
3940
+
3941
+ the url of self: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3942
+
3943
+
3944
+ app1 single quote: '
3945
+ app1 doouble quote: \\"
3946
+ " | escapeForDotEnv)
3947
+ multiline=$(printf %s "kube yeah
3948
+ kube yeah2
3949
+ kube yeah3
3950
+
3951
+ kube single quote: '
3952
+ kube doouble quote: \\"
3953
+
3954
+ the url of self: \\"https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud\\"
3955
+ the url of app1: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3956
+
3957
+ value from app1:
3958
+ -------
3959
+ app1 line1
3960
+ app1 line2
3961
+ app1 line3
3962
+
3963
+ the url of self: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3964
+
3965
+
3966
+ app1 single quote: '
3967
+ app1 doouble quote: \\"
3968
+
3969
+ --------
3970
+ " | escapeForDotEnv)
3971
+ _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
3972
+ EOF
3973
+ - collapseable_section_end "write-dotenv-kube"
3660
3974
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > kube/__build_info.json
3661
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
3975
+ - collapseable_section_start "nodeinstall" "Ensure node version"
3662
3976
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
3663
3977
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
3664
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
3978
+ - collapseable_section_end "nodeinstall"
3665
3979
  - cd kube
3666
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
3980
+ - collapseable_section_start "nodeinstall" "Ensure node version"
3667
3981
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
3668
3982
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
3669
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
3670
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
3983
+ - collapseable_section_end "nodeinstall"
3984
+ - collapseable_section_start "yarninstall" "Yarn install"
3671
3985
  - yarn install --immutable
3672
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
3986
+ - collapseable_section_end "yarninstall"
3673
3987
  - yarn build
3674
3988
  cache:
3675
3989
  - key: kube-yarn
@@ -3680,15 +3994,13 @@ kube 🧪 test:
3680
3994
  policy: pull-push
3681
3995
  paths:
3682
3996
  - kube/node_modules
3683
- - key: kube-next-cache
3684
- policy: pull-push
3685
- paths:
3686
- - kube/.next/cache
3687
3997
  artifacts:
3688
3998
  paths:
3689
3999
  - kube/__build_info.json
3690
4000
  - kube/.next
3691
4001
  - kube/dist
4002
+ exclude:
4003
+ - kube/.env
3692
4004
  expire_in: 1 day
3693
4005
  when: always
3694
4006
  reports: {}
@@ -3714,7 +4026,7 @@ kube 🧪 test:
3714
4026
  KUBERNETES_MEMORY_REQUEST: 1Gi
3715
4027
  KUBERNETES_MEMORY_LIMIT: 2Gi
3716
4028
  script:
3717
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4029
+ - collapseable_section_start "injectvars" "Injecting variables"
3718
4030
  - export APP_DIR="kube"
3719
4031
  - export DOCKER_BUILD_CONTEXT="."
3720
4032
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -3731,19 +4043,19 @@ kube 🧪 test:
3731
4043
  COPY --chown=node:node kube/yarn.lock /app/kube/yarn.lock
3732
4044
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3733
4045
  COPY --chown=node:node .yarn /app/.yarn"
3734
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4046
+ - collapseable_section_end "injectvars"
3735
4047
  - ensureNodeDockerfile
3736
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
4048
+ - collapseable_section_start "docker-login" "Docker Login"
3737
4049
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
3738
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
3739
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
4050
+ - collapseable_section_end "docker-login"
4051
+ - collapseable_section_start "docker-build" "Docker build"
3740
4052
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
3741
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
3742
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
4053
+ - collapseable_section_end "docker-build"
4054
+ - collapseable_section_start "docker-push" "Docker push and tag"
3743
4055
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
3744
4056
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
3745
4057
  - docker push $DOCKER_CACHE_IMAGE
3746
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
4058
+ - collapseable_section_end "docker-push"
3747
4059
  cache:
3748
4060
  - key: kube-yarn
3749
4061
  policy: pull
@@ -3760,8 +4072,8 @@ kube 🧪 test:
3760
4072
  image: aquasec/trivy:0.38.3
3761
4073
  variables: {}
3762
4074
  script:
3763
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3764
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4075
+ - collapseable_section_start "injectvars" "Injecting variables"
4076
+ - collapseable_section_end "injectvars"
3765
4077
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" kube
3766
4078
  artifacts:
3767
4079
  paths:
@@ -3780,17 +4092,16 @@ kube 🧪 test:
3780
4092
  KUBERNETES_MEMORY_REQUEST: 200Mi
3781
4093
  KUBERNETES_MEMORY_LIMIT: 400Mi
3782
4094
  script:
3783
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4095
+ - collapseable_section_start "injectvars" "Injecting variables"
3784
4096
  - export ENV_SHORT="review"
3785
4097
  - export APP_DIR="kube"
3786
4098
  - export ENV_TYPE="review"
3787
4099
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3788
4100
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3789
4101
  - 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")"
3790
- - export HOST="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4102
+ - export HOSTNAME="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3791
4103
  - export ROOT_URL="https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3792
- - export HOST_INTERNAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3793
- - export HOST_CANONICAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4104
+ - export HOSTNAME_INTERNAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3794
4105
  - export ROOT_URL_INTERNAL="https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3795
4106
  - export KUBE_NAMESPACE="pan-test-app-review"
3796
4107
  - export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-kube"
@@ -3831,7 +4142,7 @@ kube 🧪 test:
3831
4142
 
3832
4143
  --------
3833
4144
  "
3834
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4145
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
3835
4146
  - export DOCKER_REGISTRY="$CI_REGISTRY"
3836
4147
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/kube"
3837
4148
  - export DOCKER_IMAGE_NAME="review/kube"
@@ -3843,53 +4154,52 @@ kube 🧪 test:
3843
4154
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
3844
4155
  - export HELM_ARGS=""
3845
4156
  - export COMPONENT_NAME="kube"
3846
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3847
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4157
+ - collapseable_section_end "injectvars"
3848
4158
  - kubectl config set-cluster "kube-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"; })-kube" --server="$CL_review_kube_KUBE_URL" --certificate-authority <(echo $CL_review_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
3849
4159
  - kubectl config set-credentials "kube-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"; })-kube" --token="$CL_review_kube_KUBE_TOKEN"
3850
4160
  - kubectl config set-context "kube-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"; })-kube" --cluster="kube-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"; })-kube" --user="kube-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"; })-kube" --namespace="pan-test-app-review"
3851
4161
  - kubectl config use-context "kube-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"; })-kube"
3852
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
4162
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
3853
4163
  - |
3854
4164
  cat > __all_values.yml <<EOF
3855
4165
  env:
3856
4166
  secret:
3857
4167
  multiline_from_app1: |-
3858
- $(printf %s "app1 line1
3859
- app1 line2
3860
- app1 line3
3861
-
3862
- the url of self: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3863
-
3864
-
3865
- app1 single quote: '
3866
- app1 doouble quote: \\"
3867
- " | sed 's/^/ /')
4168
+ app1 line1
4169
+ app1 line2
4170
+ app1 line3
4171
+
4172
+ the url of self: "$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
4173
+
4174
+
4175
+ app1 single quote: '
4176
+ app1 doouble quote: "
4177
+
3868
4178
  multiline: |-
3869
- $(printf %s "kube yeah
3870
- kube yeah2
3871
- kube yeah3
3872
-
3873
- kube single quote: '
3874
- kube doouble quote: \\"
3875
-
3876
- the url of self: \\"https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud\\"
3877
- the url of app1: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3878
-
3879
- value from app1:
3880
- -------
3881
- app1 line1
3882
- app1 line2
3883
- app1 line3
3884
-
3885
- the url of self: \\"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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
3886
-
3887
-
3888
- app1 single quote: '
3889
- app1 doouble quote: \\"
3890
-
3891
- --------
3892
- " | sed 's/^/ /')
4179
+ kube yeah
4180
+ kube yeah2
4181
+ kube yeah3
4182
+
4183
+ kube single quote: '
4184
+ kube doouble quote: "
4185
+
4186
+ the url of self: "$(printf %s "https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed '1!s/^/ /')"
4187
+ the url of app1: "$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
4188
+
4189
+ value from app1:
4190
+ -------
4191
+ app1 line1
4192
+ app1 line2
4193
+ app1 line3
4194
+
4195
+ the url of self: "$(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"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
4196
+
4197
+
4198
+ app1 single quote: '
4199
+ app1 doouble quote: "
4200
+
4201
+ --------
4202
+
3893
4203
  public:
3894
4204
  ENV_SHORT: |-
3895
4205
  review
@@ -3898,32 +4208,30 @@ kube 🧪 test:
3898
4208
  ENV_TYPE: |-
3899
4209
  review
3900
4210
  BUILD_INFO_BUILD_ID: |-
3901
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
4211
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
3902
4212
  BUILD_INFO_BUILD_TIME: |-
3903
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
4213
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
3904
4214
  BUILD_INFO_CURRENT_VERSION: |-
3905
- $(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 's/^/ /')
3906
- HOST: |-
3907
- $(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
4215
+ $(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/^/ /')
4216
+ HOSTNAME: |-
4217
+ $(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed '1!s/^/ /')
3908
4218
  ROOT_URL: |-
3909
- $(printf %s "https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
3910
- HOST_INTERNAL: |-
3911
- $(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
3912
- HOST_CANONICAL: |-
3913
- $(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
4219
+ $(printf %s "https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed '1!s/^/ /')
4220
+ HOSTNAME_INTERNAL: |-
4221
+ $(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed '1!s/^/ /')
3914
4222
  ROOT_URL_INTERNAL: |-
3915
- $(printf %s "https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
4223
+ $(printf %s "https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed '1!s/^/ /')
3916
4224
  KUBE_NAMESPACE: |-
3917
4225
  pan-test-app-review
3918
4226
  KUBE_APP_NAME: |-
3919
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-kube" | sed 's/^/ /')
4227
+ $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-kube" | sed '1!s/^/ /')
3920
4228
  KUBE_APP_NAME_PREFIX: |-
3921
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-" | sed 's/^/ /')
4229
+ $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-" | sed '1!s/^/ /')
3922
4230
  _ALL_ENV_VAR_KEYS: |-
3923
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
4231
+ ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
3924
4232
  application:
3925
4233
  host: |-
3926
- $(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
4234
+ $(printf %s "kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed '1!s/^/ /')
3927
4235
  command: |-
3928
4236
  yarn start
3929
4237
  livenessProbe:
@@ -3940,7 +4248,7 @@ kube 🧪 test:
3940
4248
  __health
3941
4249
 
3942
4250
  EOF
3943
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
4251
+ - collapseable_section_end "writeallvalues"
3944
4252
  - kubernetesCreateSecret
3945
4253
  - kubernetesDeploy
3946
4254
  - echo 'Uploading SBOM to Dependency Track'
@@ -3983,17 +4291,16 @@ kube 🧪 test:
3983
4291
  KUBERNETES_MEMORY_LIMIT: 400Mi
3984
4292
  GIT_STRATEGY: none
3985
4293
  script:
3986
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4294
+ - collapseable_section_start "injectvars" "Injecting variables"
3987
4295
  - export ENV_SHORT="review"
3988
4296
  - export APP_DIR="kube"
3989
4297
  - export ENV_TYPE="review"
3990
4298
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3991
4299
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3992
4300
  - 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")"
3993
- - export HOST="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4301
+ - export HOSTNAME="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3994
4302
  - export ROOT_URL="https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3995
- - export HOST_INTERNAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3996
- - export HOST_CANONICAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4303
+ - export HOSTNAME_INTERNAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3997
4304
  - export ROOT_URL_INTERNAL="https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
3998
4305
  - export KUBE_NAMESPACE="pan-test-app-review"
3999
4306
  - export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-kube"
@@ -4034,15 +4341,14 @@ kube 🧪 test:
4034
4341
 
4035
4342
  --------
4036
4343
  "
4037
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4344
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4038
4345
  - export RELEASE_NAME="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"; })-kube"
4039
4346
  - export HELM_EXPERIMENTAL_OCI="1"
4040
4347
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-kube"
4041
4348
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
4042
4349
  - export HELM_ARGS=""
4043
4350
  - export COMPONENT_NAME="kube"
4044
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4045
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4351
+ - collapseable_section_end "injectvars"
4046
4352
  - kubectl config set-cluster "kube-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"; })-kube" --server="$CL_review_kube_KUBE_URL" --certificate-authority <(echo $CL_review_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
4047
4353
  - kubectl config set-credentials "kube-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"; })-kube" --token="$CL_review_kube_KUBE_TOKEN"
4048
4354
  - kubectl config set-context "kube-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"; })-kube" --cluster="kube-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"; })-kube" --user="kube-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"; })-kube" --namespace="pan-test-app-review"
@@ -4076,17 +4382,16 @@ kube 🧪 test:
4076
4382
  KUBERNETES_MEMORY_LIMIT: 400Mi
4077
4383
  GIT_STRATEGY: none
4078
4384
  script:
4079
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4385
+ - collapseable_section_start "injectvars" "Injecting variables"
4080
4386
  - export ENV_SHORT="review"
4081
4387
  - export APP_DIR="kube"
4082
4388
  - export ENV_TYPE="review"
4083
4389
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4084
4390
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
4085
4391
  - 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")"
4086
- - export HOST="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4392
+ - export HOSTNAME="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4087
4393
  - export ROOT_URL="https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4088
- - export HOST_INTERNAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4089
- - export HOST_CANONICAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4394
+ - export HOSTNAME_INTERNAL="kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4090
4395
  - export ROOT_URL_INTERNAL="https://kube.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"
4091
4396
  - export KUBE_NAMESPACE="pan-test-app-review"
4092
4397
  - export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-kube"
@@ -4127,15 +4432,14 @@ kube 🧪 test:
4127
4432
 
4128
4433
  --------
4129
4434
  "
4130
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4435
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4131
4436
  - export RELEASE_NAME="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"; })-kube"
4132
4437
  - export HELM_EXPERIMENTAL_OCI="1"
4133
4438
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-kube"
4134
4439
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
4135
4440
  - export HELM_ARGS=""
4136
4441
  - export COMPONENT_NAME="kube"
4137
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4138
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4442
+ - collapseable_section_end "injectvars"
4139
4443
  - kubectl config set-cluster "kube-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"; })-kube" --server="$CL_review_kube_KUBE_URL" --certificate-authority <(echo $CL_review_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
4140
4444
  - kubectl config set-credentials "kube-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"; })-kube" --token="$CL_review_kube_KUBE_TOKEN"
4141
4445
  - kubectl config set-context "kube-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"; })-kube" --cluster="kube-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"; })-kube" --user="kube-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"; })-kube" --namespace="pan-test-app-review"
@@ -4164,17 +4468,16 @@ kube 🧪 test:
4164
4468
  KUBERNETES_MEMORY_REQUEST: 1Gi
4165
4469
  KUBERNETES_MEMORY_LIMIT: 4Gi
4166
4470
  script:
4167
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4471
+ - collapseable_section_start "injectvars" "Injecting variables"
4168
4472
  - export ENV_SHORT="stage"
4169
4473
  - export APP_DIR="kube"
4170
4474
  - export ENV_TYPE="stage"
4171
4475
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4172
4476
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
4173
4477
  - 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")"
4174
- - export HOST="kube.stage.test-app.pan.panter.cloud"
4478
+ - export HOSTNAME="kube.stage.test-app.pan.panter.cloud"
4175
4479
  - export ROOT_URL="https://kube.stage.test-app.pan.panter.cloud"
4176
- - export HOST_INTERNAL="kube.stage.test-app.pan.panter.cloud"
4177
- - export HOST_CANONICAL="kube.stage.test-app.pan.panter.cloud"
4480
+ - export HOSTNAME_INTERNAL="kube.stage.test-app.pan.panter.cloud"
4178
4481
  - export ROOT_URL_INTERNAL="https://kube.stage.test-app.pan.panter.cloud"
4179
4482
  - export KUBE_NAMESPACE="pan-test-app-stage"
4180
4483
  - export KUBE_APP_NAME="kube"
@@ -4215,21 +4518,71 @@ kube 🧪 test:
4215
4518
 
4216
4519
  --------
4217
4520
  "
4218
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4219
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4521
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4522
+ - collapseable_section_end "injectvars"
4523
+ - collapseable_section_start "write-dotenv-kube" "write dot env for kube"
4524
+ - |-
4525
+ cat <<EOF > kube/.env
4526
+ ENV_SHORT=stage
4527
+ APP_DIR=kube
4528
+ ENV_TYPE=stage
4529
+ HOSTNAME=kube.stage.test-app.pan.panter.cloud
4530
+ ROOT_URL=https://kube.stage.test-app.pan.panter.cloud
4531
+ HOSTNAME_INTERNAL=kube.stage.test-app.pan.panter.cloud
4532
+ ROOT_URL_INTERNAL=https://kube.stage.test-app.pan.panter.cloud
4533
+ KUBE_NAMESPACE=pan-test-app-stage
4534
+ KUBE_APP_NAME=kube
4535
+ KUBE_APP_NAME_PREFIX=
4536
+ multiline_from_app1=$(printf %s "app1 line1
4537
+ app1 line2
4538
+ app1 line3
4539
+
4540
+ the url of self: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4541
+
4542
+
4543
+ app1 single quote: '
4544
+ app1 doouble quote: \\"
4545
+ " | escapeForDotEnv)
4546
+ multiline=$(printf %s "kube yeah
4547
+ kube yeah2
4548
+ kube yeah3
4549
+
4550
+ kube single quote: '
4551
+ kube doouble quote: \\"
4552
+
4553
+ the url of self: \\"https://kube.stage.test-app.pan.panter.cloud\\"
4554
+ the url of app1: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4555
+
4556
+ value from app1:
4557
+ -------
4558
+ app1 line1
4559
+ app1 line2
4560
+ app1 line3
4561
+
4562
+ the url of self: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4563
+
4564
+
4565
+ app1 single quote: '
4566
+ app1 doouble quote: \\"
4567
+
4568
+ --------
4569
+ " | escapeForDotEnv)
4570
+ _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
4571
+ EOF
4572
+ - collapseable_section_end "write-dotenv-kube"
4220
4573
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > kube/__build_info.json
4221
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
4574
+ - collapseable_section_start "nodeinstall" "Ensure node version"
4222
4575
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
4223
4576
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
4224
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
4577
+ - collapseable_section_end "nodeinstall"
4225
4578
  - cd kube
4226
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
4579
+ - collapseable_section_start "nodeinstall" "Ensure node version"
4227
4580
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
4228
4581
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
4229
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
4230
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
4582
+ - collapseable_section_end "nodeinstall"
4583
+ - collapseable_section_start "yarninstall" "Yarn install"
4231
4584
  - yarn install --immutable
4232
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
4585
+ - collapseable_section_end "yarninstall"
4233
4586
  - yarn build
4234
4587
  cache:
4235
4588
  - key: kube-yarn
@@ -4240,15 +4593,13 @@ kube 🧪 test:
4240
4593
  policy: pull-push
4241
4594
  paths:
4242
4595
  - kube/node_modules
4243
- - key: kube-next-cache
4244
- policy: pull-push
4245
- paths:
4246
- - kube/.next/cache
4247
4596
  artifacts:
4248
4597
  paths:
4249
4598
  - kube/__build_info.json
4250
4599
  - kube/.next
4251
4600
  - kube/dist
4601
+ exclude:
4602
+ - kube/.env
4252
4603
  expire_in: 1 day
4253
4604
  when: always
4254
4605
  reports: {}
@@ -4274,7 +4625,7 @@ kube 🧪 test:
4274
4625
  KUBERNETES_MEMORY_REQUEST: 1Gi
4275
4626
  KUBERNETES_MEMORY_LIMIT: 2Gi
4276
4627
  script:
4277
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4628
+ - collapseable_section_start "injectvars" "Injecting variables"
4278
4629
  - export APP_DIR="kube"
4279
4630
  - export DOCKER_BUILD_CONTEXT="."
4280
4631
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -4291,19 +4642,19 @@ kube 🧪 test:
4291
4642
  COPY --chown=node:node kube/yarn.lock /app/kube/yarn.lock
4292
4643
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
4293
4644
  COPY --chown=node:node .yarn /app/.yarn"
4294
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4645
+ - collapseable_section_end "injectvars"
4295
4646
  - ensureNodeDockerfile
4296
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
4647
+ - collapseable_section_start "docker-login" "Docker Login"
4297
4648
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
4298
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
4299
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
4649
+ - collapseable_section_end "docker-login"
4650
+ - collapseable_section_start "docker-build" "Docker build"
4300
4651
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
4301
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
4302
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
4652
+ - collapseable_section_end "docker-build"
4653
+ - collapseable_section_start "docker-push" "Docker push and tag"
4303
4654
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
4304
4655
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
4305
4656
  - docker push $DOCKER_CACHE_IMAGE
4306
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
4657
+ - collapseable_section_end "docker-push"
4307
4658
  cache:
4308
4659
  - key: kube-yarn
4309
4660
  policy: pull
@@ -4320,8 +4671,8 @@ kube 🧪 test:
4320
4671
  image: aquasec/trivy:0.38.3
4321
4672
  variables: {}
4322
4673
  script:
4323
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4324
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4674
+ - collapseable_section_start "injectvars" "Injecting variables"
4675
+ - collapseable_section_end "injectvars"
4325
4676
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" kube
4326
4677
  artifacts:
4327
4678
  paths:
@@ -4340,17 +4691,16 @@ kube 🧪 test:
4340
4691
  KUBERNETES_MEMORY_REQUEST: 200Mi
4341
4692
  KUBERNETES_MEMORY_LIMIT: 400Mi
4342
4693
  script:
4343
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4694
+ - collapseable_section_start "injectvars" "Injecting variables"
4344
4695
  - export ENV_SHORT="stage"
4345
4696
  - export APP_DIR="kube"
4346
4697
  - export ENV_TYPE="stage"
4347
4698
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4348
4699
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
4349
4700
  - 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")"
4350
- - export HOST="kube.stage.test-app.pan.panter.cloud"
4701
+ - export HOSTNAME="kube.stage.test-app.pan.panter.cloud"
4351
4702
  - export ROOT_URL="https://kube.stage.test-app.pan.panter.cloud"
4352
- - export HOST_INTERNAL="kube.stage.test-app.pan.panter.cloud"
4353
- - export HOST_CANONICAL="kube.stage.test-app.pan.panter.cloud"
4703
+ - export HOSTNAME_INTERNAL="kube.stage.test-app.pan.panter.cloud"
4354
4704
  - export ROOT_URL_INTERNAL="https://kube.stage.test-app.pan.panter.cloud"
4355
4705
  - export KUBE_NAMESPACE="pan-test-app-stage"
4356
4706
  - export KUBE_APP_NAME="kube"
@@ -4391,7 +4741,7 @@ kube 🧪 test:
4391
4741
 
4392
4742
  --------
4393
4743
  "
4394
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4744
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4395
4745
  - export DOCKER_REGISTRY="$CI_REGISTRY"
4396
4746
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/kube"
4397
4747
  - export DOCKER_IMAGE_NAME="stage/kube"
@@ -4403,53 +4753,52 @@ kube 🧪 test:
4403
4753
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
4404
4754
  - export HELM_ARGS=""
4405
4755
  - export COMPONENT_NAME="kube"
4406
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4407
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4756
+ - collapseable_section_end "injectvars"
4408
4757
  - kubectl config set-cluster "kube-pan-test-app-stage-kube" --server="$CL_stage_kube_KUBE_URL" --certificate-authority <(echo $CL_stage_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
4409
4758
  - kubectl config set-credentials "kube-pan-test-app-stage-kube" --token="$CL_stage_kube_KUBE_TOKEN"
4410
4759
  - kubectl config set-context "kube-pan-test-app-stage-kube" --cluster="kube-pan-test-app-stage-kube" --user="kube-pan-test-app-stage-kube" --namespace="pan-test-app-stage"
4411
4760
  - kubectl config use-context "kube-pan-test-app-stage-kube"
4412
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
4761
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
4413
4762
  - |
4414
4763
  cat > __all_values.yml <<EOF
4415
4764
  env:
4416
4765
  secret:
4417
4766
  multiline_from_app1: |-
4418
- $(printf %s "app1 line1
4419
- app1 line2
4420
- app1 line3
4421
-
4422
- the url of self: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4423
-
4424
-
4425
- app1 single quote: '
4426
- app1 doouble quote: \\"
4427
- " | sed 's/^/ /')
4767
+ app1 line1
4768
+ app1 line2
4769
+ app1 line3
4770
+
4771
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
4772
+
4773
+
4774
+ app1 single quote: '
4775
+ app1 doouble quote: "
4776
+
4428
4777
  multiline: |-
4429
- $(printf %s "kube yeah
4430
- kube yeah2
4431
- kube yeah3
4432
-
4433
- kube single quote: '
4434
- kube doouble quote: \\"
4435
-
4436
- the url of self: \\"https://kube.stage.test-app.pan.panter.cloud\\"
4437
- the url of app1: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4438
-
4439
- value from app1:
4440
- -------
4441
- app1 line1
4442
- app1 line2
4443
- app1 line3
4444
-
4445
- the url of self: \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4446
-
4447
-
4448
- app1 single quote: '
4449
- app1 doouble quote: \\"
4450
-
4451
- --------
4452
- " | sed 's/^/ /')
4778
+ kube yeah
4779
+ kube yeah2
4780
+ kube yeah3
4781
+
4782
+ kube single quote: '
4783
+ kube doouble quote: "
4784
+
4785
+ the url of self: "https://kube.stage.test-app.pan.panter.cloud"
4786
+ the url of app1: "$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
4787
+
4788
+ value from app1:
4789
+ -------
4790
+ app1 line1
4791
+ app1 line2
4792
+ app1 line3
4793
+
4794
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
4795
+
4796
+
4797
+ app1 single quote: '
4798
+ app1 doouble quote: "
4799
+
4800
+ --------
4801
+
4453
4802
  public:
4454
4803
  ENV_SHORT: |-
4455
4804
  stage
@@ -4458,18 +4807,16 @@ kube 🧪 test:
4458
4807
  ENV_TYPE: |-
4459
4808
  stage
4460
4809
  BUILD_INFO_BUILD_ID: |-
4461
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
4810
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
4462
4811
  BUILD_INFO_BUILD_TIME: |-
4463
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
4812
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
4464
4813
  BUILD_INFO_CURRENT_VERSION: |-
4465
- $(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 's/^/ /')
4466
- HOST: |-
4814
+ $(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/^/ /')
4815
+ HOSTNAME: |-
4467
4816
  kube.stage.test-app.pan.panter.cloud
4468
4817
  ROOT_URL: |-
4469
4818
  https://kube.stage.test-app.pan.panter.cloud
4470
- HOST_INTERNAL: |-
4471
- kube.stage.test-app.pan.panter.cloud
4472
- HOST_CANONICAL: |-
4819
+ HOSTNAME_INTERNAL: |-
4473
4820
  kube.stage.test-app.pan.panter.cloud
4474
4821
  ROOT_URL_INTERNAL: |-
4475
4822
  https://kube.stage.test-app.pan.panter.cloud
@@ -4479,7 +4826,7 @@ kube 🧪 test:
4479
4826
  kube
4480
4827
  KUBE_APP_NAME_PREFIX: ""
4481
4828
  _ALL_ENV_VAR_KEYS: |-
4482
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
4829
+ ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
4483
4830
  application:
4484
4831
  host: |-
4485
4832
  kube.stage.test-app.pan.panter.cloud
@@ -4499,7 +4846,7 @@ kube 🧪 test:
4499
4846
  __health
4500
4847
 
4501
4848
  EOF
4502
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
4849
+ - collapseable_section_end "writeallvalues"
4503
4850
  - kubernetesCreateSecret
4504
4851
  - kubernetesDeploy
4505
4852
  - echo 'Uploading SBOM to Dependency Track'
@@ -4535,17 +4882,16 @@ kube 🧪 test:
4535
4882
  KUBERNETES_MEMORY_LIMIT: 400Mi
4536
4883
  GIT_STRATEGY: none
4537
4884
  script:
4538
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4885
+ - collapseable_section_start "injectvars" "Injecting variables"
4539
4886
  - export ENV_SHORT="stage"
4540
4887
  - export APP_DIR="kube"
4541
4888
  - export ENV_TYPE="stage"
4542
4889
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4543
4890
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
4544
4891
  - 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")"
4545
- - export HOST="kube.stage.test-app.pan.panter.cloud"
4892
+ - export HOSTNAME="kube.stage.test-app.pan.panter.cloud"
4546
4893
  - export ROOT_URL="https://kube.stage.test-app.pan.panter.cloud"
4547
- - export HOST_INTERNAL="kube.stage.test-app.pan.panter.cloud"
4548
- - export HOST_CANONICAL="kube.stage.test-app.pan.panter.cloud"
4894
+ - export HOSTNAME_INTERNAL="kube.stage.test-app.pan.panter.cloud"
4549
4895
  - export ROOT_URL_INTERNAL="https://kube.stage.test-app.pan.panter.cloud"
4550
4896
  - export KUBE_NAMESPACE="pan-test-app-stage"
4551
4897
  - export KUBE_APP_NAME="kube"
@@ -4586,15 +4932,14 @@ kube 🧪 test:
4586
4932
 
4587
4933
  --------
4588
4934
  "
4589
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4935
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4590
4936
  - export RELEASE_NAME="pan-test-app-stage-kube"
4591
4937
  - export HELM_EXPERIMENTAL_OCI="1"
4592
4938
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-kube"
4593
4939
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
4594
4940
  - export HELM_ARGS=""
4595
4941
  - export COMPONENT_NAME="kube"
4596
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4597
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
4942
+ - collapseable_section_end "injectvars"
4598
4943
  - kubectl config set-cluster "kube-pan-test-app-stage-kube" --server="$CL_stage_kube_KUBE_URL" --certificate-authority <(echo $CL_stage_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
4599
4944
  - kubectl config set-credentials "kube-pan-test-app-stage-kube" --token="$CL_stage_kube_KUBE_TOKEN"
4600
4945
  - kubectl config set-context "kube-pan-test-app-stage-kube" --cluster="kube-pan-test-app-stage-kube" --user="kube-pan-test-app-stage-kube" --namespace="pan-test-app-stage"
@@ -4628,17 +4973,16 @@ kube 🧪 test:
4628
4973
  KUBERNETES_MEMORY_LIMIT: 400Mi
4629
4974
  GIT_STRATEGY: none
4630
4975
  script:
4631
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4976
+ - collapseable_section_start "injectvars" "Injecting variables"
4632
4977
  - export ENV_SHORT="stage"
4633
4978
  - export APP_DIR="kube"
4634
4979
  - export ENV_TYPE="stage"
4635
4980
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4636
4981
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
4637
4982
  - 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")"
4638
- - export HOST="kube.stage.test-app.pan.panter.cloud"
4983
+ - export HOSTNAME="kube.stage.test-app.pan.panter.cloud"
4639
4984
  - export ROOT_URL="https://kube.stage.test-app.pan.panter.cloud"
4640
- - export HOST_INTERNAL="kube.stage.test-app.pan.panter.cloud"
4641
- - export HOST_CANONICAL="kube.stage.test-app.pan.panter.cloud"
4985
+ - export HOSTNAME_INTERNAL="kube.stage.test-app.pan.panter.cloud"
4642
4986
  - export ROOT_URL_INTERNAL="https://kube.stage.test-app.pan.panter.cloud"
4643
4987
  - export KUBE_NAMESPACE="pan-test-app-stage"
4644
4988
  - export KUBE_APP_NAME="kube"
@@ -4679,15 +5023,14 @@ kube 🧪 test:
4679
5023
 
4680
5024
  --------
4681
5025
  "
4682
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
5026
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4683
5027
  - export RELEASE_NAME="pan-test-app-stage-kube"
4684
5028
  - export HELM_EXPERIMENTAL_OCI="1"
4685
5029
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-kube"
4686
5030
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
4687
5031
  - export HELM_ARGS=""
4688
5032
  - export COMPONENT_NAME="kube"
4689
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4690
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
5033
+ - collapseable_section_end "injectvars"
4691
5034
  - kubectl config set-cluster "kube-pan-test-app-stage-kube" --server="$CL_stage_kube_KUBE_URL" --certificate-authority <(echo $CL_stage_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
4692
5035
  - kubectl config set-credentials "kube-pan-test-app-stage-kube" --token="$CL_stage_kube_KUBE_TOKEN"
4693
5036
  - kubectl config set-context "kube-pan-test-app-stage-kube" --cluster="kube-pan-test-app-stage-kube" --user="kube-pan-test-app-stage-kube" --namespace="pan-test-app-stage"
@@ -4716,17 +5059,16 @@ kube 🧪 test:
4716
5059
  KUBERNETES_MEMORY_REQUEST: 1Gi
4717
5060
  KUBERNETES_MEMORY_LIMIT: 4Gi
4718
5061
  script:
4719
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
5062
+ - collapseable_section_start "injectvars" "Injecting variables"
4720
5063
  - export ENV_SHORT="prod"
4721
5064
  - export APP_DIR="kube"
4722
5065
  - export ENV_TYPE="prod"
4723
5066
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4724
5067
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
4725
5068
  - 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")"
4726
- - export HOST="kube.prod.test-app.pan.panter.cloud"
5069
+ - export HOSTNAME="kube.prod.test-app.pan.panter.cloud"
4727
5070
  - export ROOT_URL="https://kube.prod.test-app.pan.panter.cloud"
4728
- - export HOST_INTERNAL="kube.prod.test-app.pan.panter.cloud"
4729
- - export HOST_CANONICAL="kube.prod.test-app.pan.panter.cloud"
5071
+ - export HOSTNAME_INTERNAL="kube.prod.test-app.pan.panter.cloud"
4730
5072
  - export ROOT_URL_INTERNAL="https://kube.prod.test-app.pan.panter.cloud"
4731
5073
  - export KUBE_NAMESPACE="pan-test-app-prod"
4732
5074
  - export KUBE_APP_NAME="kube"
@@ -4767,21 +5109,71 @@ kube 🧪 test:
4767
5109
 
4768
5110
  --------
4769
5111
  "
4770
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4771
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
5112
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
5113
+ - collapseable_section_end "injectvars"
5114
+ - collapseable_section_start "write-dotenv-kube" "write dot env for kube"
5115
+ - |-
5116
+ cat <<EOF > kube/.env
5117
+ ENV_SHORT=prod
5118
+ APP_DIR=kube
5119
+ ENV_TYPE=prod
5120
+ HOSTNAME=kube.prod.test-app.pan.panter.cloud
5121
+ ROOT_URL=https://kube.prod.test-app.pan.panter.cloud
5122
+ HOSTNAME_INTERNAL=kube.prod.test-app.pan.panter.cloud
5123
+ ROOT_URL_INTERNAL=https://kube.prod.test-app.pan.panter.cloud
5124
+ KUBE_NAMESPACE=pan-test-app-prod
5125
+ KUBE_APP_NAME=kube
5126
+ KUBE_APP_NAME_PREFIX=
5127
+ multiline_from_app1=$(printf %s "app1 line1
5128
+ app1 line2
5129
+ app1 line3
5130
+
5131
+ the url of self: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
5132
+
5133
+
5134
+ app1 single quote: '
5135
+ app1 doouble quote: \\"
5136
+ " | escapeForDotEnv)
5137
+ multiline=$(printf %s "kube yeah
5138
+ kube yeah2
5139
+ kube yeah3
5140
+
5141
+ kube single quote: '
5142
+ kube doouble quote: \\"
5143
+
5144
+ the url of self: \\"https://kube.prod.test-app.pan.panter.cloud\\"
5145
+ the url of app1: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
5146
+
5147
+ value from app1:
5148
+ -------
5149
+ app1 line1
5150
+ app1 line2
5151
+ app1 line3
5152
+
5153
+ the url of self: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
5154
+
5155
+
5156
+ app1 single quote: '
5157
+ app1 doouble quote: \\"
5158
+
5159
+ --------
5160
+ " | escapeForDotEnv)
5161
+ _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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
5162
+ EOF
5163
+ - collapseable_section_end "write-dotenv-kube"
4772
5164
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > kube/__build_info.json
4773
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
5165
+ - collapseable_section_start "nodeinstall" "Ensure node version"
4774
5166
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
4775
5167
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
4776
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
5168
+ - collapseable_section_end "nodeinstall"
4777
5169
  - cd kube
4778
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
5170
+ - collapseable_section_start "nodeinstall" "Ensure node version"
4779
5171
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
4780
5172
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
4781
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
4782
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
5173
+ - collapseable_section_end "nodeinstall"
5174
+ - collapseable_section_start "yarninstall" "Yarn install"
4783
5175
  - yarn install --immutable
4784
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
5176
+ - collapseable_section_end "yarninstall"
4785
5177
  - yarn build
4786
5178
  cache:
4787
5179
  - key: kube-yarn
@@ -4792,15 +5184,13 @@ kube 🧪 test:
4792
5184
  policy: pull-push
4793
5185
  paths:
4794
5186
  - kube/node_modules
4795
- - key: kube-next-cache
4796
- policy: pull-push
4797
- paths:
4798
- - kube/.next/cache
4799
5187
  artifacts:
4800
5188
  paths:
4801
5189
  - kube/__build_info.json
4802
5190
  - kube/.next
4803
5191
  - kube/dist
5192
+ exclude:
5193
+ - kube/.env
4804
5194
  expire_in: 1 day
4805
5195
  when: always
4806
5196
  reports: {}
@@ -4826,7 +5216,7 @@ kube 🧪 test:
4826
5216
  KUBERNETES_MEMORY_REQUEST: 1Gi
4827
5217
  KUBERNETES_MEMORY_LIMIT: 2Gi
4828
5218
  script:
4829
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
5219
+ - collapseable_section_start "injectvars" "Injecting variables"
4830
5220
  - export APP_DIR="kube"
4831
5221
  - export DOCKER_BUILD_CONTEXT="."
4832
5222
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -4843,19 +5233,19 @@ kube 🧪 test:
4843
5233
  COPY --chown=node:node kube/yarn.lock /app/kube/yarn.lock
4844
5234
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
4845
5235
  COPY --chown=node:node .yarn /app/.yarn"
4846
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
5236
+ - collapseable_section_end "injectvars"
4847
5237
  - ensureNodeDockerfile
4848
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
5238
+ - collapseable_section_start "docker-login" "Docker Login"
4849
5239
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
4850
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
4851
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
5240
+ - collapseable_section_end "docker-login"
5241
+ - collapseable_section_start "docker-build" "Docker build"
4852
5242
  - docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile $DOCKER_BUILD_CONTEXT --build-arg BUILDKIT_INLINE_CACHE=1
4853
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
4854
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
5243
+ - collapseable_section_end "docker-build"
5244
+ - collapseable_section_start "docker-push" "Docker push and tag"
4855
5245
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
4856
5246
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
4857
5247
  - docker push $DOCKER_CACHE_IMAGE
4858
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
5248
+ - collapseable_section_end "docker-push"
4859
5249
  cache:
4860
5250
  - key: kube-yarn
4861
5251
  policy: pull
@@ -4872,8 +5262,8 @@ kube 🧪 test:
4872
5262
  image: aquasec/trivy:0.38.3
4873
5263
  variables: {}
4874
5264
  script:
4875
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
4876
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
5265
+ - collapseable_section_start "injectvars" "Injecting variables"
5266
+ - collapseable_section_end "injectvars"
4877
5267
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" kube
4878
5268
  artifacts:
4879
5269
  paths:
@@ -4892,17 +5282,16 @@ kube 🧪 test:
4892
5282
  KUBERNETES_MEMORY_REQUEST: 200Mi
4893
5283
  KUBERNETES_MEMORY_LIMIT: 400Mi
4894
5284
  script:
4895
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
5285
+ - collapseable_section_start "injectvars" "Injecting variables"
4896
5286
  - export ENV_SHORT="prod"
4897
5287
  - export APP_DIR="kube"
4898
5288
  - export ENV_TYPE="prod"
4899
5289
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4900
5290
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
4901
5291
  - 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")"
4902
- - export HOST="kube.prod.test-app.pan.panter.cloud"
5292
+ - export HOSTNAME="kube.prod.test-app.pan.panter.cloud"
4903
5293
  - export ROOT_URL="https://kube.prod.test-app.pan.panter.cloud"
4904
- - export HOST_INTERNAL="kube.prod.test-app.pan.panter.cloud"
4905
- - export HOST_CANONICAL="kube.prod.test-app.pan.panter.cloud"
5294
+ - export HOSTNAME_INTERNAL="kube.prod.test-app.pan.panter.cloud"
4906
5295
  - export ROOT_URL_INTERNAL="https://kube.prod.test-app.pan.panter.cloud"
4907
5296
  - export KUBE_NAMESPACE="pan-test-app-prod"
4908
5297
  - export KUBE_APP_NAME="kube"
@@ -4943,7 +5332,7 @@ kube 🧪 test:
4943
5332
 
4944
5333
  --------
4945
5334
  "
4946
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
5335
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
4947
5336
  - export DOCKER_REGISTRY="$CI_REGISTRY"
4948
5337
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/kube"
4949
5338
  - export DOCKER_IMAGE_NAME="prod/kube"
@@ -4955,53 +5344,52 @@ kube 🧪 test:
4955
5344
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
4956
5345
  - export HELM_ARGS=""
4957
5346
  - export COMPONENT_NAME="kube"
4958
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
4959
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
5347
+ - collapseable_section_end "injectvars"
4960
5348
  - kubectl config set-cluster "kube-pan-test-app-prod-kube" --server="$CL_prod_kube_KUBE_URL" --certificate-authority <(echo $CL_prod_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
4961
5349
  - kubectl config set-credentials "kube-pan-test-app-prod-kube" --token="$CL_prod_kube_KUBE_TOKEN"
4962
5350
  - kubectl config set-context "kube-pan-test-app-prod-kube" --cluster="kube-pan-test-app-prod-kube" --user="kube-pan-test-app-prod-kube" --namespace="pan-test-app-prod"
4963
5351
  - kubectl config use-context "kube-pan-test-app-prod-kube"
4964
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
5352
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
4965
5353
  - |
4966
5354
  cat > __all_values.yml <<EOF
4967
5355
  env:
4968
5356
  secret:
4969
5357
  multiline_from_app1: |-
4970
- $(printf %s "app1 line1
4971
- app1 line2
4972
- app1 line3
4973
-
4974
- the url of self: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4975
-
4976
-
4977
- app1 single quote: '
4978
- app1 doouble quote: \\"
4979
- " | sed 's/^/ /')
5358
+ app1 line1
5359
+ app1 line2
5360
+ app1 line3
5361
+
5362
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
5363
+
5364
+
5365
+ app1 single quote: '
5366
+ app1 doouble quote: "
5367
+
4980
5368
  multiline: |-
4981
- $(printf %s "kube yeah
4982
- kube yeah2
4983
- kube yeah3
4984
-
4985
- kube single quote: '
4986
- kube doouble quote: \\"
4987
-
4988
- the url of self: \\"https://kube.prod.test-app.pan.panter.cloud\\"
4989
- the url of app1: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4990
-
4991
- value from app1:
4992
- -------
4993
- app1 line1
4994
- app1 line2
4995
- app1 line3
4996
-
4997
- the url of self: \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"
4998
-
4999
-
5000
- app1 single quote: '
5001
- app1 doouble quote: \\"
5002
-
5003
- --------
5004
- " | sed 's/^/ /')
5369
+ kube yeah
5370
+ kube yeah2
5371
+ kube yeah3
5372
+
5373
+ kube single quote: '
5374
+ kube doouble quote: "
5375
+
5376
+ the url of self: "https://kube.prod.test-app.pan.panter.cloud"
5377
+ the url of app1: "$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
5378
+
5379
+ value from app1:
5380
+ -------
5381
+ app1 line1
5382
+ app1 line2
5383
+ app1 line3
5384
+
5385
+ the url of self: "$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"
5386
+
5387
+
5388
+ app1 single quote: '
5389
+ app1 doouble quote: "
5390
+
5391
+ --------
5392
+
5005
5393
  public:
5006
5394
  ENV_SHORT: |-
5007
5395
  prod
@@ -5010,18 +5398,16 @@ kube 🧪 test:
5010
5398
  ENV_TYPE: |-
5011
5399
  prod
5012
5400
  BUILD_INFO_BUILD_ID: |-
5013
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
5401
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
5014
5402
  BUILD_INFO_BUILD_TIME: |-
5015
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
5403
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
5016
5404
  BUILD_INFO_CURRENT_VERSION: |-
5017
- $(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 's/^/ /')
5018
- HOST: |-
5405
+ $(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/^/ /')
5406
+ HOSTNAME: |-
5019
5407
  kube.prod.test-app.pan.panter.cloud
5020
5408
  ROOT_URL: |-
5021
5409
  https://kube.prod.test-app.pan.panter.cloud
5022
- HOST_INTERNAL: |-
5023
- kube.prod.test-app.pan.panter.cloud
5024
- HOST_CANONICAL: |-
5410
+ HOSTNAME_INTERNAL: |-
5025
5411
  kube.prod.test-app.pan.panter.cloud
5026
5412
  ROOT_URL_INTERNAL: |-
5027
5413
  https://kube.prod.test-app.pan.panter.cloud
@@ -5031,7 +5417,7 @@ kube 🧪 test:
5031
5417
  kube
5032
5418
  KUBE_APP_NAME_PREFIX: ""
5033
5419
  _ALL_ENV_VAR_KEYS: |-
5034
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
5420
+ ["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","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","multiline_from_app1","multiline"]
5035
5421
  application:
5036
5422
  host: |-
5037
5423
  kube.prod.test-app.pan.panter.cloud
@@ -5051,7 +5437,7 @@ kube 🧪 test:
5051
5437
  __health
5052
5438
 
5053
5439
  EOF
5054
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
5440
+ - collapseable_section_end "writeallvalues"
5055
5441
  - kubernetesCreateSecret
5056
5442
  - kubernetesDeploy
5057
5443
  - echo 'Uploading SBOM to Dependency Track'
@@ -5087,17 +5473,16 @@ kube 🧪 test:
5087
5473
  KUBERNETES_MEMORY_LIMIT: 400Mi
5088
5474
  GIT_STRATEGY: none
5089
5475
  script:
5090
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
5476
+ - collapseable_section_start "injectvars" "Injecting variables"
5091
5477
  - export ENV_SHORT="prod"
5092
5478
  - export APP_DIR="kube"
5093
5479
  - export ENV_TYPE="prod"
5094
5480
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
5095
5481
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
5096
5482
  - 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")"
5097
- - export HOST="kube.prod.test-app.pan.panter.cloud"
5483
+ - export HOSTNAME="kube.prod.test-app.pan.panter.cloud"
5098
5484
  - export ROOT_URL="https://kube.prod.test-app.pan.panter.cloud"
5099
- - export HOST_INTERNAL="kube.prod.test-app.pan.panter.cloud"
5100
- - export HOST_CANONICAL="kube.prod.test-app.pan.panter.cloud"
5485
+ - export HOSTNAME_INTERNAL="kube.prod.test-app.pan.panter.cloud"
5101
5486
  - export ROOT_URL_INTERNAL="https://kube.prod.test-app.pan.panter.cloud"
5102
5487
  - export KUBE_NAMESPACE="pan-test-app-prod"
5103
5488
  - export KUBE_APP_NAME="kube"
@@ -5138,15 +5523,14 @@ kube 🧪 test:
5138
5523
 
5139
5524
  --------
5140
5525
  "
5141
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
5526
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
5142
5527
  - export RELEASE_NAME="pan-test-app-prod-kube"
5143
5528
  - export HELM_EXPERIMENTAL_OCI="1"
5144
5529
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-kube"
5145
5530
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
5146
5531
  - export HELM_ARGS=""
5147
5532
  - export COMPONENT_NAME="kube"
5148
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
5149
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
5533
+ - collapseable_section_end "injectvars"
5150
5534
  - kubectl config set-cluster "kube-pan-test-app-prod-kube" --server="$CL_prod_kube_KUBE_URL" --certificate-authority <(echo $CL_prod_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
5151
5535
  - kubectl config set-credentials "kube-pan-test-app-prod-kube" --token="$CL_prod_kube_KUBE_TOKEN"
5152
5536
  - kubectl config set-context "kube-pan-test-app-prod-kube" --cluster="kube-pan-test-app-prod-kube" --user="kube-pan-test-app-prod-kube" --namespace="pan-test-app-prod"
@@ -5180,17 +5564,16 @@ kube 🧪 test:
5180
5564
  KUBERNETES_MEMORY_LIMIT: 400Mi
5181
5565
  GIT_STRATEGY: none
5182
5566
  script:
5183
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
5567
+ - collapseable_section_start "injectvars" "Injecting variables"
5184
5568
  - export ENV_SHORT="prod"
5185
5569
  - export APP_DIR="kube"
5186
5570
  - export ENV_TYPE="prod"
5187
5571
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
5188
5572
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
5189
5573
  - 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")"
5190
- - export HOST="kube.prod.test-app.pan.panter.cloud"
5574
+ - export HOSTNAME="kube.prod.test-app.pan.panter.cloud"
5191
5575
  - export ROOT_URL="https://kube.prod.test-app.pan.panter.cloud"
5192
- - export HOST_INTERNAL="kube.prod.test-app.pan.panter.cloud"
5193
- - export HOST_CANONICAL="kube.prod.test-app.pan.panter.cloud"
5576
+ - export HOSTNAME_INTERNAL="kube.prod.test-app.pan.panter.cloud"
5194
5577
  - export ROOT_URL_INTERNAL="https://kube.prod.test-app.pan.panter.cloud"
5195
5578
  - export KUBE_NAMESPACE="pan-test-app-prod"
5196
5579
  - export KUBE_APP_NAME="kube"
@@ -5231,15 +5614,14 @@ kube 🧪 test:
5231
5614
 
5232
5615
  --------
5233
5616
  "
5234
- - export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
5617
+ - 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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"multiline_from_app1\\",\\"multiline\\"]"
5235
5618
  - export RELEASE_NAME="pan-test-app-prod-kube"
5236
5619
  - export HELM_EXPERIMENTAL_OCI="1"
5237
5620
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-kube"
5238
5621
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
5239
5622
  - export HELM_ARGS=""
5240
5623
  - export COMPONENT_NAME="kube"
5241
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
5242
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
5624
+ - collapseable_section_end "injectvars"
5243
5625
  - kubectl config set-cluster "kube-pan-test-app-prod-kube" --server="$CL_prod_kube_KUBE_URL" --certificate-authority <(echo $CL_prod_kube_KUBE_CA_PEM | base64 -d) --embed-certs=true
5244
5626
  - kubectl config set-credentials "kube-pan-test-app-prod-kube" --token="$CL_prod_kube_KUBE_TOKEN"
5245
5627
  - kubectl config set-context "kube-pan-test-app-prod-kube" --cluster="kube-pan-test-app-prod-kube" --user="kube-pan-test-app-prod-kube" --namespace="pan-test-app-prod"