@catladder/pipeline 1.170.0 → 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 (194) hide show
  1. package/dist/bash/BashExpression.d.ts +2 -6
  2. package/dist/bash/BashExpression.js +5 -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 -41
  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 +4741 -0
  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 → referencing-other-vars.test.ts} +2 -2
  123. package/examples/referencing-other-vars.ts +83 -0
  124. package/examples/workspace-api-www-turbo-cache.test.ts +11 -0
  125. package/examples/{workspace-api-www-custom-cache.ts → workspace-api-www-turbo-cache.ts} +4 -3
  126. package/examples/workspace-api-www.ts +3 -2
  127. package/package.json +2 -6
  128. package/src/bash/BashExpression.ts +10 -13
  129. package/src/bash/bashEscape.ts +158 -0
  130. package/src/bash/bashYaml.ts +36 -2
  131. package/src/bash/getInjectVarsScript.ts +11 -2
  132. package/src/bash/index.ts +2 -0
  133. package/src/build/base/createAppBuildJob.ts +0 -1
  134. package/src/build/base/writeDotEnv.ts +6 -6
  135. package/src/build/custom/testJob.ts +0 -1
  136. package/src/build/node/buildJob.ts +2 -2
  137. package/src/build/node/cache.ts +0 -29
  138. package/src/build/node/testJob.ts +0 -1
  139. package/src/build/rails/build.ts +0 -1
  140. package/src/build/rails/test.ts +0 -1
  141. package/src/build/types.ts +0 -13
  142. package/src/context/createComponentContext.ts +0 -1
  143. package/src/context/getEnvConfig.ts +2 -2
  144. package/src/context/getEnvironment.ts +1 -1
  145. package/src/context/getEnvironmentContext.ts +1 -1
  146. package/src/context/getEnvironmentVariables.ts +44 -51
  147. package/src/deploy/base/deploy.ts +1 -1
  148. package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +4 -12
  149. package/src/deploy/cloudRun/index.ts +2 -2
  150. package/src/deploy/kubernetes/cloudSql/index.ts +3 -16
  151. package/src/deploy/kubernetes/deployJob.ts +0 -2
  152. package/src/deploy/kubernetes/index.ts +2 -2
  153. package/src/deploy/kubernetes/kubeEnv.ts +3 -3
  154. package/src/deploy/kubernetes/kubeValues.ts +5 -8
  155. package/src/deploy/types/base.ts +0 -6
  156. package/src/deploy/types/kubernetes.ts +1 -36
  157. package/src/globalScriptFunctions/index.ts +30 -0
  158. package/src/index.ts +2 -0
  159. package/src/pipeline/gitlab/createGitlabJobs.ts +1 -4
  160. package/src/pipeline/gitlab/createGitlabPipeline.ts +8 -1
  161. package/src/pipeline/packageManager.ts +7 -5
  162. package/src/runner/index.ts +0 -1
  163. package/src/types/config.ts +6 -9
  164. package/src/types/context.ts +3 -9
  165. package/src/types/gitlab-types.ts +1 -0
  166. package/src/types/jobs.ts +0 -8
  167. package/src/utils/gitlab.ts +19 -2
  168. package/src/utils/writeFiles.ts +1 -2
  169. package/src/variables/VariableValue.ts +6 -0
  170. package/src/variables/VariableValueContainingReferences.ts +89 -0
  171. package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
  172. package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
  173. package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
  174. package/src/variables/__tests__/variableValue.test.ts +73 -0
  175. package/src/variables/resolveAllReferences.ts +46 -0
  176. package/src/variables/resolveAllReferencesOnce.ts +44 -0
  177. package/src/variables/resolveReferencesOnce.ts +29 -0
  178. package/bin/catladder-gitlab-dev.js +0 -3
  179. package/bin/catladder-gitlab.js +0 -3
  180. package/dist/bash/replaceAsync.d.ts +0 -2
  181. package/dist/bundles/catladder-gitlab/index.js +0 -15
  182. package/dist/context/__tests__/resolveReferences.test.js +0 -368
  183. package/dist/context/resolveReferences.d.ts +0 -6
  184. package/dist/context/resolveReferences.js +0 -286
  185. package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -85
  186. package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -33
  187. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +0 -1795
  188. package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -35
  189. package/scripts/bundle +0 -2
  190. package/src/bash/replaceAsync.ts +0 -54
  191. package/src/context/__tests__/resolveReferences.test.ts +0 -148
  192. package/src/context/resolveReferences.ts +0 -93
  193. package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -35
  194. /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
  api 🛡 audit:
49
79
  stage: test
50
80
  image: path/to/docker/jobs-default:the-version
@@ -53,9 +83,9 @@ api 🛡 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="api"
58
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
88
+ - collapseable_section_end "injectvars"
59
89
  - cd api
60
90
  - yarn npm audit --environment production
61
91
  rules:
@@ -79,21 +109,21 @@ api 👮 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="api"
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 api
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: api-yarn
@@ -120,21 +150,21 @@ api 🧪 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="api"
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 api
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: api-yarn
@@ -161,36 +191,35 @@ api 🧪 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="api"
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="api.dev.test-app.pan.panter.cloud"
201
+ - export HOSTNAME="api.dev.test-app.pan.panter.cloud"
172
202
  - export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"
173
- - export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"
174
- - export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"
203
+ - export HOSTNAME_INTERNAL="api.dev.test-app.pan.panter.cloud"
175
204
  - export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"
176
205
  - export KUBE_NAMESPACE="pan-test-app-dev"
177
206
  - export KUBE_APP_NAME="api"
178
207
  - export KUBE_APP_NAME_PREFIX=""
179
- - 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\\"]"
180
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
208
+ - 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\\"]"
209
+ - collapseable_section_end "injectvars"
181
210
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
182
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
211
+ - collapseable_section_start "nodeinstall" "Ensure node version"
183
212
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
184
213
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
185
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
214
+ - collapseable_section_end "nodeinstall"
186
215
  - cd api
187
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
216
+ - collapseable_section_start "nodeinstall" "Ensure node version"
188
217
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
189
218
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
190
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
191
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
219
+ - collapseable_section_end "nodeinstall"
220
+ - collapseable_section_start "yarninstall" "Yarn install"
192
221
  - yarn install --immutable
193
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
222
+ - collapseable_section_end "yarninstall"
194
223
  - yarn build
195
224
  cache:
196
225
  - key: api-yarn
@@ -201,10 +230,6 @@ api 🧪 test:
201
230
  policy: pull-push
202
231
  paths:
203
232
  - api/node_modules
204
- - key: api-next-cache
205
- policy: pull-push
206
- paths:
207
- - api/.next/cache
208
233
  artifacts:
209
234
  paths:
210
235
  - api/__build_info.json
@@ -237,7 +262,7 @@ api 🧪 test:
237
262
  KUBERNETES_MEMORY_REQUEST: 1Gi
238
263
  KUBERNETES_MEMORY_LIMIT: 2Gi
239
264
  script:
240
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
265
+ - collapseable_section_start "injectvars" "Injecting variables"
241
266
  - export APP_DIR="api"
242
267
  - export DOCKER_BUILD_CONTEXT="."
243
268
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -254,19 +279,19 @@ api 🧪 test:
254
279
  COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
255
280
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
256
281
  COPY --chown=node:node .yarn /app/.yarn"
257
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
282
+ - collapseable_section_end "injectvars"
258
283
  - ensureNodeDockerfile
259
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
284
+ - collapseable_section_start "docker-login" "Docker Login"
260
285
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
261
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
262
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
286
+ - collapseable_section_end "docker-login"
287
+ - collapseable_section_start "docker-build" "Docker build"
263
288
  - 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
264
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
265
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
289
+ - collapseable_section_end "docker-build"
290
+ - collapseable_section_start "docker-push" "Docker push and tag"
266
291
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
267
292
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
268
293
  - docker push $DOCKER_CACHE_IMAGE
269
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
294
+ - collapseable_section_end "docker-push"
270
295
  cache:
271
296
  - key: api-yarn
272
297
  policy: pull
@@ -285,8 +310,8 @@ api 🧪 test:
285
310
  image: aquasec/trivy:0.38.3
286
311
  variables: {}
287
312
  script:
288
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
289
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
313
+ - collapseable_section_start "injectvars" "Injecting variables"
314
+ - collapseable_section_end "injectvars"
290
315
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" api
291
316
  artifacts:
292
317
  paths:
@@ -307,22 +332,21 @@ api 🧪 test:
307
332
  KUBERNETES_MEMORY_REQUEST: 200Mi
308
333
  KUBERNETES_MEMORY_LIMIT: 400Mi
309
334
  script:
310
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
335
+ - collapseable_section_start "injectvars" "Injecting variables"
311
336
  - export ENV_SHORT="dev"
312
337
  - export APP_DIR="api"
313
338
  - export ENV_TYPE="dev"
314
339
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
315
340
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
316
341
  - 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")"
317
- - export HOST="api.dev.test-app.pan.panter.cloud"
342
+ - export HOSTNAME="api.dev.test-app.pan.panter.cloud"
318
343
  - export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"
319
- - export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"
320
- - export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"
344
+ - export HOSTNAME_INTERNAL="api.dev.test-app.pan.panter.cloud"
321
345
  - export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"
322
346
  - export KUBE_NAMESPACE="pan-test-app-dev"
323
347
  - export KUBE_APP_NAME="api"
324
348
  - export KUBE_APP_NAME_PREFIX=""
325
- - 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\\"]"
349
+ - 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\\"]"
326
350
  - export DOCKER_REGISTRY="$CI_REGISTRY"
327
351
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"
328
352
  - export DOCKER_IMAGE_NAME="dev/api"
@@ -334,13 +358,12 @@ api 🧪 test:
334
358
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
335
359
  - export HELM_ARGS=""
336
360
  - export COMPONENT_NAME="api"
337
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
338
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
361
+ - collapseable_section_end "injectvars"
339
362
  - kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
340
363
  - kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"
341
364
  - kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"
342
365
  - kubectl config use-context "kube-pan-test-app-dev-api"
343
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
366
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
344
367
  - |
345
368
  cat > __all_values.yml <<EOF
346
369
  env:
@@ -353,18 +376,16 @@ api 🧪 test:
353
376
  ENV_TYPE: |-
354
377
  dev
355
378
  BUILD_INFO_BUILD_ID: |-
356
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
379
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
357
380
  BUILD_INFO_BUILD_TIME: |-
358
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
381
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
359
382
  BUILD_INFO_CURRENT_VERSION: |-
