@catladder/pipeline 1.163.1 → 1.164.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/bundles/catladder-gitlab/index.js +1 -1
  2. package/dist/constants.js +1 -1
  3. package/dist/deploy/cloudRun/createJobs/cloudRunServices.js +2 -0
  4. package/dist/deploy/types/googleCloudRun.d.ts +8 -0
  5. package/dist/tsconfig.tsbuildinfo +1 -1
  6. package/examples/__snapshots__/cloud-run-memory-limit.test.ts.snap +0 -1958
  7. package/examples/__snapshots__/cloud-run-meteor-with-worker.test.ts.snap +1 -1935
  8. package/examples/__snapshots__/cloud-run-no-cpu-throttling.test.ts.snap +1 -1959
  9. package/examples/__snapshots__/cloud-run-no-service.test.ts.snap +1 -2011
  10. package/examples/__snapshots__/cloud-run-non-public.test.ts.snap +1 -1959
  11. package/examples/__snapshots__/cloud-run-post-stop-job.test.ts.snap +1 -1970
  12. package/examples/__snapshots__/cloud-run-service-custom-vpc.test.ts.snap +1342 -0
  13. package/examples/__snapshots__/cloud-run-service-gen2.test.ts.snap +1 -1959
  14. package/examples/__snapshots__/cloud-run-service-increase-timout.test.ts.snap +1 -1959
  15. package/examples/__snapshots__/cloud-run-service-with-volumes.test.ts.snap +1 -2003
  16. package/examples/__snapshots__/cloud-run-storybook.test.ts.snap +1 -1675
  17. package/examples/__snapshots__/cloud-run-with-ngnix.test.ts.snap +1 -1959
  18. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.test.ts.snap +1 -3935
  19. package/examples/__snapshots__/cloud-run-with-sql.test.ts.snap +1 -3458
  20. package/examples/__snapshots__/cloud-run-with-worker.test.ts.snap +1 -1967
  21. package/examples/__snapshots__/custom-build-job-with-tests.test.ts.snap +1 -1787
  22. package/examples/__snapshots__/custom-build-job.test.ts.snap +1 -1487
  23. package/examples/__snapshots__/custom-deploy.test.ts.snap +1 -1721
  24. package/examples/__snapshots__/custom-envs.test.ts.snap +1 -1175
  25. package/examples/__snapshots__/custom-sbom-java.test.ts.snap +1 -1495
  26. package/examples/__snapshots__/git-submodule.test.ts.snap +1 -1962
  27. package/examples/__snapshots__/kubernetes-application-customization.test.ts.snap +1 -2450
  28. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.test.ts.snap +1 -2462
  29. package/examples/__snapshots__/kubernetes-with-cloud-sql.test.ts.snap +1 -2470
  30. package/examples/__snapshots__/kubernetes-with-jobs.test.ts.snap +1 -4558
  31. package/examples/__snapshots__/kubernetes-with-mongodb.test.ts.snap +1 -2574
  32. package/examples/__snapshots__/local-dot-env.test.ts.snap +1 -1959
  33. package/examples/__snapshots__/meteor-kubernetes.test.ts.snap +1 -2503
  34. package/examples/__snapshots__/multiline-var.test.ts.snap +1 -4488
  35. package/examples/__snapshots__/native-app.test.ts.snap +1 -3167
  36. package/examples/__snapshots__/node-build-with-custom-image.test.ts.snap +1 -1959
  37. package/examples/__snapshots__/node-build-with-docker-additions.test.ts.snap +1 -1967
  38. package/examples/__snapshots__/rails-k8s-with-worker-dockerfile.test.ts.snap +1479 -2003
  39. package/examples/__snapshots__/rails-k8s-with-worker.test.ts.snap +1 -1995
  40. package/examples/__snapshots__/wait-for-other-deploy.test.ts.snap +1 -2105
  41. package/examples/cloud-run-memory-limit.test.ts +1 -8
  42. package/examples/cloud-run-meteor-with-worker.test.ts +2 -9
  43. package/examples/cloud-run-no-cpu-throttling.test.ts +2 -9
  44. package/examples/cloud-run-no-service.test.ts +2 -9
  45. package/examples/cloud-run-non-public.test.ts +2 -9
  46. package/examples/cloud-run-post-stop-job.test.ts +2 -9
  47. package/examples/cloud-run-service-custom-vpc.test.ts +11 -0
  48. package/examples/cloud-run-service-custom-vpc.ts +30 -0
  49. package/examples/cloud-run-service-gen2.test.ts +2 -9
  50. package/examples/cloud-run-service-increase-timout.test.ts +2 -9
  51. package/examples/cloud-run-service-with-volumes.test.ts +2 -9
  52. package/examples/cloud-run-storybook.test.ts +2 -9
  53. package/examples/cloud-run-with-ngnix.test.ts +2 -9
  54. package/examples/cloud-run-with-sql-reuse-db.test.ts +2 -9
  55. package/examples/cloud-run-with-sql.test.ts +2 -9
  56. package/examples/cloud-run-with-worker.test.ts +2 -9
  57. package/examples/custom-build-job-with-tests.test.ts +2 -9
  58. package/examples/custom-build-job.test.ts +2 -9
  59. package/examples/custom-deploy.test.ts +2 -9
  60. package/examples/custom-envs.test.ts +2 -9
  61. package/examples/custom-sbom-java.test.ts +2 -9
  62. package/examples/git-submodule.test.ts +2 -9
  63. package/examples/kubernetes-application-customization.test.ts +2 -9
  64. package/examples/kubernetes-with-cloud-sql-legacy.test.ts +2 -9
  65. package/examples/kubernetes-with-cloud-sql.test.ts +2 -9
  66. package/examples/kubernetes-with-jobs.test.ts +2 -9
  67. package/examples/kubernetes-with-mongodb.test.ts +2 -9
  68. package/examples/local-dot-env.test.ts +2 -9
  69. package/examples/meteor-kubernetes.test.ts +2 -9
  70. package/examples/multiline-var.test.ts +2 -9
  71. package/examples/native-app.test.ts +2 -9
  72. package/examples/node-build-with-custom-image.test.ts +2 -9
  73. package/examples/node-build-with-docker-additions.test.ts +2 -9
  74. package/examples/rails-k8s-with-worker-dockerfile.test.ts +2 -2
  75. package/examples/rails-k8s-with-worker.test.ts +2 -9
  76. package/examples/wait-for-other-deploy.test.ts +2 -9
  77. package/package.json +1 -1
  78. package/scripts/generate-examples-test.ts +3 -5
  79. package/src/deploy/cloudRun/createJobs/cloudRunServices.ts +2 -0
  80. package/src/deploy/types/googleCloudRun.ts +9 -0
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`matches snapshot for cloud-run-memory-limit local pipeline YAML 1`] = `
3
+ exports[`matches snapshot for kubernetes-with-mongodb local pipeline YAML 1`] = `
4
4
  "image: path/to/docker/jobs-default:the-version
5
5
  stages:
6
6
  - setup
@@ -1901,2576 +1901,3 @@ create release:
1901
1901
  needs: []
1902
1902
  "
