@catladder/pipeline 1.170.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bash/BashExpression.d.ts +1 -6
- package/dist/bash/BashExpression.js +2 -15
- package/dist/bash/bashEscape.d.ts +34 -0
- package/dist/bash/bashEscape.js +114 -0
- package/dist/bash/bashYaml.js +25 -2
- package/dist/bash/getInjectVarsScript.js +4 -2
- package/dist/bash/index.d.ts +2 -0
- package/dist/bash/index.js +26 -0
- package/dist/build/base/createAppBuildJob.js +3 -3
- package/dist/build/base/writeDotEnv.js +6 -4
- package/dist/build/custom/testJob.js +12 -12
- package/dist/build/docker.d.ts +3 -3
- package/dist/build/node/buildJob.js +1 -1
- package/dist/build/node/cache.d.ts +2 -4
- package/dist/build/node/cache.js +3 -24
- package/dist/build/node/testJob.js +11 -11
- package/dist/build/rails/build.js +1 -1
- package/dist/build/rails/test.js +8 -8
- package/dist/build/types.d.ts +0 -10
- package/dist/constants.js +1 -1
- package/dist/context/createComponentContext.js +0 -1
- package/dist/context/getEnvConfig.js +2 -1
- package/dist/context/getEnvironment.js +1 -2
- package/dist/context/getEnvironmentVariables.d.ts +5 -6
- package/dist/context/getEnvironmentVariables.js +50 -38
- package/dist/deploy/base/deploy.js +3 -3
- package/dist/deploy/cloudRun/createJobs/getCloudRunDeployScripts.js +2 -2
- package/dist/deploy/cloudRun/index.js +2 -2
- package/dist/deploy/cloudRun/utils/getServiceName.d.ts +1 -1
- package/dist/deploy/kubernetes/cloudSql/index.d.ts +2 -2
- package/dist/deploy/kubernetes/cloudSql/index.js +3 -14
- package/dist/deploy/kubernetes/deployJob.js +1 -3
- package/dist/deploy/kubernetes/index.js +2 -2
- package/dist/deploy/kubernetes/kubeEnv.d.ts +3 -3
- package/dist/deploy/kubernetes/kubeValues.d.ts +3 -4
- package/dist/deploy/kubernetes/kubeValues.js +2 -3
- package/dist/deploy/types/base.d.ts +0 -6
- package/dist/deploy/types/kubernetes.d.ts +1 -34
- package/dist/globalScriptFunctions/index.d.ts +14 -0
- package/dist/globalScriptFunctions/index.js +37 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/pipeline/gitlab/createGitlabJobs.js +3 -5
- package/dist/pipeline/gitlab/createGitlabPipeline.d.ts +1 -0
- package/dist/pipeline/gitlab/createGitlabPipeline.js +38 -2
- package/dist/pipeline/packageManager.js +1 -1
- package/dist/runner/index.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/config.d.ts +6 -9
- package/dist/types/context.d.ts +2 -9
- package/dist/types/gitlab-types.d.ts +1 -0
- package/dist/types/jobs.d.ts +0 -8
- package/dist/utils/gitlab.js +4 -1
- package/dist/utils/writeFiles.js +1 -7
- package/dist/variables/VariableValue.d.ts +3 -0
- package/dist/variables/VariableValue.js +5 -0
- package/dist/variables/VariableValueContainingReferences.d.ts +24 -0
- package/dist/variables/VariableValueContainingReferences.js +97 -0
- package/dist/variables/__tests__/resolveAllReferences.test.js +219 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveAllReferencesOnce.test.js +171 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.d.ts +1 -0
- package/dist/variables/__tests__/resolveReferencesOnce.test.js +202 -0
- package/dist/variables/__tests__/variableValue.test.d.ts +1 -0
- package/dist/variables/__tests__/variableValue.test.js +36 -0
- package/dist/variables/resolveAllReferences.d.ts +3 -0
- package/dist/{bash/replaceAsync.js → variables/resolveAllReferences.js} +60 -40
- package/dist/variables/resolveAllReferencesOnce.d.ts +5 -0
- package/dist/variables/resolveAllReferencesOnce.js +191 -0
- package/dist/variables/resolveReferencesOnce.d.ts +8 -0
- package/dist/variables/resolveReferencesOnce.js +22 -0
- package/examples/__snapshots__/cloud-run-http2.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +312 -222
- package/examples/__snapshots__/cloud-run-nextjs.test.ts.snap +1436 -0
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +316 -238
- package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +313 -238
- package/examples/__snapshots__/cloud-run-service-custom-vpc-connector.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +316 -238
- package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +294 -220
- package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +312 -238
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +652 -486
- package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +282 -288
- package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +312 -238
- package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +284 -194
- package/examples/__snapshots__/custom-build-job.test.ts.snap +278 -188
- package/examples/__snapshots__/custom-deploy.test.ts.snap +220 -154
- package/examples/__snapshots__/custom-envs.test.ts.snap +216 -126
- package/examples/__snapshots__/custom-sbom-java.test.ts.snap +278 -188
- package/examples/__snapshots__/git-submodule.test.ts.snap +312 -238
- package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +231 -253
- package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +240 -262
- package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +504 -506
- package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +239 -261
- package/examples/__snapshots__/local-dot-env.test.ts.snap +236 -238
- package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +236 -242
- package/examples/__snapshots__/multiline-var.test.ts.snap +1355 -973
- package/examples/__snapshots__/native-app.test.ts.snap +438 -392
- package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +312 -238
- package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +312 -238
- package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +186 -188
- package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +162 -164
- package/examples/__snapshots__/referencing-other-vars.test.ts.snap +971 -765
- package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +330 -228
- package/examples/__snapshots__/{workspace-api-www-custom-cache.test.ts.snap → workspace-api-www-turbo-cache.test.ts.snap} +457 -499
- package/examples/__snapshots__/workspace-api-www.test.ts.snap +452 -482
- package/examples/{workspace-api-www-custom-cache.test.ts → cloud-run-nextjs.test.ts} +2 -2
- package/examples/cloud-run-nextjs.ts +28 -0
- package/examples/cloud-run-with-sql.ts +0 -1
- package/examples/kubernetes-application-customization.ts +1 -0
- package/examples/kubernetes-with-cloud-sql.ts +1 -0
- package/examples/kubernetes-with-jobs.ts +1 -0
- package/examples/kubernetes-with-mongodb.ts +1 -0
- package/examples/meteor-kubernetes.ts +1 -1
- package/examples/native-app.ts +10 -7
- package/examples/rails-k8s-with-worker.ts +7 -1
- package/examples/{kubernetes-with-cloud-sql-legacy.test.ts → workspace-api-www-turbo-cache.test.ts} +2 -2
- package/examples/{workspace-api-www-custom-cache.ts → workspace-api-www-turbo-cache.ts} +4 -3
- package/examples/workspace-api-www.ts +3 -2
- package/package.json +2 -6
- package/src/bash/BashExpression.ts +0 -13
- package/src/bash/bashEscape.ts +158 -0
- package/src/bash/bashYaml.ts +36 -2
- package/src/bash/getInjectVarsScript.ts +11 -2
- package/src/bash/index.ts +2 -0
- package/src/build/base/createAppBuildJob.ts +0 -1
- package/src/build/base/writeDotEnv.ts +6 -6
- package/src/build/custom/testJob.ts +0 -1
- package/src/build/node/buildJob.ts +2 -2
- package/src/build/node/cache.ts +0 -29
- package/src/build/node/testJob.ts +0 -1
- package/src/build/rails/build.ts +0 -1
- package/src/build/rails/test.ts +0 -1
- package/src/build/types.ts +0 -13
- package/src/context/createComponentContext.ts +0 -1
- package/src/context/getEnvConfig.ts +2 -2
- package/src/context/getEnvironment.ts +1 -1
- package/src/context/getEnvironmentContext.ts +1 -1
- package/src/context/getEnvironmentVariables.ts +44 -51
- package/src/deploy/base/deploy.ts +1 -1
- package/src/deploy/cloudRun/createJobs/getCloudRunDeployScripts.ts +4 -12
- package/src/deploy/cloudRun/index.ts +2 -2
- package/src/deploy/kubernetes/cloudSql/index.ts +3 -16
- package/src/deploy/kubernetes/deployJob.ts +0 -2
- package/src/deploy/kubernetes/index.ts +2 -2
- package/src/deploy/kubernetes/kubeEnv.ts +3 -3
- package/src/deploy/kubernetes/kubeValues.ts +5 -8
- package/src/deploy/types/base.ts +0 -6
- package/src/deploy/types/kubernetes.ts +1 -36
- package/src/globalScriptFunctions/index.ts +30 -0
- package/src/index.ts +2 -0
- package/src/pipeline/gitlab/createGitlabJobs.ts +1 -4
- package/src/pipeline/gitlab/createGitlabPipeline.ts +8 -1
- package/src/pipeline/packageManager.ts +7 -5
- package/src/runner/index.ts +0 -1
- package/src/types/config.ts +6 -9
- package/src/types/context.ts +3 -9
- package/src/types/gitlab-types.ts +1 -0
- package/src/types/jobs.ts +0 -8
- package/src/utils/gitlab.ts +19 -2
- package/src/utils/writeFiles.ts +1 -2
- package/src/variables/VariableValue.ts +6 -0
- package/src/variables/VariableValueContainingReferences.ts +89 -0
- package/src/variables/__tests__/resolveAllReferences.test.ts +110 -0
- package/src/variables/__tests__/resolveAllReferencesOnce.test.ts +64 -0
- package/src/variables/__tests__/resolveReferencesOnce.test.ts +117 -0
- package/src/variables/__tests__/variableValue.test.ts +73 -0
- package/src/variables/resolveAllReferences.ts +46 -0
- package/src/variables/resolveAllReferencesOnce.ts +44 -0
- package/src/variables/resolveReferencesOnce.ts +29 -0
- package/bin/catladder-gitlab-dev.js +0 -3
- package/bin/catladder-gitlab.js +0 -3
- package/dist/bash/replaceAsync.d.ts +0 -2
- package/dist/bundles/catladder-gitlab/index.js +0 -15
- package/dist/context/__tests__/resolveReferences.test.js +0 -368
- package/dist/context/resolveReferences.d.ts +0 -6
- package/dist/context/resolveReferences.js +0 -286
- package/dist/deploy/kubernetes/processSecretsAsFiles.d.ts +0 -85
- package/dist/deploy/kubernetes/processSecretsAsFiles.js +0 -33
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +0 -1795
- package/examples/kubernetes-with-cloud-sql-legacy.ts +0 -35
- package/scripts/bundle +0 -2
- package/src/bash/replaceAsync.ts +0 -49
- package/src/context/__tests__/resolveReferences.test.ts +0 -148
- package/src/context/resolveReferences.ts +0 -93
- package/src/deploy/kubernetes/processSecretsAsFiles.ts +0 -35
- /package/dist/{context/__tests__/resolveReferences.test.d.ts → variables/__tests__/resolveAllReferences.test.d.ts} +0 -0
|
@@ -45,6 +45,36 @@ variables:
|
|
|
45
45
|
CACHE_COMPRESSION_LEVEL: fast
|
|
46
46
|
TRANSFER_METER_FREQUENCY: 5s
|
|
47
47
|
GIT_DEPTH: '1'
|
|
48
|
+
before_script:
|
|
49
|
+
- |-
|
|
50
|
+
function escapeForDotEnv () {
|
|
51
|
+
input="\${1:-$(cat)}"
|
|
52
|
+
input="\${input//$'\\n'/\\\\n}"
|
|
53
|
+
if [[ "$input" == *\\\\n* ]]; then
|
|
54
|
+
if [[ "$input" == *\\"* && "$input" == *\\'* && "$input" == *\\\`* ]]; then
|
|
55
|
+
printf "\\"%s\\"\\n" "$input"
|
|
56
|
+
elif [[ "$input" == *\\"* && "$input" == *\\'* ]]; then
|
|
57
|
+
printf "\`%s\`\\n" "$input"
|
|
58
|
+
elif [[ "$input" == *\\"* ]]; then
|
|
59
|
+
printf "'%s'\\n" "$input"
|
|
60
|
+
else
|
|
61
|
+
printf "\\"%s\\"\\n" "$input"
|
|
62
|
+
fi
|
|
63
|
+
else
|
|
64
|
+
printf "%s\\n" "$input"
|
|
65
|
+
fi
|
|
66
|
+
}
|
|
67
|
+
- |-
|
|
68
|
+
function collapseable_section_start () {
|
|
69
|
+
local section_title="\${1}"
|
|
70
|
+
local section_description="\${2:-$section_title}"
|
|
71
|
+
echo -e "section_start:\`date +%s\`:\${section_title}[collapsed=true]\\r\\e[0K\${section_description}"
|
|
72
|
+
}
|
|
73
|
+
- |-
|
|
74
|
+
function collapseable_section_end () {
|
|
75
|
+
local section_title="\${1}"
|
|
76
|
+
echo -e "section_end:\`date +%s\`:\${section_title}\\r\\e[0K"
|
|
77
|
+
}
|
|
48
78
|
app1 🛡 audit:
|
|
49
79
|
stage: test
|
|
50
80
|
image: path/to/docker/jobs-default:the-version
|
|
@@ -53,9 +83,9 @@ app1 🛡 audit:
|
|
|
53
83
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
54
84
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
55
85
|
script:
|
|
56
|
-
-
|
|
86
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
57
87
|
- export APP_PATH="app1"
|
|
58
|
-
-
|
|
88
|
+
- collapseable_section_end "injectvars"
|
|
59
89
|
- cd app1
|
|
60
90
|
- yarn npm audit --environment production
|
|
61
91
|
rules:
|
|
@@ -79,21 +109,21 @@ app1 👮 lint:
|
|
|
79
109
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
80
110
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
81
111
|
script:
|
|
82
|
-
-
|
|
112
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
83
113
|
- export APP_PATH="app1"
|
|
84
|
-
-
|
|
85
|
-
-
|
|
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
|
-
-
|
|
118
|
+
- collapseable_section_end "nodeinstall"
|
|
89
119
|
- cd app1
|
|
90
|
-
-
|
|
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
|
-
-
|
|
94
|
-
-
|
|
123
|
+
- collapseable_section_end "nodeinstall"
|
|
124
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
95
125
|
- yarn install --immutable
|
|
96
|
-
-
|
|
126
|
+
- collapseable_section_end "yarninstall"
|
|
97
127
|
- yarn lint
|
|
98
128
|
cache:
|
|
99
129
|
- key: app1-yarn
|
|
@@ -120,21 +150,21 @@ app1 🧪 test:
|
|
|
120
150
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
121
151
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
122
152
|
script:
|
|
123
|
-
-
|
|
153
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
124
154
|
- export APP_PATH="app1"
|
|
125
|
-
-
|
|
126
|
-
-
|
|
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
|
-
-
|
|
159
|
+
- collapseable_section_end "nodeinstall"
|
|
130
160
|
- cd app1
|
|
131
|
-
-
|
|
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
|
-
-
|
|
135
|
-
-
|
|
164
|
+
- collapseable_section_end "nodeinstall"
|
|
165
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
136
166
|
- yarn install --immutable
|
|
137
|
-
-
|
|
167
|
+
- collapseable_section_end "yarninstall"
|
|
138
168
|
- yarn test
|
|
139
169
|
cache:
|
|
140
170
|
- key: app1-yarn
|
|
@@ -161,17 +191,16 @@ app1 🧪 test:
|
|
|
161
191
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
162
192
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
163
193
|
script:
|
|
164
|
-
-
|
|
194
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
165
195
|
- export ENV_SHORT="dev"
|
|
166
196
|
- export APP_DIR="app1"
|
|
167
197
|
- export ENV_TYPE="dev"
|
|
168
198
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
169
199
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
170
200
|
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
171
|
-
- export
|
|
201
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
172
202
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
173
|
-
- export
|
|
174
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
203
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
175
204
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
176
205
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
177
206
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -181,22 +210,44 @@ app1 🧪 test:
|
|
|
181
210
|
- export foo="foo-value"
|
|
182
211
|
- export bar="bar-value"
|
|
183
212
|
- 'export foo3="from app3: foo-value-3"'
|
|
184
|
-
- 'export circle="this is from app3 that has reference to app1:
|
|
185
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
186
|
-
-
|
|
213
|
+
- 'export circle="this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\""'
|
|
214
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET1\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"bar\\",\\"foo3\\",\\"circle\\"]"
|
|
215
|
+
- collapseable_section_end "injectvars"
|
|
216
|
+
- collapseable_section_start "write-dotenv-app1" "write dot env for app1"
|
|
217
|
+
- |-
|
|
218
|
+
cat <<EOF > app1/.env
|
|
219
|
+
ENV_SHORT=dev
|
|
220
|
+
APP_DIR=app1
|
|
221
|
+
ENV_TYPE=dev
|
|
222
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
223
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
224
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
225
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
226
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
|
|
227
|
+
DEPLOY_CLOUD_RUN_REGION=asia-east1
|
|
228
|
+
SECRET1=$(printf %s "$CL_dev_app1_SECRET1" | escapeForDotEnv)
|
|
229
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_app1_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
230
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
231
|
+
foo=foo-value
|
|
232
|
+
bar=bar-value
|
|
233
|
+
foo3=from app3: foo-value-3
|
|
234
|
+
circle=this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\"
|
|
235
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET1","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","bar","foo3","circle"]
|
|
236
|
+
EOF
|
|
237
|
+
- collapseable_section_end "write-dotenv-app1"
|
|
187
238
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app1/__build_info.json
|
|
188
|
-
-
|
|
239
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
189
240
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
190
241
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
191
|
-
-
|
|
242
|
+
- collapseable_section_end "nodeinstall"
|
|
192
243
|
- cd app1
|
|
193
|
-
-
|
|
244
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
194
245
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
195
246
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
196
|
-
-
|
|
197
|
-
-
|
|
247
|
+
- collapseable_section_end "nodeinstall"
|
|
248
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
198
249
|
- yarn install --immutable
|
|
199
|
-
-
|
|
250
|
+
- collapseable_section_end "yarninstall"
|
|
200
251
|
- yarn build
|
|
201
252
|
cache:
|
|
202
253
|
- key: app1-yarn
|
|
@@ -207,15 +258,13 @@ app1 🧪 test:
|
|
|
207
258
|
policy: pull-push
|
|
208
259
|
paths:
|
|
209
260
|
- app1/node_modules
|
|
210
|
-
- key: app1-next-cache
|
|
211
|
-
policy: pull-push
|
|
212
|
-
paths:
|
|
213
|
-
- app1/.next/cache
|
|
214
261
|
artifacts:
|
|
215
262
|
paths:
|
|
216
263
|
- app1/__build_info.json
|
|
217
264
|
- app1/.next
|
|
218
265
|
- app1/dist
|
|
266
|
+
exclude:
|
|
267
|
+
- app1/.env
|
|
219
268
|
expire_in: 1 day
|
|
220
269
|
when: always
|
|
221
270
|
reports: {}
|
|
@@ -243,7 +292,7 @@ app1 🧪 test:
|
|
|
243
292
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
244
293
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
245
294
|
script:
|
|
246
|
-
-
|
|
295
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
247
296
|
- export APP_DIR="app1"
|
|
248
297
|
- export DOCKER_BUILD_CONTEXT="."
|
|
249
298
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
@@ -259,20 +308,20 @@ app1 🧪 test:
|
|
|
259
308
|
COPY --chown=node:node app1/yarn.lock /app/app1/yarn.lock
|
|
260
309
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
261
310
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
262
|
-
-
|
|
311
|
+
- collapseable_section_end "injectvars"
|
|
263
312
|
- ensureNodeDockerfile
|
|
264
|
-
-
|
|
313
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
265
314
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
266
315
|
- gcloud auth configure-docker asia-east1-docker.pkg.dev
|
|
267
|
-
-
|
|
268
|
-
-
|
|
316
|
+
- collapseable_section_end "docker-login"
|
|
317
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
269
318
|
- 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
|
|
270
|
-
-
|
|
271
|
-
-
|
|
319
|
+
- collapseable_section_end "docker-build"
|
|
320
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
272
321
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
273
322
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
274
323
|
- docker push $DOCKER_CACHE_IMAGE
|
|
275
|
-
-
|
|
324
|
+
- collapseable_section_end "docker-push"
|
|
276
325
|
cache:
|
|
277
326
|
- key: app1-yarn
|
|
278
327
|
policy: pull
|
|
@@ -291,8 +340,8 @@ app1 🧪 test:
|
|
|
291
340
|
image: aquasec/trivy:0.38.3
|
|
292
341
|
variables: {}
|
|
293
342
|
script:
|
|
294
|
-
-
|
|
295
|
-
-
|
|
343
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
344
|
+
- collapseable_section_end "injectvars"
|
|
296
345
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app1
|
|
297
346
|
artifacts:
|
|
298
347
|
paths:
|
|
@@ -313,17 +362,16 @@ app1 🧪 test:
|
|
|
313
362
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
314
363
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
315
364
|
script:
|
|
316
|
-
-
|
|
365
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
317
366
|
- export ENV_SHORT="dev"
|
|
318
367
|
- export APP_DIR="app1"
|
|
319
368
|
- export ENV_TYPE="dev"
|
|
320
369
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
321
370
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
322
371
|
- 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")"
|
|
323
|
-
- export
|
|
372
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
324
373
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
325
|
-
- export
|
|
326
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
374
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
327
375
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
328
376
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
329
377
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -333,20 +381,20 @@ app1 🧪 test:
|
|
|
333
381
|
- export foo="foo-value"
|
|
334
382
|
- export bar="bar-value"
|
|
335
383
|
- 'export foo3="from app3: foo-value-3"'
|
|
336
|
-
- 'export circle="this is from app3 that has reference to app1:
|
|
337
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
384
|
+
- 'export circle="this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\""'
|
|
385
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET1\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"bar\\",\\"foo3\\",\\"circle\\"]"
|
|
338
386
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
339
387
|
- export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app1"
|
|
340
388
|
- export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1"
|
|
341
389
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
342
390
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
343
|
-
-
|
|
344
|
-
-
|
|
391
|
+
- collapseable_section_end "injectvars"
|
|
392
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
345
393
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
346
394
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
|
|
347
395
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
348
|
-
-
|
|
349
|
-
-
|
|
396
|
+
- collapseable_section_end "prepare"
|
|
397
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
350
398
|
- |
|
|
351
399
|
cat > ____envvars.yaml <<EOF
|
|
352
400
|
ENV_SHORT: |-
|
|
@@ -356,29 +404,27 @@ app1 🧪 test:
|
|
|
356
404
|
ENV_TYPE: |-
|
|
357
405
|
dev
|
|
358
406
|
BUILD_INFO_BUILD_ID: |-
|
|
359
|
-
|
|
407
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
360
408
|
BUILD_INFO_BUILD_TIME: |-
|
|
361
|
-
|
|
409
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
362
410
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
411
|
+
$(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/^/ /')
|
|
412
|
+
HOSTNAME: |-
|
|
413
|
+
$(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
366
414
|
ROOT_URL: |-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
HOST_CANONICAL: |-
|
|
371
|
-
$(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
415
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
416
|
+
HOSTNAME_INTERNAL: |-
|
|
417
|
+
$(printf %s "$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
372
418
|
ROOT_URL_INTERNAL: |-
|
|
373
|
-
|
|
419
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
374
420
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
375
421
|
asdf
|
|
376
422
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
377
423
|
asia-east1
|
|
378
424
|
SECRET1: |-
|
|
379
|
-
|
|
425
|
+
$(printf %s "$CL_dev_app1_SECRET1" | sed '1!s/^/ /')
|
|
380
426
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
381
|
-
|
|
427
|
+
$(printf %s "$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
382
428
|
foo: |-
|
|
383
429
|
foo-value
|
|
384
430
|
bar: |-
|
|
@@ -386,20 +432,20 @@ app1 🧪 test:
|
|
|
386
432
|
foo3: |-
|
|
387
433
|
from app3: foo-value-3
|
|
388
434
|
circle: |-
|
|
389
|
-
this is from app3 that has reference to app1:
|
|
435
|
+
this is from app3 that has reference to app1: "this is from app2: this is from app1: foo-value"
|
|
390
436
|
_ALL_ENV_VAR_KEYS: |-
|
|
391
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
437
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET1","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","bar","foo3","circle"]
|
|
392
438
|
|
|
393
439
|
EOF
|
|
394
|
-
-
|
|
395
|
-
-
|
|
440
|
+
- collapseable_section_end "writeenvvars"
|
|
441
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
396
442
|
- gcloud run deploy pan-test-app-dev-app1 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app1:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app1,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-app1 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
397
|
-
-
|
|
398
|
-
-
|
|
443
|
+
- collapseable_section_end "deploy"
|
|
444
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
399
445
|
- gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-dev-app1 --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
|
|
400
446
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app1@$version --quiet --delete-tags; done
|
|
401
447
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1@$version --quiet --delete-tags; done
|
|
402
|
-
-
|
|
448
|
+
- collapseable_section_end "cleanup"
|
|
403
449
|
- echo 'Uploading SBOM to Dependency Track'
|
|
404
450
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app1" "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
405
451
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -441,9 +487,9 @@ app1 🧪 test:
|
|
|
441
487
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
442
488
|
GIT_STRATEGY: none
|
|
443
489
|
script:
|
|
444
|
-
-
|
|
490
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
445
491
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
446
|
-
-
|
|
492
|
+
- collapseable_section_end "injectvars"
|
|
447
493
|
- set +e
|
|
448
494
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
449
495
|
- gcloud run services delete pan-test-app-dev-app1 --project=asdf --region=asia-east1
|
|
@@ -479,17 +525,16 @@ app1 🧪 test:
|
|
|
479
525
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
480
526
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
481
527
|
script:
|
|
482
|
-
-
|
|
528
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
483
529
|
- export ENV_SHORT="review"
|
|
484
530
|
- export APP_DIR="app1"
|
|
485
531
|
- export ENV_TYPE="review"
|
|
486
532
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
487
533
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
488
534
|
- 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")"
|
|
489
|
-
- export
|
|
535
|
+
- export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
490
536
|
- export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
491
|
-
- export
|
|
492
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
537
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
493
538
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
494
539
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
495
540
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -499,22 +544,44 @@ app1 🧪 test:
|
|
|
499
544
|
- export foo="foo-value"
|
|
500
545
|
- export bar="bar-value"
|
|
501
546
|
- 'export foo3="from app3: foo-value-3"'
|
|
502
|
-
- 'export circle="this is from app3 that has reference to app1:
|
|
503
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
504
|
-
-
|
|
547
|
+
- 'export circle="this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\""'
|
|
548
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET1\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"bar\\",\\"foo3\\",\\"circle\\"]"
|
|
549
|
+
- collapseable_section_end "injectvars"
|
|
550
|
+
- collapseable_section_start "write-dotenv-app1" "write dot env for app1"
|
|
551
|
+
- |-
|
|
552
|
+
cat <<EOF > app1/.env
|
|
553
|
+
ENV_SHORT=review
|
|
554
|
+
APP_DIR=app1
|
|
555
|
+
ENV_TYPE=review
|
|
556
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
557
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
558
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
559
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
560
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
|
|
561
|
+
DEPLOY_CLOUD_RUN_REGION=asia-east1
|
|
562
|
+
SECRET1=$(printf %s "$CL_review_app1_SECRET1" | escapeForDotEnv)
|
|
563
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_app1_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
564
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
565
|
+
foo=foo-value
|
|
566
|
+
bar=bar-value
|
|
567
|
+
foo3=from app3: foo-value-3
|
|
568
|
+
circle=this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\"
|
|
569
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET1","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","bar","foo3","circle"]
|
|
570
|
+
EOF
|
|
571
|
+
- collapseable_section_end "write-dotenv-app1"
|
|
505
572
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app1/__build_info.json
|
|
506
|
-
-
|
|
573
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
507
574
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
508
575
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
509
|
-
-
|
|
576
|
+
- collapseable_section_end "nodeinstall"
|
|
510
577
|
- cd app1
|
|
511
|
-
-
|
|
578
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
512
579
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
513
580
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
514
|
-
-
|
|
515
|
-
-
|
|
581
|
+
- collapseable_section_end "nodeinstall"
|
|
582
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
516
583
|
- yarn install --immutable
|
|
517
|
-
-
|
|
584
|
+
- collapseable_section_end "yarninstall"
|
|
518
585
|
- yarn build
|
|
519
586
|
cache:
|
|
520
587
|
- key: app1-yarn
|
|
@@ -525,15 +592,13 @@ app1 🧪 test:
|
|
|
525
592
|
policy: pull-push
|
|
526
593
|
paths:
|
|
527
594
|
- app1/node_modules
|
|
528
|
-
- key: app1-next-cache
|
|
529
|
-
policy: pull-push
|
|
530
|
-
paths:
|
|
531
|
-
- app1/.next/cache
|
|
532
595
|
artifacts:
|
|
533
596
|
paths:
|
|
534
597
|
- app1/__build_info.json
|
|
535
598
|
- app1/.next
|
|
536
599
|
- app1/dist
|
|
600
|
+
exclude:
|
|
601
|
+
- app1/.env
|
|
537
602
|
expire_in: 1 day
|
|
538
603
|
when: always
|
|
539
604
|
reports: {}
|
|
@@ -559,7 +624,7 @@ app1 🧪 test:
|
|
|
559
624
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
560
625
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
561
626
|
script:
|
|
562
|
-
-
|
|
627
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
563
628
|
- export APP_DIR="app1"
|
|
564
629
|
- export DOCKER_BUILD_CONTEXT="."
|
|
565
630
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
@@ -575,20 +640,20 @@ app1 🧪 test:
|
|
|
575
640
|
COPY --chown=node:node app1/yarn.lock /app/app1/yarn.lock
|
|
576
641
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
577
642
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
578
|
-
-
|
|
643
|
+
- collapseable_section_end "injectvars"
|
|
579
644
|
- ensureNodeDockerfile
|
|
580
|
-
-
|
|
645
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
581
646
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
582
647
|
- gcloud auth configure-docker asia-east1-docker.pkg.dev
|
|
583
|
-
-
|
|
584
|
-
-
|
|
648
|
+
- collapseable_section_end "docker-login"
|
|
649
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
585
650
|
- 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
|
|
586
|
-
-
|
|
587
|
-
-
|
|
651
|
+
- collapseable_section_end "docker-build"
|
|
652
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
588
653
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
589
654
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
590
655
|
- docker push $DOCKER_CACHE_IMAGE
|
|
591
|
-
-
|
|
656
|
+
- collapseable_section_end "docker-push"
|
|
592
657
|
cache:
|
|
593
658
|
- key: app1-yarn
|
|
594
659
|
policy: pull
|
|
@@ -605,8 +670,8 @@ app1 🧪 test:
|
|
|
605
670
|
image: aquasec/trivy:0.38.3
|
|
606
671
|
variables: {}
|
|
607
672
|
script:
|
|
608
|
-
-
|
|
609
|
-
-
|
|
673
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
674
|
+
- collapseable_section_end "injectvars"
|
|
610
675
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app1
|
|
611
676
|
artifacts:
|
|
612
677
|
paths:
|
|
@@ -625,17 +690,16 @@ app1 🧪 test:
|
|
|
625
690
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
626
691
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
627
692
|
script:
|
|
628
|
-
-
|
|
693
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
629
694
|
- export ENV_SHORT="review"
|
|
630
695
|
- export APP_DIR="app1"
|
|
631
696
|
- export ENV_TYPE="review"
|
|
632
697
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
633
698
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
634
699
|
- 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")"
|
|
635
|
-
- export
|
|
700
|
+
- export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
636
701
|
- export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
637
|
-
- export
|
|
638
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
702
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
639
703
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
640
704
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
641
705
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -645,20 +709,20 @@ app1 🧪 test:
|
|
|
645
709
|
- export foo="foo-value"
|
|
646
710
|
- export bar="bar-value"
|
|
647
711
|
- 'export foo3="from app3: foo-value-3"'
|
|
648
|
-
- 'export circle="this is from app3 that has reference to app1:
|
|
649
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
712
|
+
- 'export circle="this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\""'
|
|
713
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET1\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"bar\\",\\"foo3\\",\\"circle\\"]"
|
|
650
714
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
651
715
|
- export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
|
|
652
716
|
- export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1"
|
|
653
717
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
654
718
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
655
|
-
-
|
|
656
|
-
-
|
|
719
|
+
- collapseable_section_end "injectvars"
|
|
720
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
657
721
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
658
722
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
|
|
659
723
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
660
|
-
-
|
|
661
|
-
-
|
|
724
|
+
- collapseable_section_end "prepare"
|
|
725
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
662
726
|
- |
|
|
663
727
|
cat > ____envvars.yaml <<EOF
|
|
664
728
|
ENV_SHORT: |-
|
|
@@ -668,29 +732,27 @@ app1 🧪 test:
|
|
|
668
732
|
ENV_TYPE: |-
|
|
669
733
|
review
|
|
670
734
|
BUILD_INFO_BUILD_ID: |-
|
|
671
|
-
|
|
735
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
672
736
|
BUILD_INFO_BUILD_TIME: |-
|
|
673
|
-
|
|
737
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
674
738
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
739
|
+
$(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/^/ /')
|
|
740
|
+
HOSTNAME: |-
|
|
741
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
678
742
|
ROOT_URL: |-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
HOST_CANONICAL: |-
|
|
683
|
-
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
743
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
744
|
+
HOSTNAME_INTERNAL: |-
|
|
745
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
684
746
|
ROOT_URL_INTERNAL: |-
|
|
685
|
-
|
|
747
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
686
748
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
687
749
|
asdf
|
|
688
750
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
689
751
|
asia-east1
|
|
690
752
|
SECRET1: |-
|
|
691
|
-
|
|
753
|
+
$(printf %s "$CL_review_app1_SECRET1" | sed '1!s/^/ /')
|
|
692
754
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
693
|
-
|
|
755
|
+
$(printf %s "$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
694
756
|
foo: |-
|
|
695
757
|
foo-value
|
|
696
758
|
bar: |-
|
|
@@ -698,23 +760,23 @@ app1 🧪 test:
|
|
|
698
760
|
foo3: |-
|
|
699
761
|
from app3: foo-value-3
|
|
700
762
|
circle: |-
|
|
701
|
-
this is from app3 that has reference to app1:
|
|
763
|
+
this is from app3 that has reference to app1: "this is from app2: this is from app1: foo-value"
|
|
702
764
|
_ALL_ENV_VAR_KEYS: |-
|
|
703
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
765
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET1","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","bar","foo3","circle"]
|
|
704
766
|
|
|
705
767
|
EOF
|
|
706
|
-
-
|
|
707
|
-
-
|
|
768
|
+
- collapseable_section_end "writeenvvars"
|
|
769
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
708
770
|
- gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1" | awk '{print tolower($0)}') --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app1,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
709
|
-
-
|
|
710
|
-
-
|
|
771
|
+
- collapseable_section_end "deploy"
|
|
772
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
711
773
|
- gcloud run revisions list --project=asdf --region=asia-east1 --service=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1" | awk '{print tolower($0)}') --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
|
|
712
774
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })@$version --quiet --delete-tags; done
|
|
713
775
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1@$version --quiet --delete-tags; done
|
|
714
776
|
- set +e
|
|
715
777
|
- gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app1 --quiet --delete-tags
|
|
716
778
|
- set -e
|
|
717
|
-
-
|
|
779
|
+
- collapseable_section_end "cleanup"
|
|
718
780
|
- echo 'Uploading SBOM to Dependency Track'
|
|
719
781
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app1" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
720
782
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -754,9 +816,9 @@ app1 🧪 test:
|
|
|
754
816
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
755
817
|
GIT_STRATEGY: none
|
|
756
818
|
script:
|
|
757
|
-
-
|
|
819
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
758
820
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
759
|
-
-
|
|
821
|
+
- collapseable_section_end "injectvars"
|
|
760
822
|
- set +e
|
|
761
823
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
762
824
|
- gcloud run services delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1" | awk '{print tolower($0)}') --project=asdf --region=asia-east1
|
|
@@ -793,17 +855,16 @@ app1 🧪 test:
|
|
|
793
855
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
794
856
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
795
857
|
script:
|
|
796
|
-
-
|
|
858
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
797
859
|
- export ENV_SHORT="stage"
|
|
798
860
|
- export APP_DIR="app1"
|
|
799
861
|
- export ENV_TYPE="stage"
|
|
800
862
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
801
863
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
802
864
|
- 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")"
|
|
803
|
-
- export
|
|
865
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
804
866
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
805
|
-
- export
|
|
806
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
867
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
807
868
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
808
869
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
809
870
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -813,22 +874,44 @@ app1 🧪 test:
|
|
|
813
874
|
- export foo="foo-value"
|
|
814
875
|
- export bar="bar-value"
|
|
815
876
|
- 'export foo3="from app3: foo-value-3"'
|
|
816
|
-
- 'export circle="this is from app3 that has reference to app1:
|
|
817
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
818
|
-
-
|
|
877
|
+
- 'export circle="this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\""'
|
|
878
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET1\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"bar\\",\\"foo3\\",\\"circle\\"]"
|
|
879
|
+
- collapseable_section_end "injectvars"
|
|
880
|
+
- collapseable_section_start "write-dotenv-app1" "write dot env for app1"
|
|
881
|
+
- |-
|
|
882
|
+
cat <<EOF > app1/.env
|
|
883
|
+
ENV_SHORT=stage
|
|
884
|
+
APP_DIR=app1
|
|
885
|
+
ENV_TYPE=stage
|
|
886
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
887
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
888
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
889
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
890
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
|
|
891
|
+
DEPLOY_CLOUD_RUN_REGION=asia-east1
|
|
892
|
+
SECRET1=$(printf %s "$CL_stage_app1_SECRET1" | escapeForDotEnv)
|
|
893
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_app1_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
894
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
895
|
+
foo=foo-value
|
|
896
|
+
bar=bar-value
|
|
897
|
+
foo3=from app3: foo-value-3
|
|
898
|
+
circle=this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\"
|
|
899
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET1","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","bar","foo3","circle"]
|
|
900
|
+
EOF
|
|
901
|
+
- collapseable_section_end "write-dotenv-app1"
|
|
819
902
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app1/__build_info.json
|
|
820
|
-
-
|
|
903
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
821
904
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
822
905
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
823
|
-
-
|
|
906
|
+
- collapseable_section_end "nodeinstall"
|
|
824
907
|
- cd app1
|
|
825
|
-
-
|
|
908
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
826
909
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
827
910
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
828
|
-
-
|
|
829
|
-
-
|
|
911
|
+
- collapseable_section_end "nodeinstall"
|
|
912
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
830
913
|
- yarn install --immutable
|
|
831
|
-
-
|
|
914
|
+
- collapseable_section_end "yarninstall"
|
|
832
915
|
- yarn build
|
|
833
916
|
cache:
|
|
834
917
|
- key: app1-yarn
|
|
@@ -839,15 +922,13 @@ app1 🧪 test:
|
|
|
839
922
|
policy: pull-push
|
|
840
923
|
paths:
|
|
841
924
|
- app1/node_modules
|
|
842
|
-
- key: app1-next-cache
|
|
843
|
-
policy: pull-push
|
|
844
|
-
paths:
|
|
845
|
-
- app1/.next/cache
|
|
846
925
|
artifacts:
|
|
847
926
|
paths:
|
|
848
927
|
- app1/__build_info.json
|
|
849
928
|
- app1/.next
|
|
850
929
|
- app1/dist
|
|
930
|
+
exclude:
|
|
931
|
+
- app1/.env
|
|
851
932
|
expire_in: 1 day
|
|
852
933
|
when: always
|
|
853
934
|
reports: {}
|
|
@@ -873,7 +954,7 @@ app1 🧪 test:
|
|
|
873
954
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
874
955
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
875
956
|
script:
|
|
876
|
-
-
|
|
957
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
877
958
|
- export APP_DIR="app1"
|
|
878
959
|
- export DOCKER_BUILD_CONTEXT="."
|
|
879
960
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
@@ -889,20 +970,20 @@ app1 🧪 test:
|
|
|
889
970
|
COPY --chown=node:node app1/yarn.lock /app/app1/yarn.lock
|
|
890
971
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
891
972
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
892
|
-
-
|
|
973
|
+
- collapseable_section_end "injectvars"
|
|
893
974
|
- ensureNodeDockerfile
|
|
894
|
-
-
|
|
975
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
895
976
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
896
977
|
- gcloud auth configure-docker asia-east1-docker.pkg.dev
|
|
897
|
-
-
|
|
898
|
-
-
|
|
978
|
+
- collapseable_section_end "docker-login"
|
|
979
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
899
980
|
- 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
|
|
900
|
-
-
|
|
901
|
-
-
|
|
981
|
+
- collapseable_section_end "docker-build"
|
|
982
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
902
983
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
903
984
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
904
985
|
- docker push $DOCKER_CACHE_IMAGE
|
|
905
|
-
-
|
|
986
|
+
- collapseable_section_end "docker-push"
|
|
906
987
|
cache:
|
|
907
988
|
- key: app1-yarn
|
|
908
989
|
policy: pull
|
|
@@ -919,8 +1000,8 @@ app1 🧪 test:
|
|
|
919
1000
|
image: aquasec/trivy:0.38.3
|
|
920
1001
|
variables: {}
|
|
921
1002
|
script:
|
|
922
|
-
-
|
|
923
|
-
-
|
|
1003
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1004
|
+
- collapseable_section_end "injectvars"
|
|
924
1005
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app1
|
|
925
1006
|
artifacts:
|
|
926
1007
|
paths:
|
|
@@ -939,17 +1020,16 @@ app1 🧪 test:
|
|
|
939
1020
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
940
1021
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
941
1022
|
script:
|
|
942
|
-
-
|
|
1023
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
943
1024
|
- export ENV_SHORT="stage"
|
|
944
1025
|
- export APP_DIR="app1"
|
|
945
1026
|
- export ENV_TYPE="stage"
|
|
946
1027
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
947
1028
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
948
1029
|
- 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")"
|
|
949
|
-
- export
|
|
1030
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
950
1031
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
951
|
-
- export
|
|
952
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1032
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
953
1033
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
954
1034
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
955
1035
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -959,20 +1039,20 @@ app1 🧪 test:
|
|
|
959
1039
|
- export foo="foo-value"
|
|
960
1040
|
- export bar="bar-value"
|
|
961
1041
|
- 'export foo3="from app3: foo-value-3"'
|
|
962
|
-
- 'export circle="this is from app3 that has reference to app1:
|
|
963
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1042
|
+
- 'export circle="this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\""'
|
|
1043
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET1\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"bar\\",\\"foo3\\",\\"circle\\"]"
|
|
964
1044
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
965
1045
|
- export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app1"
|
|
966
1046
|
- export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1"
|
|
967
1047
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
968
1048
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
969
|
-
-
|
|
970
|
-
-
|
|
1049
|
+
- collapseable_section_end "injectvars"
|
|
1050
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
971
1051
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
972
1052
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
|
|
973
1053
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
974
|
-
-
|
|
975
|
-
-
|
|
1054
|
+
- collapseable_section_end "prepare"
|
|
1055
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
976
1056
|
- |
|
|
977
1057
|
cat > ____envvars.yaml <<EOF
|
|
978
1058
|
ENV_SHORT: |-
|
|
@@ -982,29 +1062,27 @@ app1 🧪 test:
|
|
|
982
1062
|
ENV_TYPE: |-
|
|
983
1063
|
stage
|
|
984
1064
|
BUILD_INFO_BUILD_ID: |-
|
|
985
|
-
|
|
1065
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
986
1066
|
BUILD_INFO_BUILD_TIME: |-
|
|
987
|
-
|
|
1067
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
988
1068
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
1069
|
+
$(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/^/ /')
|
|
1070
|
+
HOSTNAME: |-
|
|
1071
|
+
$(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
992
1072
|
ROOT_URL: |-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
HOST_CANONICAL: |-
|
|
997
|
-
$(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1073
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1074
|
+
HOSTNAME_INTERNAL: |-
|
|
1075
|
+
$(printf %s "$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
998
1076
|
ROOT_URL_INTERNAL: |-
|
|
999
|
-
|
|
1077
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1000
1078
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1001
1079
|
asdf
|
|
1002
1080
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1003
1081
|
asia-east1
|
|
1004
1082
|
SECRET1: |-
|
|
1005
|
-
|
|
1083
|
+
$(printf %s "$CL_stage_app1_SECRET1" | sed '1!s/^/ /')
|
|
1006
1084
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1007
|
-
|
|
1085
|
+
$(printf %s "$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1008
1086
|
foo: |-
|
|
1009
1087
|
foo-value
|
|
1010
1088
|
bar: |-
|
|
@@ -1012,20 +1090,20 @@ app1 🧪 test:
|
|
|
1012
1090
|
foo3: |-
|
|
1013
1091
|
from app3: foo-value-3
|
|
1014
1092
|
circle: |-
|
|
1015
|
-
this is from app3 that has reference to app1:
|
|
1093
|
+
this is from app3 that has reference to app1: "this is from app2: this is from app1: foo-value"
|
|
1016
1094
|
_ALL_ENV_VAR_KEYS: |-
|
|
1017
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1095
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET1","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","bar","foo3","circle"]
|
|
1018
1096
|
|
|
1019
1097
|
EOF
|
|
1020
|
-
-
|
|
1021
|
-
-
|
|
1098
|
+
- collapseable_section_end "writeenvvars"
|
|
1099
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1022
1100
|
- gcloud run deploy pan-test-app-stage-app1 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app1:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app1,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-app1 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1023
|
-
-
|
|
1024
|
-
-
|
|
1101
|
+
- collapseable_section_end "deploy"
|
|
1102
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1025
1103
|
- gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-stage-app1 --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
|
|
1026
1104
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app1@$version --quiet --delete-tags; done
|
|
1027
1105
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1@$version --quiet --delete-tags; done
|
|
1028
|
-
-
|
|
1106
|
+
- collapseable_section_end "cleanup"
|
|
1029
1107
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1030
1108
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app1" "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
1031
1109
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -1058,9 +1136,9 @@ app1 🧪 test:
|
|
|
1058
1136
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1059
1137
|
GIT_STRATEGY: none
|
|
1060
1138
|
script:
|
|
1061
|
-
-
|
|
1139
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1062
1140
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1063
|
-
-
|
|
1141
|
+
- collapseable_section_end "injectvars"
|
|
1064
1142
|
- set +e
|
|
1065
1143
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
1066
1144
|
- gcloud run services delete pan-test-app-stage-app1 --project=asdf --region=asia-east1
|
|
@@ -1094,17 +1172,16 @@ app1 🧪 test:
|
|
|
1094
1172
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1095
1173
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1096
1174
|
script:
|
|
1097
|
-
-
|
|
1175
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1098
1176
|
- export ENV_SHORT="prod"
|
|
1099
1177
|
- export APP_DIR="app1"
|
|
1100
1178
|
- export ENV_TYPE="prod"
|
|
1101
1179
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1102
1180
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1103
1181
|
- 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")"
|
|
1104
|
-
- export
|
|
1182
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1105
1183
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1106
|
-
- export
|
|
1107
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1184
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1108
1185
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1109
1186
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
1110
1187
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -1114,22 +1191,44 @@ app1 🧪 test:
|
|
|
1114
1191
|
- export foo="foo-value"
|
|
1115
1192
|
- export bar="bar-value"
|
|
1116
1193
|
- 'export foo3="from app3: foo-value-3"'
|
|
1117
|
-
- 'export circle="this is from app3 that has reference to app1:
|
|
1118
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1119
|
-
-
|
|
1194
|
+
- 'export circle="this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\""'
|
|
1195
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET1\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"bar\\",\\"foo3\\",\\"circle\\"]"
|
|
1196
|
+
- collapseable_section_end "injectvars"
|
|
1197
|
+
- collapseable_section_start "write-dotenv-app1" "write dot env for app1"
|
|
1198
|
+
- |-
|
|
1199
|
+
cat <<EOF > app1/.env
|
|
1200
|
+
ENV_SHORT=prod
|
|
1201
|
+
APP_DIR=app1
|
|
1202
|
+
ENV_TYPE=prod
|
|
1203
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1204
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1205
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1206
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1207
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
|
|
1208
|
+
DEPLOY_CLOUD_RUN_REGION=asia-east1
|
|
1209
|
+
SECRET1=$(printf %s "$CL_prod_app1_SECRET1" | escapeForDotEnv)
|
|
1210
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_app1_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1211
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1212
|
+
foo=foo-value
|
|
1213
|
+
bar=bar-value
|
|
1214
|
+
foo3=from app3: foo-value-3
|
|
1215
|
+
circle=this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\"
|
|
1216
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET1","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","bar","foo3","circle"]
|
|
1217
|
+
EOF
|
|
1218
|
+
- collapseable_section_end "write-dotenv-app1"
|
|
1120
1219
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app1/__build_info.json
|
|
1121
|
-
-
|
|
1220
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1122
1221
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1123
1222
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1124
|
-
-
|
|
1223
|
+
- collapseable_section_end "nodeinstall"
|
|
1125
1224
|
- cd app1
|
|
1126
|
-
-
|
|
1225
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1127
1226
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1128
1227
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1129
|
-
-
|
|
1130
|
-
-
|
|
1228
|
+
- collapseable_section_end "nodeinstall"
|
|
1229
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1131
1230
|
- yarn install --immutable
|
|
1132
|
-
-
|
|
1231
|
+
- collapseable_section_end "yarninstall"
|
|
1133
1232
|
- yarn build
|
|
1134
1233
|
cache:
|
|
1135
1234
|
- key: app1-yarn
|
|
@@ -1140,15 +1239,13 @@ app1 🧪 test:
|
|
|
1140
1239
|
policy: pull-push
|
|
1141
1240
|
paths:
|
|
1142
1241
|
- app1/node_modules
|
|
1143
|
-
- key: app1-next-cache
|
|
1144
|
-
policy: pull-push
|
|
1145
|
-
paths:
|
|
1146
|
-
- app1/.next/cache
|
|
1147
1242
|
artifacts:
|
|
1148
1243
|
paths:
|
|
1149
1244
|
- app1/__build_info.json
|
|
1150
1245
|
- app1/.next
|
|
1151
1246
|
- app1/dist
|
|
1247
|
+
exclude:
|
|
1248
|
+
- app1/.env
|
|
1152
1249
|
expire_in: 1 day
|
|
1153
1250
|
when: always
|
|
1154
1251
|
reports: {}
|
|
@@ -1174,7 +1271,7 @@ app1 🧪 test:
|
|
|
1174
1271
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1175
1272
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1176
1273
|
script:
|
|
1177
|
-
-
|
|
1274
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1178
1275
|
- export APP_DIR="app1"
|
|
1179
1276
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1180
1277
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
@@ -1190,20 +1287,20 @@ app1 🧪 test:
|
|
|
1190
1287
|
COPY --chown=node:node app1/yarn.lock /app/app1/yarn.lock
|
|
1191
1288
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1192
1289
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1193
|
-
-
|
|
1290
|
+
- collapseable_section_end "injectvars"
|
|
1194
1291
|
- ensureNodeDockerfile
|
|
1195
|
-
-
|
|
1292
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1196
1293
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
1197
1294
|
- gcloud auth configure-docker asia-east1-docker.pkg.dev
|
|
1198
|
-
-
|
|
1199
|
-
-
|
|
1295
|
+
- collapseable_section_end "docker-login"
|
|
1296
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1200
1297
|
- 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
|
|
1201
|
-
-
|
|
1202
|
-
-
|
|
1298
|
+
- collapseable_section_end "docker-build"
|
|
1299
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1203
1300
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1204
1301
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1205
1302
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1206
|
-
-
|
|
1303
|
+
- collapseable_section_end "docker-push"
|
|
1207
1304
|
cache:
|
|
1208
1305
|
- key: app1-yarn
|
|
1209
1306
|
policy: pull
|
|
@@ -1220,8 +1317,8 @@ app1 🧪 test:
|
|
|
1220
1317
|
image: aquasec/trivy:0.38.3
|
|
1221
1318
|
variables: {}
|
|
1222
1319
|
script:
|
|
1223
|
-
-
|
|
1224
|
-
-
|
|
1320
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1321
|
+
- collapseable_section_end "injectvars"
|
|
1225
1322
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app1
|
|
1226
1323
|
artifacts:
|
|
1227
1324
|
paths:
|
|
@@ -1240,17 +1337,16 @@ app1 🧪 test:
|
|
|
1240
1337
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1241
1338
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1242
1339
|
script:
|
|
1243
|
-
-
|
|
1340
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1244
1341
|
- export ENV_SHORT="prod"
|
|
1245
1342
|
- export APP_DIR="app1"
|
|
1246
1343
|
- export ENV_TYPE="prod"
|
|
1247
1344
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1248
1345
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1249
1346
|
- 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")"
|
|
1250
|
-
- export
|
|
1347
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1251
1348
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1252
|
-
- export
|
|
1253
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1349
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1254
1350
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1255
1351
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
1256
1352
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -1260,20 +1356,20 @@ app1 🧪 test:
|
|
|
1260
1356
|
- export foo="foo-value"
|
|
1261
1357
|
- export bar="bar-value"
|
|
1262
1358
|
- 'export foo3="from app3: foo-value-3"'
|
|
1263
|
-
- 'export circle="this is from app3 that has reference to app1:
|
|
1264
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1359
|
+
- 'export circle="this is from app3 that has reference to app1: \\"this is from app2: this is from app1: foo-value\\""'
|
|
1360
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET1\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo\\",\\"bar\\",\\"foo3\\",\\"circle\\"]"
|
|
1265
1361
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
1266
1362
|
- export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app1"
|
|
1267
1363
|
- export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1"
|
|
1268
1364
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1269
1365
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1270
|
-
-
|
|
1271
|
-
-
|
|
1366
|
+
- collapseable_section_end "injectvars"
|
|
1367
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1272
1368
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
1273
1369
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
|
|
1274
1370
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1275
|
-
-
|
|
1276
|
-
-
|
|
1371
|
+
- collapseable_section_end "prepare"
|
|
1372
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1277
1373
|
- |
|
|
1278
1374
|
cat > ____envvars.yaml <<EOF
|
|
1279
1375
|
ENV_SHORT: |-
|
|
@@ -1283,29 +1379,27 @@ app1 🧪 test:
|
|
|
1283
1379
|
ENV_TYPE: |-
|
|
1284
1380
|
prod
|
|
1285
1381
|
BUILD_INFO_BUILD_ID: |-
|
|
1286
|
-
|
|
1382
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1287
1383
|
BUILD_INFO_BUILD_TIME: |-
|
|
1288
|
-
|
|
1384
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1289
1385
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1386
|
+
$(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/^/ /')
|
|
1387
|
+
HOSTNAME: |-
|
|
1388
|
+
$(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1293
1389
|
ROOT_URL: |-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
HOST_CANONICAL: |-
|
|
1298
|
-
$(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1390
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1391
|
+
HOSTNAME_INTERNAL: |-
|
|
1392
|
+
$(printf %s "$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1299
1393
|
ROOT_URL_INTERNAL: |-
|
|
1300
|
-
|
|
1394
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1301
1395
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1302
1396
|
asdf
|
|
1303
1397
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1304
1398
|
asia-east1
|
|
1305
1399
|
SECRET1: |-
|
|
1306
|
-
|
|
1400
|
+
$(printf %s "$CL_prod_app1_SECRET1" | sed '1!s/^/ /')
|
|
1307
1401
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1308
|
-
|
|
1402
|
+
$(printf %s "$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1309
1403
|
foo: |-
|
|
1310
1404
|
foo-value
|
|
1311
1405
|
bar: |-
|
|
@@ -1313,20 +1407,20 @@ app1 🧪 test:
|
|
|
1313
1407
|
foo3: |-
|
|
1314
1408
|
from app3: foo-value-3
|
|
1315
1409
|
circle: |-
|
|
1316
|
-
this is from app3 that has reference to app1:
|
|
1410
|
+
this is from app3 that has reference to app1: "this is from app2: this is from app1: foo-value"
|
|
1317
1411
|
_ALL_ENV_VAR_KEYS: |-
|
|
1318
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1412
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET1","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo","bar","foo3","circle"]
|
|
1319
1413
|
|
|
1320
1414
|
EOF
|
|
1321
|
-
-
|
|
1322
|
-
-
|
|
1415
|
+
- collapseable_section_end "writeenvvars"
|
|
1416
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1323
1417
|
- gcloud run deploy pan-test-app-prod-app1 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app1:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app1,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-app1 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1324
|
-
-
|
|
1325
|
-
-
|
|
1418
|
+
- collapseable_section_end "deploy"
|
|
1419
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1326
1420
|
- gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-prod-app1 --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | tail -n +6 | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
|
|
1327
1421
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app1@$version --quiet --delete-tags; done
|
|
1328
1422
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app1@$version --quiet --delete-tags; done
|
|
1329
|
-
-
|
|
1423
|
+
- collapseable_section_end "cleanup"
|
|
1330
1424
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1331
1425
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app1" "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
1332
1426
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -1359,9 +1453,9 @@ app1 🧪 test:
|
|
|
1359
1453
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1360
1454
|
GIT_STRATEGY: none
|
|
1361
1455
|
script:
|
|
1362
|
-
-
|
|
1456
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1363
1457
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1364
|
-
-
|
|
1458
|
+
- collapseable_section_end "injectvars"
|
|
1365
1459
|
- set +e
|
|
1366
1460
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app1_GCLOUD_DEPLOY_credentialsKey")
|
|
1367
1461
|
- gcloud run services delete pan-test-app-prod-app1 --project=asdf --region=asia-east1
|
|
@@ -1395,9 +1489,9 @@ app2 🛡 audit:
|
|
|
1395
1489
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1396
1490
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1397
1491
|
script:
|
|
1398
|
-
-
|
|
1492
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1399
1493
|
- export APP_PATH="app2"
|
|
1400
|
-
-
|
|
1494
|
+
- collapseable_section_end "injectvars"
|
|
1401
1495
|
- cd app2
|
|
1402
1496
|
- yarn npm audit --environment production
|
|
1403
1497
|
rules:
|
|
@@ -1417,21 +1511,21 @@ app2 👮 lint:
|
|
|
1417
1511
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1418
1512
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1419
1513
|
script:
|
|
1420
|
-
-
|
|
1514
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1421
1515
|
- export APP_PATH="app2"
|
|
1422
|
-
-
|
|
1423
|
-
-
|
|
1516
|
+
- collapseable_section_end "injectvars"
|
|
1517
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1424
1518
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1425
1519
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1426
|
-
-
|
|
1520
|
+
- collapseable_section_end "nodeinstall"
|
|
1427
1521
|
- cd app2
|
|
1428
|
-
-
|
|
1522
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1429
1523
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1430
1524
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1431
|
-
-
|
|
1432
|
-
-
|
|
1525
|
+
- collapseable_section_end "nodeinstall"
|
|
1526
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1433
1527
|
- yarn install --immutable
|
|
1434
|
-
-
|
|
1528
|
+
- collapseable_section_end "yarninstall"
|
|
1435
1529
|
- yarn lint
|
|
1436
1530
|
cache:
|
|
1437
1531
|
- key: app2-yarn
|
|
@@ -1458,21 +1552,21 @@ app2 🧪 test:
|
|
|
1458
1552
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1459
1553
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1460
1554
|
script:
|
|
1461
|
-
-
|
|
1555
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1462
1556
|
- export APP_PATH="app2"
|
|
1463
|
-
-
|
|
1464
|
-
-
|
|
1557
|
+
- collapseable_section_end "injectvars"
|
|
1558
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1465
1559
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1466
1560
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1467
|
-
-
|
|
1561
|
+
- collapseable_section_end "nodeinstall"
|
|
1468
1562
|
- cd app2
|
|
1469
|
-
-
|
|
1563
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1470
1564
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1471
1565
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1472
|
-
-
|
|
1473
|
-
-
|
|
1566
|
+
- collapseable_section_end "nodeinstall"
|
|
1567
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1474
1568
|
- yarn install --immutable
|
|
1475
|
-
-
|
|
1569
|
+
- collapseable_section_end "yarninstall"
|
|
1476
1570
|
- yarn test
|
|
1477
1571
|
cache:
|
|
1478
1572
|
- key: app2-yarn
|
|
@@ -1499,17 +1593,16 @@ app2 🧪 test:
|
|
|
1499
1593
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1500
1594
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1501
1595
|
script:
|
|
1502
|
-
-
|
|
1596
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1503
1597
|
- export ENV_SHORT="dev"
|
|
1504
1598
|
- export APP_DIR="app2"
|
|
1505
1599
|
- export ENV_TYPE="dev"
|
|
1506
1600
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1507
1601
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1508
1602
|
- 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")"
|
|
1509
|
-
- export
|
|
1603
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1510
1604
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1511
|
-
- export
|
|
1512
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1605
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1513
1606
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1514
1607
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
1515
1608
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -1522,21 +1615,45 @@ app2 🧪 test:
|
|
|
1522
1615
|
- 'export selfReference="this is from self: foo-value-2"'
|
|
1523
1616
|
- 'export selfReference2="this is from self: this is from app1: foo-value"'
|
|
1524
1617
|
- export app1Api="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"
|
|
1525
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1526
|
-
-
|
|
1618
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET2\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo2\\",\\"referencingSecret\\",\\"foo1\\",\\"selfReference\\",\\"selfReference2\\",\\"app1Api\\"]"
|
|
1619
|
+
- collapseable_section_end "injectvars"
|
|
1620
|
+
- collapseable_section_start "write-dotenv-app2" "write dot env for app2"
|
|
1621
|
+
- |-
|
|
1622
|
+
cat <<EOF > app2/.env
|
|
1623
|
+
ENV_SHORT=dev
|
|
1624
|
+
APP_DIR=app2
|
|
1625
|
+
ENV_TYPE=dev
|
|
1626
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1627
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1628
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1629
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1630
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
|
|
1631
|
+
DEPLOY_CLOUD_RUN_REGION=asia-east1
|
|
1632
|
+
SECRET2=$(printf %s "$CL_dev_app2_SECRET2" | escapeForDotEnv)
|
|
1633
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_dev_app2_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1634
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1635
|
+
foo2=foo-value-2
|
|
1636
|
+
referencingSecret=$(printf %s "secret1: $CL_dev_app1_SECRET1, secret2: $CL_dev_app2_SECRET2" | escapeForDotEnv)
|
|
1637
|
+
foo1=this is from app1: foo-value
|
|
1638
|
+
selfReference=this is from self: foo-value-2
|
|
1639
|
+
selfReference2=this is from self: this is from app1: foo-value
|
|
1640
|
+
app1Api=$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | escapeForDotEnv)
|
|
1641
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET2","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo2","referencingSecret","foo1","selfReference","selfReference2","app1Api"]
|
|
1642
|
+
EOF
|
|
1643
|
+
- collapseable_section_end "write-dotenv-app2"
|
|
1527
1644
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app2/__build_info.json
|
|
1528
|
-
-
|
|
1645
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1529
1646
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1530
1647
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1531
|
-
-
|
|
1648
|
+
- collapseable_section_end "nodeinstall"
|
|
1532
1649
|
- cd app2
|
|
1533
|
-
-
|
|
1650
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1534
1651
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1535
1652
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1536
|
-
-
|
|
1537
|
-
-
|
|
1653
|
+
- collapseable_section_end "nodeinstall"
|
|
1654
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1538
1655
|
- yarn install --immutable
|
|
1539
|
-
-
|
|
1656
|
+
- collapseable_section_end "yarninstall"
|
|
1540
1657
|
- yarn build
|
|
1541
1658
|
cache:
|
|
1542
1659
|
- key: app2-yarn
|
|
@@ -1547,15 +1664,13 @@ app2 🧪 test:
|
|
|
1547
1664
|
policy: pull-push
|
|
1548
1665
|
paths:
|
|
1549
1666
|
- app2/node_modules
|
|
1550
|
-
- key: app2-next-cache
|
|
1551
|
-
policy: pull-push
|
|
1552
|
-
paths:
|
|
1553
|
-
- app2/.next/cache
|
|
1554
1667
|
artifacts:
|
|
1555
1668
|
paths:
|
|
1556
1669
|
- app2/__build_info.json
|
|
1557
1670
|
- app2/.next
|
|
1558
1671
|
- app2/dist
|
|
1672
|
+
exclude:
|
|
1673
|
+
- app2/.env
|
|
1559
1674
|
expire_in: 1 day
|
|
1560
1675
|
when: always
|
|
1561
1676
|
reports: {}
|
|
@@ -1583,7 +1698,7 @@ app2 🧪 test:
|
|
|
1583
1698
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1584
1699
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1585
1700
|
script:
|
|
1586
|
-
-
|
|
1701
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1587
1702
|
- export APP_DIR="app2"
|
|
1588
1703
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1589
1704
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
@@ -1599,20 +1714,20 @@ app2 🧪 test:
|
|
|
1599
1714
|
COPY --chown=node:node app2/yarn.lock /app/app2/yarn.lock
|
|
1600
1715
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1601
1716
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1602
|
-
-
|
|
1717
|
+
- collapseable_section_end "injectvars"
|
|
1603
1718
|
- ensureNodeDockerfile
|
|
1604
|
-
-
|
|
1719
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1605
1720
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
1606
1721
|
- gcloud auth configure-docker asia-east1-docker.pkg.dev
|
|
1607
|
-
-
|
|
1608
|
-
-
|
|
1722
|
+
- collapseable_section_end "docker-login"
|
|
1723
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1609
1724
|
- 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
|
|
1610
|
-
-
|
|
1611
|
-
-
|
|
1725
|
+
- collapseable_section_end "docker-build"
|
|
1726
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1612
1727
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1613
1728
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1614
1729
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1615
|
-
-
|
|
1730
|
+
- collapseable_section_end "docker-push"
|
|
1616
1731
|
cache:
|
|
1617
1732
|
- key: app2-yarn
|
|
1618
1733
|
policy: pull
|
|
@@ -1631,8 +1746,8 @@ app2 🧪 test:
|
|
|
1631
1746
|
image: aquasec/trivy:0.38.3
|
|
1632
1747
|
variables: {}
|
|
1633
1748
|
script:
|
|
1634
|
-
-
|
|
1635
|
-
-
|
|
1749
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1750
|
+
- collapseable_section_end "injectvars"
|
|
1636
1751
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app2
|
|
1637
1752
|
artifacts:
|
|
1638
1753
|
paths:
|
|
@@ -1653,17 +1768,16 @@ app2 🧪 test:
|
|
|
1653
1768
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1654
1769
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1655
1770
|
script:
|
|
1656
|
-
-
|
|
1771
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1657
1772
|
- export ENV_SHORT="dev"
|
|
1658
1773
|
- export APP_DIR="app2"
|
|
1659
1774
|
- export ENV_TYPE="dev"
|
|
1660
1775
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1661
1776
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1662
1777
|
- 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")"
|
|
1663
|
-
- export
|
|
1778
|
+
- export HOSTNAME="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1664
1779
|
- export ROOT_URL="https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1665
|
-
- export
|
|
1666
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1780
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1667
1781
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1668
1782
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
1669
1783
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -1676,19 +1790,19 @@ app2 🧪 test:
|
|
|
1676
1790
|
- 'export selfReference="this is from self: foo-value-2"'
|
|
1677
1791
|
- 'export selfReference2="this is from self: this is from app1: foo-value"'
|
|
1678
1792
|
- export app1Api="https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"
|
|
1679
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1793
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET2\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo2\\",\\"referencingSecret\\",\\"foo1\\",\\"selfReference\\",\\"selfReference2\\",\\"app1Api\\"]"
|
|
1680
1794
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
1681
1795
|
- export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app2"
|
|
1682
1796
|
- export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2"
|
|
1683
1797
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
1684
1798
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1685
|
-
-
|
|
1686
|
-
-
|
|
1799
|
+
- collapseable_section_end "injectvars"
|
|
1800
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
1687
1801
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
1688
1802
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
|
|
1689
1803
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
1690
|
-
-
|
|
1691
|
-
-
|
|
1804
|
+
- collapseable_section_end "prepare"
|
|
1805
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
1692
1806
|
- |
|
|
1693
1807
|
cat > ____envvars.yaml <<EOF
|
|
1694
1808
|
ENV_SHORT: |-
|
|
@@ -1698,33 +1812,31 @@ app2 🧪 test:
|
|
|
1698
1812
|
ENV_TYPE: |-
|
|
1699
1813
|
dev
|
|
1700
1814
|
BUILD_INFO_BUILD_ID: |-
|
|
1701
|
-
|
|
1815
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
1702
1816
|
BUILD_INFO_BUILD_TIME: |-
|
|
1703
|
-
|
|
1817
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
1704
1818
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1819
|
+
$(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/^/ /')
|
|
1820
|
+
HOSTNAME: |-
|
|
1821
|
+
$(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1708
1822
|
ROOT_URL: |-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
HOST_CANONICAL: |-
|
|
1713
|
-
$(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
1823
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1824
|
+
HOSTNAME_INTERNAL: |-
|
|
1825
|
+
$(printf %s "$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1714
1826
|
ROOT_URL_INTERNAL: |-
|
|
1715
|
-
|
|
1827
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
1716
1828
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
1717
1829
|
asdf
|
|
1718
1830
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
1719
1831
|
asia-east1
|
|
1720
1832
|
SECRET2: |-
|
|
1721
|
-
|
|
1833
|
+
$(printf %s "$CL_dev_app2_SECRET2" | sed '1!s/^/ /')
|
|
1722
1834
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
1723
|
-
|
|
1835
|
+
$(printf %s "$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
1724
1836
|
foo2: |-
|
|
1725
1837
|
foo-value-2
|
|
1726
1838
|
referencingSecret: |-
|
|
1727
|
-
|
|
1839
|
+
secret1: $(printf %s "$CL_dev_app1_SECRET1" | sed '1!s/^/ /'), secret2: $(printf %s "$CL_dev_app2_SECRET2" | sed '1!s/^/ /')
|
|
1728
1840
|
foo1: |-
|
|
1729
1841
|
this is from app1: foo-value
|
|
1730
1842
|
selfReference: |-
|
|
@@ -1732,20 +1844,20 @@ app2 🧪 test:
|
|
|
1732
1844
|
selfReference2: |-
|
|
1733
1845
|
this is from self: this is from app1: foo-value
|
|
1734
1846
|
app1Api: |-
|
|
1735
|
-
|
|
1847
|
+
$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')/graphql
|
|
1736
1848
|
_ALL_ENV_VAR_KEYS: |-
|
|
1737
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
1849
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET2","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo2","referencingSecret","foo1","selfReference","selfReference2","app1Api"]
|
|
1738
1850
|
|
|
1739
1851
|
EOF
|
|
1740
|
-
-
|
|
1741
|
-
-
|
|
1852
|
+
- collapseable_section_end "writeenvvars"
|
|
1853
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
1742
1854
|
- gcloud run deploy pan-test-app-dev-app2 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app2:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app2,app-name=test-app,env-type=dev,env-name=dev,build-type=node,cloud-run-service-name=pan-test-app-dev-app2 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
1743
|
-
-
|
|
1744
|
-
-
|
|
1855
|
+
- collapseable_section_end "deploy"
|
|
1856
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
1745
1857
|
- gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-dev-app2 --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
|
|
1746
1858
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/dev/app2@$version --quiet --delete-tags; done
|
|
1747
1859
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2@$version --quiet --delete-tags; done
|
|
1748
|
-
-
|
|
1860
|
+
- collapseable_section_end "cleanup"
|
|
1749
1861
|
- echo 'Uploading SBOM to Dependency Track'
|
|
1750
1862
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app2" "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
1751
1863
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -1787,9 +1899,9 @@ app2 🧪 test:
|
|
|
1787
1899
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1788
1900
|
GIT_STRATEGY: none
|
|
1789
1901
|
script:
|
|
1790
|
-
-
|
|
1902
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1791
1903
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
1792
|
-
-
|
|
1904
|
+
- collapseable_section_end "injectvars"
|
|
1793
1905
|
- set +e
|
|
1794
1906
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_dev_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
1795
1907
|
- gcloud run services delete pan-test-app-dev-app2 --project=asdf --region=asia-east1
|
|
@@ -1825,17 +1937,16 @@ app2 🧪 test:
|
|
|
1825
1937
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1826
1938
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
1827
1939
|
script:
|
|
1828
|
-
-
|
|
1940
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1829
1941
|
- export ENV_SHORT="review"
|
|
1830
1942
|
- export APP_DIR="app2"
|
|
1831
1943
|
- export ENV_TYPE="review"
|
|
1832
1944
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1833
1945
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1834
1946
|
- 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")"
|
|
1835
|
-
- export
|
|
1947
|
+
- export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1836
1948
|
- export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1837
|
-
- export
|
|
1838
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1949
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1839
1950
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1840
1951
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
1841
1952
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -1848,21 +1959,45 @@ app2 🧪 test:
|
|
|
1848
1959
|
- 'export selfReference="this is from self: foo-value-2"'
|
|
1849
1960
|
- 'export selfReference2="this is from self: this is from app1: foo-value"'
|
|
1850
1961
|
- export app1Api="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"
|
|
1851
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
1852
|
-
-
|
|
1962
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET2\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo2\\",\\"referencingSecret\\",\\"foo1\\",\\"selfReference\\",\\"selfReference2\\",\\"app1Api\\"]"
|
|
1963
|
+
- collapseable_section_end "injectvars"
|
|
1964
|
+
- collapseable_section_start "write-dotenv-app2" "write dot env for app2"
|
|
1965
|
+
- |-
|
|
1966
|
+
cat <<EOF > app2/.env
|
|
1967
|
+
ENV_SHORT=review
|
|
1968
|
+
APP_DIR=app2
|
|
1969
|
+
ENV_TYPE=review
|
|
1970
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1971
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1972
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1973
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
1974
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
|
|
1975
|
+
DEPLOY_CLOUD_RUN_REGION=asia-east1
|
|
1976
|
+
SECRET2=$(printf %s "$CL_review_app2_SECRET2" | escapeForDotEnv)
|
|
1977
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_review_app2_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
1978
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
1979
|
+
foo2=foo-value-2
|
|
1980
|
+
referencingSecret=$(printf %s "secret1: $CL_review_app1_SECRET1, secret2: $CL_review_app2_SECRET2" | escapeForDotEnv)
|
|
1981
|
+
foo1=this is from app1: foo-value
|
|
1982
|
+
selfReference=this is from self: foo-value-2
|
|
1983
|
+
selfReference2=this is from self: this is from app1: foo-value
|
|
1984
|
+
app1Api=$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | escapeForDotEnv)
|
|
1985
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET2","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo2","referencingSecret","foo1","selfReference","selfReference2","app1Api"]
|
|
1986
|
+
EOF
|
|
1987
|
+
- collapseable_section_end "write-dotenv-app2"
|
|
1853
1988
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app2/__build_info.json
|
|
1854
|
-
-
|
|
1989
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1855
1990
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1856
1991
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1857
|
-
-
|
|
1992
|
+
- collapseable_section_end "nodeinstall"
|
|
1858
1993
|
- cd app2
|
|
1859
|
-
-
|
|
1994
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
1860
1995
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
1861
1996
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
1862
|
-
-
|
|
1863
|
-
-
|
|
1997
|
+
- collapseable_section_end "nodeinstall"
|
|
1998
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
1864
1999
|
- yarn install --immutable
|
|
1865
|
-
-
|
|
2000
|
+
- collapseable_section_end "yarninstall"
|
|
1866
2001
|
- yarn build
|
|
1867
2002
|
cache:
|
|
1868
2003
|
- key: app2-yarn
|
|
@@ -1873,15 +2008,13 @@ app2 🧪 test:
|
|
|
1873
2008
|
policy: pull-push
|
|
1874
2009
|
paths:
|
|
1875
2010
|
- app2/node_modules
|
|
1876
|
-
- key: app2-next-cache
|
|
1877
|
-
policy: pull-push
|
|
1878
|
-
paths:
|
|
1879
|
-
- app2/.next/cache
|
|
1880
2011
|
artifacts:
|
|
1881
2012
|
paths:
|
|
1882
2013
|
- app2/__build_info.json
|
|
1883
2014
|
- app2/.next
|
|
1884
2015
|
- app2/dist
|
|
2016
|
+
exclude:
|
|
2017
|
+
- app2/.env
|
|
1885
2018
|
expire_in: 1 day
|
|
1886
2019
|
when: always
|
|
1887
2020
|
reports: {}
|
|
@@ -1907,7 +2040,7 @@ app2 🧪 test:
|
|
|
1907
2040
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
1908
2041
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
1909
2042
|
script:
|
|
1910
|
-
-
|
|
2043
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1911
2044
|
- export APP_DIR="app2"
|
|
1912
2045
|
- export DOCKER_BUILD_CONTEXT="."
|
|
1913
2046
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
@@ -1923,20 +2056,20 @@ app2 🧪 test:
|
|
|
1923
2056
|
COPY --chown=node:node app2/yarn.lock /app/app2/yarn.lock
|
|
1924
2057
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
1925
2058
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
1926
|
-
-
|
|
2059
|
+
- collapseable_section_end "injectvars"
|
|
1927
2060
|
- ensureNodeDockerfile
|
|
1928
|
-
-
|
|
2061
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
1929
2062
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
1930
2063
|
- gcloud auth configure-docker asia-east1-docker.pkg.dev
|
|
1931
|
-
-
|
|
1932
|
-
-
|
|
2064
|
+
- collapseable_section_end "docker-login"
|
|
2065
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
1933
2066
|
- 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
|
|
1934
|
-
-
|
|
1935
|
-
-
|
|
2067
|
+
- collapseable_section_end "docker-build"
|
|
2068
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
1936
2069
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
1937
2070
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
1938
2071
|
- docker push $DOCKER_CACHE_IMAGE
|
|
1939
|
-
-
|
|
2072
|
+
- collapseable_section_end "docker-push"
|
|
1940
2073
|
cache:
|
|
1941
2074
|
- key: app2-yarn
|
|
1942
2075
|
policy: pull
|
|
@@ -1953,8 +2086,8 @@ app2 🧪 test:
|
|
|
1953
2086
|
image: aquasec/trivy:0.38.3
|
|
1954
2087
|
variables: {}
|
|
1955
2088
|
script:
|
|
1956
|
-
-
|
|
1957
|
-
-
|
|
2089
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2090
|
+
- collapseable_section_end "injectvars"
|
|
1958
2091
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app2
|
|
1959
2092
|
artifacts:
|
|
1960
2093
|
paths:
|
|
@@ -1973,17 +2106,16 @@ app2 🧪 test:
|
|
|
1973
2106
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
1974
2107
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
1975
2108
|
script:
|
|
1976
|
-
-
|
|
2109
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
1977
2110
|
- export ENV_SHORT="review"
|
|
1978
2111
|
- export APP_DIR="app2"
|
|
1979
2112
|
- export ENV_TYPE="review"
|
|
1980
2113
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
1981
2114
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
1982
2115
|
- 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")"
|
|
1983
|
-
- export
|
|
2116
|
+
- export HOSTNAME="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1984
2117
|
- export ROOT_URL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1985
|
-
- export
|
|
1986
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2118
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1987
2119
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
1988
2120
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
1989
2121
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -1996,19 +2128,19 @@ app2 🧪 test:
|
|
|
1996
2128
|
- 'export selfReference="this is from self: foo-value-2"'
|
|
1997
2129
|
- 'export selfReference2="this is from self: this is from app1: foo-value"'
|
|
1998
2130
|
- export app1Api="https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"
|
|
1999
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2131
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET2\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo2\\",\\"referencingSecret\\",\\"foo1\\",\\"selfReference\\",\\"selfReference2\\",\\"app1Api\\"]"
|
|
2000
2132
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
2001
2133
|
- export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })"
|
|
2002
2134
|
- export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2"
|
|
2003
2135
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2004
2136
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2005
|
-
-
|
|
2006
|
-
-
|
|
2137
|
+
- collapseable_section_end "injectvars"
|
|
2138
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
2007
2139
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
2008
2140
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
|
|
2009
2141
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
2010
|
-
-
|
|
2011
|
-
-
|
|
2142
|
+
- collapseable_section_end "prepare"
|
|
2143
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
2012
2144
|
- |
|
|
2013
2145
|
cat > ____envvars.yaml <<EOF
|
|
2014
2146
|
ENV_SHORT: |-
|
|
@@ -2018,33 +2150,31 @@ app2 🧪 test:
|
|
|
2018
2150
|
ENV_TYPE: |-
|
|
2019
2151
|
review
|
|
2020
2152
|
BUILD_INFO_BUILD_ID: |-
|
|
2021
|
-
|
|
2153
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
2022
2154
|
BUILD_INFO_BUILD_TIME: |-
|
|
2023
|
-
|
|
2155
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
2024
2156
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2157
|
+
$(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/^/ /')
|
|
2158
|
+
HOSTNAME: |-
|
|
2159
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2028
2160
|
ROOT_URL: |-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
HOST_CANONICAL: |-
|
|
2033
|
-
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2161
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2162
|
+
HOSTNAME_INTERNAL: |-
|
|
2163
|
+
$(printf %s "$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2034
2164
|
ROOT_URL_INTERNAL: |-
|
|
2035
|
-
|
|
2165
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2036
2166
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
2037
2167
|
asdf
|
|
2038
2168
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2039
2169
|
asia-east1
|
|
2040
2170
|
SECRET2: |-
|
|
2041
|
-
|
|
2171
|
+
$(printf %s "$CL_review_app2_SECRET2" | sed '1!s/^/ /')
|
|
2042
2172
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2043
|
-
|
|
2173
|
+
$(printf %s "$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
2044
2174
|
foo2: |-
|
|
2045
2175
|
foo-value-2
|
|
2046
2176
|
referencingSecret: |-
|
|
2047
|
-
|
|
2177
|
+
secret1: $(printf %s "$CL_review_app1_SECRET1" | sed '1!s/^/ /'), secret2: $(printf %s "$CL_review_app2_SECRET2" | sed '1!s/^/ /')
|
|
2048
2178
|
foo1: |-
|
|
2049
2179
|
this is from app1: foo-value
|
|
2050
2180
|
selfReference: |-
|
|
@@ -2052,23 +2182,23 @@ app2 🧪 test:
|
|
|
2052
2182
|
selfReference2: |-
|
|
2053
2183
|
this is from self: this is from app1: foo-value
|
|
2054
2184
|
app1Api: |-
|
|
2055
|
-
|
|
2185
|
+
$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')/graphql
|
|
2056
2186
|
_ALL_ENV_VAR_KEYS: |-
|
|
2057
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
2187
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET2","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo2","referencingSecret","foo1","selfReference","selfReference2","app1Api"]
|
|
2058
2188
|
|
|
2059
2189
|
EOF
|
|
2060
|
-
-
|
|
2061
|
-
-
|
|
2190
|
+
- collapseable_section_end "writeenvvars"
|
|
2191
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
2062
2192
|
- gcloud run deploy $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2" | awk '{print tolower($0)}') --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }):$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app2,app-name=test-app,env-type=review,env-name=review,build-type=node,cloud-run-service-name=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2" | awk '{print tolower($0)}') --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
2063
|
-
-
|
|
2064
|
-
-
|
|
2193
|
+
- collapseable_section_end "deploy"
|
|
2194
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
2065
2195
|
- gcloud run revisions list --project=asdf --region=asia-east1 --service=$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2" | awk '{print tolower($0)}') --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
|
|
2066
2196
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }) --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2/$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })@$version --quiet --delete-tags; done
|
|
2067
2197
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2@$version --quiet --delete-tags; done
|
|
2068
2198
|
- set +e
|
|
2069
2199
|
- gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/review/app2 --quiet --delete-tags
|
|
2070
2200
|
- set -e
|
|
2071
|
-
-
|
|
2201
|
+
- collapseable_section_end "cleanup"
|
|
2072
2202
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2073
2203
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app2" "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
2074
2204
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -2108,9 +2238,9 @@ app2 🧪 test:
|
|
|
2108
2238
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2109
2239
|
GIT_STRATEGY: none
|
|
2110
2240
|
script:
|
|
2111
|
-
-
|
|
2241
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2112
2242
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2113
|
-
-
|
|
2243
|
+
- collapseable_section_end "injectvars"
|
|
2114
2244
|
- set +e
|
|
2115
2245
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_review_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
2116
2246
|
- gcloud run services delete $(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2" | awk '{print tolower($0)}') --project=asdf --region=asia-east1
|
|
@@ -2147,17 +2277,16 @@ app2 🧪 test:
|
|
|
2147
2277
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2148
2278
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
2149
2279
|
script:
|
|
2150
|
-
-
|
|
2280
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2151
2281
|
- export ENV_SHORT="stage"
|
|
2152
2282
|
- export APP_DIR="app2"
|
|
2153
2283
|
- export ENV_TYPE="stage"
|
|
2154
2284
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2155
2285
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2156
2286
|
- 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")"
|
|
2157
|
-
- export
|
|
2287
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2158
2288
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2159
|
-
- export
|
|
2160
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2289
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2161
2290
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2162
2291
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
2163
2292
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -2170,21 +2299,45 @@ app2 🧪 test:
|
|
|
2170
2299
|
- 'export selfReference="this is from self: foo-value-2"'
|
|
2171
2300
|
- 'export selfReference2="this is from self: this is from app1: foo-value"'
|
|
2172
2301
|
- export app1Api="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"
|
|
2173
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2174
|
-
-
|
|
2302
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET2\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo2\\",\\"referencingSecret\\",\\"foo1\\",\\"selfReference\\",\\"selfReference2\\",\\"app1Api\\"]"
|
|
2303
|
+
- collapseable_section_end "injectvars"
|
|
2304
|
+
- collapseable_section_start "write-dotenv-app2" "write dot env for app2"
|
|
2305
|
+
- |-
|
|
2306
|
+
cat <<EOF > app2/.env
|
|
2307
|
+
ENV_SHORT=stage
|
|
2308
|
+
APP_DIR=app2
|
|
2309
|
+
ENV_TYPE=stage
|
|
2310
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2311
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2312
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2313
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2314
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
|
|
2315
|
+
DEPLOY_CLOUD_RUN_REGION=asia-east1
|
|
2316
|
+
SECRET2=$(printf %s "$CL_stage_app2_SECRET2" | escapeForDotEnv)
|
|
2317
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_stage_app2_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
2318
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
2319
|
+
foo2=foo-value-2
|
|
2320
|
+
referencingSecret=$(printf %s "secret1: $CL_stage_app1_SECRET1, secret2: $CL_stage_app2_SECRET2" | escapeForDotEnv)
|
|
2321
|
+
foo1=this is from app1: foo-value
|
|
2322
|
+
selfReference=this is from self: foo-value-2
|
|
2323
|
+
selfReference2=this is from self: this is from app1: foo-value
|
|
2324
|
+
app1Api=$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | escapeForDotEnv)
|
|
2325
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET2","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo2","referencingSecret","foo1","selfReference","selfReference2","app1Api"]
|
|
2326
|
+
EOF
|
|
2327
|
+
- collapseable_section_end "write-dotenv-app2"
|
|
2175
2328
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app2/__build_info.json
|
|
2176
|
-
-
|
|
2329
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2177
2330
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2178
2331
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2179
|
-
-
|
|
2332
|
+
- collapseable_section_end "nodeinstall"
|
|
2180
2333
|
- cd app2
|
|
2181
|
-
-
|
|
2334
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2182
2335
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2183
2336
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2184
|
-
-
|
|
2185
|
-
-
|
|
2337
|
+
- collapseable_section_end "nodeinstall"
|
|
2338
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
2186
2339
|
- yarn install --immutable
|
|
2187
|
-
-
|
|
2340
|
+
- collapseable_section_end "yarninstall"
|
|
2188
2341
|
- yarn build
|
|
2189
2342
|
cache:
|
|
2190
2343
|
- key: app2-yarn
|
|
@@ -2195,15 +2348,13 @@ app2 🧪 test:
|
|
|
2195
2348
|
policy: pull-push
|
|
2196
2349
|
paths:
|
|
2197
2350
|
- app2/node_modules
|
|
2198
|
-
- key: app2-next-cache
|
|
2199
|
-
policy: pull-push
|
|
2200
|
-
paths:
|
|
2201
|
-
- app2/.next/cache
|
|
2202
2351
|
artifacts:
|
|
2203
2352
|
paths:
|
|
2204
2353
|
- app2/__build_info.json
|
|
2205
2354
|
- app2/.next
|
|
2206
2355
|
- app2/dist
|
|
2356
|
+
exclude:
|
|
2357
|
+
- app2/.env
|
|
2207
2358
|
expire_in: 1 day
|
|
2208
2359
|
when: always
|
|
2209
2360
|
reports: {}
|
|
@@ -2229,7 +2380,7 @@ app2 🧪 test:
|
|
|
2229
2380
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2230
2381
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
2231
2382
|
script:
|
|
2232
|
-
-
|
|
2383
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2233
2384
|
- export APP_DIR="app2"
|
|
2234
2385
|
- export DOCKER_BUILD_CONTEXT="."
|
|
2235
2386
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
@@ -2245,20 +2396,20 @@ app2 🧪 test:
|
|
|
2245
2396
|
COPY --chown=node:node app2/yarn.lock /app/app2/yarn.lock
|
|
2246
2397
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
2247
2398
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
2248
|
-
-
|
|
2399
|
+
- collapseable_section_end "injectvars"
|
|
2249
2400
|
- ensureNodeDockerfile
|
|
2250
|
-
-
|
|
2401
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
2251
2402
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
2252
2403
|
- gcloud auth configure-docker asia-east1-docker.pkg.dev
|
|
2253
|
-
-
|
|
2254
|
-
-
|
|
2404
|
+
- collapseable_section_end "docker-login"
|
|
2405
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
2255
2406
|
- 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
|
|
2256
|
-
-
|
|
2257
|
-
-
|
|
2407
|
+
- collapseable_section_end "docker-build"
|
|
2408
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
2258
2409
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
2259
2410
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
2260
2411
|
- docker push $DOCKER_CACHE_IMAGE
|
|
2261
|
-
-
|
|
2412
|
+
- collapseable_section_end "docker-push"
|
|
2262
2413
|
cache:
|
|
2263
2414
|
- key: app2-yarn
|
|
2264
2415
|
policy: pull
|
|
@@ -2275,8 +2426,8 @@ app2 🧪 test:
|
|
|
2275
2426
|
image: aquasec/trivy:0.38.3
|
|
2276
2427
|
variables: {}
|
|
2277
2428
|
script:
|
|
2278
|
-
-
|
|
2279
|
-
-
|
|
2429
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2430
|
+
- collapseable_section_end "injectvars"
|
|
2280
2431
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app2
|
|
2281
2432
|
artifacts:
|
|
2282
2433
|
paths:
|
|
@@ -2295,17 +2446,16 @@ app2 🧪 test:
|
|
|
2295
2446
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
2296
2447
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2297
2448
|
script:
|
|
2298
|
-
-
|
|
2449
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2299
2450
|
- export ENV_SHORT="stage"
|
|
2300
2451
|
- export APP_DIR="app2"
|
|
2301
2452
|
- export ENV_TYPE="stage"
|
|
2302
2453
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2303
2454
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2304
2455
|
- 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")"
|
|
2305
|
-
- export
|
|
2456
|
+
- export HOSTNAME="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2306
2457
|
- export ROOT_URL="https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2307
|
-
- export
|
|
2308
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2458
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2309
2459
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2310
2460
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
2311
2461
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -2318,19 +2468,19 @@ app2 🧪 test:
|
|
|
2318
2468
|
- 'export selfReference="this is from self: foo-value-2"'
|
|
2319
2469
|
- 'export selfReference2="this is from self: this is from app1: foo-value"'
|
|
2320
2470
|
- export app1Api="https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"
|
|
2321
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2471
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET2\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo2\\",\\"referencingSecret\\",\\"foo1\\",\\"selfReference\\",\\"selfReference2\\",\\"app1Api\\"]"
|
|
2322
2472
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
2323
2473
|
- export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app2"
|
|
2324
2474
|
- export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2"
|
|
2325
2475
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2326
2476
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2327
|
-
-
|
|
2328
|
-
-
|
|
2477
|
+
- collapseable_section_end "injectvars"
|
|
2478
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
2329
2479
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
2330
2480
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
|
|
2331
2481
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
2332
|
-
-
|
|
2333
|
-
-
|
|
2482
|
+
- collapseable_section_end "prepare"
|
|
2483
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
2334
2484
|
- |
|
|
2335
2485
|
cat > ____envvars.yaml <<EOF
|
|
2336
2486
|
ENV_SHORT: |-
|
|
@@ -2340,33 +2490,31 @@ app2 🧪 test:
|
|
|
2340
2490
|
ENV_TYPE: |-
|
|
2341
2491
|
stage
|
|
2342
2492
|
BUILD_INFO_BUILD_ID: |-
|
|
2343
|
-
|
|
2493
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
2344
2494
|
BUILD_INFO_BUILD_TIME: |-
|
|
2345
|
-
|
|
2495
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
2346
2496
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2497
|
+
$(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/^/ /')
|
|
2498
|
+
HOSTNAME: |-
|
|
2499
|
+
$(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2350
2500
|
ROOT_URL: |-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
HOST_CANONICAL: |-
|
|
2355
|
-
$(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2501
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2502
|
+
HOSTNAME_INTERNAL: |-
|
|
2503
|
+
$(printf %s "$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2356
2504
|
ROOT_URL_INTERNAL: |-
|
|
2357
|
-
|
|
2505
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2358
2506
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
2359
2507
|
asdf
|
|
2360
2508
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2361
2509
|
asia-east1
|
|
2362
2510
|
SECRET2: |-
|
|
2363
|
-
|
|
2511
|
+
$(printf %s "$CL_stage_app2_SECRET2" | sed '1!s/^/ /')
|
|
2364
2512
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2365
|
-
|
|
2513
|
+
$(printf %s "$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
2366
2514
|
foo2: |-
|
|
2367
2515
|
foo-value-2
|
|
2368
2516
|
referencingSecret: |-
|
|
2369
|
-
|
|
2517
|
+
secret1: $(printf %s "$CL_stage_app1_SECRET1" | sed '1!s/^/ /'), secret2: $(printf %s "$CL_stage_app2_SECRET2" | sed '1!s/^/ /')
|
|
2370
2518
|
foo1: |-
|
|
2371
2519
|
this is from app1: foo-value
|
|
2372
2520
|
selfReference: |-
|
|
@@ -2374,20 +2522,20 @@ app2 🧪 test:
|
|
|
2374
2522
|
selfReference2: |-
|
|
2375
2523
|
this is from self: this is from app1: foo-value
|
|
2376
2524
|
app1Api: |-
|
|
2377
|
-
|
|
2525
|
+
$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')/graphql
|
|
2378
2526
|
_ALL_ENV_VAR_KEYS: |-
|
|
2379
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
2527
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET2","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo2","referencingSecret","foo1","selfReference","selfReference2","app1Api"]
|
|
2380
2528
|
|
|
2381
2529
|
EOF
|
|
2382
|
-
-
|
|
2383
|
-
-
|
|
2530
|
+
- collapseable_section_end "writeenvvars"
|
|
2531
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
2384
2532
|
- gcloud run deploy pan-test-app-stage-app2 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app2:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app2,app-name=test-app,env-type=stage,env-name=stage,build-type=node,cloud-run-service-name=pan-test-app-stage-app2 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
2385
|
-
-
|
|
2386
|
-
-
|
|
2533
|
+
- collapseable_section_end "deploy"
|
|
2534
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
2387
2535
|
- gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-stage-app2 --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
|
|
2388
2536
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/stage/app2@$version --quiet --delete-tags; done
|
|
2389
2537
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2@$version --quiet --delete-tags; done
|
|
2390
|
-
-
|
|
2538
|
+
- collapseable_section_end "cleanup"
|
|
2391
2539
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2392
2540
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app2" "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
2393
2541
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -2420,9 +2568,9 @@ app2 🧪 test:
|
|
|
2420
2568
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2421
2569
|
GIT_STRATEGY: none
|
|
2422
2570
|
script:
|
|
2423
|
-
-
|
|
2571
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2424
2572
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2425
|
-
-
|
|
2573
|
+
- collapseable_section_end "injectvars"
|
|
2426
2574
|
- set +e
|
|
2427
2575
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_stage_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
2428
2576
|
- gcloud run services delete pan-test-app-stage-app2 --project=asdf --region=asia-east1
|
|
@@ -2456,17 +2604,16 @@ app2 🧪 test:
|
|
|
2456
2604
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2457
2605
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
2458
2606
|
script:
|
|
2459
|
-
-
|
|
2607
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2460
2608
|
- export ENV_SHORT="prod"
|
|
2461
2609
|
- export APP_DIR="app2"
|
|
2462
2610
|
- export ENV_TYPE="prod"
|
|
2463
2611
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2464
2612
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2465
2613
|
- 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")"
|
|
2466
|
-
- export
|
|
2614
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2467
2615
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2468
|
-
- export
|
|
2469
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2616
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2470
2617
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2471
2618
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
2472
2619
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -2479,21 +2626,45 @@ app2 🧪 test:
|
|
|
2479
2626
|
- 'export selfReference="this is from self: foo-value-2"'
|
|
2480
2627
|
- 'export selfReference2="this is from self: this is from app1: foo-value"'
|
|
2481
2628
|
- export app1Api="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"
|
|
2482
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2483
|
-
-
|
|
2629
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET2\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo2\\",\\"referencingSecret\\",\\"foo1\\",\\"selfReference\\",\\"selfReference2\\",\\"app1Api\\"]"
|
|
2630
|
+
- collapseable_section_end "injectvars"
|
|
2631
|
+
- collapseable_section_start "write-dotenv-app2" "write dot env for app2"
|
|
2632
|
+
- |-
|
|
2633
|
+
cat <<EOF > app2/.env
|
|
2634
|
+
ENV_SHORT=prod
|
|
2635
|
+
APP_DIR=app2
|
|
2636
|
+
ENV_TYPE=prod
|
|
2637
|
+
HOSTNAME=$(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2638
|
+
ROOT_URL=$(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2639
|
+
HOSTNAME_INTERNAL=$(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2640
|
+
ROOT_URL_INTERNAL=$(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | escapeForDotEnv)
|
|
2641
|
+
DEPLOY_CLOUD_RUN_PROJECT_ID=asdf
|
|
2642
|
+
DEPLOY_CLOUD_RUN_REGION=asia-east1
|
|
2643
|
+
SECRET2=$(printf %s "$CL_prod_app2_SECRET2" | escapeForDotEnv)
|
|
2644
|
+
GCLOUD_DEPLOY_credentialsKey=$(printf %s "$CL_prod_app2_GCLOUD_DEPLOY_credentialsKey" | escapeForDotEnv)
|
|
2645
|
+
GCLOUD_RUN_canonicalHostSuffix=$(printf %s "$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | escapeForDotEnv)
|
|
2646
|
+
foo2=foo-value-2
|
|
2647
|
+
referencingSecret=$(printf %s "secret1: $CL_prod_app1_SECRET1, secret2: $CL_prod_app2_SECRET2" | escapeForDotEnv)
|
|
2648
|
+
foo1=this is from app1: foo-value
|
|
2649
|
+
selfReference=this is from self: foo-value-2
|
|
2650
|
+
selfReference2=this is from self: this is from app1: foo-value
|
|
2651
|
+
app1Api=$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql" | escapeForDotEnv)
|
|
2652
|
+
_ALL_ENV_VAR_KEYS=["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET2","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo2","referencingSecret","foo1","selfReference","selfReference2","app1Api"]
|
|
2653
|
+
EOF
|
|
2654
|
+
- collapseable_section_end "write-dotenv-app2"
|
|
2484
2655
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > app2/__build_info.json
|
|
2485
|
-
-
|
|
2656
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2486
2657
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2487
2658
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2488
|
-
-
|
|
2659
|
+
- collapseable_section_end "nodeinstall"
|
|
2489
2660
|
- cd app2
|
|
2490
|
-
-
|
|
2661
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2491
2662
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2492
2663
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2493
|
-
-
|
|
2494
|
-
-
|
|
2664
|
+
- collapseable_section_end "nodeinstall"
|
|
2665
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
2495
2666
|
- yarn install --immutable
|
|
2496
|
-
-
|
|
2667
|
+
- collapseable_section_end "yarninstall"
|
|
2497
2668
|
- yarn build
|
|
2498
2669
|
cache:
|
|
2499
2670
|
- key: app2-yarn
|
|
@@ -2504,15 +2675,13 @@ app2 🧪 test:
|
|
|
2504
2675
|
policy: pull-push
|
|
2505
2676
|
paths:
|
|
2506
2677
|
- app2/node_modules
|
|
2507
|
-
- key: app2-next-cache
|
|
2508
|
-
policy: pull-push
|
|
2509
|
-
paths:
|
|
2510
|
-
- app2/.next/cache
|
|
2511
2678
|
artifacts:
|
|
2512
2679
|
paths:
|
|
2513
2680
|
- app2/__build_info.json
|
|
2514
2681
|
- app2/.next
|
|
2515
2682
|
- app2/dist
|
|
2683
|
+
exclude:
|
|
2684
|
+
- app2/.env
|
|
2516
2685
|
expire_in: 1 day
|
|
2517
2686
|
when: always
|
|
2518
2687
|
reports: {}
|
|
@@ -2538,7 +2707,7 @@ app2 🧪 test:
|
|
|
2538
2707
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2539
2708
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
2540
2709
|
script:
|
|
2541
|
-
-
|
|
2710
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2542
2711
|
- export APP_DIR="app2"
|
|
2543
2712
|
- export DOCKER_BUILD_CONTEXT="."
|
|
2544
2713
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
@@ -2554,20 +2723,20 @@ app2 🧪 test:
|
|
|
2554
2723
|
COPY --chown=node:node app2/yarn.lock /app/app2/yarn.lock
|
|
2555
2724
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
2556
2725
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
2557
|
-
-
|
|
2726
|
+
- collapseable_section_end "injectvars"
|
|
2558
2727
|
- ensureNodeDockerfile
|
|
2559
|
-
-
|
|
2728
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
2560
2729
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
2561
2730
|
- gcloud auth configure-docker asia-east1-docker.pkg.dev
|
|
2562
|
-
-
|
|
2563
|
-
-
|
|
2731
|
+
- collapseable_section_end "docker-login"
|
|
2732
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
2564
2733
|
- 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
|
|
2565
|
-
-
|
|
2566
|
-
-
|
|
2734
|
+
- collapseable_section_end "docker-build"
|
|
2735
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
2567
2736
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
2568
2737
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
2569
2738
|
- docker push $DOCKER_CACHE_IMAGE
|
|
2570
|
-
-
|
|
2739
|
+
- collapseable_section_end "docker-push"
|
|
2571
2740
|
cache:
|
|
2572
2741
|
- key: app2-yarn
|
|
2573
2742
|
policy: pull
|
|
@@ -2584,8 +2753,8 @@ app2 🧪 test:
|
|
|
2584
2753
|
image: aquasec/trivy:0.38.3
|
|
2585
2754
|
variables: {}
|
|
2586
2755
|
script:
|
|
2587
|
-
-
|
|
2588
|
-
-
|
|
2756
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2757
|
+
- collapseable_section_end "injectvars"
|
|
2589
2758
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" app2
|
|
2590
2759
|
artifacts:
|
|
2591
2760
|
paths:
|
|
@@ -2604,17 +2773,16 @@ app2 🧪 test:
|
|
|
2604
2773
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
2605
2774
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2606
2775
|
script:
|
|
2607
|
-
-
|
|
2776
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2608
2777
|
- export ENV_SHORT="prod"
|
|
2609
2778
|
- export APP_DIR="app2"
|
|
2610
2779
|
- export ENV_TYPE="prod"
|
|
2611
2780
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2612
2781
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2613
2782
|
- 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")"
|
|
2614
|
-
- export
|
|
2783
|
+
- export HOSTNAME="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2615
2784
|
- export ROOT_URL="https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2616
|
-
- export
|
|
2617
|
-
- export HOST_CANONICAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2785
|
+
- export HOSTNAME_INTERNAL="$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2618
2786
|
- export ROOT_URL_INTERNAL="https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')"
|
|
2619
2787
|
- export DEPLOY_CLOUD_RUN_PROJECT_ID="asdf"
|
|
2620
2788
|
- export DEPLOY_CLOUD_RUN_REGION="asia-east1"
|
|
@@ -2627,19 +2795,19 @@ app2 🧪 test:
|
|
|
2627
2795
|
- 'export selfReference="this is from self: foo-value-2"'
|
|
2628
2796
|
- 'export selfReference2="this is from self: this is from app1: foo-value"'
|
|
2629
2797
|
- export app1Api="https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')/graphql"
|
|
2630
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2798
|
+
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOSTNAME\\",\\"ROOT_URL\\",\\"HOSTNAME_INTERNAL\\",\\"ROOT_URL_INTERNAL\\",\\"DEPLOY_CLOUD_RUN_PROJECT_ID\\",\\"DEPLOY_CLOUD_RUN_REGION\\",\\"SECRET2\\",\\"GCLOUD_DEPLOY_credentialsKey\\",\\"GCLOUD_RUN_canonicalHostSuffix\\",\\"foo2\\",\\"referencingSecret\\",\\"foo1\\",\\"selfReference\\",\\"selfReference2\\",\\"app1Api\\"]"
|
|
2631
2799
|
- export DOCKER_REGISTRY="asia-east1-docker.pkg.dev"
|
|
2632
2800
|
- export DOCKER_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app2"
|
|
2633
2801
|
- export DOCKER_CACHE_IMAGE="asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2"
|
|
2634
2802
|
- export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"
|
|
2635
2803
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2636
|
-
-
|
|
2637
|
-
-
|
|
2804
|
+
- collapseable_section_end "injectvars"
|
|
2805
|
+
- collapseable_section_start "prepare" "Prepare..."
|
|
2638
2806
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
2639
2807
|
- export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe asdf --format="value(projectNumber)")
|
|
2640
2808
|
- 'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"'
|
|
2641
|
-
-
|
|
2642
|
-
-
|
|
2809
|
+
- collapseable_section_end "prepare"
|
|
2810
|
+
- collapseable_section_start "writeenvvars" "Write env vars to file"
|
|
2643
2811
|
- |
|
|
2644
2812
|
cat > ____envvars.yaml <<EOF
|
|
2645
2813
|
ENV_SHORT: |-
|
|
@@ -2649,33 +2817,31 @@ app2 🧪 test:
|
|
|
2649
2817
|
ENV_TYPE: |-
|
|
2650
2818
|
prod
|
|
2651
2819
|
BUILD_INFO_BUILD_ID: |-
|
|
2652
|
-
|
|
2820
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
2653
2821
|
BUILD_INFO_BUILD_TIME: |-
|
|
2654
|
-
|
|
2822
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
2655
2823
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2824
|
+
$(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/^/ /')
|
|
2825
|
+
HOSTNAME: |-
|
|
2826
|
+
$(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2659
2827
|
ROOT_URL: |-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
HOST_CANONICAL: |-
|
|
2664
|
-
$(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed 's/^/ /')
|
|
2828
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2829
|
+
HOSTNAME_INTERNAL: |-
|
|
2830
|
+
$(printf %s "$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2665
2831
|
ROOT_URL_INTERNAL: |-
|
|
2666
|
-
|
|
2832
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')
|
|
2667
2833
|
DEPLOY_CLOUD_RUN_PROJECT_ID: |-
|
|
2668
2834
|
asdf
|
|
2669
2835
|
DEPLOY_CLOUD_RUN_REGION: |-
|
|
2670
2836
|
asia-east1
|
|
2671
2837
|
SECRET2: |-
|
|
2672
|
-
|
|
2838
|
+
$(printf %s "$CL_prod_app2_SECRET2" | sed '1!s/^/ /')
|
|
2673
2839
|
GCLOUD_RUN_canonicalHostSuffix: |-
|
|
2674
|
-
|
|
2840
|
+
$(printf %s "$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | sed '1!s/^/ /')
|
|
2675
2841
|
foo2: |-
|
|
2676
2842
|
foo-value-2
|
|
2677
2843
|
referencingSecret: |-
|
|
2678
|
-
|
|
2844
|
+
secret1: $(printf %s "$CL_prod_app1_SECRET1" | sed '1!s/^/ /'), secret2: $(printf %s "$CL_prod_app2_SECRET2" | sed '1!s/^/ /')
|
|
2679
2845
|
foo1: |-
|
|
2680
2846
|
this is from app1: foo-value
|
|
2681
2847
|
selfReference: |-
|
|
@@ -2683,20 +2849,20 @@ app2 🧪 test:
|
|
|
2683
2849
|
selfReference2: |-
|
|
2684
2850
|
this is from self: this is from app1: foo-value
|
|
2685
2851
|
app1Api: |-
|
|
2686
|
-
|
|
2852
|
+
$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')/graphql
|
|
2687
2853
|
_ALL_ENV_VAR_KEYS: |-
|
|
2688
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
2854
|
+
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOSTNAME","ROOT_URL","HOSTNAME_INTERNAL","ROOT_URL_INTERNAL","DEPLOY_CLOUD_RUN_PROJECT_ID","DEPLOY_CLOUD_RUN_REGION","SECRET2","GCLOUD_DEPLOY_credentialsKey","GCLOUD_RUN_canonicalHostSuffix","foo2","referencingSecret","foo1","selfReference","selfReference2","app1Api"]
|
|
2689
2855
|
|
|
2690
2856
|
EOF
|
|
2691
|
-
-
|
|
2692
|
-
-
|
|
2857
|
+
- collapseable_section_end "writeenvvars"
|
|
2858
|
+
- collapseable_section_start "deploy" "Deploy to cloud run"
|
|
2693
2859
|
- gcloud run deploy pan-test-app-prod-app2 --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app2:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app2,app-name=test-app,env-type=prod,env-name=prod,build-type=node,cloud-run-service-name=pan-test-app-prod-app2 --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --ingress=all --cpu-boost
|
|
2694
|
-
-
|
|
2695
|
-
-
|
|
2860
|
+
- collapseable_section_end "deploy"
|
|
2861
|
+
- collapseable_section_start "cleanup" "Cleanup"
|
|
2696
2862
|
- gcloud run revisions list --project=asdf --region=asia-east1 --service=pan-test-app-prod-app2 --limit=unlimited --sort-by=metadata.creationTimestamp --format="value(name)" --filter='(status.conditions.status=False OR status.conditions.status=Unknown)' | tail -n +6 | while read -r revisionname; do gcloud run revisions delete --project=asdf --region=asia-east1 --quiet $revisionname ; done
|
|
2697
2863
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +7 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/prod/app2@$version --quiet --delete-tags; done
|
|
2698
2864
|
- gcloud artifacts docker images list asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2 --sort-by=~CREATE_TIME --format="value(version)" | tail -n +2 | while read -r version; do gcloud artifacts docker images delete asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/caches/app2@$version --quiet --delete-tags; done
|
|
2699
|
-
-
|
|
2865
|
+
- collapseable_section_end "cleanup"
|
|
2700
2866
|
- echo 'Uploading SBOM to Dependency Track'
|
|
2701
2867
|
- /dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app2" "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" "__sbom.json" vex.json || true
|
|
2702
2868
|
- echo "CL_GITLAB_ENVIRONMENT_URL=https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" >> gitlab_environment.env
|
|
@@ -2729,9 +2895,9 @@ app2 🧪 test:
|
|
|
2729
2895
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
2730
2896
|
GIT_STRATEGY: none
|
|
2731
2897
|
script:
|
|
2732
|
-
-
|
|
2898
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2733
2899
|
- export CLOUDSDK_CORE_DISABLE_PROMPTS="1"
|
|
2734
|
-
-
|
|
2900
|
+
- collapseable_section_end "injectvars"
|
|
2735
2901
|
- set +e
|
|
2736
2902
|
- gcloud auth activate-service-account --key-file=<(echo "$CL_prod_app2_GCLOUD_DEPLOY_credentialsKey")
|
|
2737
2903
|
- gcloud run services delete pan-test-app-prod-app2 --project=asdf --region=asia-east1
|
|
@@ -2765,9 +2931,9 @@ app3 🛡 audit:
|
|
|
2765
2931
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2766
2932
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
2767
2933
|
script:
|
|
2768
|
-
-
|
|
2934
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2769
2935
|
- export APP_PATH="kube"
|
|
2770
|
-
-
|
|
2936
|
+
- collapseable_section_end "injectvars"
|
|
2771
2937
|
- cd kube
|
|
2772
2938
|
- yarn npm audit --environment production
|
|
2773
2939
|
rules:
|
|
@@ -2787,21 +2953,21 @@ app3 👮 lint:
|
|
|
2787
2953
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2788
2954
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
2789
2955
|
script:
|
|
2790
|
-
-
|
|
2956
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2791
2957
|
- export APP_PATH="kube"
|
|
2792
|
-
-
|
|
2793
|
-
-
|
|
2958
|
+
- collapseable_section_end "injectvars"
|
|
2959
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2794
2960
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2795
2961
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2796
|
-
-
|
|
2962
|
+
- collapseable_section_end "nodeinstall"
|
|
2797
2963
|
- cd kube
|
|
2798
|
-
-
|
|
2964
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2799
2965
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2800
2966
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2801
|
-
-
|
|
2802
|
-
-
|
|
2967
|
+
- collapseable_section_end "nodeinstall"
|
|
2968
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
2803
2969
|
- yarn install --immutable
|
|
2804
|
-
-
|
|
2970
|
+
- collapseable_section_end "yarninstall"
|
|
2805
2971
|
- yarn lint
|
|
2806
2972
|
cache:
|
|
2807
2973
|
- key: kube-yarn
|
|
@@ -2828,21 +2994,21 @@ app3 🧪 test:
|
|
|
2828
2994
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2829
2995
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
2830
2996
|
script:
|
|
2831
|
-
-
|
|
2997
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2832
2998
|
- export APP_PATH="kube"
|
|
2833
|
-
-
|
|
2834
|
-
-
|
|
2999
|
+
- collapseable_section_end "injectvars"
|
|
3000
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2835
3001
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2836
3002
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2837
|
-
-
|
|
3003
|
+
- collapseable_section_end "nodeinstall"
|
|
2838
3004
|
- cd kube
|
|
2839
|
-
-
|
|
3005
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2840
3006
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2841
3007
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2842
|
-
-
|
|
2843
|
-
-
|
|
3008
|
+
- collapseable_section_end "nodeinstall"
|
|
3009
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
2844
3010
|
- yarn install --immutable
|
|
2845
|
-
-
|
|
3011
|
+
- collapseable_section_end "yarninstall"
|
|
2846
3012
|
- yarn test
|
|
2847
3013
|
cache:
|
|
2848
3014
|
- key: kube-yarn
|
|
@@ -2869,17 +3035,16 @@ app3 🧪 test:
|
|
|
2869
3035
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2870
3036
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
2871
3037
|
script:
|
|
2872
|
-
-
|
|
3038
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2873
3039
|
- export ENV_SHORT="dev"
|
|
2874
3040
|
- export APP_DIR="kube"
|
|
2875
3041
|
- export ENV_TYPE="dev"
|
|
2876
3042
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
2877
3043
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
2878
3044
|
- 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")"
|
|
2879
|
-
- export
|
|
3045
|
+
- export HOSTNAME="app3.dev.test-app.pan.panter.cloud"
|
|
2880
3046
|
- export ROOT_URL="https://app3.dev.test-app.pan.panter.cloud"
|
|
2881
|
-
- export
|
|
2882
|
-
- export HOST_CANONICAL="app3.dev.test-app.pan.panter.cloud"
|
|
3047
|
+
- export HOSTNAME_INTERNAL="app3.dev.test-app.pan.panter.cloud"
|
|
2883
3048
|
- export ROOT_URL_INTERNAL="https://app3.dev.test-app.pan.panter.cloud"
|
|
2884
3049
|
- export KUBE_NAMESPACE="pan-test-app-dev"
|
|
2885
3050
|
- export KUBE_APP_NAME="app3"
|
|
@@ -2889,21 +3054,42 @@ app3 🧪 test:
|
|
|
2889
3054
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
2890
3055
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_dev_app1_SECRET1, secret2: $CL_dev_app2_SECRET2"'
|
|
2891
3056
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.dev.test-app.pan.panter.cloud\\"}]"'
|
|
2892
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
2893
|
-
-
|
|
3057
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3058
|
+
- collapseable_section_end "injectvars"
|
|
3059
|
+
- collapseable_section_start "write-dotenv-app3" "write dot env for app3"
|
|
3060
|
+
- |-
|
|
3061
|
+
cat <<EOF > kube/.env
|
|
3062
|
+
ENV_SHORT=dev
|
|
3063
|
+
APP_DIR=kube
|
|
3064
|
+
ENV_TYPE=dev
|
|
3065
|
+
HOSTNAME=app3.dev.test-app.pan.panter.cloud
|
|
3066
|
+
ROOT_URL=https://app3.dev.test-app.pan.panter.cloud
|
|
3067
|
+
HOSTNAME_INTERNAL=app3.dev.test-app.pan.panter.cloud
|
|
3068
|
+
ROOT_URL_INTERNAL=https://app3.dev.test-app.pan.panter.cloud
|
|
3069
|
+
KUBE_NAMESPACE=pan-test-app-dev
|
|
3070
|
+
KUBE_APP_NAME=app3
|
|
3071
|
+
KUBE_APP_NAME_PREFIX=
|
|
3072
|
+
foo3=foo-value-3
|
|
3073
|
+
foo2=this is from app2: foo-value-2
|
|
3074
|
+
transitive=this is from app2: this is from app1: foo-value
|
|
3075
|
+
transitiveWithSecret=$(printf %s "this is from app2: secret1: $CL_dev_app1_SECRET1, secret2: $CL_dev_app2_SECRET2" | escapeForDotEnv)
|
|
3076
|
+
someJson=$(printf %s "[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.dev.test-app.pan.panter.cloud\\"}]" | escapeForDotEnv)
|
|
3077
|
+
_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","foo3","foo2","transitive","transitiveWithSecret","someJson"]
|
|
3078
|
+
EOF
|
|
3079
|
+
- collapseable_section_end "write-dotenv-app3"
|
|
2894
3080
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > kube/__build_info.json
|
|
2895
|
-
-
|
|
3081
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2896
3082
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2897
3083
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2898
|
-
-
|
|
3084
|
+
- collapseable_section_end "nodeinstall"
|
|
2899
3085
|
- cd kube
|
|
2900
|
-
-
|
|
3086
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
2901
3087
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
2902
3088
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
2903
|
-
-
|
|
2904
|
-
-
|
|
3089
|
+
- collapseable_section_end "nodeinstall"
|
|
3090
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
2905
3091
|
- yarn install --immutable
|
|
2906
|
-
-
|
|
3092
|
+
- collapseable_section_end "yarninstall"
|
|
2907
3093
|
- yarn build
|
|
2908
3094
|
cache:
|
|
2909
3095
|
- key: kube-yarn
|
|
@@ -2914,15 +3100,13 @@ app3 🧪 test:
|
|
|
2914
3100
|
policy: pull-push
|
|
2915
3101
|
paths:
|
|
2916
3102
|
- kube/node_modules
|
|
2917
|
-
- key: app3-next-cache
|
|
2918
|
-
policy: pull-push
|
|
2919
|
-
paths:
|
|
2920
|
-
- kube/.next/cache
|
|
2921
3103
|
artifacts:
|
|
2922
3104
|
paths:
|
|
2923
3105
|
- kube/__build_info.json
|
|
2924
3106
|
- kube/.next
|
|
2925
3107
|
- kube/dist
|
|
3108
|
+
exclude:
|
|
3109
|
+
- kube/.env
|
|
2926
3110
|
expire_in: 1 day
|
|
2927
3111
|
when: always
|
|
2928
3112
|
reports: {}
|
|
@@ -2950,7 +3134,7 @@ app3 🧪 test:
|
|
|
2950
3134
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
2951
3135
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
2952
3136
|
script:
|
|
2953
|
-
-
|
|
3137
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
2954
3138
|
- export APP_DIR="kube"
|
|
2955
3139
|
- export DOCKER_BUILD_CONTEXT="."
|
|
2956
3140
|
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
@@ -2967,19 +3151,19 @@ app3 🧪 test:
|
|
|
2967
3151
|
COPY --chown=node:node kube/yarn.lock /app/kube/yarn.lock
|
|
2968
3152
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
2969
3153
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
2970
|
-
-
|
|
3154
|
+
- collapseable_section_end "injectvars"
|
|
2971
3155
|
- ensureNodeDockerfile
|
|
2972
|
-
-
|
|
3156
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
2973
3157
|
- docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
|
|
2974
|
-
-
|
|
2975
|
-
-
|
|
3158
|
+
- collapseable_section_end "docker-login"
|
|
3159
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
2976
3160
|
- 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
|
|
2977
|
-
-
|
|
2978
|
-
-
|
|
3161
|
+
- collapseable_section_end "docker-build"
|
|
3162
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
2979
3163
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
2980
3164
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
2981
3165
|
- docker push $DOCKER_CACHE_IMAGE
|
|
2982
|
-
-
|
|
3166
|
+
- collapseable_section_end "docker-push"
|
|
2983
3167
|
cache:
|
|
2984
3168
|
- key: kube-yarn
|
|
2985
3169
|
policy: pull
|
|
@@ -2998,8 +3182,8 @@ app3 🧪 test:
|
|
|
2998
3182
|
image: aquasec/trivy:0.38.3
|
|
2999
3183
|
variables: {}
|
|
3000
3184
|
script:
|
|
3001
|
-
-
|
|
3002
|
-
-
|
|
3185
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3186
|
+
- collapseable_section_end "injectvars"
|
|
3003
3187
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" kube
|
|
3004
3188
|
artifacts:
|
|
3005
3189
|
paths:
|
|
@@ -3020,17 +3204,16 @@ app3 🧪 test:
|
|
|
3020
3204
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
3021
3205
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
3022
3206
|
script:
|
|
3023
|
-
-
|
|
3207
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3024
3208
|
- export ENV_SHORT="dev"
|
|
3025
3209
|
- export APP_DIR="kube"
|
|
3026
3210
|
- export ENV_TYPE="dev"
|
|
3027
3211
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3028
3212
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3029
3213
|
- 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")"
|
|
3030
|
-
- export
|
|
3214
|
+
- export HOSTNAME="app3.dev.test-app.pan.panter.cloud"
|
|
3031
3215
|
- export ROOT_URL="https://app3.dev.test-app.pan.panter.cloud"
|
|
3032
|
-
- export
|
|
3033
|
-
- export HOST_CANONICAL="app3.dev.test-app.pan.panter.cloud"
|
|
3216
|
+
- export HOSTNAME_INTERNAL="app3.dev.test-app.pan.panter.cloud"
|
|
3034
3217
|
- export ROOT_URL_INTERNAL="https://app3.dev.test-app.pan.panter.cloud"
|
|
3035
3218
|
- export KUBE_NAMESPACE="pan-test-app-dev"
|
|
3036
3219
|
- export KUBE_APP_NAME="app3"
|
|
@@ -3040,7 +3223,7 @@ app3 🧪 test:
|
|
|
3040
3223
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3041
3224
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_dev_app1_SECRET1, secret2: $CL_dev_app2_SECRET2"'
|
|
3042
3225
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.dev.test-app.pan.panter.cloud\\"}]"'
|
|
3043
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
3226
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3044
3227
|
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
3045
3228
|
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app3"
|
|
3046
3229
|
- export DOCKER_IMAGE_NAME="dev/app3"
|
|
@@ -3052,21 +3235,20 @@ app3 🧪 test:
|
|
|
3052
3235
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
3053
3236
|
- export HELM_ARGS=""
|
|
3054
3237
|
- export COMPONENT_NAME="app3"
|
|
3055
|
-
-
|
|
3056
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
3238
|
+
- collapseable_section_end "injectvars"
|
|
3057
3239
|
- kubectl config set-cluster "kube-pan-test-app-dev-app3" --server="$CL_dev_app3_KUBE_URL" --certificate-authority <(echo $CL_dev_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
3058
3240
|
- kubectl config set-credentials "kube-pan-test-app-dev-app3" --token="$CL_dev_app3_KUBE_TOKEN"
|
|
3059
3241
|
- kubectl config set-context "kube-pan-test-app-dev-app3" --cluster="kube-pan-test-app-dev-app3" --user="kube-pan-test-app-dev-app3" --namespace="pan-test-app-dev"
|
|
3060
3242
|
- kubectl config use-context "kube-pan-test-app-dev-app3"
|
|
3061
|
-
-
|
|
3243
|
+
- collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
|
|
3062
3244
|
- |
|
|
3063
3245
|
cat > __all_values.yml <<EOF
|
|
3064
3246
|
env:
|
|
3065
3247
|
secret:
|
|
3066
3248
|
transitiveWithSecret: |-
|
|
3067
|
-
|
|
3249
|
+
this is from app2: secret1: $(printf %s "$CL_dev_app1_SECRET1" | sed '1!s/^/ /'), secret2: $(printf %s "$CL_dev_app2_SECRET2" | sed '1!s/^/ /')
|
|
3068
3250
|
someJson: |-
|
|
3069
|
-
|
|
3251
|
+
[{"name": "app1", "url": "$(printf %s "https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"}, {"name": "app2", "url": "$(printf %s "https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"}, {"name": "app3", "url": "https://app3.dev.test-app.pan.panter.cloud"}]
|
|
3070
3252
|
public:
|
|
3071
3253
|
ENV_SHORT: |-
|
|
3072
3254
|
dev
|
|
@@ -3075,18 +3257,16 @@ app3 🧪 test:
|
|
|
3075
3257
|
ENV_TYPE: |-
|
|
3076
3258
|
dev
|
|
3077
3259
|
BUILD_INFO_BUILD_ID: |-
|
|
3078
|
-
|
|
3260
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
3079
3261
|
BUILD_INFO_BUILD_TIME: |-
|
|
3080
|
-
|
|
3262
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
3081
3263
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
3082
|
-
|
|
3083
|
-
|
|
3264
|
+
$(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/^/ /')
|
|
3265
|
+
HOSTNAME: |-
|
|
3084
3266
|
app3.dev.test-app.pan.panter.cloud
|
|
3085
3267
|
ROOT_URL: |-
|
|
3086
3268
|
https://app3.dev.test-app.pan.panter.cloud
|
|
3087
|
-
|
|
3088
|
-
app3.dev.test-app.pan.panter.cloud
|
|
3089
|
-
HOST_CANONICAL: |-
|
|
3269
|
+
HOSTNAME_INTERNAL: |-
|
|
3090
3270
|
app3.dev.test-app.pan.panter.cloud
|
|
3091
3271
|
ROOT_URL_INTERNAL: |-
|
|
3092
3272
|
https://app3.dev.test-app.pan.panter.cloud
|
|
@@ -3102,7 +3282,7 @@ app3 🧪 test:
|
|
|
3102
3282
|
transitive: |-
|
|
3103
3283
|
this is from app2: this is from app1: foo-value
|
|
3104
3284
|
_ALL_ENV_VAR_KEYS: |-
|
|
3105
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
3285
|
+
["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","foo3","foo2","transitive","transitiveWithSecret","someJson"]
|
|
3106
3286
|
application:
|
|
3107
3287
|
host: |-
|
|
3108
3288
|
app3.dev.test-app.pan.panter.cloud
|
|
@@ -3122,7 +3302,7 @@ app3 🧪 test:
|
|
|
3122
3302
|
__health
|
|
3123
3303
|
|
|
3124
3304
|
EOF
|
|
3125
|
-
-
|
|
3305
|
+
- collapseable_section_end "writeallvalues"
|
|
3126
3306
|
- kubernetesCreateSecret
|
|
3127
3307
|
- kubernetesDeploy
|
|
3128
3308
|
- echo 'Uploading SBOM to Dependency Track'
|
|
@@ -3167,17 +3347,16 @@ app3 🧪 test:
|
|
|
3167
3347
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
3168
3348
|
GIT_STRATEGY: none
|
|
3169
3349
|
script:
|
|
3170
|
-
-
|
|
3350
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3171
3351
|
- export ENV_SHORT="dev"
|
|
3172
3352
|
- export APP_DIR="kube"
|
|
3173
3353
|
- export ENV_TYPE="dev"
|
|
3174
3354
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3175
3355
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3176
3356
|
- 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")"
|
|
3177
|
-
- export
|
|
3357
|
+
- export HOSTNAME="app3.dev.test-app.pan.panter.cloud"
|
|
3178
3358
|
- export ROOT_URL="https://app3.dev.test-app.pan.panter.cloud"
|
|
3179
|
-
- export
|
|
3180
|
-
- export HOST_CANONICAL="app3.dev.test-app.pan.panter.cloud"
|
|
3359
|
+
- export HOSTNAME_INTERNAL="app3.dev.test-app.pan.panter.cloud"
|
|
3181
3360
|
- export ROOT_URL_INTERNAL="https://app3.dev.test-app.pan.panter.cloud"
|
|
3182
3361
|
- export KUBE_NAMESPACE="pan-test-app-dev"
|
|
3183
3362
|
- export KUBE_APP_NAME="app3"
|
|
@@ -3187,15 +3366,14 @@ app3 🧪 test:
|
|
|
3187
3366
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3188
3367
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_dev_app1_SECRET1, secret2: $CL_dev_app2_SECRET2"'
|
|
3189
3368
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.dev.test-app.pan.panter.cloud\\"}]"'
|
|
3190
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
3369
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3191
3370
|
- export RELEASE_NAME="pan-test-app-dev-app3"
|
|
3192
3371
|
- export HELM_EXPERIMENTAL_OCI="1"
|
|
3193
3372
|
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app3"
|
|
3194
3373
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
3195
3374
|
- export HELM_ARGS=""
|
|
3196
3375
|
- export COMPONENT_NAME="app3"
|
|
3197
|
-
-
|
|
3198
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
3376
|
+
- collapseable_section_end "injectvars"
|
|
3199
3377
|
- kubectl config set-cluster "kube-pan-test-app-dev-app3" --server="$CL_dev_app3_KUBE_URL" --certificate-authority <(echo $CL_dev_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
3200
3378
|
- kubectl config set-credentials "kube-pan-test-app-dev-app3" --token="$CL_dev_app3_KUBE_TOKEN"
|
|
3201
3379
|
- kubectl config set-context "kube-pan-test-app-dev-app3" --cluster="kube-pan-test-app-dev-app3" --user="kube-pan-test-app-dev-app3" --namespace="pan-test-app-dev"
|
|
@@ -3231,17 +3409,16 @@ app3 🧪 test:
|
|
|
3231
3409
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
3232
3410
|
GIT_STRATEGY: none
|
|
3233
3411
|
script:
|
|
3234
|
-
-
|
|
3412
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3235
3413
|
- export ENV_SHORT="dev"
|
|
3236
3414
|
- export APP_DIR="kube"
|
|
3237
3415
|
- export ENV_TYPE="dev"
|
|
3238
3416
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3239
3417
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3240
3418
|
- 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")"
|
|
3241
|
-
- export
|
|
3419
|
+
- export HOSTNAME="app3.dev.test-app.pan.panter.cloud"
|
|
3242
3420
|
- export ROOT_URL="https://app3.dev.test-app.pan.panter.cloud"
|
|
3243
|
-
- export
|
|
3244
|
-
- export HOST_CANONICAL="app3.dev.test-app.pan.panter.cloud"
|
|
3421
|
+
- export HOSTNAME_INTERNAL="app3.dev.test-app.pan.panter.cloud"
|
|
3245
3422
|
- export ROOT_URL_INTERNAL="https://app3.dev.test-app.pan.panter.cloud"
|
|
3246
3423
|
- export KUBE_NAMESPACE="pan-test-app-dev"
|
|
3247
3424
|
- export KUBE_APP_NAME="app3"
|
|
@@ -3251,15 +3428,14 @@ app3 🧪 test:
|
|
|
3251
3428
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3252
3429
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_dev_app1_SECRET1, secret2: $CL_dev_app2_SECRET2"'
|
|
3253
3430
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app1-$CL_dev_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-dev-app2-$CL_dev_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.dev.test-app.pan.panter.cloud\\"}]"'
|
|
3254
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
3431
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3255
3432
|
- export RELEASE_NAME="pan-test-app-dev-app3"
|
|
3256
3433
|
- export HELM_EXPERIMENTAL_OCI="1"
|
|
3257
3434
|
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app3"
|
|
3258
3435
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
3259
3436
|
- export HELM_ARGS=""
|
|
3260
3437
|
- export COMPONENT_NAME="app3"
|
|
3261
|
-
-
|
|
3262
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
3438
|
+
- collapseable_section_end "injectvars"
|
|
3263
3439
|
- kubectl config set-cluster "kube-pan-test-app-dev-app3" --server="$CL_dev_app3_KUBE_URL" --certificate-authority <(echo $CL_dev_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
3264
3440
|
- kubectl config set-credentials "kube-pan-test-app-dev-app3" --token="$CL_dev_app3_KUBE_TOKEN"
|
|
3265
3441
|
- kubectl config set-context "kube-pan-test-app-dev-app3" --cluster="kube-pan-test-app-dev-app3" --user="kube-pan-test-app-dev-app3" --namespace="pan-test-app-dev"
|
|
@@ -3290,17 +3466,16 @@ app3 🧪 test:
|
|
|
3290
3466
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
3291
3467
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
3292
3468
|
script:
|
|
3293
|
-
-
|
|
3469
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3294
3470
|
- export ENV_SHORT="review"
|
|
3295
3471
|
- export APP_DIR="kube"
|
|
3296
3472
|
- export ENV_TYPE="review"
|
|
3297
3473
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3298
3474
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3299
3475
|
- 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")"
|
|
3300
|
-
- export
|
|
3476
|
+
- export HOSTNAME="app3.$([ -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"
|
|
3301
3477
|
- export ROOT_URL="https://app3.$([ -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"
|
|
3302
|
-
- export
|
|
3303
|
-
- export HOST_CANONICAL="app3.$([ -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"
|
|
3478
|
+
- export HOSTNAME_INTERNAL="app3.$([ -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"
|
|
3304
3479
|
- export ROOT_URL_INTERNAL="https://app3.$([ -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"
|
|
3305
3480
|
- export KUBE_NAMESPACE="pan-test-app-review"
|
|
3306
3481
|
- 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"; })-app3"
|
|
@@ -3310,21 +3485,42 @@ app3 🧪 test:
|
|
|
3310
3485
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3311
3486
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_review_app1_SECRET1, secret2: $CL_review_app2_SECRET2"'
|
|
3312
3487
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.$([ -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\\"}]"'
|
|
3313
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
3314
|
-
-
|
|
3488
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3489
|
+
- collapseable_section_end "injectvars"
|
|
3490
|
+
- collapseable_section_start "write-dotenv-app3" "write dot env for app3"
|
|
3491
|
+
- |-
|
|
3492
|
+
cat <<EOF > kube/.env
|
|
3493
|
+
ENV_SHORT=review
|
|
3494
|
+
APP_DIR=kube
|
|
3495
|
+
ENV_TYPE=review
|
|
3496
|
+
HOSTNAME=$(printf %s "app3.$([ -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)
|
|
3497
|
+
ROOT_URL=$(printf %s "https://app3.$([ -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)
|
|
3498
|
+
HOSTNAME_INTERNAL=$(printf %s "app3.$([ -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)
|
|
3499
|
+
ROOT_URL_INTERNAL=$(printf %s "https://app3.$([ -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)
|
|
3500
|
+
KUBE_NAMESPACE=pan-test-app-review
|
|
3501
|
+
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"; })-app3" | escapeForDotEnv)
|
|
3502
|
+
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)
|
|
3503
|
+
foo3=foo-value-3
|
|
3504
|
+
foo2=this is from app2: foo-value-2
|
|
3505
|
+
transitive=this is from app2: this is from app1: foo-value
|
|
3506
|
+
transitiveWithSecret=$(printf %s "this is from app2: secret1: $CL_review_app1_SECRET1, secret2: $CL_review_app2_SECRET2" | escapeForDotEnv)
|
|
3507
|
+
someJson=$(printf %s "[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.$([ -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)
|
|
3508
|
+
_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","foo3","foo2","transitive","transitiveWithSecret","someJson"]
|
|
3509
|
+
EOF
|
|
3510
|
+
- collapseable_section_end "write-dotenv-app3"
|
|
3315
3511
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > kube/__build_info.json
|
|
3316
|
-
-
|
|
3512
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
3317
3513
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
3318
3514
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
3319
|
-
-
|
|
3515
|
+
- collapseable_section_end "nodeinstall"
|
|
3320
3516
|
- cd kube
|
|
3321
|
-
-
|
|
3517
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
3322
3518
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
3323
3519
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
3324
|
-
-
|
|
3325
|
-
-
|
|
3520
|
+
- collapseable_section_end "nodeinstall"
|
|
3521
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
3326
3522
|
- yarn install --immutable
|
|
3327
|
-
-
|
|
3523
|
+
- collapseable_section_end "yarninstall"
|
|
3328
3524
|
- yarn build
|
|
3329
3525
|
cache:
|
|
3330
3526
|
- key: kube-yarn
|
|
@@ -3335,15 +3531,13 @@ app3 🧪 test:
|
|
|
3335
3531
|
policy: pull-push
|
|
3336
3532
|
paths:
|
|
3337
3533
|
- kube/node_modules
|
|
3338
|
-
- key: app3-next-cache
|
|
3339
|
-
policy: pull-push
|
|
3340
|
-
paths:
|
|
3341
|
-
- kube/.next/cache
|
|
3342
3534
|
artifacts:
|
|
3343
3535
|
paths:
|
|
3344
3536
|
- kube/__build_info.json
|
|
3345
3537
|
- kube/.next
|
|
3346
3538
|
- kube/dist
|
|
3539
|
+
exclude:
|
|
3540
|
+
- kube/.env
|
|
3347
3541
|
expire_in: 1 day
|
|
3348
3542
|
when: always
|
|
3349
3543
|
reports: {}
|
|
@@ -3369,7 +3563,7 @@ app3 🧪 test:
|
|
|
3369
3563
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
3370
3564
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
3371
3565
|
script:
|
|
3372
|
-
-
|
|
3566
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3373
3567
|
- export APP_DIR="kube"
|
|
3374
3568
|
- export DOCKER_BUILD_CONTEXT="."
|
|
3375
3569
|
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
@@ -3386,19 +3580,19 @@ app3 🧪 test:
|
|
|
3386
3580
|
COPY --chown=node:node kube/yarn.lock /app/kube/yarn.lock
|
|
3387
3581
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
3388
3582
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
3389
|
-
-
|
|
3583
|
+
- collapseable_section_end "injectvars"
|
|
3390
3584
|
- ensureNodeDockerfile
|
|
3391
|
-
-
|
|
3585
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
3392
3586
|
- docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
|
|
3393
|
-
-
|
|
3394
|
-
-
|
|
3587
|
+
- collapseable_section_end "docker-login"
|
|
3588
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
3395
3589
|
- 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
|
|
3396
|
-
-
|
|
3397
|
-
-
|
|
3590
|
+
- collapseable_section_end "docker-build"
|
|
3591
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
3398
3592
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
3399
3593
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
3400
3594
|
- docker push $DOCKER_CACHE_IMAGE
|
|
3401
|
-
-
|
|
3595
|
+
- collapseable_section_end "docker-push"
|
|
3402
3596
|
cache:
|
|
3403
3597
|
- key: kube-yarn
|
|
3404
3598
|
policy: pull
|
|
@@ -3415,8 +3609,8 @@ app3 🧪 test:
|
|
|
3415
3609
|
image: aquasec/trivy:0.38.3
|
|
3416
3610
|
variables: {}
|
|
3417
3611
|
script:
|
|
3418
|
-
-
|
|
3419
|
-
-
|
|
3612
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3613
|
+
- collapseable_section_end "injectvars"
|
|
3420
3614
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" kube
|
|
3421
3615
|
artifacts:
|
|
3422
3616
|
paths:
|
|
@@ -3435,17 +3629,16 @@ app3 🧪 test:
|
|
|
3435
3629
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
3436
3630
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
3437
3631
|
script:
|
|
3438
|
-
-
|
|
3632
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3439
3633
|
- export ENV_SHORT="review"
|
|
3440
3634
|
- export APP_DIR="kube"
|
|
3441
3635
|
- export ENV_TYPE="review"
|
|
3442
3636
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3443
3637
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3444
3638
|
- 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")"
|
|
3445
|
-
- export
|
|
3639
|
+
- export HOSTNAME="app3.$([ -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"
|
|
3446
3640
|
- export ROOT_URL="https://app3.$([ -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"
|
|
3447
|
-
- export
|
|
3448
|
-
- export HOST_CANONICAL="app3.$([ -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"
|
|
3641
|
+
- export HOSTNAME_INTERNAL="app3.$([ -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"
|
|
3449
3642
|
- export ROOT_URL_INTERNAL="https://app3.$([ -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"
|
|
3450
3643
|
- export KUBE_NAMESPACE="pan-test-app-review"
|
|
3451
3644
|
- 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"; })-app3"
|
|
@@ -3455,7 +3648,7 @@ app3 🧪 test:
|
|
|
3455
3648
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3456
3649
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_review_app1_SECRET1, secret2: $CL_review_app2_SECRET2"'
|
|
3457
3650
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.$([ -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\\"}]"'
|
|
3458
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
3651
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3459
3652
|
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
3460
3653
|
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app3"
|
|
3461
3654
|
- export DOCKER_IMAGE_NAME="review/app3"
|
|
@@ -3467,21 +3660,20 @@ app3 🧪 test:
|
|
|
3467
3660
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
3468
3661
|
- export HELM_ARGS=""
|
|
3469
3662
|
- export COMPONENT_NAME="app3"
|
|
3470
|
-
-
|
|
3471
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
3663
|
+
- collapseable_section_end "injectvars"
|
|
3472
3664
|
- 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"; })-app3" --server="$CL_review_app3_KUBE_URL" --certificate-authority <(echo $CL_review_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
3473
3665
|
- 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"; })-app3" --token="$CL_review_app3_KUBE_TOKEN"
|
|
3474
3666
|
- 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"; })-app3" --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"; })-app3" --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"; })-app3" --namespace="pan-test-app-review"
|
|
3475
3667
|
- 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"; })-app3"
|
|
3476
|
-
-
|
|
3668
|
+
- collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
|
|
3477
3669
|
- |
|
|
3478
3670
|
cat > __all_values.yml <<EOF
|
|
3479
3671
|
env:
|
|
3480
3672
|
secret:
|
|
3481
3673
|
transitiveWithSecret: |-
|
|
3482
|
-
|
|
3674
|
+
this is from app2: secret1: $(printf %s "$CL_review_app1_SECRET1" | sed '1!s/^/ /'), secret2: $(printf %s "$CL_review_app2_SECRET2" | sed '1!s/^/ /')
|
|
3483
3675
|
someJson: |-
|
|
3484
|
-
|
|
3676
|
+
[{"name": "app1", "url": "$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"}, {"name": "app2", "url": "$(printf %s "https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"}, {"name": "app3", "url": "$(printf %s "https://app3.$([ -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/^/ /')"}]
|
|
3485
3677
|
public:
|
|
3486
3678
|
ENV_SHORT: |-
|
|
3487
3679
|
review
|
|
@@ -3490,27 +3682,25 @@ app3 🧪 test:
|
|
|
3490
3682
|
ENV_TYPE: |-
|
|
3491
3683
|
review
|
|
3492
3684
|
BUILD_INFO_BUILD_ID: |-
|
|
3493
|
-
|
|
3685
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
3494
3686
|
BUILD_INFO_BUILD_TIME: |-
|
|
3495
|
-
|
|
3687
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
3496
3688
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
3497
|
-
|
|
3498
|
-
|
|
3499
|
-
|
|
3689
|
+
$(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/^/ /')
|
|
3690
|
+
HOSTNAME: |-
|
|
3691
|
+
$(printf %s "app3.$([ -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/^/ /')
|
|
3500
3692
|
ROOT_URL: |-
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
HOST_CANONICAL: |-
|
|
3505
|
-
$(printf %s "app3.$([ -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/^/ /')
|
|
3693
|
+
$(printf %s "https://app3.$([ -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/^/ /')
|
|
3694
|
+
HOSTNAME_INTERNAL: |-
|
|
3695
|
+
$(printf %s "app3.$([ -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/^/ /')
|
|
3506
3696
|
ROOT_URL_INTERNAL: |-
|
|
3507
|
-
|
|
3697
|
+
$(printf %s "https://app3.$([ -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/^/ /')
|
|
3508
3698
|
KUBE_NAMESPACE: |-
|
|
3509
3699
|
pan-test-app-review
|
|
3510
3700
|
KUBE_APP_NAME: |-
|
|
3511
|
-
|
|
3701
|
+
$(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"; })-app3" | sed '1!s/^/ /')
|
|
3512
3702
|
KUBE_APP_NAME_PREFIX: |-
|
|
3513
|
-
|
|
3703
|
+
$(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/^/ /')
|
|
3514
3704
|
foo3: |-
|
|
3515
3705
|
foo-value-3
|
|
3516
3706
|
foo2: |-
|
|
@@ -3518,10 +3708,10 @@ app3 🧪 test:
|
|
|
3518
3708
|
transitive: |-
|
|
3519
3709
|
this is from app2: this is from app1: foo-value
|
|
3520
3710
|
_ALL_ENV_VAR_KEYS: |-
|
|
3521
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
3711
|
+
["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","foo3","foo2","transitive","transitiveWithSecret","someJson"]
|
|
3522
3712
|
application:
|
|
3523
3713
|
host: |-
|
|
3524
|
-
|
|
3714
|
+
$(printf %s "app3.$([ -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/^/ /')
|
|
3525
3715
|
command: |-
|
|
3526
3716
|
yarn start
|
|
3527
3717
|
livenessProbe:
|
|
@@ -3538,7 +3728,7 @@ app3 🧪 test:
|
|
|
3538
3728
|
__health
|
|
3539
3729
|
|
|
3540
3730
|
EOF
|
|
3541
|
-
-
|
|
3731
|
+
- collapseable_section_end "writeallvalues"
|
|
3542
3732
|
- kubernetesCreateSecret
|
|
3543
3733
|
- kubernetesDeploy
|
|
3544
3734
|
- echo 'Uploading SBOM to Dependency Track'
|
|
@@ -3581,17 +3771,16 @@ app3 🧪 test:
|
|
|
3581
3771
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
3582
3772
|
GIT_STRATEGY: none
|
|
3583
3773
|
script:
|
|
3584
|
-
-
|
|
3774
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3585
3775
|
- export ENV_SHORT="review"
|
|
3586
3776
|
- export APP_DIR="kube"
|
|
3587
3777
|
- export ENV_TYPE="review"
|
|
3588
3778
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3589
3779
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3590
3780
|
- 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")"
|
|
3591
|
-
- export
|
|
3781
|
+
- export HOSTNAME="app3.$([ -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"
|
|
3592
3782
|
- export ROOT_URL="https://app3.$([ -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"
|
|
3593
|
-
- export
|
|
3594
|
-
- export HOST_CANONICAL="app3.$([ -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"
|
|
3783
|
+
- export HOSTNAME_INTERNAL="app3.$([ -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"
|
|
3595
3784
|
- export ROOT_URL_INTERNAL="https://app3.$([ -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"
|
|
3596
3785
|
- export KUBE_NAMESPACE="pan-test-app-review"
|
|
3597
3786
|
- 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"; })-app3"
|
|
@@ -3601,15 +3790,14 @@ app3 🧪 test:
|
|
|
3601
3790
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3602
3791
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_review_app1_SECRET1, secret2: $CL_review_app2_SECRET2"'
|
|
3603
3792
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.$([ -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\\"}]"'
|
|
3604
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
3793
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3605
3794
|
- 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"; })-app3"
|
|
3606
3795
|
- export HELM_EXPERIMENTAL_OCI="1"
|
|
3607
3796
|
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app3"
|
|
3608
3797
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
3609
3798
|
- export HELM_ARGS=""
|
|
3610
3799
|
- export COMPONENT_NAME="app3"
|
|
3611
|
-
-
|
|
3612
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
3800
|
+
- collapseable_section_end "injectvars"
|
|
3613
3801
|
- 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"; })-app3" --server="$CL_review_app3_KUBE_URL" --certificate-authority <(echo $CL_review_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
3614
3802
|
- 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"; })-app3" --token="$CL_review_app3_KUBE_TOKEN"
|
|
3615
3803
|
- 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"; })-app3" --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"; })-app3" --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"; })-app3" --namespace="pan-test-app-review"
|
|
@@ -3643,17 +3831,16 @@ app3 🧪 test:
|
|
|
3643
3831
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
3644
3832
|
GIT_STRATEGY: none
|
|
3645
3833
|
script:
|
|
3646
|
-
-
|
|
3834
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3647
3835
|
- export ENV_SHORT="review"
|
|
3648
3836
|
- export APP_DIR="kube"
|
|
3649
3837
|
- export ENV_TYPE="review"
|
|
3650
3838
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3651
3839
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3652
3840
|
- 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")"
|
|
3653
|
-
- export
|
|
3841
|
+
- export HOSTNAME="app3.$([ -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"
|
|
3654
3842
|
- export ROOT_URL="https://app3.$([ -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"
|
|
3655
|
-
- export
|
|
3656
|
-
- export HOST_CANONICAL="app3.$([ -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"
|
|
3843
|
+
- export HOSTNAME_INTERNAL="app3.$([ -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"
|
|
3657
3844
|
- export ROOT_URL_INTERNAL="https://app3.$([ -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"
|
|
3658
3845
|
- export KUBE_NAMESPACE="pan-test-app-review"
|
|
3659
3846
|
- 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"; })-app3"
|
|
@@ -3663,15 +3850,14 @@ app3 🧪 test:
|
|
|
3663
3850
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3664
3851
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_review_app1_SECRET1, secret2: $CL_review_app2_SECRET2"'
|
|
3665
3852
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app1-$CL_review_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app2-$CL_review_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.$([ -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\\"}]"'
|
|
3666
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
3853
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3667
3854
|
- 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"; })-app3"
|
|
3668
3855
|
- export HELM_EXPERIMENTAL_OCI="1"
|
|
3669
3856
|
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app3"
|
|
3670
3857
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
3671
3858
|
- export HELM_ARGS=""
|
|
3672
3859
|
- export COMPONENT_NAME="app3"
|
|
3673
|
-
-
|
|
3674
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
3860
|
+
- collapseable_section_end "injectvars"
|
|
3675
3861
|
- 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"; })-app3" --server="$CL_review_app3_KUBE_URL" --certificate-authority <(echo $CL_review_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
3676
3862
|
- 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"; })-app3" --token="$CL_review_app3_KUBE_TOKEN"
|
|
3677
3863
|
- 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"; })-app3" --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"; })-app3" --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"; })-app3" --namespace="pan-test-app-review"
|
|
@@ -3700,17 +3886,16 @@ app3 🧪 test:
|
|
|
3700
3886
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
3701
3887
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
3702
3888
|
script:
|
|
3703
|
-
-
|
|
3889
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3704
3890
|
- export ENV_SHORT="stage"
|
|
3705
3891
|
- export APP_DIR="kube"
|
|
3706
3892
|
- export ENV_TYPE="stage"
|
|
3707
3893
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3708
3894
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3709
3895
|
- 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")"
|
|
3710
|
-
- export
|
|
3896
|
+
- export HOSTNAME="app3.stage.test-app.pan.panter.cloud"
|
|
3711
3897
|
- export ROOT_URL="https://app3.stage.test-app.pan.panter.cloud"
|
|
3712
|
-
- export
|
|
3713
|
-
- export HOST_CANONICAL="app3.stage.test-app.pan.panter.cloud"
|
|
3898
|
+
- export HOSTNAME_INTERNAL="app3.stage.test-app.pan.panter.cloud"
|
|
3714
3899
|
- export ROOT_URL_INTERNAL="https://app3.stage.test-app.pan.panter.cloud"
|
|
3715
3900
|
- export KUBE_NAMESPACE="pan-test-app-stage"
|
|
3716
3901
|
- export KUBE_APP_NAME="app3"
|
|
@@ -3720,21 +3905,42 @@ app3 🧪 test:
|
|
|
3720
3905
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3721
3906
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_stage_app1_SECRET1, secret2: $CL_stage_app2_SECRET2"'
|
|
3722
3907
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.stage.test-app.pan.panter.cloud\\"}]"'
|
|
3723
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
3724
|
-
-
|
|
3908
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3909
|
+
- collapseable_section_end "injectvars"
|
|
3910
|
+
- collapseable_section_start "write-dotenv-app3" "write dot env for app3"
|
|
3911
|
+
- |-
|
|
3912
|
+
cat <<EOF > kube/.env
|
|
3913
|
+
ENV_SHORT=stage
|
|
3914
|
+
APP_DIR=kube
|
|
3915
|
+
ENV_TYPE=stage
|
|
3916
|
+
HOSTNAME=app3.stage.test-app.pan.panter.cloud
|
|
3917
|
+
ROOT_URL=https://app3.stage.test-app.pan.panter.cloud
|
|
3918
|
+
HOSTNAME_INTERNAL=app3.stage.test-app.pan.panter.cloud
|
|
3919
|
+
ROOT_URL_INTERNAL=https://app3.stage.test-app.pan.panter.cloud
|
|
3920
|
+
KUBE_NAMESPACE=pan-test-app-stage
|
|
3921
|
+
KUBE_APP_NAME=app3
|
|
3922
|
+
KUBE_APP_NAME_PREFIX=
|
|
3923
|
+
foo3=foo-value-3
|
|
3924
|
+
foo2=this is from app2: foo-value-2
|
|
3925
|
+
transitive=this is from app2: this is from app1: foo-value
|
|
3926
|
+
transitiveWithSecret=$(printf %s "this is from app2: secret1: $CL_stage_app1_SECRET1, secret2: $CL_stage_app2_SECRET2" | escapeForDotEnv)
|
|
3927
|
+
someJson=$(printf %s "[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.stage.test-app.pan.panter.cloud\\"}]" | escapeForDotEnv)
|
|
3928
|
+
_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","foo3","foo2","transitive","transitiveWithSecret","someJson"]
|
|
3929
|
+
EOF
|
|
3930
|
+
- collapseable_section_end "write-dotenv-app3"
|
|
3725
3931
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > kube/__build_info.json
|
|
3726
|
-
-
|
|
3932
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
3727
3933
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
3728
3934
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
3729
|
-
-
|
|
3935
|
+
- collapseable_section_end "nodeinstall"
|
|
3730
3936
|
- cd kube
|
|
3731
|
-
-
|
|
3937
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
3732
3938
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
3733
3939
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
3734
|
-
-
|
|
3735
|
-
-
|
|
3940
|
+
- collapseable_section_end "nodeinstall"
|
|
3941
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
3736
3942
|
- yarn install --immutable
|
|
3737
|
-
-
|
|
3943
|
+
- collapseable_section_end "yarninstall"
|
|
3738
3944
|
- yarn build
|
|
3739
3945
|
cache:
|
|
3740
3946
|
- key: kube-yarn
|
|
@@ -3745,15 +3951,13 @@ app3 🧪 test:
|
|
|
3745
3951
|
policy: pull-push
|
|
3746
3952
|
paths:
|
|
3747
3953
|
- kube/node_modules
|
|
3748
|
-
- key: app3-next-cache
|
|
3749
|
-
policy: pull-push
|
|
3750
|
-
paths:
|
|
3751
|
-
- kube/.next/cache
|
|
3752
3954
|
artifacts:
|
|
3753
3955
|
paths:
|
|
3754
3956
|
- kube/__build_info.json
|
|
3755
3957
|
- kube/.next
|
|
3756
3958
|
- kube/dist
|
|
3959
|
+
exclude:
|
|
3960
|
+
- kube/.env
|
|
3757
3961
|
expire_in: 1 day
|
|
3758
3962
|
when: always
|
|
3759
3963
|
reports: {}
|
|
@@ -3779,7 +3983,7 @@ app3 🧪 test:
|
|
|
3779
3983
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
3780
3984
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
3781
3985
|
script:
|
|
3782
|
-
-
|
|
3986
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3783
3987
|
- export APP_DIR="kube"
|
|
3784
3988
|
- export DOCKER_BUILD_CONTEXT="."
|
|
3785
3989
|
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
@@ -3796,19 +4000,19 @@ app3 🧪 test:
|
|
|
3796
4000
|
COPY --chown=node:node kube/yarn.lock /app/kube/yarn.lock
|
|
3797
4001
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
3798
4002
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
3799
|
-
-
|
|
4003
|
+
- collapseable_section_end "injectvars"
|
|
3800
4004
|
- ensureNodeDockerfile
|
|
3801
|
-
-
|
|
4005
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
3802
4006
|
- docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
|
|
3803
|
-
-
|
|
3804
|
-
-
|
|
4007
|
+
- collapseable_section_end "docker-login"
|
|
4008
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
3805
4009
|
- 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
|
|
3806
|
-
-
|
|
3807
|
-
-
|
|
4010
|
+
- collapseable_section_end "docker-build"
|
|
4011
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
3808
4012
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
3809
4013
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
3810
4014
|
- docker push $DOCKER_CACHE_IMAGE
|
|
3811
|
-
-
|
|
4015
|
+
- collapseable_section_end "docker-push"
|
|
3812
4016
|
cache:
|
|
3813
4017
|
- key: kube-yarn
|
|
3814
4018
|
policy: pull
|
|
@@ -3825,8 +4029,8 @@ app3 🧪 test:
|
|
|
3825
4029
|
image: aquasec/trivy:0.38.3
|
|
3826
4030
|
variables: {}
|
|
3827
4031
|
script:
|
|
3828
|
-
-
|
|
3829
|
-
-
|
|
4032
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
4033
|
+
- collapseable_section_end "injectvars"
|
|
3830
4034
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" kube
|
|
3831
4035
|
artifacts:
|
|
3832
4036
|
paths:
|
|
@@ -3845,17 +4049,16 @@ app3 🧪 test:
|
|
|
3845
4049
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
3846
4050
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
3847
4051
|
script:
|
|
3848
|
-
-
|
|
4052
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3849
4053
|
- export ENV_SHORT="stage"
|
|
3850
4054
|
- export APP_DIR="kube"
|
|
3851
4055
|
- export ENV_TYPE="stage"
|
|
3852
4056
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3853
4057
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3854
4058
|
- 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")"
|
|
3855
|
-
- export
|
|
4059
|
+
- export HOSTNAME="app3.stage.test-app.pan.panter.cloud"
|
|
3856
4060
|
- export ROOT_URL="https://app3.stage.test-app.pan.panter.cloud"
|
|
3857
|
-
- export
|
|
3858
|
-
- export HOST_CANONICAL="app3.stage.test-app.pan.panter.cloud"
|
|
4061
|
+
- export HOSTNAME_INTERNAL="app3.stage.test-app.pan.panter.cloud"
|
|
3859
4062
|
- export ROOT_URL_INTERNAL="https://app3.stage.test-app.pan.panter.cloud"
|
|
3860
4063
|
- export KUBE_NAMESPACE="pan-test-app-stage"
|
|
3861
4064
|
- export KUBE_APP_NAME="app3"
|
|
@@ -3865,7 +4068,7 @@ app3 🧪 test:
|
|
|
3865
4068
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
3866
4069
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_stage_app1_SECRET1, secret2: $CL_stage_app2_SECRET2"'
|
|
3867
4070
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.stage.test-app.pan.panter.cloud\\"}]"'
|
|
3868
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
4071
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
3869
4072
|
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
3870
4073
|
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app3"
|
|
3871
4074
|
- export DOCKER_IMAGE_NAME="stage/app3"
|
|
@@ -3877,21 +4080,20 @@ app3 🧪 test:
|
|
|
3877
4080
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
3878
4081
|
- export HELM_ARGS=""
|
|
3879
4082
|
- export COMPONENT_NAME="app3"
|
|
3880
|
-
-
|
|
3881
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
4083
|
+
- collapseable_section_end "injectvars"
|
|
3882
4084
|
- kubectl config set-cluster "kube-pan-test-app-stage-app3" --server="$CL_stage_app3_KUBE_URL" --certificate-authority <(echo $CL_stage_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
3883
4085
|
- kubectl config set-credentials "kube-pan-test-app-stage-app3" --token="$CL_stage_app3_KUBE_TOKEN"
|
|
3884
4086
|
- kubectl config set-context "kube-pan-test-app-stage-app3" --cluster="kube-pan-test-app-stage-app3" --user="kube-pan-test-app-stage-app3" --namespace="pan-test-app-stage"
|
|
3885
4087
|
- kubectl config use-context "kube-pan-test-app-stage-app3"
|
|
3886
|
-
-
|
|
4088
|
+
- collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
|
|
3887
4089
|
- |
|
|
3888
4090
|
cat > __all_values.yml <<EOF
|
|
3889
4091
|
env:
|
|
3890
4092
|
secret:
|
|
3891
4093
|
transitiveWithSecret: |-
|
|
3892
|
-
|
|
4094
|
+
this is from app2: secret1: $(printf %s "$CL_stage_app1_SECRET1" | sed '1!s/^/ /'), secret2: $(printf %s "$CL_stage_app2_SECRET2" | sed '1!s/^/ /')
|
|
3893
4095
|
someJson: |-
|
|
3894
|
-
|
|
4096
|
+
[{"name": "app1", "url": "$(printf %s "https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"}, {"name": "app2", "url": "$(printf %s "https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"}, {"name": "app3", "url": "https://app3.stage.test-app.pan.panter.cloud"}]
|
|
3895
4097
|
public:
|
|
3896
4098
|
ENV_SHORT: |-
|
|
3897
4099
|
stage
|
|
@@ -3900,18 +4102,16 @@ app3 🧪 test:
|
|
|
3900
4102
|
ENV_TYPE: |-
|
|
3901
4103
|
stage
|
|
3902
4104
|
BUILD_INFO_BUILD_ID: |-
|
|
3903
|
-
|
|
4105
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
3904
4106
|
BUILD_INFO_BUILD_TIME: |-
|
|
3905
|
-
|
|
4107
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
3906
4108
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
3907
|
-
|
|
3908
|
-
|
|
4109
|
+
$(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/^/ /')
|
|
4110
|
+
HOSTNAME: |-
|
|
3909
4111
|
app3.stage.test-app.pan.panter.cloud
|
|
3910
4112
|
ROOT_URL: |-
|
|
3911
4113
|
https://app3.stage.test-app.pan.panter.cloud
|
|
3912
|
-
|
|
3913
|
-
app3.stage.test-app.pan.panter.cloud
|
|
3914
|
-
HOST_CANONICAL: |-
|
|
4114
|
+
HOSTNAME_INTERNAL: |-
|
|
3915
4115
|
app3.stage.test-app.pan.panter.cloud
|
|
3916
4116
|
ROOT_URL_INTERNAL: |-
|
|
3917
4117
|
https://app3.stage.test-app.pan.panter.cloud
|
|
@@ -3927,7 +4127,7 @@ app3 🧪 test:
|
|
|
3927
4127
|
transitive: |-
|
|
3928
4128
|
this is from app2: this is from app1: foo-value
|
|
3929
4129
|
_ALL_ENV_VAR_KEYS: |-
|
|
3930
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
4130
|
+
["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","foo3","foo2","transitive","transitiveWithSecret","someJson"]
|
|
3931
4131
|
application:
|
|
3932
4132
|
host: |-
|
|
3933
4133
|
app3.stage.test-app.pan.panter.cloud
|
|
@@ -3947,7 +4147,7 @@ app3 🧪 test:
|
|
|
3947
4147
|
__health
|
|
3948
4148
|
|
|
3949
4149
|
EOF
|
|
3950
|
-
-
|
|
4150
|
+
- collapseable_section_end "writeallvalues"
|
|
3951
4151
|
- kubernetesCreateSecret
|
|
3952
4152
|
- kubernetesDeploy
|
|
3953
4153
|
- echo 'Uploading SBOM to Dependency Track'
|
|
@@ -3983,17 +4183,16 @@ app3 🧪 test:
|
|
|
3983
4183
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
3984
4184
|
GIT_STRATEGY: none
|
|
3985
4185
|
script:
|
|
3986
|
-
-
|
|
4186
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
3987
4187
|
- export ENV_SHORT="stage"
|
|
3988
4188
|
- export APP_DIR="kube"
|
|
3989
4189
|
- export ENV_TYPE="stage"
|
|
3990
4190
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
3991
4191
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
3992
4192
|
- export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"
|
|
3993
|
-
- export
|
|
4193
|
+
- export HOSTNAME="app3.stage.test-app.pan.panter.cloud"
|
|
3994
4194
|
- export ROOT_URL="https://app3.stage.test-app.pan.panter.cloud"
|
|
3995
|
-
- export
|
|
3996
|
-
- export HOST_CANONICAL="app3.stage.test-app.pan.panter.cloud"
|
|
4195
|
+
- export HOSTNAME_INTERNAL="app3.stage.test-app.pan.panter.cloud"
|
|
3997
4196
|
- export ROOT_URL_INTERNAL="https://app3.stage.test-app.pan.panter.cloud"
|
|
3998
4197
|
- export KUBE_NAMESPACE="pan-test-app-stage"
|
|
3999
4198
|
- export KUBE_APP_NAME="app3"
|
|
@@ -4003,15 +4202,14 @@ app3 🧪 test:
|
|
|
4003
4202
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
4004
4203
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_stage_app1_SECRET1, secret2: $CL_stage_app2_SECRET2"'
|
|
4005
4204
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.stage.test-app.pan.panter.cloud\\"}]"'
|
|
4006
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
4205
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
4007
4206
|
- export RELEASE_NAME="pan-test-app-stage-app3"
|
|
4008
4207
|
- export HELM_EXPERIMENTAL_OCI="1"
|
|
4009
4208
|
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app3"
|
|
4010
4209
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
4011
4210
|
- export HELM_ARGS=""
|
|
4012
4211
|
- export COMPONENT_NAME="app3"
|
|
4013
|
-
-
|
|
4014
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
4212
|
+
- collapseable_section_end "injectvars"
|
|
4015
4213
|
- kubectl config set-cluster "kube-pan-test-app-stage-app3" --server="$CL_stage_app3_KUBE_URL" --certificate-authority <(echo $CL_stage_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
4016
4214
|
- kubectl config set-credentials "kube-pan-test-app-stage-app3" --token="$CL_stage_app3_KUBE_TOKEN"
|
|
4017
4215
|
- kubectl config set-context "kube-pan-test-app-stage-app3" --cluster="kube-pan-test-app-stage-app3" --user="kube-pan-test-app-stage-app3" --namespace="pan-test-app-stage"
|
|
@@ -4045,17 +4243,16 @@ app3 🧪 test:
|
|
|
4045
4243
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
4046
4244
|
GIT_STRATEGY: none
|
|
4047
4245
|
script:
|
|
4048
|
-
-
|
|
4246
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
4049
4247
|
- export ENV_SHORT="stage"
|
|
4050
4248
|
- export APP_DIR="kube"
|
|
4051
4249
|
- export ENV_TYPE="stage"
|
|
4052
4250
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
4053
4251
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
4054
4252
|
- 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")"
|
|
4055
|
-
- export
|
|
4253
|
+
- export HOSTNAME="app3.stage.test-app.pan.panter.cloud"
|
|
4056
4254
|
- export ROOT_URL="https://app3.stage.test-app.pan.panter.cloud"
|
|
4057
|
-
- export
|
|
4058
|
-
- export HOST_CANONICAL="app3.stage.test-app.pan.panter.cloud"
|
|
4255
|
+
- export HOSTNAME_INTERNAL="app3.stage.test-app.pan.panter.cloud"
|
|
4059
4256
|
- export ROOT_URL_INTERNAL="https://app3.stage.test-app.pan.panter.cloud"
|
|
4060
4257
|
- export KUBE_NAMESPACE="pan-test-app-stage"
|
|
4061
4258
|
- export KUBE_APP_NAME="app3"
|
|
@@ -4065,15 +4262,14 @@ app3 🧪 test:
|
|
|
4065
4262
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
4066
4263
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_stage_app1_SECRET1, secret2: $CL_stage_app2_SECRET2"'
|
|
4067
4264
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app1-$CL_stage_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-stage-app2-$CL_stage_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.stage.test-app.pan.panter.cloud\\"}]"'
|
|
4068
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
4265
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
4069
4266
|
- export RELEASE_NAME="pan-test-app-stage-app3"
|
|
4070
4267
|
- export HELM_EXPERIMENTAL_OCI="1"
|
|
4071
4268
|
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app3"
|
|
4072
4269
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
4073
4270
|
- export HELM_ARGS=""
|
|
4074
4271
|
- export COMPONENT_NAME="app3"
|
|
4075
|
-
-
|
|
4076
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
4272
|
+
- collapseable_section_end "injectvars"
|
|
4077
4273
|
- kubectl config set-cluster "kube-pan-test-app-stage-app3" --server="$CL_stage_app3_KUBE_URL" --certificate-authority <(echo $CL_stage_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
4078
4274
|
- kubectl config set-credentials "kube-pan-test-app-stage-app3" --token="$CL_stage_app3_KUBE_TOKEN"
|
|
4079
4275
|
- kubectl config set-context "kube-pan-test-app-stage-app3" --cluster="kube-pan-test-app-stage-app3" --user="kube-pan-test-app-stage-app3" --namespace="pan-test-app-stage"
|
|
@@ -4102,17 +4298,16 @@ app3 🧪 test:
|
|
|
4102
4298
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
4103
4299
|
KUBERNETES_MEMORY_LIMIT: 4Gi
|
|
4104
4300
|
script:
|
|
4105
|
-
-
|
|
4301
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
4106
4302
|
- export ENV_SHORT="prod"
|
|
4107
4303
|
- export APP_DIR="kube"
|
|
4108
4304
|
- export ENV_TYPE="prod"
|
|
4109
4305
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
4110
4306
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
4111
4307
|
- 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")"
|
|
4112
|
-
- export
|
|
4308
|
+
- export HOSTNAME="app3.prod.test-app.pan.panter.cloud"
|
|
4113
4309
|
- export ROOT_URL="https://app3.prod.test-app.pan.panter.cloud"
|
|
4114
|
-
- export
|
|
4115
|
-
- export HOST_CANONICAL="app3.prod.test-app.pan.panter.cloud"
|
|
4310
|
+
- export HOSTNAME_INTERNAL="app3.prod.test-app.pan.panter.cloud"
|
|
4116
4311
|
- export ROOT_URL_INTERNAL="https://app3.prod.test-app.pan.panter.cloud"
|
|
4117
4312
|
- export KUBE_NAMESPACE="pan-test-app-prod"
|
|
4118
4313
|
- export KUBE_APP_NAME="app3"
|
|
@@ -4122,21 +4317,42 @@ app3 🧪 test:
|
|
|
4122
4317
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
4123
4318
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_prod_app1_SECRET1, secret2: $CL_prod_app2_SECRET2"'
|
|
4124
4319
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.prod.test-app.pan.panter.cloud\\"}]"'
|
|
4125
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
4126
|
-
-
|
|
4320
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
4321
|
+
- collapseable_section_end "injectvars"
|
|
4322
|
+
- collapseable_section_start "write-dotenv-app3" "write dot env for app3"
|
|
4323
|
+
- |-
|
|
4324
|
+
cat <<EOF > kube/.env
|
|
4325
|
+
ENV_SHORT=prod
|
|
4326
|
+
APP_DIR=kube
|
|
4327
|
+
ENV_TYPE=prod
|
|
4328
|
+
HOSTNAME=app3.prod.test-app.pan.panter.cloud
|
|
4329
|
+
ROOT_URL=https://app3.prod.test-app.pan.panter.cloud
|
|
4330
|
+
HOSTNAME_INTERNAL=app3.prod.test-app.pan.panter.cloud
|
|
4331
|
+
ROOT_URL_INTERNAL=https://app3.prod.test-app.pan.panter.cloud
|
|
4332
|
+
KUBE_NAMESPACE=pan-test-app-prod
|
|
4333
|
+
KUBE_APP_NAME=app3
|
|
4334
|
+
KUBE_APP_NAME_PREFIX=
|
|
4335
|
+
foo3=foo-value-3
|
|
4336
|
+
foo2=this is from app2: foo-value-2
|
|
4337
|
+
transitive=this is from app2: this is from app1: foo-value
|
|
4338
|
+
transitiveWithSecret=$(printf %s "this is from app2: secret1: $CL_prod_app1_SECRET1, secret2: $CL_prod_app2_SECRET2" | escapeForDotEnv)
|
|
4339
|
+
someJson=$(printf %s "[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.prod.test-app.pan.panter.cloud\\"}]" | escapeForDotEnv)
|
|
4340
|
+
_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","foo3","foo2","transitive","transitiveWithSecret","someJson"]
|
|
4341
|
+
EOF
|
|
4342
|
+
- collapseable_section_end "write-dotenv-app3"
|
|
4127
4343
|
- echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > kube/__build_info.json
|
|
4128
|
-
-
|
|
4344
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
4129
4345
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
4130
4346
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
4131
|
-
-
|
|
4347
|
+
- collapseable_section_end "nodeinstall"
|
|
4132
4348
|
- cd kube
|
|
4133
|
-
-
|
|
4349
|
+
- collapseable_section_start "nodeinstall" "Ensure node version"
|
|
4134
4350
|
- if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi
|
|
4135
4351
|
- if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi
|
|
4136
|
-
-
|
|
4137
|
-
-
|
|
4352
|
+
- collapseable_section_end "nodeinstall"
|
|
4353
|
+
- collapseable_section_start "yarninstall" "Yarn install"
|
|
4138
4354
|
- yarn install --immutable
|
|
4139
|
-
-
|
|
4355
|
+
- collapseable_section_end "yarninstall"
|
|
4140
4356
|
- yarn build
|
|
4141
4357
|
cache:
|
|
4142
4358
|
- key: kube-yarn
|
|
@@ -4147,15 +4363,13 @@ app3 🧪 test:
|
|
|
4147
4363
|
policy: pull-push
|
|
4148
4364
|
paths:
|
|
4149
4365
|
- kube/node_modules
|
|
4150
|
-
- key: app3-next-cache
|
|
4151
|
-
policy: pull-push
|
|
4152
|
-
paths:
|
|
4153
|
-
- kube/.next/cache
|
|
4154
4366
|
artifacts:
|
|
4155
4367
|
paths:
|
|
4156
4368
|
- kube/__build_info.json
|
|
4157
4369
|
- kube/.next
|
|
4158
4370
|
- kube/dist
|
|
4371
|
+
exclude:
|
|
4372
|
+
- kube/.env
|
|
4159
4373
|
expire_in: 1 day
|
|
4160
4374
|
when: always
|
|
4161
4375
|
reports: {}
|
|
@@ -4181,7 +4395,7 @@ app3 🧪 test:
|
|
|
4181
4395
|
KUBERNETES_MEMORY_REQUEST: 1Gi
|
|
4182
4396
|
KUBERNETES_MEMORY_LIMIT: 2Gi
|
|
4183
4397
|
script:
|
|
4184
|
-
-
|
|
4398
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
4185
4399
|
- export APP_DIR="kube"
|
|
4186
4400
|
- export DOCKER_BUILD_CONTEXT="."
|
|
4187
4401
|
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
@@ -4198,19 +4412,19 @@ app3 🧪 test:
|
|
|
4198
4412
|
COPY --chown=node:node kube/yarn.lock /app/kube/yarn.lock
|
|
4199
4413
|
COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
|
|
4200
4414
|
COPY --chown=node:node .yarn /app/.yarn"
|
|
4201
|
-
-
|
|
4415
|
+
- collapseable_section_end "injectvars"
|
|
4202
4416
|
- ensureNodeDockerfile
|
|
4203
|
-
-
|
|
4417
|
+
- collapseable_section_start "docker-login" "Docker Login"
|
|
4204
4418
|
- docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
|
|
4205
|
-
-
|
|
4206
|
-
-
|
|
4419
|
+
- collapseable_section_end "docker-login"
|
|
4420
|
+
- collapseable_section_start "docker-build" "Docker build"
|
|
4207
4421
|
- 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
|
|
4208
|
-
-
|
|
4209
|
-
-
|
|
4422
|
+
- collapseable_section_end "docker-build"
|
|
4423
|
+
- collapseable_section_start "docker-push" "Docker push and tag"
|
|
4210
4424
|
- docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG
|
|
4211
4425
|
- docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE
|
|
4212
4426
|
- docker push $DOCKER_CACHE_IMAGE
|
|
4213
|
-
-
|
|
4427
|
+
- collapseable_section_end "docker-push"
|
|
4214
4428
|
cache:
|
|
4215
4429
|
- key: kube-yarn
|
|
4216
4430
|
policy: pull
|
|
@@ -4227,8 +4441,8 @@ app3 🧪 test:
|
|
|
4227
4441
|
image: aquasec/trivy:0.38.3
|
|
4228
4442
|
variables: {}
|
|
4229
4443
|
script:
|
|
4230
|
-
-
|
|
4231
|
-
-
|
|
4444
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
4445
|
+
- collapseable_section_end "injectvars"
|
|
4232
4446
|
- trivy fs --quiet --format cyclonedx --output "__sbom.json" kube
|
|
4233
4447
|
artifacts:
|
|
4234
4448
|
paths:
|
|
@@ -4247,17 +4461,16 @@ app3 🧪 test:
|
|
|
4247
4461
|
KUBERNETES_MEMORY_REQUEST: 200Mi
|
|
4248
4462
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
4249
4463
|
script:
|
|
4250
|
-
-
|
|
4464
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
4251
4465
|
- export ENV_SHORT="prod"
|
|
4252
4466
|
- export APP_DIR="kube"
|
|
4253
4467
|
- export ENV_TYPE="prod"
|
|
4254
4468
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
4255
4469
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
4256
4470
|
- 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")"
|
|
4257
|
-
- export
|
|
4471
|
+
- export HOSTNAME="app3.prod.test-app.pan.panter.cloud"
|
|
4258
4472
|
- export ROOT_URL="https://app3.prod.test-app.pan.panter.cloud"
|
|
4259
|
-
- export
|
|
4260
|
-
- export HOST_CANONICAL="app3.prod.test-app.pan.panter.cloud"
|
|
4473
|
+
- export HOSTNAME_INTERNAL="app3.prod.test-app.pan.panter.cloud"
|
|
4261
4474
|
- export ROOT_URL_INTERNAL="https://app3.prod.test-app.pan.panter.cloud"
|
|
4262
4475
|
- export KUBE_NAMESPACE="pan-test-app-prod"
|
|
4263
4476
|
- export KUBE_APP_NAME="app3"
|
|
@@ -4267,7 +4480,7 @@ app3 🧪 test:
|
|
|
4267
4480
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
4268
4481
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_prod_app1_SECRET1, secret2: $CL_prod_app2_SECRET2"'
|
|
4269
4482
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.prod.test-app.pan.panter.cloud\\"}]"'
|
|
4270
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
4483
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
4271
4484
|
- export DOCKER_REGISTRY="$CI_REGISTRY"
|
|
4272
4485
|
- export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/app3"
|
|
4273
4486
|
- export DOCKER_IMAGE_NAME="prod/app3"
|
|
@@ -4279,21 +4492,20 @@ app3 🧪 test:
|
|
|
4279
4492
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
4280
4493
|
- export HELM_ARGS=""
|
|
4281
4494
|
- export COMPONENT_NAME="app3"
|
|
4282
|
-
-
|
|
4283
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
4495
|
+
- collapseable_section_end "injectvars"
|
|
4284
4496
|
- kubectl config set-cluster "kube-pan-test-app-prod-app3" --server="$CL_prod_app3_KUBE_URL" --certificate-authority <(echo $CL_prod_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
4285
4497
|
- kubectl config set-credentials "kube-pan-test-app-prod-app3" --token="$CL_prod_app3_KUBE_TOKEN"
|
|
4286
4498
|
- kubectl config set-context "kube-pan-test-app-prod-app3" --cluster="kube-pan-test-app-prod-app3" --user="kube-pan-test-app-prod-app3" --namespace="pan-test-app-prod"
|
|
4287
4499
|
- kubectl config use-context "kube-pan-test-app-prod-app3"
|
|
4288
|
-
-
|
|
4500
|
+
- collapseable_section_start "writeallvalues" "Write __all_values.yml for helm deployment"
|
|
4289
4501
|
- |
|
|
4290
4502
|
cat > __all_values.yml <<EOF
|
|
4291
4503
|
env:
|
|
4292
4504
|
secret:
|
|
4293
4505
|
transitiveWithSecret: |-
|
|
4294
|
-
|
|
4506
|
+
this is from app2: secret1: $(printf %s "$CL_prod_app1_SECRET1" | sed '1!s/^/ /'), secret2: $(printf %s "$CL_prod_app2_SECRET2" | sed '1!s/^/ /')
|
|
4295
4507
|
someJson: |-
|
|
4296
|
-
|
|
4508
|
+
[{"name": "app1", "url": "$(printf %s "https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"}, {"name": "app2", "url": "$(printf %s "https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk '{print tolower($0)}')" | sed '1!s/^/ /')"}, {"name": "app3", "url": "https://app3.prod.test-app.pan.panter.cloud"}]
|
|
4297
4509
|
public:
|
|
4298
4510
|
ENV_SHORT: |-
|
|
4299
4511
|
prod
|
|
@@ -4302,18 +4514,16 @@ app3 🧪 test:
|
|
|
4302
4514
|
ENV_TYPE: |-
|
|
4303
4515
|
prod
|
|
4304
4516
|
BUILD_INFO_BUILD_ID: |-
|
|
4305
|
-
|
|
4517
|
+
$(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed '1!s/^/ /')
|
|
4306
4518
|
BUILD_INFO_BUILD_TIME: |-
|
|
4307
|
-
|
|
4519
|
+
$(printf %s "$CI_JOB_STARTED_AT" | sed '1!s/^/ /')
|
|
4308
4520
|
BUILD_INFO_CURRENT_VERSION: |-
|
|
4309
|
-
|
|
4310
|
-
|
|
4521
|
+
$(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/^/ /')
|
|
4522
|
+
HOSTNAME: |-
|
|
4311
4523
|
app3.prod.test-app.pan.panter.cloud
|
|
4312
4524
|
ROOT_URL: |-
|
|
4313
4525
|
https://app3.prod.test-app.pan.panter.cloud
|
|
4314
|
-
|
|
4315
|
-
app3.prod.test-app.pan.panter.cloud
|
|
4316
|
-
HOST_CANONICAL: |-
|
|
4526
|
+
HOSTNAME_INTERNAL: |-
|
|
4317
4527
|
app3.prod.test-app.pan.panter.cloud
|
|
4318
4528
|
ROOT_URL_INTERNAL: |-
|
|
4319
4529
|
https://app3.prod.test-app.pan.panter.cloud
|
|
@@ -4329,7 +4539,7 @@ app3 🧪 test:
|
|
|
4329
4539
|
transitive: |-
|
|
4330
4540
|
this is from app2: this is from app1: foo-value
|
|
4331
4541
|
_ALL_ENV_VAR_KEYS: |-
|
|
4332
|
-
["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","
|
|
4542
|
+
["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","foo3","foo2","transitive","transitiveWithSecret","someJson"]
|
|
4333
4543
|
application:
|
|
4334
4544
|
host: |-
|
|
4335
4545
|
app3.prod.test-app.pan.panter.cloud
|
|
@@ -4349,7 +4559,7 @@ app3 🧪 test:
|
|
|
4349
4559
|
__health
|
|
4350
4560
|
|
|
4351
4561
|
EOF
|
|
4352
|
-
-
|
|
4562
|
+
- collapseable_section_end "writeallvalues"
|
|
4353
4563
|
- kubernetesCreateSecret
|
|
4354
4564
|
- kubernetesDeploy
|
|
4355
4565
|
- echo 'Uploading SBOM to Dependency Track'
|
|
@@ -4385,17 +4595,16 @@ app3 🧪 test:
|
|
|
4385
4595
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
4386
4596
|
GIT_STRATEGY: none
|
|
4387
4597
|
script:
|
|
4388
|
-
-
|
|
4598
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
4389
4599
|
- export ENV_SHORT="prod"
|
|
4390
4600
|
- export APP_DIR="kube"
|
|
4391
4601
|
- export ENV_TYPE="prod"
|
|
4392
4602
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
4393
4603
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
4394
4604
|
- 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")"
|
|
4395
|
-
- export
|
|
4605
|
+
- export HOSTNAME="app3.prod.test-app.pan.panter.cloud"
|
|
4396
4606
|
- export ROOT_URL="https://app3.prod.test-app.pan.panter.cloud"
|
|
4397
|
-
- export
|
|
4398
|
-
- export HOST_CANONICAL="app3.prod.test-app.pan.panter.cloud"
|
|
4607
|
+
- export HOSTNAME_INTERNAL="app3.prod.test-app.pan.panter.cloud"
|
|
4399
4608
|
- export ROOT_URL_INTERNAL="https://app3.prod.test-app.pan.panter.cloud"
|
|
4400
4609
|
- export KUBE_NAMESPACE="pan-test-app-prod"
|
|
4401
4610
|
- export KUBE_APP_NAME="app3"
|
|
@@ -4405,15 +4614,14 @@ app3 🧪 test:
|
|
|
4405
4614
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
4406
4615
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_prod_app1_SECRET1, secret2: $CL_prod_app2_SECRET2"'
|
|
4407
4616
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.prod.test-app.pan.panter.cloud\\"}]"'
|
|
4408
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
4617
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
4409
4618
|
- export RELEASE_NAME="pan-test-app-prod-app3"
|
|
4410
4619
|
- export HELM_EXPERIMENTAL_OCI="1"
|
|
4411
4620
|
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app3"
|
|
4412
4621
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
4413
4622
|
- export HELM_ARGS=""
|
|
4414
4623
|
- export COMPONENT_NAME="app3"
|
|
4415
|
-
-
|
|
4416
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
4624
|
+
- collapseable_section_end "injectvars"
|
|
4417
4625
|
- kubectl config set-cluster "kube-pan-test-app-prod-app3" --server="$CL_prod_app3_KUBE_URL" --certificate-authority <(echo $CL_prod_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
4418
4626
|
- kubectl config set-credentials "kube-pan-test-app-prod-app3" --token="$CL_prod_app3_KUBE_TOKEN"
|
|
4419
4627
|
- kubectl config set-context "kube-pan-test-app-prod-app3" --cluster="kube-pan-test-app-prod-app3" --user="kube-pan-test-app-prod-app3" --namespace="pan-test-app-prod"
|
|
@@ -4447,17 +4655,16 @@ app3 🧪 test:
|
|
|
4447
4655
|
KUBERNETES_MEMORY_LIMIT: 400Mi
|
|
4448
4656
|
GIT_STRATEGY: none
|
|
4449
4657
|
script:
|
|
4450
|
-
-
|
|
4658
|
+
- collapseable_section_start "injectvars" "Injecting variables"
|
|
4451
4659
|
- export ENV_SHORT="prod"
|
|
4452
4660
|
- export APP_DIR="kube"
|
|
4453
4661
|
- export ENV_TYPE="prod"
|
|
4454
4662
|
- export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"
|
|
4455
4663
|
- export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"
|
|
4456
4664
|
- 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")"
|
|
4457
|
-
- export
|
|
4665
|
+
- export HOSTNAME="app3.prod.test-app.pan.panter.cloud"
|
|
4458
4666
|
- export ROOT_URL="https://app3.prod.test-app.pan.panter.cloud"
|
|
4459
|
-
- export
|
|
4460
|
-
- export HOST_CANONICAL="app3.prod.test-app.pan.panter.cloud"
|
|
4667
|
+
- export HOSTNAME_INTERNAL="app3.prod.test-app.pan.panter.cloud"
|
|
4461
4668
|
- export ROOT_URL_INTERNAL="https://app3.prod.test-app.pan.panter.cloud"
|
|
4462
4669
|
- export KUBE_NAMESPACE="pan-test-app-prod"
|
|
4463
4670
|
- export KUBE_APP_NAME="app3"
|
|
@@ -4467,15 +4674,14 @@ app3 🧪 test:
|
|
|
4467
4674
|
- 'export transitive="this is from app2: this is from app1: foo-value"'
|
|
4468
4675
|
- 'export transitiveWithSecret="this is from app2: secret1: $CL_prod_app1_SECRET1, secret2: $CL_prod_app2_SECRET2"'
|
|
4469
4676
|
- 'export someJson="[{\\"name\\": \\"app1\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app1-$CL_prod_app1_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app2\\", \\"url\\": \\"https://$(printf %s "pan-test-app-prod-app2-$CL_prod_app2_GCLOUD_RUN_canonicalHostSuffix" | awk ''{print tolower($0)}'')\\"}, {\\"name\\": \\"app3\\", \\"url\\": \\"https://app3.prod.test-app.pan.panter.cloud\\"}]"'
|
|
4470
|
-
- export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"
|
|
4677
|
+
- 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\\",\\"foo3\\",\\"foo2\\",\\"transitive\\",\\"transitiveWithSecret\\",\\"someJson\\"]"
|
|
4471
4678
|
- export RELEASE_NAME="pan-test-app-prod-app3"
|
|
4472
4679
|
- export HELM_EXPERIMENTAL_OCI="1"
|
|
4473
4680
|
- export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-app3"
|
|
4474
4681
|
- export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"
|
|
4475
4682
|
- export HELM_ARGS=""
|
|
4476
4683
|
- export COMPONENT_NAME="app3"
|
|
4477
|
-
-
|
|
4478
|
-
- echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"
|
|
4684
|
+
- collapseable_section_end "injectvars"
|
|
4479
4685
|
- kubectl config set-cluster "kube-pan-test-app-prod-app3" --server="$CL_prod_app3_KUBE_URL" --certificate-authority <(echo $CL_prod_app3_KUBE_CA_PEM | base64 -d) --embed-certs=true
|
|
4480
4686
|
- kubectl config set-credentials "kube-pan-test-app-prod-app3" --token="$CL_prod_app3_KUBE_TOKEN"
|
|
4481
4687
|
- kubectl config set-context "kube-pan-test-app-prod-app3" --cluster="kube-pan-test-app-prod-app3" --user="kube-pan-test-app-prod-app3" --namespace="pan-test-app-prod"
|