360
- $(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/^/ /')
361
- HOST: |-
383
+ $(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/^/ /')
384
+ HOSTNAME: |-
362
385
  api.dev.test-app.pan.panter.cloud
363
386
  ROOT_URL: |-
364
387
  https://api.dev.test-app.pan.panter.cloud
365
- HOST_INTERNAL: |-
366
- api.dev.test-app.pan.panter.cloud
367
- HOST_CANONICAL: |-
388
+ HOSTNAME_INTERNAL: |-
368
389
  api.dev.test-app.pan.panter.cloud
369
390
  ROOT_URL_INTERNAL: |-
370
391
  https://api.dev.test-app.pan.panter.cloud
@@ -374,7 +395,7 @@ api 🧪 test:
374
395
  api
375
396
  KUBE_APP_NAME_PREFIX: ""
376
397
  _ALL_ENV_VAR_KEYS: |-
377
- ["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"]
398
+ ["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"]
378
399
  application:
379
400
  host: |-
380
401
  api.dev.test-app.pan.panter.cloud
@@ -404,7 +425,7 @@ api 🧪 test:
404
425
  0 * * * *
405
426
 
406
427
  EOF
407
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
428
+ - collapseable_section_end "writeallvalues"
408
429
  - kubernetesCreateSecret
409
430
  - kubernetesDeploy
410
431
  - echo 'Uploading SBOM to Dependency Track'
@@ -449,30 +470,28 @@ api 🧪 test:
449
470
  KUBERNETES_MEMORY_LIMIT: 400Mi
450
471
  GIT_STRATEGY: none
451
472
  script:
452
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
473
+ - collapseable_section_start "injectvars" "Injecting variables"
453
474
  - export ENV_SHORT="dev"
454
475
  - export APP_DIR="api"
455
476
  - export ENV_TYPE="dev"
456
477
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
457
478
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
458
479
  - export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
459
- - export HOST="api.dev.test-app.pan.panter.cloud"
480
+ - export HOSTNAME="api.dev.test-app.pan.panter.cloud"
460
481
  - export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"
461
- - export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"
462
- - export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"
482
+ - export HOSTNAME_INTERNAL="api.dev.test-app.pan.panter.cloud"
463
483
  - export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"
464
484
  - export KUBE_NAMESPACE="pan-test-app-dev"
465
485
  - export KUBE_APP_NAME="api"
466
486
  - export KUBE_APP_NAME_PREFIX=""
467
- - 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\\"]"
487
+ - 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\\"]"
468
488
  - export RELEASE_NAME="pan-test-app-dev-api"
469
489
  - export HELM_EXPERIMENTAL_OCI="1"
470
490
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"
471
491
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
472
492
  - export HELM_ARGS=""
473
493
  - export COMPONENT_NAME="api"
474
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
475
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
494
+ - collapseable_section_end "injectvars"
476
495
  - kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
477
496
  - kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"
478
497
  - kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"
@@ -508,30 +527,28 @@ api 🧪 test:
508
527
  KUBERNETES_MEMORY_LIMIT: 400Mi
509
528
  GIT_STRATEGY: none
510
529
  script:
511
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
530
+ - collapseable_section_start "injectvars" "Injecting variables"
512
531
  - export ENV_SHORT="dev"
513
532
  - export APP_DIR="api"
514
533
  - export ENV_TYPE="dev"
515
534
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
516
535
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
517
536
  - 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")"
518
- - export HOST="api.dev.test-app.pan.panter.cloud"
537
+ - export HOSTNAME="api.dev.test-app.pan.panter.cloud"
519
538
  - export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"
520
- - export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"
521
- - export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"
539
+ - export HOSTNAME_INTERNAL="api.dev.test-app.pan.panter.cloud"
522
540
  - export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"
523
541
  - export KUBE_NAMESPACE="pan-test-app-dev"
524
542
  - export KUBE_APP_NAME="api"
525
543
  - export KUBE_APP_NAME_PREFIX=""
526
- - 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\\"]"
544
+ - 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\\"]"
527
545
  - export RELEASE_NAME="pan-test-app-dev-api"
528
546
  - export HELM_EXPERIMENTAL_OCI="1"
529
547
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"
530
548
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
531
549
  - export HELM_ARGS=""
532
550
  - export COMPONENT_NAME="api"
533
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
534
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
551
+ - collapseable_section_end "injectvars"
535
552
  - kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
536
553
  - kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"
537
554
  - kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"
@@ -562,36 +579,35 @@ api 🧪 test:
562
579
  KUBERNETES_MEMORY_REQUEST: 1Gi
563
580
  KUBERNETES_MEMORY_LIMIT: 4Gi
564
581
  script:
565
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
582
+ - collapseable_section_start "injectvars" "Injecting variables"
566
583
  - export ENV_SHORT="review"
567
584
  - export APP_DIR="api"
568
585
  - export ENV_TYPE="review"
569
586
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
570
587
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
571
588
  - 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")"
572
- - export HOST="api.$([ -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"
589
+ - export HOSTNAME="api.$([ -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"
573
590
  - export ROOT_URL="https://api.$([ -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"
574
- - export HOST_INTERNAL="api.$([ -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"
575
- - export HOST_CANONICAL="api.$([ -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"
591
+ - export HOSTNAME_INTERNAL="api.$([ -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"
576
592
  - export ROOT_URL_INTERNAL="https://api.$([ -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"
577
593
  - export KUBE_NAMESPACE="pan-test-app-review"
578
594
  - 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"; })-api"
579
595
  - export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"
580
- - 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\\"]"
581
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
596
+ - 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\\"]"
597
+ - collapseable_section_end "injectvars"
582
598
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
583
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
599
+ - collapseable_section_start "nodeinstall" "Ensure node version"
584
600
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
585
601
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
586
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
602
+ - collapseable_section_end "nodeinstall"
587
603
  - cd api
588
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
604
+ - collapseable_section_start "nodeinstall" "Ensure node version"
589
605
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
590
606
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
591
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
592
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
607
+ - collapseable_section_end "nodeinstall"
608
+ - collapseable_section_start "yarninstall" "Yarn install"
593
609
  - yarn install --immutable
594
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
610
+ - collapseable_section_end "yarninstall"
595
611
  - yarn build
596
612
  cache:
597
613
  - key: api-yarn
@@ -602,10 +618,6 @@ api 🧪 test:
602
618
  policy: pull-push
603
619
  paths:
604
620
  - api/node_modules
605
- - key: api-next-cache
606
- policy: pull-push
607
- paths:
608
- - api/.next/cache
609
621
  artifacts:
610
622
  paths:
611
623
  - api/__build_info.json
@@ -636,7 +648,7 @@ api 🧪 test:
636
648
  KUBERNETES_MEMORY_REQUEST: 1Gi
637
649
  KUBERNETES_MEMORY_LIMIT: 2Gi
638
650
  script:
639
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
651
+ - collapseable_section_start "injectvars" "Injecting variables"
640
652
  - export APP_DIR="api"
641
653
  - export DOCKER_BUILD_CONTEXT="."
642
654
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -653,19 +665,19 @@ api 🧪 test:
653
665
  COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
654
666
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
655
667
  COPY --chown=node:node .yarn /app/.yarn"
656
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
668
+ - collapseable_section_end "injectvars"
657
669
  - ensureNodeDockerfile
658
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
670
+ - collapseable_section_start "docker-login" "Docker Login"
659
671
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
660
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
661
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
672
+ - collapseable_section_end "docker-login"
673
+ - collapseable_section_start "docker-build" "Docker build"
662
674
  - 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
663
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
664
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
675
+ - collapseable_section_end "docker-build"
676
+ - collapseable_section_start "docker-push" "Docker push and tag"
665
677
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
666
678
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
667
679
  - docker push $DOCKER_CACHE_IMAGE
668
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
680
+ - collapseable_section_end "docker-push"
669
681
  cache:
670
682
  - key: api-yarn
671
683
  policy: pull
@@ -682,8 +694,8 @@ api 🧪 test:
682
694
  image: aquasec/trivy:0.38.3
683
695
  variables: {}
684
696
  script:
685
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
686
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
697
+ - collapseable_section_start "injectvars" "Injecting variables"
698
+ - collapseable_section_end "injectvars"
687
699
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" api
688
700
  artifacts:
689
701
  paths:
@@ -702,22 +714,21 @@ api 🧪 test:
702
714
  KUBERNETES_MEMORY_REQUEST: 200Mi
703
715
  KUBERNETES_MEMORY_LIMIT: 400Mi
704
716
  script:
705
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
717
+ - collapseable_section_start "injectvars" "Injecting variables"
706
718
  - export ENV_SHORT="review"
707
719
  - export APP_DIR="api"
708
720
  - export ENV_TYPE="review"
709
721
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
710
722
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
711
723
  - 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")"
712
- - export HOST="api.$([ -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"
724
+ - export HOSTNAME="api.$([ -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"
713
725
  - export ROOT_URL="https://api.$([ -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"
714
- - export HOST_INTERNAL="api.$([ -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"
715
- - export HOST_CANONICAL="api.$([ -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"
726
+ - export HOSTNAME_INTERNAL="api.$([ -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"
716
727
  - export ROOT_URL_INTERNAL="https://api.$([ -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"
717
728
  - export KUBE_NAMESPACE="pan-test-app-review"
718
729
  - 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"; })-api"
719
730
  - export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"
720
- - 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\\"]"
731
+ - 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\\"]"
721
732
  - export DOCKER_REGISTRY="$CI_REGISTRY"
722
733
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"
723
734
  - export DOCKER_IMAGE_NAME="review/api"
@@ -729,13 +740,12 @@ api 🧪 test:
729
740
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
730
741
  - export HELM_ARGS=""
731
742
  - export COMPONENT_NAME="api"
732
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
733
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
743
+ - collapseable_section_end "injectvars"
734
744
  - 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"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
735
745
  - 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"; })-api" --token="$CL_review_api_KUBE_TOKEN"
736
746
  - 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"; })-api" --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"; })-api" --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"; })-api" --namespace="pan-test-app-review"
737
747
  - 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"; })-api"
738
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
748
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
739
749
  - |
740
750
  cat > __all_values.yml <<EOF
741
751
  env:
@@ -748,32 +758,30 @@ api 🧪 test:
748
758
  ENV_TYPE: |-
749
759
  review
750
760
  BUILD_INFO_BUILD_ID: |-
751
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
761
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
752
762
  BUILD_INFO_BUILD_TIME: |-
753
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
763
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
754
764
  BUILD_INFO_CURRENT_VERSION: |-
755
- $(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/^/ /')
756
- HOST: |-
757
- $(printf %s "api.$([ -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/^/ /')
765
+ $(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/^/ /')
766
+ HOSTNAME: |-
767
+ $(printf %s "api.$([ -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/^/ /')
758
768
  ROOT_URL: |-
759
- $(printf %s "https://api.$([ -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/^/ /')
760
- HOST_INTERNAL: |-
761
- $(printf %s "api.$([ -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/^/ /')
762
- HOST_CANONICAL: |-
763
- $(printf %s "api.$([ -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/^/ /')
769
+ $(printf %s "https://api.$([ -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/^/ /')
770
+ HOSTNAME_INTERNAL: |-
771
+ $(printf %s "api.$([ -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/^/ /')
764
772
  ROOT_URL_INTERNAL: |-
765
- $(printf %s "https://api.$([ -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/^/ /')
773
+ $(printf %s "https://api.$([ -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/^/ /')
766
774
  KUBE_NAMESPACE: |-
767
775
  pan-test-app-review
768
776
  KUBE_APP_NAME: |-
769
- $(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"; })-api" | sed 's/^/ /')
777
+ $(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"; })-api" | sed '1!s/^/ /')
770
778
  KUBE_APP_NAME_PREFIX: |-
771
- $(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/^/ /')
779
+ $(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/^/ /')
772
780
  _ALL_ENV_VAR_KEYS: |-
773
- ["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"]
781
+ ["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"]
774
782
  application:
775
783
  host: |-
776
- $(printf %s "api.$([ -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/^/ /')
784
+ $(printf %s "api.$([ -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/^/ /')
777
785
  command: |-
778
786
  yarn start
779
787
  livenessProbe:
@@ -795,7 +803,7 @@ api 🧪 test:
795
803
  cronjobs: {}
796
804
 
797
805
  EOF
798
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
806
+ - collapseable_section_end "writeallvalues"
799
807
  - kubernetesCreateSecret
800
808
  - kubernetesDeploy
801
809
  - echo 'Uploading SBOM to Dependency Track'
@@ -838,30 +846,28 @@ api 🧪 test:
838
846
  KUBERNETES_MEMORY_LIMIT: 400Mi
839
847
  GIT_STRATEGY: none
840
848
  script:
841
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
849
+ - collapseable_section_start "injectvars" "Injecting variables"
842
850
  - export ENV_SHORT="review"
843
851
  - export APP_DIR="api"
844
852
  - export ENV_TYPE="review"
845
853
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
846
854
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
847
855
  - 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")"
848
- - export HOST="api.$([ -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"
856
+ - export HOSTNAME="api.$([ -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"
849
857
  - export ROOT_URL="https://api.$([ -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"
850
- - export HOST_INTERNAL="api.$([ -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"
851
- - export HOST_CANONICAL="api.$([ -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"
858
+ - export HOSTNAME_INTERNAL="api.$([ -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"
852
859
  - export ROOT_URL_INTERNAL="https://api.$([ -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"
853
860
  - export KUBE_NAMESPACE="pan-test-app-review"
854
861
  - 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"; })-api"
855
862
  - export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"
856
- - 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\\"]"
863
+ - 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\\"]"
857
864
  - 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"; })-api"
858
865
  - export HELM_EXPERIMENTAL_OCI="1"
859
866
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"
860
867
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
861
868
  - export HELM_ARGS=""
862
869
  - export COMPONENT_NAME="api"
863
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
864
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
870
+ - collapseable_section_end "injectvars"
865
871
  - 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"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
866
872
  - 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"; })-api" --token="$CL_review_api_KUBE_TOKEN"
867
873
  - 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"; })-api" --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"; })-api" --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"; })-api" --namespace="pan-test-app-review"
@@ -895,30 +901,28 @@ api 🧪 test:
895
901
  KUBERNETES_MEMORY_LIMIT: 400Mi
896
902
  GIT_STRATEGY: none
897
903
  script:
898
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
904
+ - collapseable_section_start "injectvars" "Injecting variables"
899
905
  - export ENV_SHORT="review"
900
906
  - export APP_DIR="api"
901
907
  - export ENV_TYPE="review"
902
908
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
903
909
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
904
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")"
905
- - export HOST="api.$([ -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"
911
+ - export HOSTNAME="api.$([ -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"
906
912
  - export ROOT_URL="https://api.$([ -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"
907
- - export HOST_INTERNAL="api.$([ -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"
908
- - export HOST_CANONICAL="api.$([ -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"
913
+ - export HOSTNAME_INTERNAL="api.$([ -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"
909
914
  - export ROOT_URL_INTERNAL="https://api.$([ -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"
910
915
  - export KUBE_NAMESPACE="pan-test-app-review"
911
916
  - 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"; })-api"
912
917
  - export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"
913
- - 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\\"]"
918
+ - 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\\"]"
914
919
  - 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"; })-api"
915
920
  - export HELM_EXPERIMENTAL_OCI="1"
916
921
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"
917
922
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
918
923
  - export HELM_ARGS=""
919
924
  - export COMPONENT_NAME="api"
920
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
921
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
925
+ - collapseable_section_end "injectvars"
922
926
  - 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"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
923
927
  - 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"; })-api" --token="$CL_review_api_KUBE_TOKEN"
924
928
  - 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"; })-api" --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"; })-api" --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"; })-api" --namespace="pan-test-app-review"
@@ -947,36 +951,35 @@ api 🧪 test:
947
951
  KUBERNETES_MEMORY_REQUEST: 1Gi
948
952
  KUBERNETES_MEMORY_LIMIT: 4Gi
949
953
  script:
950
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
954
+ - collapseable_section_start "injectvars" "Injecting variables"
951
955
  - export ENV_SHORT="stage"
952
956
  - export APP_DIR="api"
953
957
  - export ENV_TYPE="stage"
954
958
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
955
959
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
956
960
  - 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")"
957
- - export HOST="api.stage.test-app.pan.panter.cloud"
961
+ - export HOSTNAME="api.stage.test-app.pan.panter.cloud"
958
962
  - export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"
959
- - export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"
960
- - export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"
963
+ - export HOSTNAME_INTERNAL="api.stage.test-app.pan.panter.cloud"
961
964
  - export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"
962
965
  - export KUBE_NAMESPACE="pan-test-app-stage"
963
966
  - export KUBE_APP_NAME="api"
964
967
  - export KUBE_APP_NAME_PREFIX=""
965
- - 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\\"]"
966
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
968
+ - 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\\"]"
969
+ - collapseable_section_end "injectvars"
967
970
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
968
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
971
+ - collapseable_section_start "nodeinstall" "Ensure node version"
969
972
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
970
973
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
971
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
974
+ - collapseable_section_end "nodeinstall"
972
975
  - cd api
973
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
976
+ - collapseable_section_start "nodeinstall" "Ensure node version"
974
977
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
975
978
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
976
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
977
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
979
+ - collapseable_section_end "nodeinstall"
980
+ - collapseable_section_start "yarninstall" "Yarn install"
978
981
  - yarn install --immutable
979
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
982
+ - collapseable_section_end "yarninstall"
980
983
  - yarn build
981
984
  cache:
982
985
  - key: api-yarn
@@ -987,10 +990,6 @@ api 🧪 test:
987
990
  policy: pull-push
988
991
  paths:
989
992
  - api/node_modules
990
- - key: api-next-cache
991
- policy: pull-push
992
- paths:
993
- - api/.next/cache
994
993
  artifacts:
995
994
  paths:
996
995
  - api/__build_info.json
@@ -1021,7 +1020,7 @@ api 🧪 test:
1021
1020
  KUBERNETES_MEMORY_REQUEST: 1Gi
1022
1021
  KUBERNETES_MEMORY_LIMIT: 2Gi
1023
1022
  script:
1024
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1023
+ - collapseable_section_start "injectvars" "Injecting variables"
1025
1024
  - export APP_DIR="api"
1026
1025
  - export DOCKER_BUILD_CONTEXT="."
1027
1026
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -1038,19 +1037,19 @@ api 🧪 test:
1038
1037
  COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1039
1038
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1040
1039
  COPY --chown=node:node .yarn /app/.yarn"
1041
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1040
+ - collapseable_section_end "injectvars"
1042
1041
  - ensureNodeDockerfile
1043
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
1042
+ - collapseable_section_start "docker-login" "Docker Login"
1044
1043
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
1045
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
1046
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
1044
+ - collapseable_section_end "docker-login"
1045
+ - collapseable_section_start "docker-build" "Docker build"
1047
1046
  - 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
1048
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
1049
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
1047
+ - collapseable_section_end "docker-build"
1048
+ - collapseable_section_start "docker-push" "Docker push and tag"
1050
1049
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
1051
1050
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
1052
1051
  - docker push $DOCKER_CACHE_IMAGE
1053
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
1052
+ - collapseable_section_end "docker-push"
1054
1053
  cache:
1055
1054
  - key: api-yarn
1056
1055
  policy: pull
@@ -1067,8 +1066,8 @@ api 🧪 test:
1067
1066
  image: aquasec/trivy:0.38.3
1068
1067
  variables: {}
1069
1068
  script:
1070
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1071
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1069
+ - collapseable_section_start "injectvars" "Injecting variables"
1070
+ - collapseable_section_end "injectvars"
1072
1071
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" api
1073
1072
  artifacts:
1074
1073
  paths:
@@ -1087,22 +1086,21 @@ api 🧪 test:
1087
1086
  KUBERNETES_MEMORY_REQUEST: 200Mi
1088
1087
  KUBERNETES_MEMORY_LIMIT: 400Mi
1089
1088
  script:
1090
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1089
+ - collapseable_section_start "injectvars" "Injecting variables"
1091
1090
  - export ENV_SHORT="stage"
1092
1091
  - export APP_DIR="api"
1093
1092
  - export ENV_TYPE="stage"
1094
1093
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1095
1094
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1096
1095
  - 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")"
1097
- - export HOST="api.stage.test-app.pan.panter.cloud"
1096
+ - export HOSTNAME="api.stage.test-app.pan.panter.cloud"
1098
1097
  - export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"
1099
- - export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"
1100
- - export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"
1098
+ - export HOSTNAME_INTERNAL="api.stage.test-app.pan.panter.cloud"
1101
1099
  - export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"
1102
1100
  - export KUBE_NAMESPACE="pan-test-app-stage"
1103
1101
  - export KUBE_APP_NAME="api"
1104
1102
  - export KUBE_APP_NAME_PREFIX=""
1105
- - 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\\"]"
1103
+ - 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\\"]"
1106
1104
  - export DOCKER_REGISTRY="$CI_REGISTRY"
1107
1105
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"
1108
1106
  - export DOCKER_IMAGE_NAME="stage/api"
@@ -1114,13 +1112,12 @@ api 🧪 test:
1114
1112
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
1115
1113
  - export HELM_ARGS=""
1116
1114
  - export COMPONENT_NAME="api"
1117
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1118
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1115
+ - collapseable_section_end "injectvars"
1119
1116
  - kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
1120
1117
  - kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"
1121
1118
  - kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"
1122
1119
  - kubectl config use-context "kube-pan-test-app-stage-api"
1123
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
1120
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
1124
1121
  - |
1125
1122
  cat > __all_values.yml <<EOF
1126
1123
  env:
@@ -1133,18 +1130,16 @@ api 🧪 test:
1133
1130
  ENV_TYPE: |-
1134
1131
  stage
1135
1132
  BUILD_INFO_BUILD_ID: |-
1136
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1133
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
1137
1134
  BUILD_INFO_BUILD_TIME: |-
1138
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1135
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
1139
1136
  BUILD_INFO_CURRENT_VERSION: |-
1140
- $(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/^/ /')
1141
- HOST: |-
1137
+ $(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/^/ /')
1138
+ HOSTNAME: |-
1142
1139
  api.stage.test-app.pan.panter.cloud
1143
1140
  ROOT_URL: |-
1144
1141
  https://api.stage.test-app.pan.panter.cloud
1145
- HOST_INTERNAL: |-
1146
- api.stage.test-app.pan.panter.cloud
1147
- HOST_CANONICAL: |-
1142
+ HOSTNAME_INTERNAL: |-
1148
1143
  api.stage.test-app.pan.panter.cloud
1149
1144
  ROOT_URL_INTERNAL: |-
1150
1145
  https://api.stage.test-app.pan.panter.cloud
@@ -1154,7 +1149,7 @@ api 🧪 test:
1154
1149
  api
1155
1150
  KUBE_APP_NAME_PREFIX: ""
1156
1151
  _ALL_ENV_VAR_KEYS: |-
1157
- ["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"]
1152
+ ["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"]
1158
1153
  application:
1159
1154
  host: |-
1160
1155
  api.stage.test-app.pan.panter.cloud
@@ -1184,7 +1179,7 @@ api 🧪 test:
1184
1179
  0 * * * *
1185
1180
 
1186
1181
  EOF
1187
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
1182
+ - collapseable_section_end "writeallvalues"
1188
1183
  - kubernetesCreateSecret
1189
1184
  - kubernetesDeploy
1190
1185
  - echo 'Uploading SBOM to Dependency Track'
@@ -1220,30 +1215,28 @@ api 🧪 test:
1220
1215
  KUBERNETES_MEMORY_LIMIT: 400Mi
1221
1216
  GIT_STRATEGY: none
1222
1217
  script:
1223
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1218
+ - collapseable_section_start "injectvars" "Injecting variables"
1224
1219
  - export ENV_SHORT="stage"
1225
1220
  - export APP_DIR="api"
1226
1221
  - export ENV_TYPE="stage"
1227
1222
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1228
1223
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1229
1224
  - 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")"
1230
- - export HOST="api.stage.test-app.pan.panter.cloud"
1225
+ - export HOSTNAME="api.stage.test-app.pan.panter.cloud"
1231
1226
  - export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"
1232
- - export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"
1233
- - export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"
1227
+ - export HOSTNAME_INTERNAL="api.stage.test-app.pan.panter.cloud"
1234
1228
  - export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"
1235
1229
  - export KUBE_NAMESPACE="pan-test-app-stage"
1236
1230
  - export KUBE_APP_NAME="api"
1237
1231
  - export KUBE_APP_NAME_PREFIX=""
1238
- - 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\\"]"
1232
+ - 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\\"]"
1239
1233
  - export RELEASE_NAME="pan-test-app-stage-api"
1240
1234
  - export HELM_EXPERIMENTAL_OCI="1"
1241
1235
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"
1242
1236
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
1243
1237
  - export HELM_ARGS=""
1244
1238
  - export COMPONENT_NAME="api"
1245
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1246
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1239
+ - collapseable_section_end "injectvars"
1247
1240
  - kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
1248
1241
  - kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"
1249
1242
  - kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"
@@ -1277,30 +1270,28 @@ api 🧪 test:
1277
1270
  KUBERNETES_MEMORY_LIMIT: 400Mi
1278
1271
  GIT_STRATEGY: none
1279
1272
  script:
1280
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1273
+ - collapseable_section_start "injectvars" "Injecting variables"
1281
1274
  - export ENV_SHORT="stage"
1282
1275
  - export APP_DIR="api"
1283
1276
  - export ENV_TYPE="stage"
1284
1277
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1285
1278
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1286
1279
  - 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")"
1287
- - export HOST="api.stage.test-app.pan.panter.cloud"
1280
+ - export HOSTNAME="api.stage.test-app.pan.panter.cloud"
1288
1281
  - export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"
1289
- - export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"
1290
- - export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"
1282
+ - export HOSTNAME_INTERNAL="api.stage.test-app.pan.panter.cloud"
1291
1283
  - export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"
1292
1284
  - export KUBE_NAMESPACE="pan-test-app-stage"
1293
1285
  - export KUBE_APP_NAME="api"
1294
1286
  - export KUBE_APP_NAME_PREFIX=""
1295
- - 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\\"]"
1287
+ - 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\\"]"
1296
1288
  - export RELEASE_NAME="pan-test-app-stage-api"
1297
1289
  - export HELM_EXPERIMENTAL_OCI="1"
1298
1290
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"
1299
1291
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
1300
1292
  - export HELM_ARGS=""
1301
1293
  - export COMPONENT_NAME="api"
1302
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1303
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1294
+ - collapseable_section_end "injectvars"
1304
1295
  - kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
1305
1296
  - kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"
1306
1297
  - kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"
@@ -1329,36 +1320,35 @@ api 🧪 test:
1329
1320
  KUBERNETES_MEMORY_REQUEST: 1Gi
1330
1321
  KUBERNETES_MEMORY_LIMIT: 4Gi
1331
1322
  script:
1332
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1323
+ - collapseable_section_start "injectvars" "Injecting variables"
1333
1324
  - export ENV_SHORT="prod"
1334
1325
  - export APP_DIR="api"
1335
1326
  - export ENV_TYPE="prod"
1336
1327
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1337
1328
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1338
1329
  - 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")"
1339
- - export HOST="api.prod.test-app.pan.panter.cloud"
1330
+ - export HOSTNAME="api.prod.test-app.pan.panter.cloud"
1340
1331
  - export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"
1341
- - export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"
1342
- - export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"
1332
+ - export HOSTNAME_INTERNAL="api.prod.test-app.pan.panter.cloud"
1343
1333
  - export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"
1344
1334
  - export KUBE_NAMESPACE="pan-test-app-prod"
1345
1335
  - export KUBE_APP_NAME="api"
1346
1336
  - export KUBE_APP_NAME_PREFIX=""
1347
- - 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\\"]"
1348
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1337
+ - 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\\"]"
1338
+ - collapseable_section_end "injectvars"
1349
1339
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json
1350
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1340
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1351
1341
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1352
1342
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1353
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1343
+ - collapseable_section_end "nodeinstall"
1354
1344
  - cd api
1355
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1345
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1356
1346
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1357
1347
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1358
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1359
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1348
+ - collapseable_section_end "nodeinstall"
1349
+ - collapseable_section_start "yarninstall" "Yarn install"
1360
1350
  - yarn install --immutable
1361
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1351
+ - collapseable_section_end "yarninstall"
1362
1352
  - yarn build
1363
1353
  cache:
1364
1354
  - key: api-yarn
@@ -1369,10 +1359,6 @@ api 🧪 test:
1369
1359
  policy: pull-push
1370
1360
  paths:
1371
1361
  - api/node_modules
1372
- - key: api-next-cache
1373
- policy: pull-push
1374
- paths:
1375
- - api/.next/cache
1376
1362
  artifacts:
1377
1363
  paths:
1378
1364
  - api/__build_info.json
@@ -1403,7 +1389,7 @@ api 🧪 test:
1403
1389
  KUBERNETES_MEMORY_REQUEST: 1Gi
1404
1390
  KUBERNETES_MEMORY_LIMIT: 2Gi
1405
1391
  script:
1406
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1392
+ - collapseable_section_start "injectvars" "Injecting variables"
1407
1393
  - export APP_DIR="api"
1408
1394
  - export DOCKER_BUILD_CONTEXT="."
1409
1395
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -1420,19 +1406,19 @@ api 🧪 test:
1420
1406
  COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
1421
1407
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1422
1408
  COPY --chown=node:node .yarn /app/.yarn"
1423
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1409
+ - collapseable_section_end "injectvars"
1424
1410
  - ensureNodeDockerfile
1425
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
1411
+ - collapseable_section_start "docker-login" "Docker Login"
1426
1412
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
1427
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
1428
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
1413
+ - collapseable_section_end "docker-login"
1414
+ - collapseable_section_start "docker-build" "Docker build"
1429
1415
  - 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
1430
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
1431
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
1416
+ - collapseable_section_end "docker-build"
1417
+ - collapseable_section_start "docker-push" "Docker push and tag"
1432
1418
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
1433
1419
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
1434
1420
  - docker push $DOCKER_CACHE_IMAGE
1435
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
1421
+ - collapseable_section_end "docker-push"
1436
1422
  cache:
1437
1423
  - key: api-yarn
1438
1424
  policy: pull
@@ -1449,8 +1435,8 @@ api 🧪 test:
1449
1435
  image: aquasec/trivy:0.38.3
1450
1436
  variables: {}
1451
1437
  script:
1452
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1453
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1438
+ - collapseable_section_start "injectvars" "Injecting variables"
1439
+ - collapseable_section_end "injectvars"
1454
1440
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" api
1455
1441
  artifacts:
1456
1442
  paths:
@@ -1469,22 +1455,21 @@ api 🧪 test:
1469
1455
  KUBERNETES_MEMORY_REQUEST: 200Mi
1470
1456
  KUBERNETES_MEMORY_LIMIT: 400Mi
1471
1457
  script:
1472
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1458
+ - collapseable_section_start "injectvars" "Injecting variables"
1473
1459
  - export ENV_SHORT="prod"
1474
1460
  - export APP_DIR="api"
1475
1461
  - export ENV_TYPE="prod"
1476
1462
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1477
1463
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1478
1464
  - 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")"
1479
- - export HOST="api.prod.test-app.pan.panter.cloud"
1465
+ - export HOSTNAME="api.prod.test-app.pan.panter.cloud"
1480
1466
  - export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"
1481
- - export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"
1482
- - export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"
1467
+ - export HOSTNAME_INTERNAL="api.prod.test-app.pan.panter.cloud"
1483
1468
  - export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"
1484
1469
  - export KUBE_NAMESPACE="pan-test-app-prod"
1485
1470
  - export KUBE_APP_NAME="api"
1486
1471
  - export KUBE_APP_NAME_PREFIX=""
1487
- - 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\\"]"
1472
+ - 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\\"]"
1488
1473
  - export DOCKER_REGISTRY="$CI_REGISTRY"
1489
1474
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"
1490
1475
  - export DOCKER_IMAGE_NAME="prod/api"
@@ -1496,13 +1481,12 @@ api 🧪 test:
1496
1481
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
1497
1482
  - export HELM_ARGS=""
1498
1483
  - export COMPONENT_NAME="api"
1499
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1500
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1484
+ - collapseable_section_end "injectvars"
1501
1485
  - kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
1502
1486
  - kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"
1503
1487
  - kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"
1504
1488
  - kubectl config use-context "kube-pan-test-app-prod-api"
1505
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
1489
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
1506
1490
  - |
1507
1491
  cat > __all_values.yml <<EOF
1508
1492
  env:
@@ -1515,18 +1499,16 @@ api 🧪 test:
1515
1499
  ENV_TYPE: |-
1516
1500
  prod
1517
1501
  BUILD_INFO_BUILD_ID: |-
1518
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1502
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
1519
1503
  BUILD_INFO_BUILD_TIME: |-
1520
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
1504
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
1521
1505
  BUILD_INFO_CURRENT_VERSION: |-
1522
- $(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/^/ /')
1523
- HOST: |-
1506
+ $(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/^/ /')
1507
+ HOSTNAME: |-
1524
1508
  api.prod.test-app.pan.panter.cloud
1525
1509
  ROOT_URL: |-
1526
1510
  https://api.prod.test-app.pan.panter.cloud
1527
- HOST_INTERNAL: |-
1528
- api.prod.test-app.pan.panter.cloud
1529
- HOST_CANONICAL: |-
1511
+ HOSTNAME_INTERNAL: |-
1530
1512
  api.prod.test-app.pan.panter.cloud
1531
1513
  ROOT_URL_INTERNAL: |-
1532
1514
  https://api.prod.test-app.pan.panter.cloud
@@ -1536,7 +1518,7 @@ api 🧪 test:
1536
1518
  api
1537
1519
  KUBE_APP_NAME_PREFIX: ""
1538
1520
  _ALL_ENV_VAR_KEYS: |-
1539
- ["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"]
1521
+ ["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"]
1540
1522
  application:
1541
1523
  host: |-
1542
1524
  api.prod.test-app.pan.panter.cloud
@@ -1566,7 +1548,7 @@ api 🧪 test:
1566
1548
  0 * * * *
1567
1549
 
1568
1550
  EOF
1569
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
1551
+ - collapseable_section_end "writeallvalues"
1570
1552
  - kubernetesCreateSecret
1571
1553
  - kubernetesDeploy
1572
1554
  - echo 'Uploading SBOM to Dependency Track'
@@ -1602,30 +1584,28 @@ api 🧪 test:
1602
1584
  KUBERNETES_MEMORY_LIMIT: 400Mi
1603
1585
  GIT_STRATEGY: none
1604
1586
  script:
1605
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1587
+ - collapseable_section_start "injectvars" "Injecting variables"
1606
1588
  - export ENV_SHORT="prod"
1607
1589
  - export APP_DIR="api"
1608
1590
  - export ENV_TYPE="prod"
1609
1591
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1610
1592
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1611
1593
  - 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")"
1612
- - export HOST="api.prod.test-app.pan.panter.cloud"
1594
+ - export HOSTNAME="api.prod.test-app.pan.panter.cloud"
1613
1595
  - export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"
1614
- - export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"
1615
- - export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"
1596
+ - export HOSTNAME_INTERNAL="api.prod.test-app.pan.panter.cloud"
1616
1597
  - export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"
1617
1598
  - export KUBE_NAMESPACE="pan-test-app-prod"
1618
1599
  - export KUBE_APP_NAME="api"
1619
1600
  - export KUBE_APP_NAME_PREFIX=""
1620
- - 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\\"]"
1601
+ - 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\\"]"
1621
1602
  - export RELEASE_NAME="pan-test-app-prod-api"
1622
1603
  - export HELM_EXPERIMENTAL_OCI="1"
1623
1604
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"
1624
1605
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
1625
1606
  - export HELM_ARGS=""
1626
1607
  - export COMPONENT_NAME="api"
1627
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1628
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1608
+ - collapseable_section_end "injectvars"
1629
1609
  - kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
1630
1610
  - kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"
1631
1611
  - kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"
@@ -1659,30 +1639,28 @@ api 🧪 test:
1659
1639
  KUBERNETES_MEMORY_LIMIT: 400Mi
1660
1640
  GIT_STRATEGY: none
1661
1641
  script:
1662
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1642
+ - collapseable_section_start "injectvars" "Injecting variables"
1663
1643
  - export ENV_SHORT="prod"
1664
1644
  - export APP_DIR="api"
1665
1645
  - export ENV_TYPE="prod"
1666
1646
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1667
1647
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1668
1648
  - 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")"
1669
- - export HOST="api.prod.test-app.pan.panter.cloud"
1649
+ - export HOSTNAME="api.prod.test-app.pan.panter.cloud"
1670
1650
  - export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"
1671
- - export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"
1672
- - export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"
1651
+ - export HOSTNAME_INTERNAL="api.prod.test-app.pan.panter.cloud"
1673
1652
  - export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"
1674
1653
  - export KUBE_NAMESPACE="pan-test-app-prod"
1675
1654
  - export KUBE_APP_NAME="api"
1676
1655
  - export KUBE_APP_NAME_PREFIX=""
1677
- - 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\\"]"
1656
+ - 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\\"]"
1678
1657
  - export RELEASE_NAME="pan-test-app-prod-api"
1679
1658
  - export HELM_EXPERIMENTAL_OCI="1"
1680
1659
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"
1681
1660
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
1682
1661
  - export HELM_ARGS=""
1683
1662
  - export COMPONENT_NAME="api"
1684
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1685
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1663
+ - collapseable_section_end "injectvars"
1686
1664
  - kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true
1687
1665
  - kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"
1688
1666
  - kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"
@@ -1711,9 +1689,9 @@ www 🛡 audit:
1711
1689
  KUBERNETES_MEMORY_REQUEST: 1Gi
1712
1690
  KUBERNETES_MEMORY_LIMIT: 4Gi
1713
1691
  script:
1714
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1692
+ - collapseable_section_start "injectvars" "Injecting variables"
1715
1693
  - export APP_PATH="www"
1716
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1694
+ - collapseable_section_end "injectvars"
1717
1695
  - cd www
1718
1696
  - yarn npm audit --environment production
1719
1697
  rules:
@@ -1733,21 +1711,21 @@ www 👮 lint:
1733
1711
  KUBERNETES_MEMORY_REQUEST: 1Gi
1734
1712
  KUBERNETES_MEMORY_LIMIT: 4Gi
1735
1713
  script:
1736
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1714
+ - collapseable_section_start "injectvars" "Injecting variables"
1737
1715
  - export APP_PATH="www"
1738
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1739
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1716
+ - collapseable_section_end "injectvars"
1717
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1740
1718
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1741
1719
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1742
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1720
+ - collapseable_section_end "nodeinstall"
1743
1721
  - cd www
1744
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1722
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1745
1723
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1746
1724
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1747
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1748
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1725
+ - collapseable_section_end "nodeinstall"
1726
+ - collapseable_section_start "yarninstall" "Yarn install"
1749
1727
  - yarn install --immutable
1750
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1728
+ - collapseable_section_end "yarninstall"
1751
1729
  - yarn lint
1752
1730
  cache:
1753
1731
  - key: www-yarn
@@ -1774,21 +1752,21 @@ www 🧪 test:
1774
1752
  KUBERNETES_MEMORY_REQUEST: 1Gi
1775
1753
  KUBERNETES_MEMORY_LIMIT: 4Gi
1776
1754
  script:
1777
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1755
+ - collapseable_section_start "injectvars" "Injecting variables"
1778
1756
  - export APP_PATH="www"
1779
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1780
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1757
+ - collapseable_section_end "injectvars"
1758
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1781
1759
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1782
1760
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1783
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1761
+ - collapseable_section_end "nodeinstall"
1784
1762
  - cd www
1785
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1763
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1786
1764
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1787
1765
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1788
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1789
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1766
+ - collapseable_section_end "nodeinstall"
1767
+ - collapseable_section_start "yarninstall" "Yarn install"
1790
1768
  - yarn install --immutable
1791
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1769
+ - collapseable_section_end "yarninstall"
1792
1770
  - yarn test
1793
1771
  cache:
1794
1772
  - key: www-yarn
@@ -1815,36 +1793,51 @@ www 🧪 test:
1815
1793
  KUBERNETES_MEMORY_REQUEST: 1Gi
1816
1794
  KUBERNETES_MEMORY_LIMIT: 4Gi
1817
1795
  script:
1818
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1796
+ - collapseable_section_start "injectvars" "Injecting variables"
1819
1797
  - export ENV_SHORT="dev"
1820
1798
  - export APP_DIR="www"
1821
1799
  - export ENV_TYPE="dev"
1822
1800
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1823
1801
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1824
1802
  - 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")"
1825
- - export HOST="www.dev.test-app.pan.panter.cloud"
1803
+ - export HOSTNAME="www.dev.test-app.pan.panter.cloud"
1826
1804
  - export ROOT_URL="https://www.dev.test-app.pan.panter.cloud"
1827
- - export HOST_INTERNAL="www.dev.test-app.pan.panter.cloud"
1828
- - export HOST_CANONICAL="www.dev.test-app.pan.panter.cloud"
1805
+ - export HOSTNAME_INTERNAL="www.dev.test-app.pan.panter.cloud"
1829
1806
  - export ROOT_URL_INTERNAL="https://www.dev.test-app.pan.panter.cloud"
1830
1807
  - export KUBE_NAMESPACE="pan-test-app-dev"
1831
1808
  - export KUBE_APP_NAME="www"
1832
1809
  - export KUBE_APP_NAME_PREFIX=""
1833
- - 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\\"]"
1834
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1810
+ - 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\\"]"
1811
+ - collapseable_section_end "injectvars"
1812
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
1813
+ - |-
1814
+ cat <<EOF > www/.env
1815
+ ENV_SHORT=dev
1816
+ APP_DIR=www
1817
+ ENV_TYPE=dev
1818
+ HOSTNAME=www.dev.test-app.pan.panter.cloud
1819
+ ROOT_URL=https://www.dev.test-app.pan.panter.cloud
1820
+ HOSTNAME_INTERNAL=www.dev.test-app.pan.panter.cloud
1821
+ ROOT_URL_INTERNAL=https://www.dev.test-app.pan.panter.cloud
1822
+ KUBE_NAMESPACE=pan-test-app-dev
1823
+ KUBE_APP_NAME=www
1824
+ KUBE_APP_NAME_PREFIX=
1825
+ _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"]
1826
+ EOF
1827
+ - collapseable_section_end "write-dotenv-www"
1835
1828
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
1836
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1829
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1837
1830
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1838
1831
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1839
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1832
+ - collapseable_section_end "nodeinstall"
1840
1833
  - cd www
1841
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
1834
+ - collapseable_section_start "nodeinstall" "Ensure node version"
1842
1835
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
1843
1836
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
1844
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
1845
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
1837
+ - collapseable_section_end "nodeinstall"
1838
+ - collapseable_section_start "yarninstall" "Yarn install"
1846
1839
  - yarn install --immutable
1847
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
1840
+ - collapseable_section_end "yarninstall"
1848
1841
  - yarn build
1849
1842
  cache:
1850
1843
  - key: www-yarn
@@ -1855,15 +1848,13 @@ www 🧪 test:
1855
1848
  policy: pull-push
1856
1849
  paths:
1857
1850
  - www/node_modules
1858
- - key: www-next-cache
1859
- policy: pull-push
1860
- paths:
1861
- - www/.next/cache
1862
1851
  artifacts:
1863
1852
  paths:
1864
1853
  - www/__build_info.json
1865
1854
  - www/.next
1866
1855
  - www/dist
1856
+ exclude:
1857
+ - www/.env
1867
1858
  expire_in: 1 day
1868
1859
  when: always
1869
1860
  reports: {}
@@ -1891,7 +1882,7 @@ www 🧪 test:
1891
1882
  KUBERNETES_MEMORY_REQUEST: 1Gi
1892
1883
  KUBERNETES_MEMORY_LIMIT: 2Gi
1893
1884
  script:
1894
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1885
+ - collapseable_section_start "injectvars" "Injecting variables"
1895
1886
  - export APP_DIR="www"
1896
1887
  - export DOCKER_BUILD_CONTEXT="."
1897
1888
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -1908,19 +1899,19 @@ www 🧪 test:
1908
1899
  COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
1909
1900
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
1910
1901
  COPY --chown=node:node .yarn /app/.yarn"
1911
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1902
+ - collapseable_section_end "injectvars"
1912
1903
  - ensureNodeDockerfile
1913
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
1904
+ - collapseable_section_start "docker-login" "Docker Login"
1914
1905
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
1915
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
1916
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
1906
+ - collapseable_section_end "docker-login"
1907
+ - collapseable_section_start "docker-build" "Docker build"
1917
1908
  - 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
1918
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
1919
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
1909
+ - collapseable_section_end "docker-build"
1910
+ - collapseable_section_start "docker-push" "Docker push and tag"
1920
1911
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
1921
1912
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
1922
1913
  - docker push $DOCKER_CACHE_IMAGE
1923
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
1914
+ - collapseable_section_end "docker-push"
1924
1915
  cache:
1925
1916
  - key: www-yarn
1926
1917
  policy: pull
@@ -1939,8 +1930,8 @@ www 🧪 test:
1939
1930
  image: aquasec/trivy:0.38.3
1940
1931
  variables: {}
1941
1932
  script:
1942
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1943
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1933
+ - collapseable_section_start "injectvars" "Injecting variables"
1934
+ - collapseable_section_end "injectvars"
1944
1935
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
1945
1936
  artifacts:
1946
1937
  paths:
@@ -1961,22 +1952,21 @@ www 🧪 test:
1961
1952
  KUBERNETES_MEMORY_REQUEST: 200Mi
1962
1953
  KUBERNETES_MEMORY_LIMIT: 400Mi
1963
1954
  script:
1964
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
1955
+ - collapseable_section_start "injectvars" "Injecting variables"
1965
1956
  - export ENV_SHORT="dev"
1966
1957
  - export APP_DIR="www"
1967
1958
  - export ENV_TYPE="dev"
1968
1959
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1969
1960
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
1970
1961
  - 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")"
1971
- - export HOST="www.dev.test-app.pan.panter.cloud"
1962
+ - export HOSTNAME="www.dev.test-app.pan.panter.cloud"
1972
1963
  - export ROOT_URL="https://www.dev.test-app.pan.panter.cloud"
1973
- - export HOST_INTERNAL="www.dev.test-app.pan.panter.cloud"
1974
- - export HOST_CANONICAL="www.dev.test-app.pan.panter.cloud"
1964
+ - export HOSTNAME_INTERNAL="www.dev.test-app.pan.panter.cloud"
1975
1965
  - export ROOT_URL_INTERNAL="https://www.dev.test-app.pan.panter.cloud"
1976
1966
  - export KUBE_NAMESPACE="pan-test-app-dev"
1977
1967
  - export KUBE_APP_NAME="www"
1978
1968
  - export KUBE_APP_NAME_PREFIX=""
1979
- - 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\\"]"
1969
+ - 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\\"]"
1980
1970
  - export DOCKER_REGISTRY="$CI_REGISTRY"
1981
1971
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
1982
1972
  - export DOCKER_IMAGE_NAME="dev/www"
@@ -1988,13 +1978,12 @@ www 🧪 test:
1988
1978
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
1989
1979
  - export HELM_ARGS=""
1990
1980
  - export COMPONENT_NAME="www"
1991
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
1992
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
1981
+ - collapseable_section_end "injectvars"
1993
1982
  - kubectl config set-cluster "kube-pan-test-app-dev-www" --server="$CL_dev_www_KUBE_URL" --certificate-authority <(echo $CL_dev_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
1994
1983
  - kubectl config set-credentials "kube-pan-test-app-dev-www" --token="$CL_dev_www_KUBE_TOKEN"
1995
1984
  - kubectl config set-context "kube-pan-test-app-dev-www" --cluster="kube-pan-test-app-dev-www" --user="kube-pan-test-app-dev-www" --namespace="pan-test-app-dev"
1996
1985
  - kubectl config use-context "kube-pan-test-app-dev-www"
1997
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
1986
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
1998
1987
  - |
1999
1988
  cat > __all_values.yml <<EOF
2000
1989
  env:
@@ -2007,18 +1996,16 @@ www 🧪 test:
2007
1996
  ENV_TYPE: |-
2008
1997
  dev
2009
1998
  BUILD_INFO_BUILD_ID: |-
2010
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
1999
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
2011
2000
  BUILD_INFO_BUILD_TIME: |-
2012
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2001
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
2013
2002
  BUILD_INFO_CURRENT_VERSION: |-
2014
- $(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/^/ /')
2015
- HOST: |-
2003
+ $(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/^/ /')
2004
+ HOSTNAME: |-
2016
2005
  www.dev.test-app.pan.panter.cloud
2017
2006
  ROOT_URL: |-
2018
2007
  https://www.dev.test-app.pan.panter.cloud
2019
- HOST_INTERNAL: |-
2020
- www.dev.test-app.pan.panter.cloud
2021
- HOST_CANONICAL: |-
2008
+ HOSTNAME_INTERNAL: |-
2022
2009
  www.dev.test-app.pan.panter.cloud
2023
2010
  ROOT_URL_INTERNAL: |-
2024
2011
  https://www.dev.test-app.pan.panter.cloud
@@ -2028,7 +2015,7 @@ www 🧪 test:
2028
2015
  www
2029
2016
  KUBE_APP_NAME_PREFIX: ""
2030
2017
  _ALL_ENV_VAR_KEYS: |-
2031
- ["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"]
2018
+ ["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"]
2032
2019
  application:
2033
2020
  host: |-
2034
2021
  www.dev.test-app.pan.panter.cloud
@@ -2048,7 +2035,7 @@ www 🧪 test:
2048
2035
  __health
2049
2036
 
2050
2037
  EOF
2051
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
2038
+ - collapseable_section_end "writeallvalues"
2052
2039
  - kubernetesCreateSecret
2053
2040
  - kubernetesDeploy
2054
2041
  - echo 'Uploading SBOM to Dependency Track'
@@ -2093,30 +2080,28 @@ www 🧪 test:
2093
2080
  KUBERNETES_MEMORY_LIMIT: 400Mi
2094
2081
  GIT_STRATEGY: none
2095
2082
  script:
2096
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2083
+ - collapseable_section_start "injectvars" "Injecting variables"
2097
2084
  - export ENV_SHORT="dev"
2098
2085
  - export APP_DIR="www"
2099
2086
  - export ENV_TYPE="dev"
2100
2087
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2101
2088
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2102
2089
  - 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")"
2103
- - export HOST="www.dev.test-app.pan.panter.cloud"
2090
+ - export HOSTNAME="www.dev.test-app.pan.panter.cloud"
2104
2091
  - export ROOT_URL="https://www.dev.test-app.pan.panter.cloud"
2105
- - export HOST_INTERNAL="www.dev.test-app.pan.panter.cloud"
2106
- - export HOST_CANONICAL="www.dev.test-app.pan.panter.cloud"
2092
+ - export HOSTNAME_INTERNAL="www.dev.test-app.pan.panter.cloud"
2107
2093
  - export ROOT_URL_INTERNAL="https://www.dev.test-app.pan.panter.cloud"
2108
2094
  - export KUBE_NAMESPACE="pan-test-app-dev"
2109
2095
  - export KUBE_APP_NAME="www"
2110
2096
  - export KUBE_APP_NAME_PREFIX=""
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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\"]"
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\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\"]"
2112
2098
  - export RELEASE_NAME="pan-test-app-dev-www"
2113
2099
  - export HELM_EXPERIMENTAL_OCI="1"
2114
2100
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-www"
2115
2101
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
2116
2102
  - export HELM_ARGS=""
2117
2103
  - export COMPONENT_NAME="www"
2118
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2119
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2104
+ - collapseable_section_end "injectvars"
2120
2105
  - kubectl config set-cluster "kube-pan-test-app-dev-www" --server="$CL_dev_www_KUBE_URL" --certificate-authority <(echo $CL_dev_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
2121
2106
  - kubectl config set-credentials "kube-pan-test-app-dev-www" --token="$CL_dev_www_KUBE_TOKEN"
2122
2107
  - kubectl config set-context "kube-pan-test-app-dev-www" --cluster="kube-pan-test-app-dev-www" --user="kube-pan-test-app-dev-www" --namespace="pan-test-app-dev"
@@ -2152,30 +2137,28 @@ www 🧪 test:
2152
2137
  KUBERNETES_MEMORY_LIMIT: 400Mi
2153
2138
  GIT_STRATEGY: none
2154
2139
  script:
2155
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2140
+ - collapseable_section_start "injectvars" "Injecting variables"
2156
2141
  - export ENV_SHORT="dev"
2157
2142
  - export APP_DIR="www"
2158
2143
  - export ENV_TYPE="dev"
2159
2144
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2160
2145
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2161
2146
  - 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")"
2162
- - export HOST="www.dev.test-app.pan.panter.cloud"
2147
+ - export HOSTNAME="www.dev.test-app.pan.panter.cloud"
2163
2148
  - export ROOT_URL="https://www.dev.test-app.pan.panter.cloud"
2164
- - export HOST_INTERNAL="www.dev.test-app.pan.panter.cloud"
2165
- - export HOST_CANONICAL="www.dev.test-app.pan.panter.cloud"
2149
+ - export HOSTNAME_INTERNAL="www.dev.test-app.pan.panter.cloud"
2166
2150
  - export ROOT_URL_INTERNAL="https://www.dev.test-app.pan.panter.cloud"
2167
2151
  - export KUBE_NAMESPACE="pan-test-app-dev"
2168
2152
  - export KUBE_APP_NAME="www"
2169
2153
  - export KUBE_APP_NAME_PREFIX=""
2170
- - 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\\"]"
2154
+ - 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\\"]"
2171
2155
  - export RELEASE_NAME="pan-test-app-dev-www"
2172
2156
  - export HELM_EXPERIMENTAL_OCI="1"
2173
2157
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-www"
2174
2158
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
2175
2159
  - export HELM_ARGS=""
2176
2160
  - export COMPONENT_NAME="www"
2177
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2178
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2161
+ - collapseable_section_end "injectvars"
2179
2162
  - kubectl config set-cluster "kube-pan-test-app-dev-www" --server="$CL_dev_www_KUBE_URL" --certificate-authority <(echo $CL_dev_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
2180
2163
  - kubectl config set-credentials "kube-pan-test-app-dev-www" --token="$CL_dev_www_KUBE_TOKEN"
2181
2164
  - kubectl config set-context "kube-pan-test-app-dev-www" --cluster="kube-pan-test-app-dev-www" --user="kube-pan-test-app-dev-www" --namespace="pan-test-app-dev"
@@ -2206,36 +2189,51 @@ www 🧪 test:
2206
2189
  KUBERNETES_MEMORY_REQUEST: 1Gi
2207
2190
  KUBERNETES_MEMORY_LIMIT: 4Gi
2208
2191
  script:
2209
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2192
+ - collapseable_section_start "injectvars" "Injecting variables"
2210
2193
  - export ENV_SHORT="review"
2211
2194
  - export APP_DIR="www"
2212
2195
  - export ENV_TYPE="review"
2213
2196
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2214
2197
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2215
2198
  - 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")"
2216
- - export HOST="www.$([ -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"
2199
+ - export HOSTNAME="www.$([ -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"
2217
2200
  - export ROOT_URL="https://www.$([ -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"
2218
- - export HOST_INTERNAL="www.$([ -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"
2219
- - export HOST_CANONICAL="www.$([ -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"
2201
+ - export HOSTNAME_INTERNAL="www.$([ -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"
2220
2202
  - export ROOT_URL_INTERNAL="https://www.$([ -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"
2221
2203
  - export KUBE_NAMESPACE="pan-test-app-review"
2222
2204
  - 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"; })-www"
2223
2205
  - export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"
2224
- - 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\\"]"
2225
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2206
+ - 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\\"]"
2207
+ - collapseable_section_end "injectvars"
2208
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
2209
+ - |-
2210
+ cat <<EOF > www/.env
2211
+ ENV_SHORT=review
2212
+ APP_DIR=www
2213
+ ENV_TYPE=review
2214
+ HOSTNAME=$(printf %s "www.$([ -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)
2215
+ ROOT_URL=$(printf %s "https://www.$([ -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)
2216
+ HOSTNAME_INTERNAL=$(printf %s "www.$([ -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)
2217
+ ROOT_URL_INTERNAL=$(printf %s "https://www.$([ -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)
2218
+ KUBE_NAMESPACE=pan-test-app-review
2219
+ 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"; })-www" | escapeForDotEnv)
2220
+ 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)
2221
+ _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"]
2222
+ EOF
2223
+ - collapseable_section_end "write-dotenv-www"
2226
2224
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
2227
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2225
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2228
2226
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2229
2227
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2230
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2228
+ - collapseable_section_end "nodeinstall"
2231
2229
  - cd www
2232
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2230
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2233
2231
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2234
2232
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2235
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2236
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
2233
+ - collapseable_section_end "nodeinstall"
2234
+ - collapseable_section_start "yarninstall" "Yarn install"
2237
2235
  - yarn install --immutable
2238
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
2236
+ - collapseable_section_end "yarninstall"
2239
2237
  - yarn build
2240
2238
  cache:
2241
2239
  - key: www-yarn
@@ -2246,15 +2244,13 @@ www 🧪 test:
2246
2244
  policy: pull-push
2247
2245
  paths:
2248
2246
  - www/node_modules
2249
- - key: www-next-cache
2250
- policy: pull-push
2251
- paths:
2252
- - www/.next/cache
2253
2247
  artifacts:
2254
2248
  paths:
2255
2249
  - www/__build_info.json
2256
2250
  - www/.next
2257
2251
  - www/dist
2252
+ exclude:
2253
+ - www/.env
2258
2254
  expire_in: 1 day
2259
2255
  when: always
2260
2256
  reports: {}
@@ -2280,7 +2276,7 @@ www 🧪 test:
2280
2276
  KUBERNETES_MEMORY_REQUEST: 1Gi
2281
2277
  KUBERNETES_MEMORY_LIMIT: 2Gi
2282
2278
  script:
2283
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2279
+ - collapseable_section_start "injectvars" "Injecting variables"
2284
2280
  - export APP_DIR="www"
2285
2281
  - export DOCKER_BUILD_CONTEXT="."
2286
2282
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -2297,19 +2293,19 @@ www 🧪 test:
2297
2293
  COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
2298
2294
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2299
2295
  COPY --chown=node:node .yarn /app/.yarn"
2300
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2296
+ - collapseable_section_end "injectvars"
2301
2297
  - ensureNodeDockerfile
2302
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
2298
+ - collapseable_section_start "docker-login" "Docker Login"
2303
2299
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
2304
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
2305
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
2300
+ - collapseable_section_end "docker-login"
2301
+ - collapseable_section_start "docker-build" "Docker build"
2306
2302
  - 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
2307
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
2308
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
2303
+ - collapseable_section_end "docker-build"
2304
+ - collapseable_section_start "docker-push" "Docker push and tag"
2309
2305
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
2310
2306
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
2311
2307
  - docker push $DOCKER_CACHE_IMAGE
2312
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
2308
+ - collapseable_section_end "docker-push"
2313
2309
  cache:
2314
2310
  - key: www-yarn
2315
2311
  policy: pull
@@ -2326,8 +2322,8 @@ www 🧪 test:
2326
2322
  image: aquasec/trivy:0.38.3
2327
2323
  variables: {}
2328
2324
  script:
2329
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2330
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2325
+ - collapseable_section_start "injectvars" "Injecting variables"
2326
+ - collapseable_section_end "injectvars"
2331
2327
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
2332
2328
  artifacts:
2333
2329
  paths:
@@ -2346,22 +2342,21 @@ www 🧪 test:
2346
2342
  KUBERNETES_MEMORY_REQUEST: 200Mi
2347
2343
  KUBERNETES_MEMORY_LIMIT: 400Mi
2348
2344
  script:
2349
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2345
+ - collapseable_section_start "injectvars" "Injecting variables"
2350
2346
  - export ENV_SHORT="review"
2351
2347
  - export APP_DIR="www"
2352
2348
  - export ENV_TYPE="review"
2353
2349
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2354
2350
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2355
2351
  - 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")"
2356
- - export HOST="www.$([ -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"
2352
+ - export HOSTNAME="www.$([ -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"
2357
2353
  - export ROOT_URL="https://www.$([ -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"
2358
- - export HOST_INTERNAL="www.$([ -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"
2359
- - export HOST_CANONICAL="www.$([ -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"
2354
+ - export HOSTNAME_INTERNAL="www.$([ -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"
2360
2355
  - export ROOT_URL_INTERNAL="https://www.$([ -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"
2361
2356
  - export KUBE_NAMESPACE="pan-test-app-review"
2362
2357
  - 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"; })-www"
2363
2358
  - export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"
2364
- - 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\\"]"
2359
+ - 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\\"]"
2365
2360
  - export DOCKER_REGISTRY="$CI_REGISTRY"
2366
2361
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
2367
2362
  - export DOCKER_IMAGE_NAME="review/www"
@@ -2373,13 +2368,12 @@ www 🧪 test:
2373
2368
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
2374
2369
  - export HELM_ARGS=""
2375
2370
  - export COMPONENT_NAME="www"
2376
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2377
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2371
+ - collapseable_section_end "injectvars"
2378
2372
  - 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"; })-www" --server="$CL_review_www_KUBE_URL" --certificate-authority <(echo $CL_review_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
2379
2373
  - 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"; })-www" --token="$CL_review_www_KUBE_TOKEN"
2380
2374
  - 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"; })-www" --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"; })-www" --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"; })-www" --namespace="pan-test-app-review"
2381
2375
  - 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"; })-www"
2382
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
2376
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
2383
2377
  - |
2384
2378
  cat > __all_values.yml <<EOF
2385
2379
  env:
@@ -2392,32 +2386,30 @@ www 🧪 test:
2392
2386
  ENV_TYPE: |-
2393
2387
  review
2394
2388
  BUILD_INFO_BUILD_ID: |-
2395
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2389
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
2396
2390
  BUILD_INFO_BUILD_TIME: |-
2397
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2391
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
2398
2392
  BUILD_INFO_CURRENT_VERSION: |-
2399
- $(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/^/ /')
2400
- HOST: |-
2401
- $(printf %s "www.$([ -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/^/ /')
2393
+ $(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/^/ /')
2394
+ HOSTNAME: |-
2395
+ $(printf %s "www.$([ -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/^/ /')
2402
2396
  ROOT_URL: |-
2403
- $(printf %s "https://www.$([ -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/^/ /')
2404
- HOST_INTERNAL: |-
2405
- $(printf %s "www.$([ -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/^/ /')
2406
- HOST_CANONICAL: |-
2407
- $(printf %s "www.$([ -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/^/ /')
2397
+ $(printf %s "https://www.$([ -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/^/ /')
2398
+ HOSTNAME_INTERNAL: |-
2399
+ $(printf %s "www.$([ -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/^/ /')
2408
2400
  ROOT_URL_INTERNAL: |-
2409
- $(printf %s "https://www.$([ -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/^/ /')
2401
+ $(printf %s "https://www.$([ -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/^/ /')
2410
2402
  KUBE_NAMESPACE: |-
2411
2403
  pan-test-app-review
2412
2404
  KUBE_APP_NAME: |-
2413
- $(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"; })-www" | sed 's/^/ /')
2405
+ $(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"; })-www" | sed '1!s/^/ /')
2414
2406
  KUBE_APP_NAME_PREFIX: |-
2415
- $(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/^/ /')
2407
+ $(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/^/ /')
2416
2408
  _ALL_ENV_VAR_KEYS: |-
2417
- ["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"]
2409
+ ["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"]
2418
2410
  application:
2419
2411
  host: |-
2420
- $(printf %s "www.$([ -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/^/ /')
2412
+ $(printf %s "www.$([ -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/^/ /')
2421
2413
  command: |-
2422
2414
  yarn start
2423
2415
  livenessProbe:
@@ -2434,7 +2426,7 @@ www 🧪 test:
2434
2426
  __health
2435
2427
 
2436
2428
  EOF
2437
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
2429
+ - collapseable_section_end "writeallvalues"
2438
2430
  - kubernetesCreateSecret
2439
2431
  - kubernetesDeploy
2440
2432
  - echo 'Uploading SBOM to Dependency Track'
@@ -2477,30 +2469,28 @@ www 🧪 test:
2477
2469
  KUBERNETES_MEMORY_LIMIT: 400Mi
2478
2470
  GIT_STRATEGY: none
2479
2471
  script:
2480
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2472
+ - collapseable_section_start "injectvars" "Injecting variables"
2481
2473
  - export ENV_SHORT="review"
2482
2474
  - export APP_DIR="www"
2483
2475
  - export ENV_TYPE="review"
2484
2476
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2485
2477
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2486
2478
  - 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")"
2487
- - export HOST="www.$([ -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"
2479
+ - export HOSTNAME="www.$([ -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"
2488
2480
  - export ROOT_URL="https://www.$([ -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"
2489
- - export HOST_INTERNAL="www.$([ -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"
2490
- - export HOST_CANONICAL="www.$([ -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"
2481
+ - export HOSTNAME_INTERNAL="www.$([ -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"
2491
2482
  - export ROOT_URL_INTERNAL="https://www.$([ -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"
2492
2483
  - export KUBE_NAMESPACE="pan-test-app-review"
2493
2484
  - 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"; })-www"
2494
2485
  - export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"
2495
- - 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\\"]"
2486
+ - 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\\"]"
2496
2487
  - 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"; })-www"
2497
2488
  - export HELM_EXPERIMENTAL_OCI="1"
2498
2489
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-www"
2499
2490
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
2500
2491
  - export HELM_ARGS=""
2501
2492
  - export COMPONENT_NAME="www"
2502
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2503
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2493
+ - collapseable_section_end "injectvars"
2504
2494
  - 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"; })-www" --server="$CL_review_www_KUBE_URL" --certificate-authority <(echo $CL_review_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
2505
2495
  - 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"; })-www" --token="$CL_review_www_KUBE_TOKEN"
2506
2496
  - 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"; })-www" --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"; })-www" --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"; })-www" --namespace="pan-test-app-review"
@@ -2534,30 +2524,28 @@ www 🧪 test:
2534
2524
  KUBERNETES_MEMORY_LIMIT: 400Mi
2535
2525
  GIT_STRATEGY: none
2536
2526
  script:
2537
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2527
+ - collapseable_section_start "injectvars" "Injecting variables"
2538
2528
  - export ENV_SHORT="review"
2539
2529
  - export APP_DIR="www"
2540
2530
  - export ENV_TYPE="review"
2541
2531
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2542
2532
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2543
2533
  - 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")"
2544
- - export HOST="www.$([ -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"
2534
+ - export HOSTNAME="www.$([ -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"
2545
2535
  - export ROOT_URL="https://www.$([ -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"
2546
- - export HOST_INTERNAL="www.$([ -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"
2547
- - export HOST_CANONICAL="www.$([ -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"
2536
+ - export HOSTNAME_INTERNAL="www.$([ -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"
2548
2537
  - export ROOT_URL_INTERNAL="https://www.$([ -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"
2549
2538
  - export KUBE_NAMESPACE="pan-test-app-review"
2550
2539
  - 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"; })-www"
2551
2540
  - export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"
2552
- - 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\\"]"
2541
+ - 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\\"]"
2553
2542
  - 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"; })-www"
2554
2543
  - export HELM_EXPERIMENTAL_OCI="1"
2555
2544
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-www"
2556
2545
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
2557
2546
  - export HELM_ARGS=""
2558
2547
  - export COMPONENT_NAME="www"
2559
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2560
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2548
+ - collapseable_section_end "injectvars"
2561
2549
  - 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"; })-www" --server="$CL_review_www_KUBE_URL" --certificate-authority <(echo $CL_review_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
2562
2550
  - 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"; })-www" --token="$CL_review_www_KUBE_TOKEN"
2563
2551
  - 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"; })-www" --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"; })-www" --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"; })-www" --namespace="pan-test-app-review"
@@ -2586,36 +2574,51 @@ www 🧪 test:
2586
2574
  KUBERNETES_MEMORY_REQUEST: 1Gi
2587
2575
  KUBERNETES_MEMORY_LIMIT: 4Gi
2588
2576
  script:
2589
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2577
+ - collapseable_section_start "injectvars" "Injecting variables"
2590
2578
  - export ENV_SHORT="stage"
2591
2579
  - export APP_DIR="www"
2592
2580
  - export ENV_TYPE="stage"
2593
2581
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2594
2582
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2595
2583
  - 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")"
2596
- - export HOST="www.stage.test-app.pan.panter.cloud"
2584
+ - export HOSTNAME="www.stage.test-app.pan.panter.cloud"
2597
2585
  - export ROOT_URL="https://www.stage.test-app.pan.panter.cloud"
2598
- - export HOST_INTERNAL="www.stage.test-app.pan.panter.cloud"
2599
- - export HOST_CANONICAL="www.stage.test-app.pan.panter.cloud"
2586
+ - export HOSTNAME_INTERNAL="www.stage.test-app.pan.panter.cloud"
2600
2587
  - export ROOT_URL_INTERNAL="https://www.stage.test-app.pan.panter.cloud"
2601
2588
  - export KUBE_NAMESPACE="pan-test-app-stage"
2602
2589
  - export KUBE_APP_NAME="www"
2603
2590
  - export KUBE_APP_NAME_PREFIX=""
2604
- - 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\\"]"
2605
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2591
+ - 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\\"]"
2592
+ - collapseable_section_end "injectvars"
2593
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
2594
+ - |-
2595
+ cat <<EOF > www/.env
2596
+ ENV_SHORT=stage
2597
+ APP_DIR=www
2598
+ ENV_TYPE=stage
2599
+ HOSTNAME=www.stage.test-app.pan.panter.cloud
2600
+ ROOT_URL=https://www.stage.test-app.pan.panter.cloud
2601
+ HOSTNAME_INTERNAL=www.stage.test-app.pan.panter.cloud
2602
+ ROOT_URL_INTERNAL=https://www.stage.test-app.pan.panter.cloud
2603
+ KUBE_NAMESPACE=pan-test-app-stage
2604
+ KUBE_APP_NAME=www
2605
+ KUBE_APP_NAME_PREFIX=
2606
+ _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"]
2607
+ EOF
2608
+ - collapseable_section_end "write-dotenv-www"
2606
2609
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
2607
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2610
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2608
2611
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2609
2612
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2610
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2613
+ - collapseable_section_end "nodeinstall"
2611
2614
  - cd www
2612
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2615
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2613
2616
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2614
2617
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2615
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2616
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
2618
+ - collapseable_section_end "nodeinstall"
2619
+ - collapseable_section_start "yarninstall" "Yarn install"
2617
2620
  - yarn install --immutable
2618
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
2621
+ - collapseable_section_end "yarninstall"
2619
2622
  - yarn build
2620
2623
  cache:
2621
2624
  - key: www-yarn
@@ -2626,15 +2629,13 @@ www 🧪 test:
2626
2629
  policy: pull-push
2627
2630
  paths:
2628
2631
  - www/node_modules
2629
- - key: www-next-cache
2630
- policy: pull-push
2631
- paths:
2632
- - www/.next/cache
2633
2632
  artifacts:
2634
2633
  paths:
2635
2634
  - www/__build_info.json
2636
2635
  - www/.next
2637
2636
  - www/dist
2637
+ exclude:
2638
+ - www/.env
2638
2639
  expire_in: 1 day
2639
2640
  when: always
2640
2641
  reports: {}
@@ -2660,7 +2661,7 @@ www 🧪 test:
2660
2661
  KUBERNETES_MEMORY_REQUEST: 1Gi
2661
2662
  KUBERNETES_MEMORY_LIMIT: 2Gi
2662
2663
  script:
2663
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2664
+ - collapseable_section_start "injectvars" "Injecting variables"
2664
2665
  - export APP_DIR="www"
2665
2666
  - export DOCKER_BUILD_CONTEXT="."
2666
2667
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -2677,19 +2678,19 @@ www 🧪 test:
2677
2678
  COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
2678
2679
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2679
2680
  COPY --chown=node:node .yarn /app/.yarn"
2680
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2681
+ - collapseable_section_end "injectvars"
2681
2682
  - ensureNodeDockerfile
2682
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
2683
+ - collapseable_section_start "docker-login" "Docker Login"
2683
2684
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
2684
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
2685
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
2685
+ - collapseable_section_end "docker-login"
2686
+ - collapseable_section_start "docker-build" "Docker build"
2686
2687
  - 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
2687
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
2688
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
2688
+ - collapseable_section_end "docker-build"
2689
+ - collapseable_section_start "docker-push" "Docker push and tag"
2689
2690
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
2690
2691
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
2691
2692
  - docker push $DOCKER_CACHE_IMAGE
2692
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
2693
+ - collapseable_section_end "docker-push"
2693
2694
  cache:
2694
2695
  - key: www-yarn
2695
2696
  policy: pull
@@ -2706,8 +2707,8 @@ www 🧪 test:
2706
2707
  image: aquasec/trivy:0.38.3
2707
2708
  variables: {}
2708
2709
  script:
2709
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2710
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2710
+ - collapseable_section_start "injectvars" "Injecting variables"
2711
+ - collapseable_section_end "injectvars"
2711
2712
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
2712
2713
  artifacts:
2713
2714
  paths:
@@ -2726,22 +2727,21 @@ www 🧪 test:
2726
2727
  KUBERNETES_MEMORY_REQUEST: 200Mi
2727
2728
  KUBERNETES_MEMORY_LIMIT: 400Mi
2728
2729
  script:
2729
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2730
+ - collapseable_section_start "injectvars" "Injecting variables"
2730
2731
  - export ENV_SHORT="stage"
2731
2732
  - export APP_DIR="www"
2732
2733
  - export ENV_TYPE="stage"
2733
2734
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2734
2735
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2735
2736
  - 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")"
2736
- - export HOST="www.stage.test-app.pan.panter.cloud"
2737
+ - export HOSTNAME="www.stage.test-app.pan.panter.cloud"
2737
2738
  - export ROOT_URL="https://www.stage.test-app.pan.panter.cloud"
2738
- - export HOST_INTERNAL="www.stage.test-app.pan.panter.cloud"
2739
- - export HOST_CANONICAL="www.stage.test-app.pan.panter.cloud"
2739
+ - export HOSTNAME_INTERNAL="www.stage.test-app.pan.panter.cloud"
2740
2740
  - export ROOT_URL_INTERNAL="https://www.stage.test-app.pan.panter.cloud"
2741
2741
  - export KUBE_NAMESPACE="pan-test-app-stage"
2742
2742
  - export KUBE_APP_NAME="www"
2743
2743
  - export KUBE_APP_NAME_PREFIX=""
2744
- - 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\\"]"
2744
+ - 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\\"]"
2745
2745
  - export DOCKER_REGISTRY="$CI_REGISTRY"
2746
2746
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
2747
2747
  - export DOCKER_IMAGE_NAME="stage/www"
@@ -2753,13 +2753,12 @@ www 🧪 test:
2753
2753
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
2754
2754
  - export HELM_ARGS=""
2755
2755
  - export COMPONENT_NAME="www"
2756
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2757
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2756
+ - collapseable_section_end "injectvars"
2758
2757
  - kubectl config set-cluster "kube-pan-test-app-stage-www" --server="$CL_stage_www_KUBE_URL" --certificate-authority <(echo $CL_stage_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
2759
2758
  - kubectl config set-credentials "kube-pan-test-app-stage-www" --token="$CL_stage_www_KUBE_TOKEN"
2760
2759
  - kubectl config set-context "kube-pan-test-app-stage-www" --cluster="kube-pan-test-app-stage-www" --user="kube-pan-test-app-stage-www" --namespace="pan-test-app-stage"
2761
2760
  - kubectl config use-context "kube-pan-test-app-stage-www"
2762
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
2761
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
2763
2762
  - |
2764
2763
  cat > __all_values.yml <<EOF
2765
2764
  env:
@@ -2772,18 +2771,16 @@ www 🧪 test:
2772
2771
  ENV_TYPE: |-
2773
2772
  stage
2774
2773
  BUILD_INFO_BUILD_ID: |-
2775
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2774
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
2776
2775
  BUILD_INFO_BUILD_TIME: |-
2777
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2776
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
2778
2777
  BUILD_INFO_CURRENT_VERSION: |-
2779
- $(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/^/ /')
2780
- HOST: |-
2778
+ $(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/^/ /')
2779
+ HOSTNAME: |-
2781
2780
  www.stage.test-app.pan.panter.cloud
2782
2781
  ROOT_URL: |-
2783
2782
  https://www.stage.test-app.pan.panter.cloud
2784
- HOST_INTERNAL: |-
2785
- www.stage.test-app.pan.panter.cloud
2786
- HOST_CANONICAL: |-
2783
+ HOSTNAME_INTERNAL: |-
2787
2784
  www.stage.test-app.pan.panter.cloud
2788
2785
  ROOT_URL_INTERNAL: |-
2789
2786
  https://www.stage.test-app.pan.panter.cloud
@@ -2793,7 +2790,7 @@ www 🧪 test:
2793
2790
  www
2794
2791
  KUBE_APP_NAME_PREFIX: ""
2795
2792
  _ALL_ENV_VAR_KEYS: |-
2796
- ["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"]
2793
+ ["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"]
2797
2794
  application:
2798
2795
  host: |-
2799
2796
  www.stage.test-app.pan.panter.cloud
@@ -2813,7 +2810,7 @@ www 🧪 test:
2813
2810
  __health
2814
2811
 
2815
2812
  EOF
2816
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
2813
+ - collapseable_section_end "writeallvalues"
2817
2814
  - kubernetesCreateSecret
2818
2815
  - kubernetesDeploy
2819
2816
  - echo 'Uploading SBOM to Dependency Track'
@@ -2849,30 +2846,28 @@ www 🧪 test:
2849
2846
  KUBERNETES_MEMORY_LIMIT: 400Mi
2850
2847
  GIT_STRATEGY: none
2851
2848
  script:
2852
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2849
+ - collapseable_section_start "injectvars" "Injecting variables"
2853
2850
  - export ENV_SHORT="stage"
2854
2851
  - export APP_DIR="www"
2855
2852
  - export ENV_TYPE="stage"
2856
2853
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2857
2854
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2858
2855
  - 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")"
2859
- - export HOST="www.stage.test-app.pan.panter.cloud"
2856
+ - export HOSTNAME="www.stage.test-app.pan.panter.cloud"
2860
2857
  - export ROOT_URL="https://www.stage.test-app.pan.panter.cloud"
2861
- - export HOST_INTERNAL="www.stage.test-app.pan.panter.cloud"
2862
- - export HOST_CANONICAL="www.stage.test-app.pan.panter.cloud"
2858
+ - export HOSTNAME_INTERNAL="www.stage.test-app.pan.panter.cloud"
2863
2859
  - export ROOT_URL_INTERNAL="https://www.stage.test-app.pan.panter.cloud"
2864
2860
  - export KUBE_NAMESPACE="pan-test-app-stage"
2865
2861
  - export KUBE_APP_NAME="www"
2866
2862
  - export KUBE_APP_NAME_PREFIX=""
2867
- - 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\\"]"
2863
+ - 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\\"]"
2868
2864
  - export RELEASE_NAME="pan-test-app-stage-www"
2869
2865
  - export HELM_EXPERIMENTAL_OCI="1"
2870
2866
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-www"
2871
2867
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
2872
2868
  - export HELM_ARGS=""
2873
2869
  - export COMPONENT_NAME="www"
2874
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2875
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2870
+ - collapseable_section_end "injectvars"
2876
2871
  - kubectl config set-cluster "kube-pan-test-app-stage-www" --server="$CL_stage_www_KUBE_URL" --certificate-authority <(echo $CL_stage_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
2877
2872
  - kubectl config set-credentials "kube-pan-test-app-stage-www" --token="$CL_stage_www_KUBE_TOKEN"
2878
2873
  - kubectl config set-context "kube-pan-test-app-stage-www" --cluster="kube-pan-test-app-stage-www" --user="kube-pan-test-app-stage-www" --namespace="pan-test-app-stage"
@@ -2906,30 +2901,28 @@ www 🧪 test:
2906
2901
  KUBERNETES_MEMORY_LIMIT: 400Mi
2907
2902
  GIT_STRATEGY: none
2908
2903
  script:
2909
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2904
+ - collapseable_section_start "injectvars" "Injecting variables"
2910
2905
  - export ENV_SHORT="stage"
2911
2906
  - export APP_DIR="www"
2912
2907
  - export ENV_TYPE="stage"
2913
2908
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2914
2909
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2915
2910
  - 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")"
2916
- - export HOST="www.stage.test-app.pan.panter.cloud"
2911
+ - export HOSTNAME="www.stage.test-app.pan.panter.cloud"
2917
2912
  - export ROOT_URL="https://www.stage.test-app.pan.panter.cloud"
2918
- - export HOST_INTERNAL="www.stage.test-app.pan.panter.cloud"
2919
- - export HOST_CANONICAL="www.stage.test-app.pan.panter.cloud"
2913
+ - export HOSTNAME_INTERNAL="www.stage.test-app.pan.panter.cloud"
2920
2914
  - export ROOT_URL_INTERNAL="https://www.stage.test-app.pan.panter.cloud"
2921
2915
  - export KUBE_NAMESPACE="pan-test-app-stage"
2922
2916
  - export KUBE_APP_NAME="www"
2923
2917
  - export KUBE_APP_NAME_PREFIX=""
2924
- - 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\\"]"
2918
+ - 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\\"]"
2925
2919
  - export RELEASE_NAME="pan-test-app-stage-www"
2926
2920
  - export HELM_EXPERIMENTAL_OCI="1"
2927
2921
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-www"
2928
2922
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
2929
2923
  - export HELM_ARGS=""
2930
2924
  - export COMPONENT_NAME="www"
2931
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2932
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2925
+ - collapseable_section_end "injectvars"
2933
2926
  - kubectl config set-cluster "kube-pan-test-app-stage-www" --server="$CL_stage_www_KUBE_URL" --certificate-authority <(echo $CL_stage_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
2934
2927
  - kubectl config set-credentials "kube-pan-test-app-stage-www" --token="$CL_stage_www_KUBE_TOKEN"
2935
2928
  - kubectl config set-context "kube-pan-test-app-stage-www" --cluster="kube-pan-test-app-stage-www" --user="kube-pan-test-app-stage-www" --namespace="pan-test-app-stage"
@@ -2958,36 +2951,51 @@ www 🧪 test:
2958
2951
  KUBERNETES_MEMORY_REQUEST: 1Gi
2959
2952
  KUBERNETES_MEMORY_LIMIT: 4Gi
2960
2953
  script:
2961
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
2954
+ - collapseable_section_start "injectvars" "Injecting variables"
2962
2955
  - export ENV_SHORT="prod"
2963
2956
  - export APP_DIR="www"
2964
2957
  - export ENV_TYPE="prod"
2965
2958
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
2966
2959
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
2967
2960
  - 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")"
2968
- - export HOST="www.prod.test-app.pan.panter.cloud"
2961
+ - export HOSTNAME="www.prod.test-app.pan.panter.cloud"
2969
2962
  - export ROOT_URL="https://www.prod.test-app.pan.panter.cloud"
2970
- - export HOST_INTERNAL="www.prod.test-app.pan.panter.cloud"
2971
- - export HOST_CANONICAL="www.prod.test-app.pan.panter.cloud"
2963
+ - export HOSTNAME_INTERNAL="www.prod.test-app.pan.panter.cloud"
2972
2964
  - export ROOT_URL_INTERNAL="https://www.prod.test-app.pan.panter.cloud"
2973
2965
  - export KUBE_NAMESPACE="pan-test-app-prod"
2974
2966
  - export KUBE_APP_NAME="www"
2975
2967
  - export KUBE_APP_NAME_PREFIX=""
2976
- - 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\\"]"
2977
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
2968
+ - 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\\"]"
2969
+ - collapseable_section_end "injectvars"
2970
+ - collapseable_section_start "write-dotenv-www" "write dot env for www"
2971
+ - |-
2972
+ cat <<EOF > www/.env
2973
+ ENV_SHORT=prod
2974
+ APP_DIR=www
2975
+ ENV_TYPE=prod
2976
+ HOSTNAME=www.prod.test-app.pan.panter.cloud
2977
+ ROOT_URL=https://www.prod.test-app.pan.panter.cloud
2978
+ HOSTNAME_INTERNAL=www.prod.test-app.pan.panter.cloud
2979
+ ROOT_URL_INTERNAL=https://www.prod.test-app.pan.panter.cloud
2980
+ KUBE_NAMESPACE=pan-test-app-prod
2981
+ KUBE_APP_NAME=www
2982
+ KUBE_APP_NAME_PREFIX=
2983
+ _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"]
2984
+ EOF
2985
+ - collapseable_section_end "write-dotenv-www"
2978
2986
  - echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > www/__build_info.json
2979
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2987
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2980
2988
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2981
2989
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2982
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2990
+ - collapseable_section_end "nodeinstall"
2983
2991
  - cd www
2984
- - echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"
2992
+ - collapseable_section_start "nodeinstall" "Ensure node version"
2985
2993
  - if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
2986
2994
  - if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
2987
- - echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"
2988
- - echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"
2995
+ - collapseable_section_end "nodeinstall"
2996
+ - collapseable_section_start "yarninstall" "Yarn install"
2989
2997
  - yarn install --immutable
2990
- - echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"
2998
+ - collapseable_section_end "yarninstall"
2991
2999
  - yarn build
2992
3000
  cache:
2993
3001
  - key: www-yarn
@@ -2998,15 +3006,13 @@ www 🧪 test:
2998
3006
  policy: pull-push
2999
3007
  paths:
3000
3008
  - www/node_modules
3001
- - key: www-next-cache
3002
- policy: pull-push
3003
- paths:
3004
- - www/.next/cache
3005
3009
  artifacts:
3006
3010
  paths:
3007
3011
  - www/__build_info.json
3008
3012
  - www/.next
3009
3013
  - www/dist
3014
+ exclude:
3015
+ - www/.env
3010
3016
  expire_in: 1 day
3011
3017
  when: always
3012
3018
  reports: {}
@@ -3032,7 +3038,7 @@ www 🧪 test:
3032
3038
  KUBERNETES_MEMORY_REQUEST: 1Gi
3033
3039
  KUBERNETES_MEMORY_LIMIT: 2Gi
3034
3040
  script:
3035
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3041
+ - collapseable_section_start "injectvars" "Injecting variables"
3036
3042
  - export APP_DIR="www"
3037
3043
  - export DOCKER_BUILD_CONTEXT="."
3038
3044
  - export DOCKER_REGISTRY="$CI_REGISTRY"
@@ -3049,19 +3055,19 @@ www 🧪 test:
3049
3055
  COPY --chown=node:node www/yarn.lock /app/www/yarn.lock
3050
3056
  COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3051
3057
  COPY --chown=node:node .yarn /app/.yarn"
3052
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3058
+ - collapseable_section_end "injectvars"
3053
3059
  - ensureNodeDockerfile
3054
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"
3060
+ - collapseable_section_start "docker-login" "Docker Login"
3055
3061
  - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
3056
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"
3057
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"
3062
+ - collapseable_section_end "docker-login"
3063
+ - collapseable_section_start "docker-build" "Docker build"
3058
3064
  - 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
3059
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"
3060
- - echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"
3065
+ - collapseable_section_end "docker-build"
3066
+ - collapseable_section_start "docker-push" "Docker push and tag"
3061
3067
  - docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
3062
3068
  - docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
3063
3069
  - docker push $DOCKER_CACHE_IMAGE
3064
- - echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"
3070
+ - collapseable_section_end "docker-push"
3065
3071
  cache:
3066
3072
  - key: www-yarn
3067
3073
  policy: pull
@@ -3078,8 +3084,8 @@ www 🧪 test:
3078
3084
  image: aquasec/trivy:0.38.3
3079
3085
  variables: {}
3080
3086
  script:
3081
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3082
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3087
+ - collapseable_section_start "injectvars" "Injecting variables"
3088
+ - collapseable_section_end "injectvars"
3083
3089
  - trivy fs --quiet --format cyclonedx --output "__sbom.json" www
3084
3090
  artifacts:
3085
3091
  paths:
@@ -3098,22 +3104,21 @@ www 🧪 test:
3098
3104
  KUBERNETES_MEMORY_REQUEST: 200Mi
3099
3105
  KUBERNETES_MEMORY_LIMIT: 400Mi
3100
3106
  script:
3101
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3107
+ - collapseable_section_start "injectvars" "Injecting variables"
3102
3108
  - export ENV_SHORT="prod"
3103
3109
  - export APP_DIR="www"
3104
3110
  - export ENV_TYPE="prod"
3105
3111
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3106
3112
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3107
3113
  - 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")"
3108
- - export HOST="www.prod.test-app.pan.panter.cloud"
3114
+ - export HOSTNAME="www.prod.test-app.pan.panter.cloud"
3109
3115
  - export ROOT_URL="https://www.prod.test-app.pan.panter.cloud"
3110
- - export HOST_INTERNAL="www.prod.test-app.pan.panter.cloud"
3111
- - export HOST_CANONICAL="www.prod.test-app.pan.panter.cloud"
3116
+ - export HOSTNAME_INTERNAL="www.prod.test-app.pan.panter.cloud"
3112
3117
  - export ROOT_URL_INTERNAL="https://www.prod.test-app.pan.panter.cloud"
3113
3118
  - export KUBE_NAMESPACE="pan-test-app-prod"
3114
3119
  - export KUBE_APP_NAME="www"
3115
3120
  - export KUBE_APP_NAME_PREFIX=""
3116
- - 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\\"]"
3121
+ - 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\\"]"
3117
3122
  - export DOCKER_REGISTRY="$CI_REGISTRY"
3118
3123
  - export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/www"
3119
3124
  - export DOCKER_IMAGE_NAME="prod/www"
@@ -3125,13 +3130,12 @@ www 🧪 test:
3125
3130
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
3126
3131
  - export HELM_ARGS=""
3127
3132
  - export COMPONENT_NAME="www"
3128
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3129
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3133
+ - collapseable_section_end "injectvars"
3130
3134
  - kubectl config set-cluster "kube-pan-test-app-prod-www" --server="$CL_prod_www_KUBE_URL" --certificate-authority <(echo $CL_prod_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
3131
3135
  - kubectl config set-credentials "kube-pan-test-app-prod-www" --token="$CL_prod_www_KUBE_TOKEN"
3132
3136
  - kubectl config set-context "kube-pan-test-app-prod-www" --cluster="kube-pan-test-app-prod-www" --user="kube-pan-test-app-prod-www" --namespace="pan-test-app-prod"
3133
3137
  - kubectl config use-context "kube-pan-test-app-prod-www"
3134
- - echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"
3138
+ - collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
3135
3139
  - |
3136
3140
  cat > __all_values.yml <<EOF
3137
3141
  env:
@@ -3144,18 +3148,16 @@ www 🧪 test:
3144
3148
  ENV_TYPE: |-
3145
3149
  prod
3146
3150
  BUILD_INFO_BUILD_ID: |-
3147
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3151
+ $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
3148
3152
  BUILD_INFO_BUILD_TIME: |-
3149
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3153
+ $(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
3150
3154
  BUILD_INFO_CURRENT_VERSION: |-
3151
- $(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/^/ /')
3152
- HOST: |-
3155
+ $(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/^/ /')
3156
+ HOSTNAME: |-
3153
3157
  www.prod.test-app.pan.panter.cloud
3154
3158
  ROOT_URL: |-
3155
3159
  https://www.prod.test-app.pan.panter.cloud
3156
- HOST_INTERNAL: |-
3157
- www.prod.test-app.pan.panter.cloud
3158
- HOST_CANONICAL: |-
3160
+ HOSTNAME_INTERNAL: |-
3159
3161
  www.prod.test-app.pan.panter.cloud
3160
3162
  ROOT_URL_INTERNAL: |-
3161
3163
  https://www.prod.test-app.pan.panter.cloud
@@ -3165,7 +3167,7 @@ www 🧪 test:
3165
3167
  www
3166
3168
  KUBE_APP_NAME_PREFIX: ""
3167
3169
  _ALL_ENV_VAR_KEYS: |-
3168
- ["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"]
3170
+ ["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"]
3169
3171
  application:
3170
3172
  host: |-
3171
3173
  www.prod.test-app.pan.panter.cloud
@@ -3185,7 +3187,7 @@ www 🧪 test:
3185
3187
  __health
3186
3188
 
3187
3189
  EOF
3188
- - echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"
3190
+ - collapseable_section_end "writeallvalues"
3189
3191
  - kubernetesCreateSecret
3190
3192
  - kubernetesDeploy
3191
3193
  - echo 'Uploading SBOM to Dependency Track'
@@ -3221,30 +3223,28 @@ www 🧪 test:
3221
3223
  KUBERNETES_MEMORY_LIMIT: 400Mi
3222
3224
  GIT_STRATEGY: none
3223
3225
  script:
3224
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3226
+ - collapseable_section_start "injectvars" "Injecting variables"
3225
3227
  - export ENV_SHORT="prod"
3226
3228
  - export APP_DIR="www"
3227
3229
  - export ENV_TYPE="prod"
3228
3230
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3229
3231
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3230
3232
  - 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")"
3231
- - export HOST="www.prod.test-app.pan.panter.cloud"
3233
+ - export HOSTNAME="www.prod.test-app.pan.panter.cloud"
3232
3234
  - export ROOT_URL="https://www.prod.test-app.pan.panter.cloud"
3233
- - export HOST_INTERNAL="www.prod.test-app.pan.panter.cloud"
3234
- - export HOST_CANONICAL="www.prod.test-app.pan.panter.cloud"
3235
+ - export HOSTNAME_INTERNAL="www.prod.test-app.pan.panter.cloud"
3235
3236
  - export ROOT_URL_INTERNAL="https://www.prod.test-app.pan.panter.cloud"
3236
3237
  - export KUBE_NAMESPACE="pan-test-app-prod"
3237
3238
  - export KUBE_APP_NAME="www"
3238
3239
  - export KUBE_APP_NAME_PREFIX=""
3239
- - 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\\"]"
3240
+ - 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\\"]"
3240
3241
  - export RELEASE_NAME="pan-test-app-prod-www"
3241
3242
  - export HELM_EXPERIMENTAL_OCI="1"
3242
3243
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-www"
3243
3244
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
3244
3245
  - export HELM_ARGS=""
3245
3246
  - export COMPONENT_NAME="www"
3246
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3247
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3247
+ - collapseable_section_end "injectvars"
3248
3248
  - kubectl config set-cluster "kube-pan-test-app-prod-www" --server="$CL_prod_www_KUBE_URL" --certificate-authority <(echo $CL_prod_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
3249
3249
  - kubectl config set-credentials "kube-pan-test-app-prod-www" --token="$CL_prod_www_KUBE_TOKEN"
3250
3250
  - kubectl config set-context "kube-pan-test-app-prod-www" --cluster="kube-pan-test-app-prod-www" --user="kube-pan-test-app-prod-www" --namespace="pan-test-app-prod"
@@ -3278,30 +3278,28 @@ www 🧪 test:
3278
3278
  KUBERNETES_MEMORY_LIMIT: 400Mi
3279
3279
  GIT_STRATEGY: none
3280
3280
  script:
3281
- - echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"
3281
+ - collapseable_section_start "injectvars" "Injecting variables"
3282
3282
  - export ENV_SHORT="prod"
3283
3283
  - export APP_DIR="www"
3284
3284
  - export ENV_TYPE="prod"
3285
3285
  - export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3286
3286
  - export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
3287
3287
  - 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")"
3288
- - export HOST="www.prod.test-app.pan.panter.cloud"
3288
+ - export HOSTNAME="www.prod.test-app.pan.panter.cloud"
3289
3289
  - export ROOT_URL="https://www.prod.test-app.pan.panter.cloud"
3290
- - export HOST_INTERNAL="www.prod.test-app.pan.panter.cloud"
3291
- - export HOST_CANONICAL="www.prod.test-app.pan.panter.cloud"
3290
+ - export HOSTNAME_INTERNAL="www.prod.test-app.pan.panter.cloud"
3292
3291
  - export ROOT_URL_INTERNAL="https://www.prod.test-app.pan.panter.cloud"
3293
3292
  - export KUBE_NAMESPACE="pan-test-app-prod"
3294
3293
  - export KUBE_APP_NAME="www"
3295
3294
  - export KUBE_APP_NAME_PREFIX=""
3296
- - 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\\"]"
3295
+ - 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\\"]"
3297
3296
  - export RELEASE_NAME="pan-test-app-prod-www"
3298
3297
  - export HELM_EXPERIMENTAL_OCI="1"
3299
3298
  - export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-www"
3300
3299
  - export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
3301
3300
  - export HELM_ARGS=""
3302
3301
  - export COMPONENT_NAME="www"
3303
- - export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
3304
- - echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
3302
+ - collapseable_section_end "injectvars"
3305
3303
  - kubectl config set-cluster "kube-pan-test-app-prod-www" --server="$CL_prod_www_KUBE_URL" --certificate-authority <(echo $CL_prod_www_KUBE_CA_PEM | base64 -d) --embed-certs=true
3306
3304
  - kubectl config set-credentials "kube-pan-test-app-prod-www" --token="$CL_prod_www_KUBE_TOKEN"
3307
3305
  - kubectl config set-context "kube-pan-test-app-prod-www" --cluster="kube-pan-test-app-prod-www" --user="kube-pan-test-app-prod-www" --namespace="pan-test-app-prod"