1903
1903
  `;
1904
-
1905
- exports[`matches snapshot for kubernetes-with-mongodb 1`] = `
1906
- {
1907
- "mainBranch": {
1908
- "image": "path/to/docker/jobs-default:the-version",
1909
- "jobs": {
1910
- "api ↩️ Rollback ⚠️ | dev ": {
1911
- "allow_failure": true,
1912
- "artifacts": {
1913
- "reports": {
1914
- "dotenv": "gitlab_environment.env",
1915
- },
1916
- },
1917
- "environment": {
1918
- "action": "access",
1919
- "name": "dev/api",
1920
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
1921
- },
1922
- "image": "path/to/docker/kubernetes:the-version",
1923
- "interruptible": true,
1924
- "needs": [],
1925
- "retry": {
1926
- "max": 2,
1927
- "when": [
1928
- "runner_system_failure",
1929
- "stuck_or_timeout_failure",
1930
- ],
1931
- },
1932
- "rules": [
1933
- {
1934
- "when": "manual",
1935
- },
1936
- ],
1937
- "script": [
1938
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
1939
- "export ENV_SHORT="dev"",
1940
- "export APP_DIR="api"",
1941
- "export ENV_TYPE="dev"",
1942
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1943
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
1944
- "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")"",
1945
- "export HOST="api.dev.test-app.pan.panter.cloud"",
1946
- "export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
1947
- "export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
1948
- "export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
1949
- "export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
1950
- "export KUBE_NAMESPACE="pan-test-app-dev"",
1951
- "export KUBE_APP_NAME="api"",
1952
- "export KUBE_APP_NAME_PREFIX=""",
1953
- "export MONGODB_ROOT_PASSWORD="$CL_dev_api_MONGODB_ROOT_PASSWORD"",
1954
- "export MONGODB_REPLICASET_KEY="$CL_dev_api_MONGODB_REPLICASET_KEY"",
1955
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
1956
- "export RELEASE_NAME="pan-test-app-dev-api"",
1957
- "export HELM_EXPERIMENTAL_OCI="1"",
1958
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
1959
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
1960
- "export HELM_ARGS=""",
1961
- "export COMPONENT_NAME="api"",
1962
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
1963
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
1964
- "kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
1965
- "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
1966
- "kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
1967
- "kubectl config use-context "kube-pan-test-app-dev-api"",
1968
- "kubernetesRollback",
1969
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
1970
- ],
1971
- "stage": "rollback dev",
1972
- "variables": {
1973
- "GIT_STRATEGY": "none",
1974
- "KUBERNETES_CPU_REQUEST": "0.22",
1975
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
1976
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
1977
- },
1978
- },
1979
- "api 👮 lint": {
1980
- "cache": [
1981
- {
1982
- "key": "api-yarn",
1983
- "paths": [
1984
- "api/.yarn",
1985
- ],
1986
- "policy": "pull-push",
1987
- },
1988
- {
1989
- "key": "api-node-modules",
1990
- "paths": [
1991
- "api/node_modules",
1992
- ],
1993
- "policy": "pull-push",
1994
- },
1995
- ],
1996
- "image": "path/to/docker/jobs-default:the-version",
1997
- "interruptible": true,
1998
- "needs": [],
1999
- "retry": {
2000
- "max": 2,
2001
- "when": [
2002
- "runner_system_failure",
2003
- "stuck_or_timeout_failure",
2004
- ],
2005
- },
2006
- "script": [
2007
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2008
- "export APP_PATH="api"",
2009
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2010
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2011
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2012
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2013
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2014
- "cd api",
2015
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2016
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2017
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2018
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2019
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2020
- "yarn install --immutable",
2021
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2022
- "yarn lint",
2023
- ],
2024
- "stage": "test",
2025
- "variables": {
2026
- "KUBERNETES_CPU_REQUEST": "0.45",
2027
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2028
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2029
- },
2030
- },
2031
- "api 🔨 app | dev ": {
2032
- "artifacts": {
2033
- "expire_in": "1 day",
2034
- "paths": [
2035
- "api/__build_info.json",
2036
- "api/.next",
2037
- "api/dist",
2038
- ],
2039
- "reports": {
2040
- "junit": undefined,
2041
- },
2042
- "when": "always",
2043
- },
2044
- "cache": [
2045
- {
2046
- "key": "api-yarn",
2047
- "paths": [
2048
- "api/.yarn",
2049
- ],
2050
- "policy": "pull-push",
2051
- },
2052
- {
2053
- "key": "api-node-modules",
2054
- "paths": [
2055
- "api/node_modules",
2056
- ],
2057
- "policy": "pull-push",
2058
- },
2059
- {
2060
- "key": "api-next-cache",
2061
- "paths": [
2062
- "api/.next/cache",
2063
- ],
2064
- "policy": "pull-push",
2065
- },
2066
- ],
2067
- "image": "path/to/docker/jobs-default:the-version",
2068
- "interruptible": true,
2069
- "needs": [],
2070
- "retry": {
2071
- "max": 2,
2072
- "when": [
2073
- "runner_system_failure",
2074
- "stuck_or_timeout_failure",
2075
- ],
2076
- },
2077
- "script": [
2078
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2079
- "export ENV_SHORT="dev"",
2080
- "export APP_DIR="api"",
2081
- "export ENV_TYPE="dev"",
2082
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2083
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2084
- "export BUILD_INFO_CURRENT_VERSION="$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")"",
2085
- "export HOST="api.dev.test-app.pan.panter.cloud"",
2086
- "export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
2087
- "export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
2088
- "export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
2089
- "export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
2090
- "export KUBE_NAMESPACE="pan-test-app-dev"",
2091
- "export KUBE_APP_NAME="api"",
2092
- "export KUBE_APP_NAME_PREFIX=""",
2093
- "export MONGODB_ROOT_PASSWORD="$CL_dev_api_MONGODB_ROOT_PASSWORD"",
2094
- "export MONGODB_REPLICASET_KEY="$CL_dev_api_MONGODB_REPLICASET_KEY"",
2095
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2096
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2097
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
2098
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2099
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2100
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2101
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2102
- "cd api",
2103
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2104
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2105
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2106
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2107
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2108
- "yarn install --immutable",
2109
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2110
- "yarn build",
2111
- ],
2112
- "stage": "build",
2113
- "variables": {
2114
- "KUBERNETES_CPU_REQUEST": "0.45",
2115
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2116
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2117
- },
2118
- },
2119
- "api 🔨 docker | dev ": {
2120
- "cache": [
2121
- {
2122
- "key": "api-yarn",
2123
- "paths": [
2124
- "api/.yarn",
2125
- ],
2126
- "policy": "pull",
2127
- },
2128
- ],
2129
- "image": "path/to/docker/docker-build:the-version",
2130
- "interruptible": true,
2131
- "needs": [
2132
- "api 🔨 app | dev ",
2133
- ],
2134
- "retry": {
2135
- "max": 2,
2136
- "when": [
2137
- "runner_system_failure",
2138
- "stuck_or_timeout_failure",
2139
- ],
2140
- },
2141
- "script": [
2142
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2143
- "export APP_DIR="api"",
2144
- "export DOCKER_BUILD_CONTEXT="."",
2145
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2146
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
2147
- "export DOCKER_IMAGE_NAME="dev/api"",
2148
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2149
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2150
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2151
- RUN yarn plugin import workspace-tools
2152
- RUN yarn workspaces focus --production && yarn rebuild"",
2153
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
2154
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2155
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2156
- COPY --chown=node:node .yarn /app/.yarn"",
2157
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2158
- "ensureNodeDockerfile",
2159
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2160
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2161
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
2162
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
2163
- "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",
2164
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
2165
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
2166
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2167
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2168
- "docker push $DOCKER_CACHE_IMAGE",
2169
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
2170
- ],
2171
- "services": [
2172
- {
2173
- "command": [
2174
- "--tls=false",
2175
- ],
2176
- "name": "docker:24.0.6-dind",
2177
- },
2178
- ],
2179
- "stage": "build",
2180
- "variables": {
2181
- "DOCKER_BUILDKIT": "1",
2182
- "DOCKER_DRIVER": "overlay2",
2183
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2184
- "DOCKER_TLS_CERTDIR": "",
2185
- "KUBERNETES_CPU_REQUEST": "0.45",
2186
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2187
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2188
- },
2189
- },
2190
- "api 🚀 Deploy | dev ": {
2191
- "allow_failure": false,
2192
- "artifacts": {
2193
- "reports": {
2194
- "dotenv": "gitlab_environment.env",
2195
- },
2196
- },
2197
- "environment": {
2198
- "auto_stop_in": "4 weeks",
2199
- "name": "dev/api",
2200
- "on_stop": "api 🛑 Stop ⚠️ | dev ",
2201
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2202
- },
2203
- "image": "path/to/docker/kubernetes:the-version",
2204
- "interruptible": true,
2205
- "needs": [
2206
- {
2207
- "artifacts": false,
2208
- "job": "api 👮 lint",
2209
- },
2210
- {
2211
- "artifacts": false,
2212
- "job": "api 🔨 app | dev ",
2213
- },
2214
- {
2215
- "artifacts": false,
2216
- "job": "api 🔨 docker | dev ",
2217
- },
2218
- {
2219
- "artifacts": false,
2220
- "job": "api 🧪 test",
2221
- },
2222
- {
2223
- "artifacts": true,
2224
- "job": "api 🧾 sbom | dev ",
2225
- },
2226
- {
2227
- "artifacts": false,
2228
- "job": "api 🛡 audit",
2229
- },
2230
- ],
2231
- "retry": {
2232
- "max": 2,
2233
- "when": [
2234
- "runner_system_failure",
2235
- "stuck_or_timeout_failure",
2236
- ],
2237
- },
2238
- "rules": [
2239
- {
2240
- "when": "on_success",
2241
- },
2242
- ],
2243
- "script": [
2244
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2245
- "export ENV_SHORT="dev"",
2246
- "export APP_DIR="api"",
2247
- "export ENV_TYPE="dev"",
2248
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2249
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2250
- "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")"",
2251
- "export HOST="api.dev.test-app.pan.panter.cloud"",
2252
- "export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
2253
- "export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
2254
- "export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
2255
- "export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
2256
- "export KUBE_NAMESPACE="pan-test-app-dev"",
2257
- "export KUBE_APP_NAME="api"",
2258
- "export KUBE_APP_NAME_PREFIX=""",
2259
- "export MONGODB_ROOT_PASSWORD="$CL_dev_api_MONGODB_ROOT_PASSWORD"",
2260
- "export MONGODB_REPLICASET_KEY="$CL_dev_api_MONGODB_REPLICASET_KEY"",
2261
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2262
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2263
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
2264
- "export DOCKER_IMAGE_NAME="dev/api"",
2265
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2266
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2267
- "export RELEASE_NAME="pan-test-app-dev-api"",
2268
- "export HELM_EXPERIMENTAL_OCI="1"",
2269
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
2270
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2271
- "export HELM_ARGS=""",
2272
- "export COMPONENT_NAME="api"",
2273
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2274
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2275
- "kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2276
- "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
2277
- "kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
2278
- "kubectl config use-context "kube-pan-test-app-dev-api"",
2279
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
2280
- "cat > __all_values.yml <<EOF
2281
- env:
2282
- secret:
2283
- MONGODB_ROOT_PASSWORD: |-
2284
- $(printf %s "$CL_dev_api_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
2285
- MONGODB_REPLICASET_KEY: |-
2286
- $(printf %s "$CL_dev_api_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
2287
- MONGO_URL: |-
2288
- mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
2289
- MONGO_OPLOG_URL: |-
2290
- mongodb://root:$CL_dev_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
2291
- public:
2292
- ENV_SHORT: |-
2293
- dev
2294
- APP_DIR: |-
2295
- api
2296
- ENV_TYPE: |-
2297
- dev
2298
- BUILD_INFO_BUILD_ID: |-
2299
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
2300
- BUILD_INFO_BUILD_TIME: |-
2301
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
2302
- BUILD_INFO_CURRENT_VERSION: |-
2303
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
2304
- HOST: |-
2305
- api.dev.test-app.pan.panter.cloud
2306
- ROOT_URL: |-
2307
- https://api.dev.test-app.pan.panter.cloud
2308
- HOST_INTERNAL: |-
2309
- api.dev.test-app.pan.panter.cloud
2310
- HOST_CANONICAL: |-
2311
- api.dev.test-app.pan.panter.cloud
2312
- ROOT_URL_INTERNAL: |-
2313
- https://api.dev.test-app.pan.panter.cloud
2314
- KUBE_NAMESPACE: |-
2315
- pan-test-app-dev
2316
- KUBE_APP_NAME: |-
2317
- api
2318
- KUBE_APP_NAME_PREFIX: ""
2319
- _ALL_ENV_VAR_KEYS: |-
2320
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
2321
- application:
2322
- host: |-
2323
- api.dev.test-app.pan.panter.cloud
2324
- command: |-
2325
- node main.js
2326
- livenessProbe:
2327
- httpGet:
2328
- path: |-
2329
- __health
2330
- readinessProbe:
2331
- httpGet:
2332
- path: |-
2333
- __health
2334
- startupProbe:
2335
- httpGet:
2336
- path: |-
2337
- __health
2338
- mongodb:
2339
- enabled: true
2340
- auth:
2341
- enabled: true
2342
- rootPassword: |-
2343
- $CL_dev_api_MONGODB_ROOT_PASSWORD
2344
- replicaSetKey: |-
2345
- $CL_dev_api_MONGODB_REPLICASET_KEY
2346
- persistence:
2347
- storageClass: |-
2348
- premium-rwo
2349
- backup:
2350
- enabled: false
2351
- hostToBackup: |-
2352
- api-mongodb-0.api-mongodb-headless.pan-test-app-dev.svc.cluster.local:27017
2353
- pvcToBackup: |-
2354
- datadir-api-mongodb-0
2355
- image: |-
2356
- mrelite/kubectlmongoshell:v1.0
2357
- schedule: |-
2358
- 0 4 * * *
2359
- volumeSnapshotClass: |-
2360
- snapshotclass
2361
- architecture: |-
2362
- replicaset
2363
- tolerations:
2364
- - key: |-
2365
- mongodb
2366
- operator: |-
2367
- Equal
2368
- value: |-
2369
- true
2370
- effect: |-
2371
- NoSchedule
2372
-
2373
- EOF
2374
- ",
2375
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
2376
- "kubernetesCreateSecret",
2377
- "kubernetesDeploy",
2378
- "echo 'Uploading SBOM to Dependency Track'",
2379
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
2380
- "echo deployment successful 😻",
2381
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
2382
- ],
2383
- "stage": "deploy dev",
2384
- "variables": {
2385
- "KUBERNETES_CPU_REQUEST": "0.22",
2386
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2387
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2388
- },
2389
- },
2390
- "api 🛑 Stop ⚠️ | dev ": {
2391
- "allow_failure": true,
2392
- "artifacts": {
2393
- "reports": {
2394
- "dotenv": "gitlab_environment.env",
2395
- },
2396
- },
2397
- "environment": {
2398
- "action": "stop",
2399
- "name": "dev/api",
2400
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2401
- },
2402
- "image": "path/to/docker/kubernetes:the-version",
2403
- "interruptible": true,
2404
- "needs": [],
2405
- "retry": {
2406
- "max": 2,
2407
- "when": [
2408
- "runner_system_failure",
2409
- "stuck_or_timeout_failure",
2410
- ],
2411
- },
2412
- "rules": [
2413
- {
2414
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
2415
- "when": "on_success",
2416
- },
2417
- {
2418
- "when": "manual",
2419
- },
2420
- ],
2421
- "script": [
2422
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2423
- "export ENV_SHORT="dev"",
2424
- "export APP_DIR="api"",
2425
- "export ENV_TYPE="dev"",
2426
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2427
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2428
- "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")"",
2429
- "export HOST="api.dev.test-app.pan.panter.cloud"",
2430
- "export ROOT_URL="https://api.dev.test-app.pan.panter.cloud"",
2431
- "export HOST_INTERNAL="api.dev.test-app.pan.panter.cloud"",
2432
- "export HOST_CANONICAL="api.dev.test-app.pan.panter.cloud"",
2433
- "export ROOT_URL_INTERNAL="https://api.dev.test-app.pan.panter.cloud"",
2434
- "export KUBE_NAMESPACE="pan-test-app-dev"",
2435
- "export KUBE_APP_NAME="api"",
2436
- "export KUBE_APP_NAME_PREFIX=""",
2437
- "export MONGODB_ROOT_PASSWORD="$CL_dev_api_MONGODB_ROOT_PASSWORD"",
2438
- "export MONGODB_REPLICASET_KEY="$CL_dev_api_MONGODB_REPLICASET_KEY"",
2439
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2440
- "export RELEASE_NAME="pan-test-app-dev-api"",
2441
- "export HELM_EXPERIMENTAL_OCI="1"",
2442
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
2443
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2444
- "export HELM_ARGS=""",
2445
- "export COMPONENT_NAME="api"",
2446
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2447
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2448
- "kubectl config set-cluster "kube-pan-test-app-dev-api" --server="$CL_dev_api_KUBE_URL" --certificate-authority <(echo $CL_dev_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2449
- "kubectl config set-credentials "kube-pan-test-app-dev-api" --token="$CL_dev_api_KUBE_TOKEN"",
2450
- "kubectl config set-context "kube-pan-test-app-dev-api" --cluster="kube-pan-test-app-dev-api" --user="kube-pan-test-app-dev-api" --namespace="pan-test-app-dev"",
2451
- "kubectl config use-context "kube-pan-test-app-dev-api"",
2452
- "kubernetesDelete",
2453
- "echo 'Disabling component in Dependency Track'",
2454
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.dev.test-app.pan.panter.cloud" || true",
2455
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
2456
- ],
2457
- "stage": "stop dev",
2458
- "variables": {
2459
- "GIT_STRATEGY": "none",
2460
- "KUBERNETES_CPU_REQUEST": "0.22",
2461
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2462
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2463
- },
2464
- },
2465
- "api 🛡 audit": {
2466
- "allow_failure": true,
2467
- "image": "path/to/docker/jobs-default:the-version",
2468
- "interruptible": true,
2469
- "needs": [],
2470
- "retry": {
2471
- "max": 2,
2472
- "when": [
2473
- "runner_system_failure",
2474
- "stuck_or_timeout_failure",
2475
- ],
2476
- },
2477
- "script": [
2478
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2479
- "export APP_PATH="api"",
2480
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2481
- "cd api",
2482
- "yarn npm audit --environment production",
2483
- ],
2484
- "stage": "test",
2485
- "variables": {
2486
- "KUBERNETES_CPU_REQUEST": "0.45",
2487
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2488
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2489
- },
2490
- },
2491
- "api 🧪 test": {
2492
- "cache": [
2493
- {
2494
- "key": "api-yarn",
2495
- "paths": [
2496
- "api/.yarn",
2497
- ],
2498
- "policy": "pull-push",
2499
- },
2500
- {
2501
- "key": "api-node-modules",
2502
- "paths": [
2503
- "api/node_modules",
2504
- ],
2505
- "policy": "pull-push",
2506
- },
2507
- ],
2508
- "image": "path/to/docker/jobs-testing-chrome:the-version",
2509
- "interruptible": true,
2510
- "needs": [],
2511
- "retry": {
2512
- "max": 2,
2513
- "when": [
2514
- "runner_system_failure",
2515
- "stuck_or_timeout_failure",
2516
- ],
2517
- },
2518
- "script": [
2519
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2520
- "export APP_PATH="api"",
2521
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2522
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2523
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2524
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2525
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2526
- "cd api",
2527
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2528
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2529
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2530
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2531
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2532
- "yarn install --immutable",
2533
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2534
- "yarn test",
2535
- ],
2536
- "stage": "test",
2537
- "variables": {
2538
- "KUBERNETES_CPU_REQUEST": "0.45",
2539
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2540
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2541
- },
2542
- },
2543
- "api 🧾 sbom | dev ": {
2544
- "allow_failure": true,
2545
- "artifacts": {
2546
- "paths": [
2547
- "__sbom.json",
2548
- ],
2549
- },
2550
- "image": "aquasec/trivy:0.38.3",
2551
- "interruptible": true,
2552
- "needs": [],
2553
- "retry": {
2554
- "max": 2,
2555
- "when": [
2556
- "runner_system_failure",
2557
- "stuck_or_timeout_failure",
2558
- ],
2559
- },
2560
- "script": [
2561
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2562
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2563
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
2564
- ],
2565
- "stage": "build",
2566
- "variables": {},
2567
- },
2568
- },
2569
- "stages": [
2570
- "setup",
2571
- "setup dev",
2572
- "setup review",
2573
- "setup stage",
2574
- "setup prod",
2575
- "test",
2576
- "test dev",
2577
- "test review",
2578
- "test stage",
2579
- "test prod",
2580
- "build",
2581
- "build dev",
2582
- "build review",
2583
- "build stage",
2584
- "build prod",
2585
- "deploy",
2586
- "deploy dev",
2587
- "deploy review",
2588
- "deploy stage",
2589
- "deploy prod",
2590
- "verify",
2591
- "verify dev",
2592
- "verify review",
2593
- "verify stage",
2594
- "verify prod",
2595
- "rollback",
2596
- "rollback dev",
2597
- "rollback review",
2598
- "rollback stage",
2599
- "rollback prod",
2600
- "stop",
2601
- "stop dev",
2602
- "stop review",
2603
- "stop stage",
2604
- "stop prod",
2605
- ],
2606
- "variables": {
2607
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
2608
- "CACHE_COMPRESSION_LEVEL": "fast",
2609
- "FF_USE_FASTZIP": "true",
2610
- "GIT_DEPTH": "1",
2611
- "TRANSFER_METER_FREQUENCY": "5s",
2612
- },
2613
- "workflow": {
2614
- "rules": [
2615
- {
2616
- "if": "$CI_COMMIT_TAG",
2617
- },
2618
- {
2619
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
2620
- "when": "never",
2621
- },
2622
- {
2623
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
2624
- "when": "never",
2625
- },
2626
- {
2627
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
2628
- },
2629
- {
2630
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
2631
- },
2632
- {
2633
- "if": "$CI_MERGE_REQUEST_ID",
2634
- },
2635
- ],
2636
- },
2637
- },
2638
- "mr": {
2639
- "image": "path/to/docker/jobs-default:the-version",
2640
- "jobs": {
2641
- "api ↩️ Rollback ⚠️ | review ": {
2642
- "allow_failure": true,
2643
- "artifacts": {
2644
- "reports": {
2645
- "dotenv": "gitlab_environment.env",
2646
- },
2647
- },
2648
- "environment": {
2649
- "action": "access",
2650
- "name": "review/$CI_COMMIT_REF_NAME/api",
2651
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2652
- },
2653
- "image": "path/to/docker/kubernetes:the-version",
2654
- "interruptible": true,
2655
- "needs": [],
2656
- "retry": {
2657
- "max": 2,
2658
- "when": [
2659
- "runner_system_failure",
2660
- "stuck_or_timeout_failure",
2661
- ],
2662
- },
2663
- "rules": [
2664
- {
2665
- "when": "manual",
2666
- },
2667
- ],
2668
- "script": [
2669
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2670
- "export ENV_SHORT="review"",
2671
- "export APP_DIR="api"",
2672
- "export ENV_TYPE="review"",
2673
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2674
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2675
- "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")"",
2676
- "export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2677
- "export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2678
- "export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2679
- "export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2680
- "export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2681
- "export KUBE_NAMESPACE="pan-test-app-review"",
2682
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
2683
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
2684
- "export MONGODB_ROOT_PASSWORD="$CL_review_api_MONGODB_ROOT_PASSWORD"",
2685
- "export MONGODB_REPLICASET_KEY="$CL_review_api_MONGODB_REPLICASET_KEY"",
2686
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2687
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
2688
- "export HELM_EXPERIMENTAL_OCI="1"",
2689
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
2690
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
2691
- "export HELM_ARGS=""",
2692
- "export COMPONENT_NAME="api"",
2693
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2694
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2695
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
2696
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
2697
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
2698
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
2699
- "kubernetesRollback",
2700
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
2701
- ],
2702
- "stage": "rollback review",
2703
- "variables": {
2704
- "GIT_STRATEGY": "none",
2705
- "KUBERNETES_CPU_REQUEST": "0.22",
2706
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
2707
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
2708
- },
2709
- },
2710
- "api 👮 lint": {
2711
- "cache": [
2712
- {
2713
- "key": "api-yarn",
2714
- "paths": [
2715
- "api/.yarn",
2716
- ],
2717
- "policy": "pull-push",
2718
- },
2719
- {
2720
- "key": "api-node-modules",
2721
- "paths": [
2722
- "api/node_modules",
2723
- ],
2724
- "policy": "pull-push",
2725
- },
2726
- ],
2727
- "image": "path/to/docker/jobs-default:the-version",
2728
- "interruptible": true,
2729
- "needs": [],
2730
- "retry": {
2731
- "max": 2,
2732
- "when": [
2733
- "runner_system_failure",
2734
- "stuck_or_timeout_failure",
2735
- ],
2736
- },
2737
- "script": [
2738
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2739
- "export APP_PATH="api"",
2740
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2741
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2742
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2743
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2744
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2745
- "cd api",
2746
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2747
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2748
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2749
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2750
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2751
- "yarn install --immutable",
2752
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2753
- "yarn lint",
2754
- ],
2755
- "stage": "test",
2756
- "variables": {
2757
- "KUBERNETES_CPU_REQUEST": "0.45",
2758
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2759
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2760
- },
2761
- },
2762
- "api 🔨 app | review ": {
2763
- "artifacts": {
2764
- "expire_in": "1 day",
2765
- "paths": [
2766
- "api/__build_info.json",
2767
- "api/.next",
2768
- "api/dist",
2769
- ],
2770
- "reports": {
2771
- "junit": undefined,
2772
- },
2773
- "when": "always",
2774
- },
2775
- "cache": [
2776
- {
2777
- "key": "api-yarn",
2778
- "paths": [
2779
- "api/.yarn",
2780
- ],
2781
- "policy": "pull-push",
2782
- },
2783
- {
2784
- "key": "api-node-modules",
2785
- "paths": [
2786
- "api/node_modules",
2787
- ],
2788
- "policy": "pull-push",
2789
- },
2790
- {
2791
- "key": "api-next-cache",
2792
- "paths": [
2793
- "api/.next/cache",
2794
- ],
2795
- "policy": "pull-push",
2796
- },
2797
- ],
2798
- "image": "path/to/docker/jobs-default:the-version",
2799
- "interruptible": true,
2800
- "needs": [],
2801
- "retry": {
2802
- "max": 2,
2803
- "when": [
2804
- "runner_system_failure",
2805
- "stuck_or_timeout_failure",
2806
- ],
2807
- },
2808
- "script": [
2809
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2810
- "export ENV_SHORT="review"",
2811
- "export APP_DIR="api"",
2812
- "export ENV_TYPE="review"",
2813
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2814
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2815
- "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")"",
2816
- "export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2817
- "export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2818
- "export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2819
- "export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2820
- "export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2821
- "export KUBE_NAMESPACE="pan-test-app-review"",
2822
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
2823
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
2824
- "export MONGODB_ROOT_PASSWORD="$CL_review_api_MONGODB_ROOT_PASSWORD"",
2825
- "export MONGODB_REPLICASET_KEY="$CL_review_api_MONGODB_REPLICASET_KEY"",
2826
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2827
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2828
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
2829
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2830
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2831
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2832
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2833
- "cd api",
2834
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
2835
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
2836
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
2837
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
2838
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
2839
- "yarn install --immutable",
2840
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
2841
- "yarn build",
2842
- ],
2843
- "stage": "build",
2844
- "variables": {
2845
- "KUBERNETES_CPU_REQUEST": "0.45",
2846
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
2847
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2848
- },
2849
- },
2850
- "api 🔨 docker | review ": {
2851
- "cache": [
2852
- {
2853
- "key": "api-yarn",
2854
- "paths": [
2855
- "api/.yarn",
2856
- ],
2857
- "policy": "pull",
2858
- },
2859
- ],
2860
- "image": "path/to/docker/docker-build:the-version",
2861
- "interruptible": true,
2862
- "needs": [
2863
- "api 🔨 app | review ",
2864
- ],
2865
- "retry": {
2866
- "max": 2,
2867
- "when": [
2868
- "runner_system_failure",
2869
- "stuck_or_timeout_failure",
2870
- ],
2871
- },
2872
- "script": [
2873
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2874
- "export APP_DIR="api"",
2875
- "export DOCKER_BUILD_CONTEXT="."",
2876
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2877
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
2878
- "export DOCKER_IMAGE_NAME="review/api"",
2879
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2880
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2881
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
2882
- RUN yarn plugin import workspace-tools
2883
- RUN yarn workspaces focus --production && yarn rebuild"",
2884
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
2885
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
2886
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
2887
- COPY --chown=node:node .yarn /app/.yarn"",
2888
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
2889
- "ensureNodeDockerfile",
2890
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
2891
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
2892
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
2893
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
2894
- "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",
2895
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
2896
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
2897
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
2898
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
2899
- "docker push $DOCKER_CACHE_IMAGE",
2900
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
2901
- ],
2902
- "services": [
2903
- {
2904
- "command": [
2905
- "--tls=false",
2906
- ],
2907
- "name": "docker:24.0.6-dind",
2908
- },
2909
- ],
2910
- "stage": "build",
2911
- "variables": {
2912
- "DOCKER_BUILDKIT": "1",
2913
- "DOCKER_DRIVER": "overlay2",
2914
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
2915
- "DOCKER_TLS_CERTDIR": "",
2916
- "KUBERNETES_CPU_REQUEST": "0.45",
2917
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
2918
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
2919
- },
2920
- },
2921
- "api 🚀 Deploy | review ": {
2922
- "allow_failure": false,
2923
- "artifacts": {
2924
- "reports": {
2925
- "dotenv": "gitlab_environment.env",
2926
- },
2927
- },
2928
- "environment": {
2929
- "auto_stop_in": "1 week",
2930
- "name": "review/$CI_COMMIT_REF_NAME/api",
2931
- "on_stop": "api 🛑 Stop ⚠️ | review ",
2932
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
2933
- },
2934
- "image": "path/to/docker/kubernetes:the-version",
2935
- "interruptible": true,
2936
- "needs": [
2937
- {
2938
- "artifacts": false,
2939
- "job": "api 👮 lint",
2940
- },
2941
- {
2942
- "artifacts": false,
2943
- "job": "api 🔨 app | review ",
2944
- },
2945
- {
2946
- "artifacts": false,
2947
- "job": "api 🔨 docker | review ",
2948
- },
2949
- {
2950
- "artifacts": false,
2951
- "job": "api 🧪 test",
2952
- },
2953
- {
2954
- "artifacts": true,
2955
- "job": "api 🧾 sbom | review ",
2956
- },
2957
- {
2958
- "artifacts": false,
2959
- "job": "api 🛡 audit",
2960
- },
2961
- ],
2962
- "retry": {
2963
- "max": 2,
2964
- "when": [
2965
- "runner_system_failure",
2966
- "stuck_or_timeout_failure",
2967
- ],
2968
- },
2969
- "rules": [
2970
- {
2971
- "when": "on_success",
2972
- },
2973
- ],
2974
- "script": [
2975
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
2976
- "export ENV_SHORT="review"",
2977
- "export APP_DIR="api"",
2978
- "export ENV_TYPE="review"",
2979
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
2980
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
2981
- "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")"",
2982
- "export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2983
- "export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2984
- "export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2985
- "export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2986
- "export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
2987
- "export KUBE_NAMESPACE="pan-test-app-review"",
2988
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
2989
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
2990
- "export MONGODB_ROOT_PASSWORD="$CL_review_api_MONGODB_ROOT_PASSWORD"",
2991
- "export MONGODB_REPLICASET_KEY="$CL_review_api_MONGODB_REPLICASET_KEY"",
2992
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
2993
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
2994
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
2995
- "export DOCKER_IMAGE_NAME="review/api"",
2996
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
2997
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
2998
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
2999
- "export HELM_EXPERIMENTAL_OCI="1"",
3000
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
3001
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3002
- "export HELM_ARGS=""",
3003
- "export COMPONENT_NAME="api"",
3004
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3005
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3006
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3007
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
3008
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
3009
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
3010
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
3011
- "cat > __all_values.yml <<EOF
3012
- env:
3013
- secret:
3014
- MONGODB_ROOT_PASSWORD: |-
3015
- $(printf %s "$CL_review_api_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
3016
- MONGODB_REPLICASET_KEY: |-
3017
- $(printf %s "$CL_review_api_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
3018
- MONGO_URL: |-
3019
- mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-0.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-1.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
3020
- MONGO_OPLOG_URL: |-
3021
- mongodb://root:$CL_review_api_MONGODB_ROOT_PASSWORD@$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-0.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017,$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-1.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
3022
- public:
3023
- ENV_SHORT: |-
3024
- review
3025
- APP_DIR: |-
3026
- api
3027
- ENV_TYPE: |-
3028
- review
3029
- BUILD_INFO_BUILD_ID: |-
3030
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3031
- BUILD_INFO_BUILD_TIME: |-
3032
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3033
- BUILD_INFO_CURRENT_VERSION: |-
3034
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
3035
- HOST: |-
3036
- $(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
3037
- ROOT_URL: |-
3038
- $(printf %s "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
3039
- HOST_INTERNAL: |-
3040
- $(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
3041
- HOST_CANONICAL: |-
3042
- $(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
3043
- ROOT_URL_INTERNAL: |-
3044
- $(printf %s "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
3045
- KUBE_NAMESPACE: |-
3046
- pan-test-app-review
3047
- KUBE_APP_NAME: |-
3048
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" | sed 's/^/ /')
3049
- KUBE_APP_NAME_PREFIX: |-
3050
- $(printf %s "$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-" | sed 's/^/ /')
3051
- _ALL_ENV_VAR_KEYS: |-
3052
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
3053
- application:
3054
- host: |-
3055
- $(printf %s "api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" | sed 's/^/ /')
3056
- command: |-
3057
- node main.js
3058
- livenessProbe:
3059
- httpGet:
3060
- path: |-
3061
- __health
3062
- readinessProbe:
3063
- httpGet:
3064
- path: |-
3065
- __health
3066
- startupProbe:
3067
- httpGet:
3068
- path: |-
3069
- __health
3070
- mongodb:
3071
- enabled: true
3072
- auth:
3073
- enabled: true
3074
- rootPassword: |-
3075
- $CL_review_api_MONGODB_ROOT_PASSWORD
3076
- replicaSetKey: |-
3077
- $CL_review_api_MONGODB_REPLICASET_KEY
3078
- persistence:
3079
- storageClass: |-
3080
- premium-rwo
3081
- backup:
3082
- enabled: false
3083
- hostToBackup: |-
3084
- $([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-0.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-headless.pan-test-app-review.svc.cluster.local:27017
3085
- pvcToBackup: |-
3086
- datadir-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api-mongodb-0
3087
- image: |-
3088
- mrelite/kubectlmongoshell:v1.0
3089
- schedule: |-
3090
- 0 4 * * *
3091
- volumeSnapshotClass: |-
3092
- snapshotclass
3093
- architecture: |-
3094
- replicaset
3095
- tolerations:
3096
- - key: |-
3097
- mongodb
3098
- operator: |-
3099
- Equal
3100
- value: |-
3101
- true
3102
- effect: |-
3103
- NoSchedule
3104
-
3105
- EOF
3106
- ",
3107
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
3108
- "kubernetesCreateSecret",
3109
- "kubernetesDeploy",
3110
- "echo 'Uploading SBOM to Dependency Track'",
3111
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
3112
- "echo deployment successful 😻",
3113
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
3114
- ],
3115
- "stage": "deploy review",
3116
- "variables": {
3117
- "KUBERNETES_CPU_REQUEST": "0.22",
3118
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3119
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3120
- },
3121
- },
3122
- "api 🛑 Stop ⚠️ | review ": {
3123
- "allow_failure": true,
3124
- "artifacts": {
3125
- "reports": {
3126
- "dotenv": "gitlab_environment.env",
3127
- },
3128
- },
3129
- "environment": {
3130
- "action": "stop",
3131
- "name": "review/$CI_COMMIT_REF_NAME/api",
3132
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3133
- },
3134
- "image": "path/to/docker/kubernetes:the-version",
3135
- "interruptible": true,
3136
- "needs": [],
3137
- "retry": {
3138
- "max": 2,
3139
- "when": [
3140
- "runner_system_failure",
3141
- "stuck_or_timeout_failure",
3142
- ],
3143
- },
3144
- "rules": [
3145
- {
3146
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
3147
- "when": "on_success",
3148
- },
3149
- {
3150
- "when": "manual",
3151
- },
3152
- ],
3153
- "script": [
3154
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3155
- "export ENV_SHORT="review"",
3156
- "export APP_DIR="api"",
3157
- "export ENV_TYPE="review"",
3158
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3159
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3160
- "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")"",
3161
- "export HOST="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
3162
- "export ROOT_URL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
3163
- "export HOST_INTERNAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
3164
- "export HOST_CANONICAL="api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
3165
- "export ROOT_URL_INTERNAL="https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud"",
3166
- "export KUBE_NAMESPACE="pan-test-app-review"",
3167
- "export KUBE_APP_NAME="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
3168
- "export KUBE_APP_NAME_PREFIX="$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-"",
3169
- "export MONGODB_ROOT_PASSWORD="$CL_review_api_MONGODB_ROOT_PASSWORD"",
3170
- "export MONGODB_REPLICASET_KEY="$CL_review_api_MONGODB_REPLICASET_KEY"",
3171
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
3172
- "export RELEASE_NAME="pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
3173
- "export HELM_EXPERIMENTAL_OCI="1"",
3174
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
3175
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3176
- "export HELM_ARGS=""",
3177
- "export COMPONENT_NAME="api"",
3178
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3179
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3180
- "kubectl config set-cluster "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --server="$CL_review_api_KUBE_URL" --certificate-authority <(echo $CL_review_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3181
- "kubectl config set-credentials "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --token="$CL_review_api_KUBE_TOKEN"",
3182
- "kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api" --namespace="pan-test-app-review"",
3183
- "kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-api"",
3184
- "kubernetesDelete",
3185
- "echo 'Disabling component in Dependency Track'",
3186
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" || true",
3187
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
3188
- ],
3189
- "stage": "stop review",
3190
- "variables": {
3191
- "GIT_STRATEGY": "none",
3192
- "KUBERNETES_CPU_REQUEST": "0.22",
3193
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3194
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3195
- },
3196
- },
3197
- "api 🛡 audit": {
3198
- "allow_failure": true,
3199
- "image": "path/to/docker/jobs-default:the-version",
3200
- "interruptible": true,
3201
- "needs": [],
3202
- "retry": {
3203
- "max": 2,
3204
- "when": [
3205
- "runner_system_failure",
3206
- "stuck_or_timeout_failure",
3207
- ],
3208
- },
3209
- "script": [
3210
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3211
- "export APP_PATH="api"",
3212
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3213
- "cd api",
3214
- "yarn npm audit --environment production",
3215
- ],
3216
- "stage": "test",
3217
- "variables": {
3218
- "KUBERNETES_CPU_REQUEST": "0.45",
3219
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3220
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3221
- },
3222
- },
3223
- "api 🧪 test": {
3224
- "cache": [
3225
- {
3226
- "key": "api-yarn",
3227
- "paths": [
3228
- "api/.yarn",
3229
- ],
3230
- "policy": "pull-push",
3231
- },
3232
- {
3233
- "key": "api-node-modules",
3234
- "paths": [
3235
- "api/node_modules",
3236
- ],
3237
- "policy": "pull-push",
3238
- },
3239
- ],
3240
- "image": "path/to/docker/jobs-testing-chrome:the-version",
3241
- "interruptible": true,
3242
- "needs": [],
3243
- "retry": {
3244
- "max": 2,
3245
- "when": [
3246
- "runner_system_failure",
3247
- "stuck_or_timeout_failure",
3248
- ],
3249
- },
3250
- "script": [
3251
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3252
- "export APP_PATH="api"",
3253
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3254
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3255
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3256
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3257
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3258
- "cd api",
3259
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3260
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3261
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3262
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3263
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
3264
- "yarn install --immutable",
3265
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
3266
- "yarn test",
3267
- ],
3268
- "stage": "test",
3269
- "variables": {
3270
- "KUBERNETES_CPU_REQUEST": "0.45",
3271
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3272
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3273
- },
3274
- },
3275
- "api 🧾 sbom | review ": {
3276
- "allow_failure": true,
3277
- "artifacts": {
3278
- "paths": [
3279
- "__sbom.json",
3280
- ],
3281
- },
3282
- "image": "aquasec/trivy:0.38.3",
3283
- "interruptible": true,
3284
- "needs": [],
3285
- "retry": {
3286
- "max": 2,
3287
- "when": [
3288
- "runner_system_failure",
3289
- "stuck_or_timeout_failure",
3290
- ],
3291
- },
3292
- "script": [
3293
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3294
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3295
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
3296
- ],
3297
- "stage": "build",
3298
- "variables": {},
3299
- },
3300
- },
3301
- "stages": [
3302
- "setup",
3303
- "setup dev",
3304
- "setup review",
3305
- "setup stage",
3306
- "setup prod",
3307
- "test",
3308
- "test dev",
3309
- "test review",
3310
- "test stage",
3311
- "test prod",
3312
- "build",
3313
- "build dev",
3314
- "build review",
3315
- "build stage",
3316
- "build prod",
3317
- "deploy",
3318
- "deploy dev",
3319
- "deploy review",
3320
- "deploy stage",
3321
- "deploy prod",
3322
- "verify",
3323
- "verify dev",
3324
- "verify review",
3325
- "verify stage",
3326
- "verify prod",
3327
- "rollback",
3328
- "rollback dev",
3329
- "rollback review",
3330
- "rollback stage",
3331
- "rollback prod",
3332
- "stop",
3333
- "stop dev",
3334
- "stop review",
3335
- "stop stage",
3336
- "stop prod",
3337
- ],
3338
- "variables": {
3339
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
3340
- "CACHE_COMPRESSION_LEVEL": "fast",
3341
- "FF_USE_FASTZIP": "true",
3342
- "GIT_DEPTH": "1",
3343
- "TRANSFER_METER_FREQUENCY": "5s",
3344
- },
3345
- "workflow": {
3346
- "rules": [
3347
- {
3348
- "if": "$CI_COMMIT_TAG",
3349
- },
3350
- {
3351
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
3352
- "when": "never",
3353
- },
3354
- {
3355
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
3356
- "when": "never",
3357
- },
3358
- {
3359
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
3360
- },
3361
- {
3362
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
3363
- },
3364
- {
3365
- "if": "$CI_MERGE_REQUEST_ID",
3366
- },
3367
- ],
3368
- },
3369
- },
3370
- "taggedRelease": {
3371
- "image": "path/to/docker/jobs-default:the-version",
3372
- "jobs": {
3373
- "api ↩️ Rollback ⚠️ | prod ": {
3374
- "allow_failure": true,
3375
- "artifacts": {
3376
- "reports": {
3377
- "dotenv": "gitlab_environment.env",
3378
- },
3379
- },
3380
- "environment": {
3381
- "action": "access",
3382
- "name": "prod/api",
3383
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3384
- },
3385
- "image": "path/to/docker/kubernetes:the-version",
3386
- "interruptible": true,
3387
- "needs": [],
3388
- "retry": {
3389
- "max": 2,
3390
- "when": [
3391
- "runner_system_failure",
3392
- "stuck_or_timeout_failure",
3393
- ],
3394
- },
3395
- "rules": [
3396
- {
3397
- "when": "manual",
3398
- },
3399
- ],
3400
- "script": [
3401
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3402
- "export ENV_SHORT="prod"",
3403
- "export APP_DIR="api"",
3404
- "export ENV_TYPE="prod"",
3405
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3406
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3407
- "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")"",
3408
- "export HOST="api.prod.test-app.pan.panter.cloud"",
3409
- "export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
3410
- "export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
3411
- "export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
3412
- "export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
3413
- "export KUBE_NAMESPACE="pan-test-app-prod"",
3414
- "export KUBE_APP_NAME="api"",
3415
- "export KUBE_APP_NAME_PREFIX=""",
3416
- "export MONGODB_ROOT_PASSWORD="$CL_prod_api_MONGODB_ROOT_PASSWORD"",
3417
- "export MONGODB_REPLICASET_KEY="$CL_prod_api_MONGODB_REPLICASET_KEY"",
3418
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
3419
- "export RELEASE_NAME="pan-test-app-prod-api"",
3420
- "export HELM_EXPERIMENTAL_OCI="1"",
3421
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
3422
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3423
- "export HELM_ARGS=""",
3424
- "export COMPONENT_NAME="api"",
3425
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3426
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3427
- "kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3428
- "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
3429
- "kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
3430
- "kubectl config use-context "kube-pan-test-app-prod-api"",
3431
- "kubernetesRollback",
3432
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
3433
- ],
3434
- "stage": "rollback prod",
3435
- "variables": {
3436
- "GIT_STRATEGY": "none",
3437
- "KUBERNETES_CPU_REQUEST": "0.22",
3438
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3439
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3440
- },
3441
- },
3442
- "api ↩️ Rollback ⚠️ | stage ": {
3443
- "allow_failure": true,
3444
- "artifacts": {
3445
- "reports": {
3446
- "dotenv": "gitlab_environment.env",
3447
- },
3448
- },
3449
- "environment": {
3450
- "action": "access",
3451
- "name": "stage/api",
3452
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3453
- },
3454
- "image": "path/to/docker/kubernetes:the-version",
3455
- "interruptible": true,
3456
- "needs": [],
3457
- "retry": {
3458
- "max": 2,
3459
- "when": [
3460
- "runner_system_failure",
3461
- "stuck_or_timeout_failure",
3462
- ],
3463
- },
3464
- "rules": [
3465
- {
3466
- "when": "manual",
3467
- },
3468
- ],
3469
- "script": [
3470
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3471
- "export ENV_SHORT="stage"",
3472
- "export APP_DIR="api"",
3473
- "export ENV_TYPE="stage"",
3474
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3475
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3476
- "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")"",
3477
- "export HOST="api.stage.test-app.pan.panter.cloud"",
3478
- "export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
3479
- "export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
3480
- "export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
3481
- "export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
3482
- "export KUBE_NAMESPACE="pan-test-app-stage"",
3483
- "export KUBE_APP_NAME="api"",
3484
- "export KUBE_APP_NAME_PREFIX=""",
3485
- "export MONGODB_ROOT_PASSWORD="$CL_stage_api_MONGODB_ROOT_PASSWORD"",
3486
- "export MONGODB_REPLICASET_KEY="$CL_stage_api_MONGODB_REPLICASET_KEY"",
3487
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
3488
- "export RELEASE_NAME="pan-test-app-stage-api"",
3489
- "export HELM_EXPERIMENTAL_OCI="1"",
3490
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
3491
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3492
- "export HELM_ARGS=""",
3493
- "export COMPONENT_NAME="api"",
3494
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3495
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3496
- "kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3497
- "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
3498
- "kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
3499
- "kubectl config use-context "kube-pan-test-app-stage-api"",
3500
- "kubernetesRollback",
3501
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
3502
- ],
3503
- "stage": "rollback stage",
3504
- "variables": {
3505
- "GIT_STRATEGY": "none",
3506
- "KUBERNETES_CPU_REQUEST": "0.22",
3507
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
3508
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
3509
- },
3510
- },
3511
- "api 🔨 app | prod ": {
3512
- "artifacts": {
3513
- "expire_in": "1 day",
3514
- "paths": [
3515
- "api/__build_info.json",
3516
- "api/.next",
3517
- "api/dist",
3518
- ],
3519
- "reports": {
3520
- "junit": undefined,
3521
- },
3522
- "when": "always",
3523
- },
3524
- "cache": [
3525
- {
3526
- "key": "api-yarn",
3527
- "paths": [
3528
- "api/.yarn",
3529
- ],
3530
- "policy": "pull-push",
3531
- },
3532
- {
3533
- "key": "api-node-modules",
3534
- "paths": [
3535
- "api/node_modules",
3536
- ],
3537
- "policy": "pull-push",
3538
- },
3539
- {
3540
- "key": "api-next-cache",
3541
- "paths": [
3542
- "api/.next/cache",
3543
- ],
3544
- "policy": "pull-push",
3545
- },
3546
- ],
3547
- "image": "path/to/docker/jobs-default:the-version",
3548
- "interruptible": true,
3549
- "needs": [],
3550
- "retry": {
3551
- "max": 2,
3552
- "when": [
3553
- "runner_system_failure",
3554
- "stuck_or_timeout_failure",
3555
- ],
3556
- },
3557
- "script": [
3558
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3559
- "export ENV_SHORT="prod"",
3560
- "export APP_DIR="api"",
3561
- "export ENV_TYPE="prod"",
3562
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3563
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3564
- "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")"",
3565
- "export HOST="api.prod.test-app.pan.panter.cloud"",
3566
- "export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
3567
- "export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
3568
- "export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
3569
- "export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
3570
- "export KUBE_NAMESPACE="pan-test-app-prod"",
3571
- "export KUBE_APP_NAME="api"",
3572
- "export KUBE_APP_NAME_PREFIX=""",
3573
- "export MONGODB_ROOT_PASSWORD="$CL_prod_api_MONGODB_ROOT_PASSWORD"",
3574
- "export MONGODB_REPLICASET_KEY="$CL_prod_api_MONGODB_REPLICASET_KEY"",
3575
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
3576
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3577
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
3578
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3579
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3580
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3581
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3582
- "cd api",
3583
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3584
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3585
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3586
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3587
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
3588
- "yarn install --immutable",
3589
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
3590
- "yarn build",
3591
- ],
3592
- "stage": "build",
3593
- "variables": {
3594
- "KUBERNETES_CPU_REQUEST": "0.45",
3595
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3596
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3597
- },
3598
- },
3599
- "api 🔨 app | stage ": {
3600
- "artifacts": {
3601
- "expire_in": "1 day",
3602
- "paths": [
3603
- "api/__build_info.json",
3604
- "api/.next",
3605
- "api/dist",
3606
- ],
3607
- "reports": {
3608
- "junit": undefined,
3609
- },
3610
- "when": "always",
3611
- },
3612
- "cache": [
3613
- {
3614
- "key": "api-yarn",
3615
- "paths": [
3616
- "api/.yarn",
3617
- ],
3618
- "policy": "pull-push",
3619
- },
3620
- {
3621
- "key": "api-node-modules",
3622
- "paths": [
3623
- "api/node_modules",
3624
- ],
3625
- "policy": "pull-push",
3626
- },
3627
- {
3628
- "key": "api-next-cache",
3629
- "paths": [
3630
- "api/.next/cache",
3631
- ],
3632
- "policy": "pull-push",
3633
- },
3634
- ],
3635
- "image": "path/to/docker/jobs-default:the-version",
3636
- "interruptible": true,
3637
- "needs": [],
3638
- "retry": {
3639
- "max": 2,
3640
- "when": [
3641
- "runner_system_failure",
3642
- "stuck_or_timeout_failure",
3643
- ],
3644
- },
3645
- "script": [
3646
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3647
- "export ENV_SHORT="stage"",
3648
- "export APP_DIR="api"",
3649
- "export ENV_TYPE="stage"",
3650
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3651
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3652
- "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 HOST="api.stage.test-app.pan.panter.cloud"",
3654
- "export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
3655
- "export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
3656
- "export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
3657
- "export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
3658
- "export KUBE_NAMESPACE="pan-test-app-stage"",
3659
- "export KUBE_APP_NAME="api"",
3660
- "export KUBE_APP_NAME_PREFIX=""",
3661
- "export MONGODB_ROOT_PASSWORD="$CL_stage_api_MONGODB_ROOT_PASSWORD"",
3662
- "export MONGODB_REPLICASET_KEY="$CL_stage_api_MONGODB_REPLICASET_KEY"",
3663
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
3664
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3665
- "echo '{"id":"$(git describe --tags 2>/dev/null || git rev-parse HEAD)","time":"$CI_JOB_STARTED_AT"}' > api/__build_info.json",
3666
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3667
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3668
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3669
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3670
- "cd api",
3671
- "echo -e "\\e[0Ksection_start:$(date +%s):nodeinstall[collapsed=true]\\r\\e[0KEnsure node version"",
3672
- "if [ -f ~/.nvm/nvm.sh ]; then source ~/.nvm/nvm.sh; fi",
3673
- "if command -v nvm &> /dev/null && [ -f ./.nvmrc ]; then nvm install; fi",
3674
- "echo -e "\\e[0Ksection_end:$(date +%s):nodeinstall\\r\\e[0K"",
3675
- "echo -e "\\e[0Ksection_start:$(date +%s):yarninstall[collapsed=true]\\r\\e[0KYarn install"",
3676
- "yarn install --immutable",
3677
- "echo -e "\\e[0Ksection_end:$(date +%s):yarninstall\\r\\e[0K"",
3678
- "yarn build",
3679
- ],
3680
- "stage": "build",
3681
- "variables": {
3682
- "KUBERNETES_CPU_REQUEST": "0.45",
3683
- "KUBERNETES_MEMORY_LIMIT": "4Gi",
3684
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3685
- },
3686
- },
3687
- "api 🔨 docker | prod ": {
3688
- "cache": [
3689
- {
3690
- "key": "api-yarn",
3691
- "paths": [
3692
- "api/.yarn",
3693
- ],
3694
- "policy": "pull",
3695
- },
3696
- ],
3697
- "image": "path/to/docker/docker-build:the-version",
3698
- "interruptible": true,
3699
- "needs": [
3700
- "api 🔨 app | prod ",
3701
- ],
3702
- "retry": {
3703
- "max": 2,
3704
- "when": [
3705
- "runner_system_failure",
3706
- "stuck_or_timeout_failure",
3707
- ],
3708
- },
3709
- "script": [
3710
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3711
- "export APP_DIR="api"",
3712
- "export DOCKER_BUILD_CONTEXT="."",
3713
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
3714
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
3715
- "export DOCKER_IMAGE_NAME="prod/api"",
3716
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
3717
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3718
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
3719
- RUN yarn plugin import workspace-tools
3720
- RUN yarn workspaces focus --production && yarn rebuild"",
3721
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
3722
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
3723
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3724
- COPY --chown=node:node .yarn /app/.yarn"",
3725
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3726
- "ensureNodeDockerfile",
3727
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
3728
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
3729
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
3730
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
3731
- "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",
3732
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
3733
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
3734
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
3735
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
3736
- "docker push $DOCKER_CACHE_IMAGE",
3737
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
3738
- ],
3739
- "services": [
3740
- {
3741
- "command": [
3742
- "--tls=false",
3743
- ],
3744
- "name": "docker:24.0.6-dind",
3745
- },
3746
- ],
3747
- "stage": "build",
3748
- "variables": {
3749
- "DOCKER_BUILDKIT": "1",
3750
- "DOCKER_DRIVER": "overlay2",
3751
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3752
- "DOCKER_TLS_CERTDIR": "",
3753
- "KUBERNETES_CPU_REQUEST": "0.45",
3754
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
3755
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3756
- },
3757
- },
3758
- "api 🔨 docker | stage ": {
3759
- "cache": [
3760
- {
3761
- "key": "api-yarn",
3762
- "paths": [
3763
- "api/.yarn",
3764
- ],
3765
- "policy": "pull",
3766
- },
3767
- ],
3768
- "image": "path/to/docker/docker-build:the-version",
3769
- "interruptible": true,
3770
- "needs": [
3771
- "api 🔨 app | stage ",
3772
- ],
3773
- "retry": {
3774
- "max": 2,
3775
- "when": [
3776
- "runner_system_failure",
3777
- "stuck_or_timeout_failure",
3778
- ],
3779
- },
3780
- "script": [
3781
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3782
- "export APP_DIR="api"",
3783
- "export DOCKER_BUILD_CONTEXT="."",
3784
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
3785
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
3786
- "export DOCKER_IMAGE_NAME="stage/api"",
3787
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
3788
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3789
- "export DOCKER_COPY_AND_INSTALL_APP="COPY --chown=node:node $APP_DIR .
3790
- RUN yarn plugin import workspace-tools
3791
- RUN yarn workspaces focus --production && yarn rebuild"",
3792
- "export DOCKER_COPY_WORKSPACE_FILES="COPY --chown=node:node api/package.json /app/api/package.json
3793
- COPY --chown=node:node api/yarn.lock /app/api/yarn.lock
3794
- COPY --chown=node:node .yarnrc.yml /app/.yarnrc.yml
3795
- COPY --chown=node:node .yarn /app/.yarn"",
3796
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3797
- "ensureNodeDockerfile",
3798
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-login[collapsed=true]\\r\\e[0KDocker Login"",
3799
- "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY",
3800
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-login\\r\\e[0K"",
3801
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-build[collapsed=true]\\r\\e[0KDocker build"",
3802
- "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",
3803
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-build\\r\\e[0K"",
3804
- "echo -e "\\e[0Ksection_start:$(date +%s):docker-push[collapsed=true]\\r\\e[0KDocker push and tag"",
3805
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
3806
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
3807
- "docker push $DOCKER_CACHE_IMAGE",
3808
- "echo -e "\\e[0Ksection_end:$(date +%s):docker-push\\r\\e[0K"",
3809
- ],
3810
- "services": [
3811
- {
3812
- "command": [
3813
- "--tls=false",
3814
- ],
3815
- "name": "docker:24.0.6-dind",
3816
- },
3817
- ],
3818
- "stage": "build",
3819
- "variables": {
3820
- "DOCKER_BUILDKIT": "1",
3821
- "DOCKER_DRIVER": "overlay2",
3822
- "DOCKER_HOST": "tcp://0.0.0.0:2375",
3823
- "DOCKER_TLS_CERTDIR": "",
3824
- "KUBERNETES_CPU_REQUEST": "0.45",
3825
- "KUBERNETES_MEMORY_LIMIT": "2Gi",
3826
- "KUBERNETES_MEMORY_REQUEST": "1Gi",
3827
- },
3828
- },
3829
- "api 🚀 Deploy | prod ": {
3830
- "allow_failure": true,
3831
- "artifacts": {
3832
- "reports": {
3833
- "dotenv": "gitlab_environment.env",
3834
- },
3835
- },
3836
- "environment": {
3837
- "auto_stop_in": undefined,
3838
- "name": "prod/api",
3839
- "on_stop": "api 🛑 Stop ⚠️ | prod ",
3840
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
3841
- },
3842
- "image": "path/to/docker/kubernetes:the-version",
3843
- "interruptible": true,
3844
- "needs": [
3845
- {
3846
- "artifacts": false,
3847
- "job": "api 🔨 app | prod ",
3848
- },
3849
- {
3850
- "artifacts": false,
3851
- "job": "api 🔨 docker | prod ",
3852
- },
3853
- {
3854
- "artifacts": true,
3855
- "job": "api 🧾 sbom | prod ",
3856
- },
3857
- ],
3858
- "retry": {
3859
- "max": 2,
3860
- "when": [
3861
- "runner_system_failure",
3862
- "stuck_or_timeout_failure",
3863
- ],
3864
- },
3865
- "rules": [
3866
- {
3867
- "when": "manual",
3868
- },
3869
- ],
3870
- "script": [
3871
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
3872
- "export ENV_SHORT="prod"",
3873
- "export APP_DIR="api"",
3874
- "export ENV_TYPE="prod"",
3875
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3876
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
3877
- "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")"",
3878
- "export HOST="api.prod.test-app.pan.panter.cloud"",
3879
- "export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
3880
- "export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
3881
- "export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
3882
- "export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
3883
- "export KUBE_NAMESPACE="pan-test-app-prod"",
3884
- "export KUBE_APP_NAME="api"",
3885
- "export KUBE_APP_NAME_PREFIX=""",
3886
- "export MONGODB_ROOT_PASSWORD="$CL_prod_api_MONGODB_ROOT_PASSWORD"",
3887
- "export MONGODB_REPLICASET_KEY="$CL_prod_api_MONGODB_REPLICASET_KEY"",
3888
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
3889
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
3890
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
3891
- "export DOCKER_IMAGE_NAME="prod/api"",
3892
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
3893
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
3894
- "export RELEASE_NAME="pan-test-app-prod-api"",
3895
- "export HELM_EXPERIMENTAL_OCI="1"",
3896
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
3897
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
3898
- "export HELM_ARGS=""",
3899
- "export COMPONENT_NAME="api"",
3900
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
3901
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
3902
- "kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
3903
- "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
3904
- "kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
3905
- "kubectl config use-context "kube-pan-test-app-prod-api"",
3906
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
3907
- "cat > __all_values.yml <<EOF
3908
- env:
3909
- secret:
3910
- MONGODB_ROOT_PASSWORD: |-
3911
- $(printf %s "$CL_prod_api_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
3912
- MONGODB_REPLICASET_KEY: |-
3913
- $(printf %s "$CL_prod_api_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
3914
- MONGO_URL: |-
3915
- mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
3916
- MONGO_OPLOG_URL: |-
3917
- mongodb://root:$CL_prod_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
3918
- public:
3919
- ENV_SHORT: |-
3920
- prod
3921
- APP_DIR: |-
3922
- api
3923
- ENV_TYPE: |-
3924
- prod
3925
- BUILD_INFO_BUILD_ID: |-
3926
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
3927
- BUILD_INFO_BUILD_TIME: |-
3928
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
3929
- BUILD_INFO_CURRENT_VERSION: |-
3930
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
3931
- HOST: |-
3932
- api.prod.test-app.pan.panter.cloud
3933
- ROOT_URL: |-
3934
- https://api.prod.test-app.pan.panter.cloud
3935
- HOST_INTERNAL: |-
3936
- api.prod.test-app.pan.panter.cloud
3937
- HOST_CANONICAL: |-
3938
- api.prod.test-app.pan.panter.cloud
3939
- ROOT_URL_INTERNAL: |-
3940
- https://api.prod.test-app.pan.panter.cloud
3941
- KUBE_NAMESPACE: |-
3942
- pan-test-app-prod
3943
- KUBE_APP_NAME: |-
3944
- api
3945
- KUBE_APP_NAME_PREFIX: ""
3946
- _ALL_ENV_VAR_KEYS: |-
3947
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
3948
- application:
3949
- host: |-
3950
- api.prod.test-app.pan.panter.cloud
3951
- command: |-
3952
- node main.js
3953
- livenessProbe:
3954
- httpGet:
3955
- path: |-
3956
- __health
3957
- readinessProbe:
3958
- httpGet:
3959
- path: |-
3960
- __health
3961
- startupProbe:
3962
- httpGet:
3963
- path: |-
3964
- __health
3965
- mongodb:
3966
- enabled: true
3967
- auth:
3968
- enabled: true
3969
- rootPassword: |-
3970
- $CL_prod_api_MONGODB_ROOT_PASSWORD
3971
- replicaSetKey: |-
3972
- $CL_prod_api_MONGODB_REPLICASET_KEY
3973
- persistence:
3974
- storageClass: |-
3975
- premium-rwo
3976
- backup:
3977
- enabled: true
3978
- hostToBackup: |-
3979
- api-mongodb-0.api-mongodb-headless.pan-test-app-prod.svc.cluster.local:27017
3980
- pvcToBackup: |-
3981
- datadir-api-mongodb-0
3982
- image: |-
3983
- mrelite/kubectlmongoshell:v1.0
3984
- schedule: |-
3985
- 0 4 * * *
3986
- volumeSnapshotClass: |-
3987
- snapshotclass
3988
- architecture: |-
3989
- replicaset
3990
- tolerations:
3991
- - key: |-
3992
- mongodb
3993
- operator: |-
3994
- Equal
3995
- value: |-
3996
- true
3997
- effect: |-
3998
- NoSchedule
3999
-
4000
- EOF
4001
- ",
4002
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
4003
- "kubernetesCreateSecret",
4004
- "kubernetesDeploy",
4005
- "echo 'Uploading SBOM to Dependency Track'",
4006
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
4007
- "echo deployment successful 😻",
4008
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
4009
- ],
4010
- "stage": "deploy prod",
4011
- "variables": {
4012
- "KUBERNETES_CPU_REQUEST": "0.22",
4013
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4014
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4015
- },
4016
- },
4017
- "api 🚀 Deploy | stage ": {
4018
- "allow_failure": false,
4019
- "artifacts": {
4020
- "reports": {
4021
- "dotenv": "gitlab_environment.env",
4022
- },
4023
- },
4024
- "environment": {
4025
- "auto_stop_in": undefined,
4026
- "name": "stage/api",
4027
- "on_stop": "api 🛑 Stop ⚠️ | stage ",
4028
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
4029
- },
4030
- "image": "path/to/docker/kubernetes:the-version",
4031
- "interruptible": true,
4032
- "needs": [
4033
- {
4034
- "artifacts": false,
4035
- "job": "api 🔨 app | stage ",
4036
- },
4037
- {
4038
- "artifacts": false,
4039
- "job": "api 🔨 docker | stage ",
4040
- },
4041
- {
4042
- "artifacts": true,
4043
- "job": "api 🧾 sbom | stage ",
4044
- },
4045
- ],
4046
- "retry": {
4047
- "max": 2,
4048
- "when": [
4049
- "runner_system_failure",
4050
- "stuck_or_timeout_failure",
4051
- ],
4052
- },
4053
- "rules": [
4054
- {
4055
- "when": "on_success",
4056
- },
4057
- ],
4058
- "script": [
4059
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4060
- "export ENV_SHORT="stage"",
4061
- "export APP_DIR="api"",
4062
- "export ENV_TYPE="stage"",
4063
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4064
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
4065
- "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")"",
4066
- "export HOST="api.stage.test-app.pan.panter.cloud"",
4067
- "export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
4068
- "export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
4069
- "export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
4070
- "export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
4071
- "export KUBE_NAMESPACE="pan-test-app-stage"",
4072
- "export KUBE_APP_NAME="api"",
4073
- "export KUBE_APP_NAME_PREFIX=""",
4074
- "export MONGODB_ROOT_PASSWORD="$CL_stage_api_MONGODB_ROOT_PASSWORD"",
4075
- "export MONGODB_REPLICASET_KEY="$CL_stage_api_MONGODB_REPLICASET_KEY"",
4076
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
4077
- "export DOCKER_REGISTRY="$CI_REGISTRY"",
4078
- "export DOCKER_CACHE_IMAGE="$CI_REGISTRY_IMAGE/caches/api"",
4079
- "export DOCKER_IMAGE_NAME="stage/api"",
4080
- "export DOCKER_IMAGE="$CI_REGISTRY_IMAGE/$DOCKER_IMAGE_NAME"",
4081
- "export DOCKER_IMAGE_TAG="$CI_COMMIT_SHA"",
4082
- "export RELEASE_NAME="pan-test-app-stage-api"",
4083
- "export HELM_EXPERIMENTAL_OCI="1"",
4084
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
4085
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
4086
- "export HELM_ARGS=""",
4087
- "export COMPONENT_NAME="api"",
4088
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4089
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4090
- "kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
4091
- "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
4092
- "kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
4093
- "kubectl config use-context "kube-pan-test-app-stage-api"",
4094
- "echo -e "\\e[0Ksection_start:$(date +%s):writeallvalues[collapsed=true]\\r\\e[0KWrite __all_values.yml for helm deployment"",
4095
- "cat > __all_values.yml <<EOF
4096
- env:
4097
- secret:
4098
- MONGODB_ROOT_PASSWORD: |-
4099
- $(printf %s "$CL_stage_api_MONGODB_ROOT_PASSWORD" | sed 's/^/ /')
4100
- MONGODB_REPLICASET_KEY: |-
4101
- $(printf %s "$CL_stage_api_MONGODB_REPLICASET_KEY" | sed 's/^/ /')
4102
- MONGO_URL: |-
4103
- mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/app?replicaSet=rs0&authSource=admin
4104
- MONGO_OPLOG_URL: |-
4105
- mongodb://root:$CL_stage_api_MONGODB_ROOT_PASSWORD@api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017,api-mongodb-1.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017/local?replicaSet=rs0&authSource=admin
4106
- public:
4107
- ENV_SHORT: |-
4108
- stage
4109
- APP_DIR: |-
4110
- api
4111
- ENV_TYPE: |-
4112
- stage
4113
- BUILD_INFO_BUILD_ID: |-
4114
- $(printf %s "$(git describe --tags 2>/dev/null || git rev-parse HEAD)" | sed 's/^/ /')
4115
- BUILD_INFO_BUILD_TIME: |-
4116
- $(printf %s "$CI_JOB_STARTED_AT" | sed 's/^/ /')
4117
- BUILD_INFO_CURRENT_VERSION: |-
4118
- $(printf %s "$(tag=$(git ls-remote origin "refs/tags/v*[0-9]" 2>/dev/null | cut -f 2- | sort -V | tail -1 | sed 's/refs\\/tags\\/v//'); [ -z "$tag" ] && echo "0.0.0" || echo "$tag")" | sed 's/^/ /')
4119
- HOST: |-
4120
- api.stage.test-app.pan.panter.cloud
4121
- ROOT_URL: |-
4122
- https://api.stage.test-app.pan.panter.cloud
4123
- HOST_INTERNAL: |-
4124
- api.stage.test-app.pan.panter.cloud
4125
- HOST_CANONICAL: |-
4126
- api.stage.test-app.pan.panter.cloud
4127
- ROOT_URL_INTERNAL: |-
4128
- https://api.stage.test-app.pan.panter.cloud
4129
- KUBE_NAMESPACE: |-
4130
- pan-test-app-stage
4131
- KUBE_APP_NAME: |-
4132
- api
4133
- KUBE_APP_NAME_PREFIX: ""
4134
- _ALL_ENV_VAR_KEYS: |-
4135
- ["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_BUILD_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL","HOST_INTERNAL","HOST_CANONICAL","ROOT_URL_INTERNAL","KUBE_NAMESPACE","KUBE_APP_NAME","KUBE_APP_NAME_PREFIX","MONGODB_ROOT_PASSWORD","MONGODB_REPLICASET_KEY"]
4136
- application:
4137
- host: |-
4138
- api.stage.test-app.pan.panter.cloud
4139
- command: |-
4140
- node main.js
4141
- livenessProbe:
4142
- httpGet:
4143
- path: |-
4144
- __health
4145
- readinessProbe:
4146
- httpGet:
4147
- path: |-
4148
- __health
4149
- startupProbe:
4150
- httpGet:
4151
- path: |-
4152
- __health
4153
- mongodb:
4154
- enabled: true
4155
- auth:
4156
- enabled: true
4157
- rootPassword: |-
4158
- $CL_stage_api_MONGODB_ROOT_PASSWORD
4159
- replicaSetKey: |-
4160
- $CL_stage_api_MONGODB_REPLICASET_KEY
4161
- persistence:
4162
- storageClass: |-
4163
- premium-rwo
4164
- backup:
4165
- enabled: true
4166
- hostToBackup: |-
4167
- api-mongodb-0.api-mongodb-headless.pan-test-app-stage.svc.cluster.local:27017
4168
- pvcToBackup: |-
4169
- datadir-api-mongodb-0
4170
- image: |-
4171
- mrelite/kubectlmongoshell:v1.0
4172
- schedule: |-
4173
- 0 4 * * *
4174
- volumeSnapshotClass: |-
4175
- snapshotclass
4176
- architecture: |-
4177
- replicaset
4178
- tolerations:
4179
- - key: |-
4180
- mongodb
4181
- operator: |-
4182
- Equal
4183
- value: |-
4184
- true
4185
- effect: |-
4186
- NoSchedule
4187
-
4188
- EOF
4189
- ",
4190
- "echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
4191
- "kubernetesCreateSecret",
4192
- "kubernetesDeploy",
4193
- "echo 'Uploading SBOM to Dependency Track'",
4194
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
4195
- "echo deployment successful 😻",
4196
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
4197
- ],
4198
- "stage": "deploy stage",
4199
- "variables": {
4200
- "KUBERNETES_CPU_REQUEST": "0.22",
4201
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4202
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4203
- },
4204
- },
4205
- "api 🛑 Stop ⚠️ | prod ": {
4206
- "allow_failure": true,
4207
- "artifacts": {
4208
- "reports": {
4209
- "dotenv": "gitlab_environment.env",
4210
- },
4211
- },
4212
- "environment": {
4213
- "action": "stop",
4214
- "name": "prod/api",
4215
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
4216
- },
4217
- "image": "path/to/docker/kubernetes:the-version",
4218
- "interruptible": true,
4219
- "needs": [],
4220
- "retry": {
4221
- "max": 2,
4222
- "when": [
4223
- "runner_system_failure",
4224
- "stuck_or_timeout_failure",
4225
- ],
4226
- },
4227
- "rules": [
4228
- {
4229
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
4230
- "when": "on_success",
4231
- },
4232
- {
4233
- "when": "manual",
4234
- },
4235
- ],
4236
- "script": [
4237
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4238
- "export ENV_SHORT="prod"",
4239
- "export APP_DIR="api"",
4240
- "export ENV_TYPE="prod"",
4241
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4242
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
4243
- "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")"",
4244
- "export HOST="api.prod.test-app.pan.panter.cloud"",
4245
- "export ROOT_URL="https://api.prod.test-app.pan.panter.cloud"",
4246
- "export HOST_INTERNAL="api.prod.test-app.pan.panter.cloud"",
4247
- "export HOST_CANONICAL="api.prod.test-app.pan.panter.cloud"",
4248
- "export ROOT_URL_INTERNAL="https://api.prod.test-app.pan.panter.cloud"",
4249
- "export KUBE_NAMESPACE="pan-test-app-prod"",
4250
- "export KUBE_APP_NAME="api"",
4251
- "export KUBE_APP_NAME_PREFIX=""",
4252
- "export MONGODB_ROOT_PASSWORD="$CL_prod_api_MONGODB_ROOT_PASSWORD"",
4253
- "export MONGODB_REPLICASET_KEY="$CL_prod_api_MONGODB_REPLICASET_KEY"",
4254
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
4255
- "export RELEASE_NAME="pan-test-app-prod-api"",
4256
- "export HELM_EXPERIMENTAL_OCI="1"",
4257
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
4258
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
4259
- "export HELM_ARGS=""",
4260
- "export COMPONENT_NAME="api"",
4261
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4262
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4263
- "kubectl config set-cluster "kube-pan-test-app-prod-api" --server="$CL_prod_api_KUBE_URL" --certificate-authority <(echo $CL_prod_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
4264
- "kubectl config set-credentials "kube-pan-test-app-prod-api" --token="$CL_prod_api_KUBE_TOKEN"",
4265
- "kubectl config set-context "kube-pan-test-app-prod-api" --cluster="kube-pan-test-app-prod-api" --user="kube-pan-test-app-prod-api" --namespace="pan-test-app-prod"",
4266
- "kubectl config use-context "kube-pan-test-app-prod-api"",
4267
- "kubernetesDelete",
4268
- "echo 'Disabling component in Dependency Track'",
4269
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.prod.test-app.pan.panter.cloud" || true",
4270
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.prod.test-app.pan.panter.cloud" >> gitlab_environment.env",
4271
- ],
4272
- "stage": "stop prod",
4273
- "variables": {
4274
- "GIT_STRATEGY": "none",
4275
- "KUBERNETES_CPU_REQUEST": "0.22",
4276
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4277
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4278
- },
4279
- },
4280
- "api 🛑 Stop ⚠️ | stage ": {
4281
- "allow_failure": true,
4282
- "artifacts": {
4283
- "reports": {
4284
- "dotenv": "gitlab_environment.env",
4285
- },
4286
- },
4287
- "environment": {
4288
- "action": "stop",
4289
- "name": "stage/api",
4290
- "url": "$CL_GITLAB_ENVIRONMENT_URL",
4291
- },
4292
- "image": "path/to/docker/kubernetes:the-version",
4293
- "interruptible": true,
4294
- "needs": [],
4295
- "retry": {
4296
- "max": 2,
4297
- "when": [
4298
- "runner_system_failure",
4299
- "stuck_or_timeout_failure",
4300
- ],
4301
- },
4302
- "rules": [
4303
- {
4304
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+\\.([0-9]+|x)\\.x$/",
4305
- "when": "on_success",
4306
- },
4307
- {
4308
- "when": "manual",
4309
- },
4310
- ],
4311
- "script": [
4312
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4313
- "export ENV_SHORT="stage"",
4314
- "export APP_DIR="api"",
4315
- "export ENV_TYPE="stage"",
4316
- "export BUILD_INFO_BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4317
- "export BUILD_INFO_BUILD_TIME="$CI_JOB_STARTED_AT"",
4318
- "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")"",
4319
- "export HOST="api.stage.test-app.pan.panter.cloud"",
4320
- "export ROOT_URL="https://api.stage.test-app.pan.panter.cloud"",
4321
- "export HOST_INTERNAL="api.stage.test-app.pan.panter.cloud"",
4322
- "export HOST_CANONICAL="api.stage.test-app.pan.panter.cloud"",
4323
- "export ROOT_URL_INTERNAL="https://api.stage.test-app.pan.panter.cloud"",
4324
- "export KUBE_NAMESPACE="pan-test-app-stage"",
4325
- "export KUBE_APP_NAME="api"",
4326
- "export KUBE_APP_NAME_PREFIX=""",
4327
- "export MONGODB_ROOT_PASSWORD="$CL_stage_api_MONGODB_ROOT_PASSWORD"",
4328
- "export MONGODB_REPLICASET_KEY="$CL_stage_api_MONGODB_REPLICASET_KEY"",
4329
- "export _ALL_ENV_VAR_KEYS="[\\"ENV_SHORT\\",\\"APP_DIR\\",\\"ENV_TYPE\\",\\"BUILD_INFO_BUILD_ID\\",\\"BUILD_INFO_BUILD_TIME\\",\\"BUILD_INFO_CURRENT_VERSION\\",\\"HOST\\",\\"ROOT_URL\\",\\"HOST_INTERNAL\\",\\"HOST_CANONICAL\\",\\"ROOT_URL_INTERNAL\\",\\"KUBE_NAMESPACE\\",\\"KUBE_APP_NAME\\",\\"KUBE_APP_NAME_PREFIX\\",\\"MONGODB_ROOT_PASSWORD\\",\\"MONGODB_REPLICASET_KEY\\"]"",
4330
- "export RELEASE_NAME="pan-test-app-stage-api"",
4331
- "export HELM_EXPERIMENTAL_OCI="1"",
4332
- "export KUBE_DOCKER_IMAGE_PULL_SECRET="gitlab-registry-api"",
4333
- "export HELM_GITLAB_CHART_NAME="/helm-charts/the-panter-chart"",
4334
- "export HELM_ARGS=""",
4335
- "export COMPONENT_NAME="api"",
4336
- "export BUILD_ID="$(git describe --tags 2>/dev/null || git rev-parse HEAD)"",
4337
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4338
- "kubectl config set-cluster "kube-pan-test-app-stage-api" --server="$CL_stage_api_KUBE_URL" --certificate-authority <(echo $CL_stage_api_KUBE_CA_PEM | base64 -d) --embed-certs=true",
4339
- "kubectl config set-credentials "kube-pan-test-app-stage-api" --token="$CL_stage_api_KUBE_TOKEN"",
4340
- "kubectl config set-context "kube-pan-test-app-stage-api" --cluster="kube-pan-test-app-stage-api" --user="kube-pan-test-app-stage-api" --namespace="pan-test-app-stage"",
4341
- "kubectl config use-context "kube-pan-test-app-stage-api"",
4342
- "kubernetesDelete",
4343
- "echo 'Disabling component in Dependency Track'",
4344
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/api" "https://api.stage.test-app.pan.panter.cloud" || true",
4345
- "echo "CL_GITLAB_ENVIRONMENT_URL=https://api.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
4346
- ],
4347
- "stage": "stop stage",
4348
- "variables": {
4349
- "GIT_STRATEGY": "none",
4350
- "KUBERNETES_CPU_REQUEST": "0.22",
4351
- "KUBERNETES_MEMORY_LIMIT": "400Mi",
4352
- "KUBERNETES_MEMORY_REQUEST": "200Mi",
4353
- },
4354
- },
4355
- "api 🧾 sbom | prod ": {
4356
- "allow_failure": true,
4357
- "artifacts": {
4358
- "paths": [
4359
- "__sbom.json",
4360
- ],
4361
- },
4362
- "image": "aquasec/trivy:0.38.3",
4363
- "interruptible": true,
4364
- "needs": [],
4365
- "retry": {
4366
- "max": 2,
4367
- "when": [
4368
- "runner_system_failure",
4369
- "stuck_or_timeout_failure",
4370
- ],
4371
- },
4372
- "script": [
4373
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4374
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4375
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
4376
- ],
4377
- "stage": "build",
4378
- "variables": {},
4379
- },
4380
- "api 🧾 sbom | stage ": {
4381
- "allow_failure": true,
4382
- "artifacts": {
4383
- "paths": [
4384
- "__sbom.json",
4385
- ],
4386
- },
4387
- "image": "aquasec/trivy:0.38.3",
4388
- "interruptible": true,
4389
- "needs": [],
4390
- "retry": {
4391
- "max": 2,
4392
- "when": [
4393
- "runner_system_failure",
4394
- "stuck_or_timeout_failure",
4395
- ],
4396
- },
4397
- "script": [
4398
- "echo -e "\\e[0Ksection_start:$(date +%s):injectvars[collapsed=true]\\r\\e[0KInjecting variables"",
4399
- "echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
4400
- "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
4401
- ],
4402
- "stage": "build",
4403
- "variables": {},
4404
- },
4405
- },
4406
- "stages": [
4407
- "setup",
4408
- "setup dev",
4409
- "setup review",
4410
- "setup stage",
4411
- "setup prod",
4412
- "test",
4413
- "test dev",
4414
- "test review",
4415
- "test stage",
4416
- "test prod",
4417
- "build",
4418
- "build dev",
4419
- "build review",
4420
- "build stage",
4421
- "build prod",
4422
- "deploy",
4423
- "deploy dev",
4424
- "deploy review",
4425
- "deploy stage",
4426
- "deploy prod",
4427
- "verify",
4428
- "verify dev",
4429
- "verify review",
4430
- "verify stage",
4431
- "verify prod",
4432
- "rollback",
4433
- "rollback dev",
4434
- "rollback review",
4435
- "rollback stage",
4436
- "rollback prod",
4437
- "stop",
4438
- "stop dev",
4439
- "stop review",
4440
- "stop stage",
4441
- "stop prod",
4442
- ],
4443
- "variables": {
4444
- "ARTIFACT_COMPRESSION_LEVEL": "fast",
4445
- "CACHE_COMPRESSION_LEVEL": "fast",
4446
- "FF_USE_FASTZIP": "true",
4447
- "GIT_DEPTH": "1",
4448
- "TRANSFER_METER_FREQUENCY": "5s",
4449
- },
4450
- "workflow": {
4451
- "rules": [
4452
- {
4453
- "if": "$CI_COMMIT_TAG",
4454
- },
4455
- {
4456
- "if": "$CI_COMMIT_MESSAGE =~ /^chore\\(release\\).*/",
4457
- "when": "never",
4458
- },
4459
- {
4460
- "if": "$CI_PIPELINE_SOURCE == "schedule"",
4461
- "when": "never",
4462
- },
4463
- {
4464
- "if": "$CI_COMMIT_BRANCH =~ /^[0-9]+.([0-9]+|x).x$/",
4465
- },
4466
- {
4467
- "if": "$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH",
4468
- },
4469
- {
4470
- "if": "$CI_MERGE_REQUEST_ID",
4471
- },
4472
- ],
4473
- },
4474
- },
4475
- }
4476
- `;