@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.
Files changed (50) hide show
  1. package/dist/build/base/createBuildJob.js +1 -1
  2. package/dist/build/custom/testJob.js +2 -2
  3. package/dist/build/node/testJob.js +2 -2
  4. package/dist/build/rails/build.js +11 -1
  5. package/dist/build/rails/test.js +1 -1
  6. package/dist/build/types.d.ts +8 -1
  7. package/dist/bundles/catladder-gitlab/index.js +3 -3
  8. package/dist/constants.js +1 -1
  9. package/dist/context/getEnvironment.js +18 -12
  10. package/dist/context/getEnvironmentVariables.d.ts +2 -7
  11. package/dist/context/getEnvironmentVariables.js +27 -31
  12. package/dist/context/transformJobOnlyVars.d.ts +10 -0
  13. package/dist/context/transformJobOnlyVars.js +160 -0
  14. package/dist/context/utils/envVars.d.ts +8 -0
  15. package/dist/context/utils/envVars.js +52 -0
  16. package/dist/deploy/base.js +4 -4
  17. package/dist/deploy/types/base.d.ts +8 -0
  18. package/dist/tsconfig.tsbuildinfo +1 -1
  19. package/dist/types/context.d.ts +16 -6
  20. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +8 -8
  21. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +8 -8
  22. package/examples/__snapshots__/cloud-run-non-public.ts.snap +8 -8
  23. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +16 -16
  24. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +16 -16
  25. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +8 -8
  26. package/examples/__snapshots__/custom-build-job.ts.snap +8 -8
  27. package/examples/__snapshots__/custom-deploy.ts.snap +16 -8
  28. package/examples/__snapshots__/custom-sbom-java.ts.snap +8 -8
  29. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +12 -12
  30. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +12 -12
  31. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +12 -12
  32. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +24 -24
  33. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +12 -12
  34. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +12 -12
  35. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +8 -8
  36. package/examples/custom-deploy.ts +3 -0
  37. package/package.json +1 -1
  38. package/src/build/base/createBuildJob.ts +1 -0
  39. package/src/build/custom/testJob.ts +1 -0
  40. package/src/build/node/testJob.ts +1 -0
  41. package/src/build/rails/build.ts +4 -1
  42. package/src/build/rails/test.ts +4 -1
  43. package/src/build/types.ts +9 -1
  44. package/src/context/getEnvironment.ts +9 -7
  45. package/src/context/getEnvironmentVariables.ts +36 -24
  46. package/src/context/transformJobOnlyVars.ts +42 -0
  47. package/src/context/utils/envVars.ts +26 -0
  48. package/src/deploy/base.ts +4 -1
  49. package/src/deploy/types/base.ts +10 -0
  50. 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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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": "200Mi",
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"]",
@@ -13,6 +13,9 @@ const config: Config = {
13
13
  deploy: {
14
14
  type: "custom",
15
15
  requiresDocker: true,
16
+ jobVars: {
17
+ secret: ["DEPLOY_API_KEY"],
18
+ },
16
19
  script: ["echo 'would deploy'"],
17
20
  stopScript: ["echo 'would stop'"],
18
21
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@catladder/pipeline",
3
- "version": "1.101.3",
3
+ "version": "1.102.0",
4
4
  "scripts": {
5
5
  "build:tsc": "yarn tsc",
6
6
  "build": "yarn build:compile && yarn build:inline-variables && yarn build:bundle",
@@ -27,6 +27,7 @@ export const createBuildJob = (
27
27
  ...RUNNER_BUILD_RESOURCE_VARIABLES,
28
28
  ...(variables ?? {}),
29
29
  ...context.environment.envVars,
30
+ ...context.environment.jobOnlyVars.build.envVars,
30
31
  ...(context.componentConfig.build.extraVars ?? {}),
31
32
  },
32
33
 
@@ -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",
@@ -18,7 +18,10 @@ export const createRailsBuildJobs = (context: Context): CatladderJob[] => {
18
18
 
19
19
  return [
20
20
  createDockerBuildJobBase(context, {
21
- variables: context.componentConfig.build.extraVars,
21
+ variables: {
22
+ ...context.environment.jobOnlyVars.build.envVars,
23
+ ...context.componentConfig.build.extraVars,
24
+ },
22
25
  // custom script
23
26
  script: [
24
27
  gitlabDockerLogin,
@@ -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: buildConfig.extraVars ?? {},
14
+ variables: {
15
+ ...context.environment.jobOnlyVars.build.envVars,
16
+ ...(buildConfig.extraVars ?? {}),
17
+ },
15
18
  stage: "test",
16
19
  needs: [],
17
20
  envMode: "none",
@@ -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 { envVars, secretEnvVarKeys, host, url } =
14
- await getEnvironmentVariables(config, componentName, env, commitInfo);
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
- host,
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
- envVars,
38
- secretEnvVarKeys,
40
+ ...variables,
39
41
  };
40
42
  };
@@ -1,6 +1,10 @@
1
- import { isObject, merge } from "lodash";
1
+ import { merge } from "lodash";
2
2
  import { DEPLOY_TYPES } from "../deploy";
3
- import type { CommitInfo, Context } from "../types";
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 } = environmentContext;
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 ?? []).map((key) => ({ key })),
99
+ ...stringListToSecreteEnvVarList(envConfigRaw.vars?.secret ?? []),
94
100
  ...additionalSecretKeys,
95
101
  ];
96
- const secretEnvVars = Object.fromEntries(
97
- secretEnvVarKeys.map(({ key }) => [
98
- key,
99
- `$${getSecretVarName(env, componentName, key)}`,
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 publicEnvVarsRawWithLegasyFromComponents = merge(
109
+ const publicEnvVarsRawWithLegacyFromComponents = merge(
106
110
  {},
107
111
  translateLegacyFromComponents(legacyFromComponents),
108
112
  publicEnvVarsRaw
109
113
  );
110
114
 
111
- const publicEnvVarsRawSanitized = Object.fromEntries(
112
- Object.entries(publicEnvVarsRawWithLegasyFromComponents).map(
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
+ };
@@ -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: "200Mi",
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",
@@ -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
  };