@catladder/pipeline 1.101.3 → 1.102.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build/base/createBuildJob.js +1 -1
- package/dist/build/custom/testJob.js +2 -2
- package/dist/build/node/testJob.js +2 -2
- package/dist/build/rails/build.js +11 -1
- package/dist/build/rails/test.js +1 -1
- package/dist/build/types.d.ts +8 -1
- package/dist/bundles/catladder-gitlab/index.js +3 -3
- package/dist/constants.js +1 -1
- package/dist/context/getEnvironment.js +18 -12
- package/dist/context/getEnvironmentVariables.d.ts +2 -7
- package/dist/context/getEnvironmentVariables.js +27 -31
- package/dist/context/transformJobOnlyVars.d.ts +10 -0
- package/dist/context/transformJobOnlyVars.js +160 -0
- package/dist/context/utils/envVars.d.ts +8 -0
- package/dist/context/utils/envVars.js +52 -0
- package/dist/deploy/base.js +4 -4
- package/dist/deploy/types/base.d.ts +8 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/context.d.ts +16 -6
- package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-non-public.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +16 -16
- package/examples/__snapshots__/cloud-run-with-sql.ts.snap +16 -16
- package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +8 -8
- package/examples/__snapshots__/custom-build-job.ts.snap +8 -8
- package/examples/__snapshots__/custom-deploy.ts.snap +16 -8
- package/examples/__snapshots__/custom-sbom-java.ts.snap +8 -8
- package/examples/__snapshots__/kubernetes-application-customization.ts.snap +12 -12
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +12 -12
- package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +12 -12
- package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +24 -24
- package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +12 -12
- package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +12 -12
- package/examples/__snapshots__/wait-for-other-deploy.ts.snap +8 -8
- package/examples/custom-deploy.ts +3 -0
- package/package.json +1 -1
- package/src/build/base/createBuildJob.ts +1 -0
- package/src/build/custom/testJob.ts +1 -0
- package/src/build/node/testJob.ts +1 -0
- package/src/build/rails/build.ts +4 -1
- package/src/build/rails/test.ts +4 -1
- package/src/build/types.ts +9 -1
- package/src/context/getEnvironment.ts +9 -7
- package/src/context/getEnvironmentVariables.ts +36 -24
- package/src/context/transformJobOnlyVars.ts +42 -0
- package/src/context/utils/envVars.ts +26 -0
- package/src/deploy/base.ts +4 -1
- package/src/deploy/types/base.ts +10 -0
- package/src/types/context.ts +18 -6
|
@@ -55,7 +55,7 @@ exports[`matches snapshot 1`] = `
|
|
|
55
55
|
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
56
56
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
57
57
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
58
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
58
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
59
59
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
60
60
|
"KUBE_APP_NAME": "api",
|
|
61
61
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -388,7 +388,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
388
388
|
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
389
389
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
390
390
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
391
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
391
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
392
392
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
393
393
|
"KUBE_APP_NAME": "api",
|
|
394
394
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -510,7 +510,7 @@ mongodb:
|
|
|
510
510
|
"HOST_CANONICAL": "api.dev.test-app.pan.panter.cloud",
|
|
511
511
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
512
512
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
513
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
513
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
514
514
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
515
515
|
"KUBE_APP_NAME": "api",
|
|
516
516
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -811,7 +811,7 @@ mongodb:
|
|
|
811
811
|
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
812
812
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
813
813
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
814
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
814
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
815
815
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
816
816
|
"KUBE_APP_NAME": "mr1234-api",
|
|
817
817
|
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
@@ -1144,7 +1144,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
1144
1144
|
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
1145
1145
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1146
1146
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1147
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1147
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1148
1148
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1149
1149
|
"KUBE_APP_NAME": "mr1234-api",
|
|
1150
1150
|
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
@@ -1266,7 +1266,7 @@ mongodb:
|
|
|
1266
1266
|
"HOST_CANONICAL": "api.mr1234.review.test-app.pan.panter.cloud",
|
|
1267
1267
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1268
1268
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1269
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1269
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1270
1270
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1271
1271
|
"KUBE_APP_NAME": "mr1234-api",
|
|
1272
1272
|
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
@@ -1567,7 +1567,7 @@ mongodb:
|
|
|
1567
1567
|
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
1568
1568
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1569
1569
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1570
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1570
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1571
1571
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1572
1572
|
"KUBE_APP_NAME": "api",
|
|
1573
1573
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -1684,7 +1684,7 @@ mongodb:
|
|
|
1684
1684
|
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
1685
1685
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1686
1686
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1687
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1687
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1688
1688
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1689
1689
|
"KUBE_APP_NAME": "api",
|
|
1690
1690
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -2108,7 +2108,7 @@ COPY --chown=node:node .yarn /app/.yarn",
|
|
|
2108
2108
|
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
2109
2109
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
2110
2110
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2111
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
2111
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2112
2112
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2113
2113
|
"KUBE_APP_NAME": "api",
|
|
2114
2114
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -2242,7 +2242,7 @@ mongodb:
|
|
|
2242
2242
|
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
2243
2243
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
2244
2244
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2245
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
2245
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2246
2246
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2247
2247
|
"KUBE_APP_NAME": "api",
|
|
2248
2248
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -2364,7 +2364,7 @@ mongodb:
|
|
|
2364
2364
|
"HOST_CANONICAL": "api.prod.test-app.pan.panter.cloud",
|
|
2365
2365
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
2366
2366
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2367
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
2367
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2368
2368
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2369
2369
|
"KUBE_APP_NAME": "api",
|
|
2370
2370
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -2486,7 +2486,7 @@ mongodb:
|
|
|
2486
2486
|
"HOST_CANONICAL": "api.stage.test-app.pan.panter.cloud",
|
|
2487
2487
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
2488
2488
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
2489
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
2489
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
2490
2490
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
2491
2491
|
"KUBE_APP_NAME": "api",
|
|
2492
2492
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -54,7 +54,7 @@ exports[`matches snapshot 1`] = `
|
|
|
54
54
|
"HOST_CANONICAL": "app.dev.test-app.pan.panter.cloud",
|
|
55
55
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
56
56
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
57
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
57
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
58
58
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
59
59
|
"KUBE_APP_NAME": "app",
|
|
60
60
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -269,7 +269,7 @@ jobs:
|
|
|
269
269
|
"HOST_CANONICAL": "app.dev.test-app.pan.panter.cloud",
|
|
270
270
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
271
271
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
272
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
272
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
273
273
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
274
274
|
"KUBE_APP_NAME": "app",
|
|
275
275
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -384,7 +384,7 @@ jobs:
|
|
|
384
384
|
"HOST_CANONICAL": "app.dev.test-app.pan.panter.cloud",
|
|
385
385
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
386
386
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
387
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
387
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
388
388
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
389
389
|
"KUBE_APP_NAME": "app",
|
|
390
390
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -662,7 +662,7 @@ jobs:
|
|
|
662
662
|
"HOST_CANONICAL": "app.mr1234.review.test-app.pan.panter.cloud",
|
|
663
663
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
664
664
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
665
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
665
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
666
666
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
667
667
|
"KUBE_APP_NAME": "mr1234-app",
|
|
668
668
|
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
@@ -880,7 +880,7 @@ jobs:
|
|
|
880
880
|
"HOST_CANONICAL": "app.mr1234.review.test-app.pan.panter.cloud",
|
|
881
881
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
882
882
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
883
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
883
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
884
884
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
885
885
|
"KUBE_APP_NAME": "mr1234-app",
|
|
886
886
|
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
@@ -998,7 +998,7 @@ jobs:
|
|
|
998
998
|
"HOST_CANONICAL": "app.mr1234.review.test-app.pan.panter.cloud",
|
|
999
999
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1000
1000
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1001
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1001
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1002
1002
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1003
1003
|
"KUBE_APP_NAME": "mr1234-app",
|
|
1004
1004
|
"KUBE_APP_NAME_PREFIX": "mr1234-",
|
|
@@ -1279,7 +1279,7 @@ jobs:
|
|
|
1279
1279
|
"HOST_CANONICAL": "app.prod.test-app.pan.panter.cloud",
|
|
1280
1280
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1281
1281
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1282
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1282
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1283
1283
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1284
1284
|
"KUBE_APP_NAME": "app",
|
|
1285
1285
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -1389,7 +1389,7 @@ jobs:
|
|
|
1389
1389
|
"HOST_CANONICAL": "app.stage.test-app.pan.panter.cloud",
|
|
1390
1390
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1391
1391
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1392
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1392
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1393
1393
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1394
1394
|
"KUBE_APP_NAME": "app",
|
|
1395
1395
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -1610,7 +1610,7 @@ jobs:
|
|
|
1610
1610
|
"HOST_CANONICAL": "app.prod.test-app.pan.panter.cloud",
|
|
1611
1611
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1612
1612
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1613
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1613
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1614
1614
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1615
1615
|
"KUBE_APP_NAME": "app",
|
|
1616
1616
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -1733,7 +1733,7 @@ jobs:
|
|
|
1733
1733
|
"HOST_CANONICAL": "app.stage.test-app.pan.panter.cloud",
|
|
1734
1734
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1735
1735
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1736
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1736
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1737
1737
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1738
1738
|
"KUBE_APP_NAME": "app",
|
|
1739
1739
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -1848,7 +1848,7 @@ jobs:
|
|
|
1848
1848
|
"HOST_CANONICAL": "app.prod.test-app.pan.panter.cloud",
|
|
1849
1849
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1850
1850
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1851
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1851
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1852
1852
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1853
1853
|
"KUBE_APP_NAME": "app",
|
|
1854
1854
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -1963,7 +1963,7 @@ jobs:
|
|
|
1963
1963
|
"HOST_CANONICAL": "app.stage.test-app.pan.panter.cloud",
|
|
1964
1964
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1965
1965
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1966
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1966
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1967
1967
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1968
1968
|
"KUBE_APP_NAME": "app",
|
|
1969
1969
|
"KUBE_APP_NAME_PREFIX": "",
|
|
@@ -172,7 +172,7 @@ exports[`matches snapshot 1`] = `
|
|
|
172
172
|
"HOST": "unknown-host.example.com",
|
|
173
173
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
174
174
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
175
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
175
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
176
176
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
177
177
|
"ROOT_URL": "https://unknown-host.example.com",
|
|
178
178
|
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
|
|
@@ -461,7 +461,7 @@ exports[`matches snapshot 1`] = `
|
|
|
461
461
|
"HOST": "unknown-host.example.com",
|
|
462
462
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
463
463
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
464
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
464
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
465
465
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
466
466
|
"ROOT_URL": "https://unknown-host.example.com",
|
|
467
467
|
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
|
|
@@ -818,7 +818,7 @@ exports[`matches snapshot 1`] = `
|
|
|
818
818
|
"HOST": "unknown-host.example.com",
|
|
819
819
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
820
820
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
821
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
821
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
822
822
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
823
823
|
"ROOT_URL": "https://unknown-host.example.com",
|
|
824
824
|
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
|
|
@@ -1107,7 +1107,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1107
1107
|
"HOST": "unknown-host.example.com",
|
|
1108
1108
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1109
1109
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1110
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1110
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1111
1111
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1112
1112
|
"ROOT_URL": "https://unknown-host.example.com",
|
|
1113
1113
|
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
|
|
@@ -1481,7 +1481,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1481
1481
|
"HOST": "unknown-host.example.com",
|
|
1482
1482
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1483
1483
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1484
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1484
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1485
1485
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1486
1486
|
"ROOT_URL": "https://unknown-host.example.com",
|
|
1487
1487
|
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
|
|
@@ -1529,7 +1529,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1529
1529
|
"HOST": "unknown-host.example.com",
|
|
1530
1530
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1531
1531
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1532
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1532
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1533
1533
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1534
1534
|
"ROOT_URL": "https://unknown-host.example.com",
|
|
1535
1535
|
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
|
|
@@ -1813,7 +1813,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1813
1813
|
"HOST": "unknown-host.example.com",
|
|
1814
1814
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1815
1815
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1816
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1816
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1817
1817
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1818
1818
|
"ROOT_URL": "https://unknown-host.example.com",
|
|
1819
1819
|
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
|
|
@@ -1865,7 +1865,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1865
1865
|
"HOST": "unknown-host.example.com",
|
|
1866
1866
|
"KUBERNETES_CPU_LIMIT": "1",
|
|
1867
1867
|
"KUBERNETES_CPU_REQUEST": "0.5",
|
|
1868
|
-
"KUBERNETES_MEMORY_LIMIT": "
|
|
1868
|
+
"KUBERNETES_MEMORY_LIMIT": "400Mi",
|
|
1869
1869
|
"KUBERNETES_MEMORY_REQUEST": "200Mi",
|
|
1870
1870
|
"ROOT_URL": "https://unknown-host.example.com",
|
|
1871
1871
|
"_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
|
package/package.json
CHANGED
|
@@ -29,6 +29,7 @@ export const createCustomTestJobs = (context: Context): CatladderJob[] => {
|
|
|
29
29
|
variables: {
|
|
30
30
|
APP_PATH: context.componentConfig.dir,
|
|
31
31
|
...RUNNER_CUSTOM_TEST_VARIABLES,
|
|
32
|
+
...context.environment.jobOnlyVars.build.envVars,
|
|
32
33
|
...(buildConfig.extraVars ?? {}),
|
|
33
34
|
},
|
|
34
35
|
services: buildConfig.jobServices,
|
|
@@ -18,6 +18,7 @@ export const createNodeTestJobs = (context: Context): CatladderJob[] => {
|
|
|
18
18
|
variables: {
|
|
19
19
|
APP_PATH: context.componentConfig.dir,
|
|
20
20
|
...NODE_RUNNER_BUILD_VARIABLES,
|
|
21
|
+
...context.environment.jobOnlyVars.build.envVars,
|
|
21
22
|
...(buildConfig.extraVars ?? {}),
|
|
22
23
|
},
|
|
23
24
|
stage: "test",
|
package/src/build/rails/build.ts
CHANGED
|
@@ -18,7 +18,10 @@ export const createRailsBuildJobs = (context: Context): CatladderJob[] => {
|
|
|
18
18
|
|
|
19
19
|
return [
|
|
20
20
|
createDockerBuildJobBase(context, {
|
|
21
|
-
variables:
|
|
21
|
+
variables: {
|
|
22
|
+
...context.environment.jobOnlyVars.build.envVars,
|
|
23
|
+
...context.componentConfig.build.extraVars,
|
|
24
|
+
},
|
|
22
25
|
// custom script
|
|
23
26
|
script: [
|
|
24
27
|
gitlabDockerLogin,
|
package/src/build/rails/test.ts
CHANGED
|
@@ -11,7 +11,10 @@ export const createRailsTestJobs = (context: Context): CatladderJob[] => {
|
|
|
11
11
|
const buildConfig = context.componentConfig.build;
|
|
12
12
|
|
|
13
13
|
const base: Omit<CatladderJob, "script" | "name"> = {
|
|
14
|
-
variables:
|
|
14
|
+
variables: {
|
|
15
|
+
...context.environment.jobOnlyVars.build.envVars,
|
|
16
|
+
...(buildConfig.extraVars ?? {}),
|
|
17
|
+
},
|
|
15
18
|
stage: "test",
|
|
16
19
|
needs: [],
|
|
17
20
|
envMode: "none",
|
package/src/build/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GitlabJobImage, GitlabJobService } from "../types";
|
|
1
|
+
import type { EnvVars, GitlabJobImage, GitlabJobService } from "../types";
|
|
2
2
|
|
|
3
3
|
import type { CatladderJob } from "../types/jobs";
|
|
4
4
|
|
|
@@ -17,8 +17,16 @@ export type BuildConfigBase = {
|
|
|
17
17
|
* command to run on the image to start the app (e.g. yarn start)
|
|
18
18
|
*/
|
|
19
19
|
startCommand?: string;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* vars that only exist in the build jobs.
|
|
23
|
+
* Can curently not reference other variables from other components
|
|
24
|
+
*/
|
|
25
|
+
jobVars?: EnvVars;
|
|
20
26
|
/**
|
|
21
27
|
* additional env vars for the buid jobs
|
|
28
|
+
*
|
|
29
|
+
* @deprecated use jobVars
|
|
22
30
|
*/
|
|
23
31
|
extraVars?: Record<string, string>;
|
|
24
32
|
/**
|
|
@@ -10,8 +10,12 @@ export const getEnvironment = async (
|
|
|
10
10
|
env: string,
|
|
11
11
|
commitInfo?: CommitInfo
|
|
12
12
|
): Promise<Environment> => {
|
|
13
|
-
const
|
|
14
|
-
|
|
13
|
+
const variables = await getEnvironmentVariables(
|
|
14
|
+
config,
|
|
15
|
+
componentName,
|
|
16
|
+
env,
|
|
17
|
+
commitInfo
|
|
18
|
+
);
|
|
15
19
|
|
|
16
20
|
const envContext = getEnvironmentContext(
|
|
17
21
|
config,
|
|
@@ -24,17 +28,15 @@ export const getEnvironment = async (
|
|
|
24
28
|
|
|
25
29
|
return {
|
|
26
30
|
envType,
|
|
27
|
-
|
|
28
|
-
url,
|
|
31
|
+
|
|
29
32
|
gitlabEnvironment: {
|
|
30
33
|
name: envContext.gitlabEnvironmentName,
|
|
31
|
-
url,
|
|
34
|
+
url: variables.url,
|
|
32
35
|
},
|
|
33
36
|
fullName: envContext.fullName,
|
|
34
37
|
slugPrefix: envContext.environmentSlugPrefix,
|
|
35
38
|
slug: envContext.environmentSlug,
|
|
36
39
|
shortName: env,
|
|
37
|
-
|
|
38
|
-
secretEnvVarKeys,
|
|
40
|
+
...variables,
|
|
39
41
|
};
|
|
40
42
|
};
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { merge } from "lodash";
|
|
2
2
|
import { DEPLOY_TYPES } from "../deploy";
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
CommitInfo,
|
|
5
|
+
Context,
|
|
6
|
+
EnvironmentEnvVarPart as EnvironmentVariables,
|
|
7
|
+
} from "../types";
|
|
4
8
|
import type { Config, DevLocalEnvConfig } from "../types/config";
|
|
5
9
|
|
|
6
10
|
import { getEnvironmentContext } from "./getEnvironmentContext";
|
|
@@ -8,6 +12,12 @@ import {
|
|
|
8
12
|
resolveReferences,
|
|
9
13
|
translateLegacyFromComponents,
|
|
10
14
|
} from "./resolveReferences";
|
|
15
|
+
import {
|
|
16
|
+
stringListToSecreteEnvVarList,
|
|
17
|
+
makeSecretEnvVarMapping,
|
|
18
|
+
stringifyValues,
|
|
19
|
+
} from "./utils/envVars";
|
|
20
|
+
import { transformJobOnlyVars } from "./transformJobOnlyVars";
|
|
11
21
|
|
|
12
22
|
export type SecretEnvVar = {
|
|
13
23
|
key: string;
|
|
@@ -20,12 +30,7 @@ export const getEnvironmentVariables = async (
|
|
|
20
30
|
env: string,
|
|
21
31
|
commitInfo?: CommitInfo,
|
|
22
32
|
alreadyVisited: Record<string, Record<string, boolean>> = {} // to prevent endless loop
|
|
23
|
-
): Promise<{
|
|
24
|
-
envVars: Record<string, string>;
|
|
25
|
-
secretEnvVarKeys: SecretEnvVar[];
|
|
26
|
-
host: string;
|
|
27
|
-
url: string;
|
|
28
|
-
}> => {
|
|
33
|
+
): Promise<EnvironmentVariables> => {
|
|
29
34
|
const environmentContext = getEnvironmentContext(
|
|
30
35
|
config,
|
|
31
36
|
env,
|
|
@@ -33,7 +38,8 @@ export const getEnvironmentVariables = async (
|
|
|
33
38
|
commitInfo
|
|
34
39
|
);
|
|
35
40
|
|
|
36
|
-
const { envConfigRaw, deployConfigRaw, envType } =
|
|
41
|
+
const { envConfigRaw, deployConfigRaw, buildConfigRaw, envType } =
|
|
42
|
+
environmentContext;
|
|
37
43
|
|
|
38
44
|
const basePredefinedVariables = {
|
|
39
45
|
ENV_SHORT: env,
|
|
@@ -90,31 +96,24 @@ export const getEnvironmentVariables = async (
|
|
|
90
96
|
: [];
|
|
91
97
|
|
|
92
98
|
const secretEnvVarKeys: SecretEnvVar[] = [
|
|
93
|
-
...(envConfigRaw.vars?.secret ?? [])
|
|
99
|
+
...stringListToSecreteEnvVarList(envConfigRaw.vars?.secret ?? []),
|
|
94
100
|
...additionalSecretKeys,
|
|
95
101
|
];
|
|
96
|
-
const secretEnvVars =
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
])
|
|
102
|
+
const secretEnvVars = makeSecretEnvVarMapping(
|
|
103
|
+
env,
|
|
104
|
+
componentName,
|
|
105
|
+
secretEnvVarKeys
|
|
101
106
|
);
|
|
102
|
-
|
|
103
107
|
// this is deprecated, we now support: $componentname:FOO
|
|
104
108
|
const legacyFromComponents = envConfigRaw.vars?.fromComponents ?? {};
|
|
105
|
-
const
|
|
109
|
+
const publicEnvVarsRawWithLegacyFromComponents = merge(
|
|
106
110
|
{},
|
|
107
111
|
translateLegacyFromComponents(legacyFromComponents),
|
|
108
112
|
publicEnvVarsRaw
|
|
109
113
|
);
|
|
110
114
|
|
|
111
|
-
const publicEnvVarsRawSanitized =
|
|
112
|
-
|
|
113
|
-
([key, value]) => [
|
|
114
|
-
key,
|
|
115
|
-
isObject(value) ? JSON.stringify(value) : `${value}`,
|
|
116
|
-
]
|
|
117
|
-
)
|
|
115
|
+
const publicEnvVarsRawSanitized = stringifyValues(
|
|
116
|
+
publicEnvVarsRawWithLegacyFromComponents
|
|
118
117
|
);
|
|
119
118
|
|
|
120
119
|
const envVarsRaw = addIndexVar({
|
|
@@ -141,6 +140,19 @@ export const getEnvironmentVariables = async (
|
|
|
141
140
|
return {
|
|
142
141
|
envVars,
|
|
143
142
|
secretEnvVarKeys,
|
|
143
|
+
jobOnlyVars: {
|
|
144
|
+
build: await transformJobOnlyVars(
|
|
145
|
+
env,
|
|
146
|
+
componentName,
|
|
147
|
+
(buildConfigRaw && buildConfigRaw.jobVars) || null
|
|
148
|
+
),
|
|
149
|
+
deploy: await transformJobOnlyVars(
|
|
150
|
+
env,
|
|
151
|
+
componentName,
|
|
152
|
+
(deployConfigRaw && deployConfigRaw.jobVars) || null
|
|
153
|
+
),
|
|
154
|
+
},
|
|
155
|
+
|
|
144
156
|
host,
|
|
145
157
|
url,
|
|
146
158
|
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { EnvironmentEnvVars } from "..";
|
|
2
|
+
import type { EnvVars } from "../types/config";
|
|
3
|
+
import {
|
|
4
|
+
makeSecretEnvVarMapping,
|
|
5
|
+
stringListToSecreteEnvVarList,
|
|
6
|
+
stringifyValues,
|
|
7
|
+
} from "./utils/envVars";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* transform EnvVars for environment.
|
|
11
|
+
*
|
|
12
|
+
* currently does not resolve references and is only used for additional job-only-vars
|
|
13
|
+
* @param vars
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
16
|
+
export const transformJobOnlyVars = async (
|
|
17
|
+
env: string,
|
|
18
|
+
componentName: string,
|
|
19
|
+
vars: EnvVars | null
|
|
20
|
+
): Promise<EnvironmentEnvVars> => {
|
|
21
|
+
if (!vars) {
|
|
22
|
+
return {
|
|
23
|
+
envVars: {},
|
|
24
|
+
secretEnvVarKeys: [],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const publicVars = stringifyValues(vars?.public ?? {});
|
|
29
|
+
const secretEnvVarKeys = stringListToSecreteEnvVarList(vars?.secret ?? []);
|
|
30
|
+
const deployJobOnlySecretEnvVars = vars?.secret
|
|
31
|
+
? makeSecretEnvVarMapping(env, componentName, secretEnvVarKeys)
|
|
32
|
+
: {};
|
|
33
|
+
|
|
34
|
+
const envVars = {
|
|
35
|
+
...deployJobOnlySecretEnvVars,
|
|
36
|
+
...publicVars,
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
envVars,
|
|
40
|
+
secretEnvVarKeys,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { isObject } from "lodash";
|
|
2
|
+
import type { SecretEnvVar } from "../getEnvironmentVariables";
|
|
3
|
+
import { getSecretVarName } from "../getEnvironmentVariables";
|
|
4
|
+
|
|
5
|
+
export const stringifyValues = (obj: Record<string, unknown>) =>
|
|
6
|
+
Object.fromEntries(
|
|
7
|
+
Object.entries(obj).map(([key, value]) => [
|
|
8
|
+
key,
|
|
9
|
+
isObject(value) ? JSON.stringify(value) : `${value}`,
|
|
10
|
+
])
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
export const stringListToSecreteEnvVarList = (keys: string[]): SecretEnvVar[] =>
|
|
14
|
+
keys.map((key) => ({ key }));
|
|
15
|
+
export const makeSecretEnvVarMapping = (
|
|
16
|
+
env: string,
|
|
17
|
+
componentName: string,
|
|
18
|
+
secretEnvVars: SecretEnvVar[]
|
|
19
|
+
) => {
|
|
20
|
+
return Object.fromEntries(
|
|
21
|
+
secretEnvVars.map(({ key }) => [
|
|
22
|
+
key,
|
|
23
|
+
`$${getSecretVarName(env, componentName, key)}`,
|
|
24
|
+
])
|
|
25
|
+
);
|
|
26
|
+
};
|
package/src/deploy/base.ts
CHANGED
|
@@ -11,7 +11,7 @@ const DEPLOY_RUNNER_VARIABLES = {
|
|
|
11
11
|
KUBERNETES_CPU_REQUEST: "0.5",
|
|
12
12
|
KUBERNETES_CPU_LIMIT: "1",
|
|
13
13
|
KUBERNETES_MEMORY_REQUEST: "200Mi",
|
|
14
|
-
KUBERNETES_MEMORY_LIMIT: "
|
|
14
|
+
KUBERNETES_MEMORY_LIMIT: "400Mi",
|
|
15
15
|
};
|
|
16
16
|
type JobWithoutScript = Omit<CatladderJob, "script">;
|
|
17
17
|
export const getBaseDeploymentJob = (context: Context): JobWithoutScript => {
|
|
@@ -76,6 +76,7 @@ export const getBaseDeploymentJob = (context: Context): JobWithoutScript => {
|
|
|
76
76
|
...DEPLOY_RUNNER_VARIABLES,
|
|
77
77
|
...context.environment.envVars,
|
|
78
78
|
...(hasDocker ? getDockerImageVariables(context) : {}),
|
|
79
|
+
...context.environment.jobOnlyVars.deploy.envVars,
|
|
79
80
|
...(context.componentConfig.deploy
|
|
80
81
|
? context.componentConfig.deploy.extraVars ?? {}
|
|
81
82
|
: {}),
|
|
@@ -115,6 +116,7 @@ export const getBaseDeploymentStopJob = (
|
|
|
115
116
|
],
|
|
116
117
|
variables: {
|
|
117
118
|
...DEPLOY_RUNNER_VARIABLES,
|
|
119
|
+
...context.environment.jobOnlyVars.deploy.envVars,
|
|
118
120
|
GIT_STRATEGY: "none",
|
|
119
121
|
},
|
|
120
122
|
stage: "stop",
|
|
@@ -138,6 +140,7 @@ export const getBaseRollbackJob = (context: Context): JobWithoutScript => {
|
|
|
138
140
|
],
|
|
139
141
|
variables: {
|
|
140
142
|
...DEPLOY_RUNNER_VARIABLES,
|
|
143
|
+
...context.environment.jobOnlyVars.deploy.envVars,
|
|
141
144
|
GIT_STRATEGY: "none",
|
|
142
145
|
},
|
|
143
146
|
stage: "rollback",
|
package/src/deploy/types/base.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { EnvVars } from "../../types/config";
|
|
2
|
+
|
|
1
3
|
export type DeployConfigBase = {
|
|
2
4
|
/**
|
|
3
5
|
* whether to deploy automatically or manual. If not defined, these rules apply:
|
|
@@ -17,8 +19,16 @@ export type DeployConfigBase = {
|
|
|
17
19
|
*/
|
|
18
20
|
jobTags?: string[];
|
|
19
21
|
|
|
22
|
+
/**
|
|
23
|
+
* vars that only exist in the deploy job.
|
|
24
|
+
* Can curently not reference other variables from other components
|
|
25
|
+
*/
|
|
26
|
+
jobVars?: EnvVars;
|
|
27
|
+
|
|
20
28
|
/**
|
|
21
29
|
* additional env vars for the deploy job
|
|
30
|
+
*
|
|
31
|
+
* @deprecated use deploy.jobVars for deploy job specific variables
|
|
22
32
|
*/
|
|
23
33
|
extraVars?: Record<string, string>;
|
|
24
34
|
};
|