@catladder/pipeline 1.110.1 → 1.110.3

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 (69) hide show
  1. package/dist/build/base/__tests__/createArtifactsConfig.test.d.ts +1 -0
  2. package/dist/build/base/__tests__/createArtifactsConfig.test.js +40 -0
  3. package/dist/build/base/createArtifactsConfig.d.ts +4 -0
  4. package/dist/build/base/createArtifactsConfig.js +63 -0
  5. package/dist/build/custom/__tests__/testJob.test.d.ts +1 -0
  6. package/dist/build/custom/__tests__/testJob.test.js +37 -0
  7. package/dist/build/custom/buildJob.js +4 -2
  8. package/dist/build/custom/testJob.d.ts +5 -1
  9. package/dist/build/custom/testJob.js +10 -23
  10. package/dist/build/node/buildJob.js +4 -2
  11. package/dist/build/node/testJob.js +12 -11
  12. package/dist/build/rails/build.js +13 -2
  13. package/dist/build/sbom.d.ts +5 -0
  14. package/dist/build/sbom.js +29 -0
  15. package/dist/build/types.d.ts +39 -40
  16. package/dist/bundles/catladder-gitlab/index.js +3 -3
  17. package/dist/constants.js +1 -1
  18. package/dist/deploy/base.js +38 -2
  19. package/dist/deploy/cloudRun/deployJob.js +5 -4
  20. package/dist/deploy/custom/deployJob.js +3 -2
  21. package/dist/deploy/kubernetes/deployJob.js +3 -2
  22. package/dist/deploy/sbom.d.ts +4 -0
  23. package/dist/deploy/sbom.js +17 -0
  24. package/dist/pipeline/createJobsForComponent.js +1 -3
  25. package/dist/pipeline/gitlab/createGitlabJobs.js +5 -2
  26. package/dist/tsconfig.tsbuildinfo +1 -1
  27. package/dist/types/gitlab-types.d.ts +13 -22
  28. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +40 -96
  29. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +40 -96
  30. package/examples/__snapshots__/cloud-run-non-public.ts.snap +40 -96
  31. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +80 -192
  32. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +80 -192
  33. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +40 -96
  34. package/examples/__snapshots__/custom-build-job.ts.snap +40 -96
  35. package/examples/__snapshots__/custom-deploy.ts.snap +40 -96
  36. package/examples/__snapshots__/custom-envs.ts.snap +6 -126
  37. package/examples/__snapshots__/custom-sbom-java.ts.snap +40 -96
  38. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +40 -96
  39. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +40 -96
  40. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +40 -96
  41. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +80 -192
  42. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +40 -96
  43. package/examples/__snapshots__/native-app.ts.snap +72 -192
  44. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +40 -96
  45. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +40 -96
  46. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +64 -192
  47. package/package.json +1 -1
  48. package/src/build/base/__tests__/__snapshots__/createArtifactsConfig.test.ts.snap +49 -0
  49. package/src/build/base/__tests__/createArtifactsConfig.test.ts +41 -0
  50. package/src/build/base/createArtifactsConfig.ts +34 -0
  51. package/src/build/custom/__tests__/testJob.test.ts +32 -0
  52. package/src/build/custom/buildJob.ts +3 -0
  53. package/src/build/custom/testJob.ts +8 -21
  54. package/src/build/node/buildJob.ts +3 -0
  55. package/src/build/node/testJob.ts +16 -0
  56. package/src/build/rails/build.ts +3 -0
  57. package/src/build/sbom.ts +43 -0
  58. package/src/build/types.ts +45 -46
  59. package/src/deploy/base.ts +14 -7
  60. package/src/deploy/cloudRun/deployJob.ts +6 -0
  61. package/src/deploy/custom/deployJob.ts +9 -1
  62. package/src/deploy/kubernetes/deployJob.ts +10 -1
  63. package/src/deploy/sbom.ts +24 -0
  64. package/src/pipeline/createJobsForComponent.ts +1 -3
  65. package/src/pipeline/gitlab/createGitlabJobs.ts +6 -2
  66. package/src/types/gitlab-types.ts +12 -12
  67. package/dist/verify/reporting.d.ts +0 -3
  68. package/dist/verify/reporting.js +0 -48
  69. package/src/verify/reporting.ts +0 -69
@@ -142,6 +142,10 @@ exports[`matches snapshot 1`] = `
142
142
  "artifacts": false,
143
143
  "job": "api 🧪 test",
144
144
  },
145
+ {
146
+ "artifacts": true,
147
+ "job": "api 🧾 sbom | dev ",
148
+ },
145
149
  {
146
150
  "artifacts": false,
147
151
  "job": "api 🛡 audit",
@@ -162,6 +166,8 @@ exports[`matches snapshot 1`] = `
162
166
  "script": [
163
167
  "cd api",
164
168
  "yarn deploy",
169
+ "echo Uploading SBOM to Dependency Track",
170
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
165
171
  ],
166
172
  "stage": "deploy dev",
167
173
  "variables": {
@@ -248,26 +254,6 @@ exports[`matches snapshot 1`] = `
248
254
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
249
255
  },
250
256
  },
251
- "api 🧾 sbom upload | dev ": {
252
- "allow_failure": true,
253
- "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
254
- "interruptible": true,
255
- "needs": [
256
- "api 🧾 sbom | dev ",
257
- ],
258
- "retry": {
259
- "max": 2,
260
- "when": [
261
- "runner_system_failure",
262
- "stuck_or_timeout_failure",
263
- ],
264
- },
265
- "script": [
266
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "dev" "__sbom.json" vex.json",
267
- ],
268
- "stage": "verify",
269
- "variables": {},
270
- },
271
257
  "api 🧾 sbom | dev ": {
272
258
  "allow_failure": true,
273
259
  "artifacts": {
@@ -277,9 +263,7 @@ exports[`matches snapshot 1`] = `
277
263
  },
278
264
  "image": "aquasec/trivy:0.38.3",
279
265
  "interruptible": true,
280
- "needs": [
281
- "api 🚀 Deploy | dev ",
282
- ],
266
+ "needs": [],
283
267
  "retry": {
284
268
  "max": 2,
285
269
  "when": [
@@ -290,7 +274,7 @@ exports[`matches snapshot 1`] = `
290
274
  "script": [
291
275
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
292
276
  ],
293
- "stage": "verify",
277
+ "stage": "build",
294
278
  "variables": {},
295
279
  },
296
280
  "www 👮 lint": {
@@ -434,6 +418,10 @@ exports[`matches snapshot 1`] = `
434
418
  "artifacts": false,
435
419
  "job": "www 🧪 test",
436
420
  },
421
+ {
422
+ "artifacts": true,
423
+ "job": "www 🧾 sbom | dev ",
424
+ },
437
425
  {
438
426
  "artifacts": false,
439
427
  "job": "www 🛡 audit",
@@ -454,6 +442,8 @@ exports[`matches snapshot 1`] = `
454
442
  "script": [
455
443
  "cd www",
456
444
  "yarn deploy",
445
+ "echo Uploading SBOM to Dependency Track",
446
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
457
447
  ],
458
448
  "stage": "deploy dev",
459
449
  "variables": {
@@ -540,26 +530,6 @@ exports[`matches snapshot 1`] = `
540
530
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
541
531
  },
542
532
  },
543
- "www 🧾 sbom upload | dev ": {
544
- "allow_failure": true,
545
- "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
546
- "interruptible": true,
547
- "needs": [
548
- "www 🧾 sbom | dev ",
549
- ],
550
- "retry": {
551
- "max": 2,
552
- "when": [
553
- "runner_system_failure",
554
- "stuck_or_timeout_failure",
555
- ],
556
- },
557
- "script": [
558
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "dev" "__sbom.json" vex.json",
559
- ],
560
- "stage": "verify",
561
- "variables": {},
562
- },
563
533
  "www 🧾 sbom | dev ": {
564
534
  "allow_failure": true,
565
535
  "artifacts": {
@@ -569,9 +539,7 @@ exports[`matches snapshot 1`] = `
569
539
  },
570
540
  "image": "aquasec/trivy:0.38.3",
571
541
  "interruptible": true,
572
- "needs": [
573
- "www 🚀 Deploy | dev ",
574
- ],
542
+ "needs": [],
575
543
  "retry": {
576
544
  "max": 2,
577
545
  "when": [
@@ -582,7 +550,7 @@ exports[`matches snapshot 1`] = `
582
550
  "script": [
583
551
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
584
552
  ],
585
- "stage": "verify",
553
+ "stage": "build",
586
554
  "variables": {},
587
555
  },
588
556
  },
@@ -794,6 +762,10 @@ exports[`matches snapshot 1`] = `
794
762
  "artifacts": false,
795
763
  "job": "api 🧪 test",
796
764
  },
765
+ {
766
+ "artifacts": true,
767
+ "job": "api 🧾 sbom | review ",
768
+ },
797
769
  {
798
770
  "artifacts": false,
799
771
  "job": "api 🛡 audit",
@@ -814,6 +786,8 @@ exports[`matches snapshot 1`] = `
814
786
  "script": [
815
787
  "cd api",
816
788
  "yarn deploy",
789
+ "echo Uploading SBOM to Dependency Track",
790
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
817
791
  ],
818
792
  "stage": "deploy review",
819
793
  "variables": {
@@ -900,26 +874,6 @@ exports[`matches snapshot 1`] = `
900
874
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
901
875
  },
902
876
  },
903
- "api 🧾 sbom upload | review ": {
904
- "allow_failure": true,
905
- "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
906
- "interruptible": true,
907
- "needs": [
908
- "api 🧾 sbom | review ",
909
- ],
910
- "retry": {
911
- "max": 2,
912
- "when": [
913
- "runner_system_failure",
914
- "stuck_or_timeout_failure",
915
- ],
916
- },
917
- "script": [
918
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "review" "__sbom.json" vex.json",
919
- ],
920
- "stage": "verify",
921
- "variables": {},
922
- },
923
877
  "api 🧾 sbom | review ": {
924
878
  "allow_failure": true,
925
879
  "artifacts": {
@@ -929,9 +883,7 @@ exports[`matches snapshot 1`] = `
929
883
  },
930
884
  "image": "aquasec/trivy:0.38.3",
931
885
  "interruptible": true,
932
- "needs": [
933
- "api 🚀 Deploy | review ",
934
- ],
886
+ "needs": [],
935
887
  "retry": {
936
888
  "max": 2,
937
889
  "when": [
@@ -942,7 +894,7 @@ exports[`matches snapshot 1`] = `
942
894
  "script": [
943
895
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
944
896
  ],
945
- "stage": "verify",
897
+ "stage": "build",
946
898
  "variables": {},
947
899
  },
948
900
  "www 👮 lint": {
@@ -1086,6 +1038,10 @@ exports[`matches snapshot 1`] = `
1086
1038
  "artifacts": false,
1087
1039
  "job": "www 🧪 test",
1088
1040
  },
1041
+ {
1042
+ "artifacts": true,
1043
+ "job": "www 🧾 sbom | review ",
1044
+ },
1089
1045
  {
1090
1046
  "artifacts": false,
1091
1047
  "job": "www 🛡 audit",
@@ -1106,6 +1062,8 @@ exports[`matches snapshot 1`] = `
1106
1062
  "script": [
1107
1063
  "cd www",
1108
1064
  "yarn deploy",
1065
+ "echo Uploading SBOM to Dependency Track",
1066
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1109
1067
  ],
1110
1068
  "stage": "deploy review",
1111
1069
  "variables": {
@@ -1192,26 +1150,6 @@ exports[`matches snapshot 1`] = `
1192
1150
  "KUBERNETES_MEMORY_REQUEST": "2Gi",
1193
1151
  },
1194
1152
  },
1195
- "www 🧾 sbom upload | review ": {
1196
- "allow_failure": true,
1197
- "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1198
- "interruptible": true,
1199
- "needs": [
1200
- "www 🧾 sbom | review ",
1201
- ],
1202
- "retry": {
1203
- "max": 2,
1204
- "when": [
1205
- "runner_system_failure",
1206
- "stuck_or_timeout_failure",
1207
- ],
1208
- },
1209
- "script": [
1210
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "review" "__sbom.json" vex.json",
1211
- ],
1212
- "stage": "verify",
1213
- "variables": {},
1214
- },
1215
1153
  "www 🧾 sbom | review ": {
1216
1154
  "allow_failure": true,
1217
1155
  "artifacts": {
@@ -1221,9 +1159,7 @@ exports[`matches snapshot 1`] = `
1221
1159
  },
1222
1160
  "image": "aquasec/trivy:0.38.3",
1223
1161
  "interruptible": true,
1224
- "needs": [
1225
- "www 🚀 Deploy | review ",
1226
- ],
1162
+ "needs": [],
1227
1163
  "retry": {
1228
1164
  "max": 2,
1229
1165
  "when": [
@@ -1234,7 +1170,7 @@ exports[`matches snapshot 1`] = `
1234
1170
  "script": [
1235
1171
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1236
1172
  ],
1237
- "stage": "verify",
1173
+ "stage": "build",
1238
1174
  "variables": {},
1239
1175
  },
1240
1176
  },
@@ -1467,6 +1403,10 @@ exports[`matches snapshot 1`] = `
1467
1403
  "artifacts": true,
1468
1404
  "job": "api 🔨 app | prod ",
1469
1405
  },
1406
+ {
1407
+ "artifacts": true,
1408
+ "job": "api 🧾 sbom | prod ",
1409
+ },
1470
1410
  ],
1471
1411
  "retry": {
1472
1412
  "max": 2,
@@ -1483,6 +1423,8 @@ exports[`matches snapshot 1`] = `
1483
1423
  "script": [
1484
1424
  "cd api",
1485
1425
  "yarn deploy",
1426
+ "echo Uploading SBOM to Dependency Track",
1427
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1486
1428
  ],
1487
1429
  "stage": "deploy prod",
1488
1430
  "variables": {
@@ -1515,6 +1457,10 @@ exports[`matches snapshot 1`] = `
1515
1457
  "artifacts": true,
1516
1458
  "job": "api 🔨 app | stage ",
1517
1459
  },
1460
+ {
1461
+ "artifacts": true,
1462
+ "job": "api 🧾 sbom | stage ",
1463
+ },
1518
1464
  ],
1519
1465
  "retry": {
1520
1466
  "max": 2,
@@ -1531,6 +1477,8 @@ exports[`matches snapshot 1`] = `
1531
1477
  "script": [
1532
1478
  "cd api",
1533
1479
  "yarn deploy",
1480
+ "echo Uploading SBOM to Dependency Track",
1481
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1534
1482
  ],
1535
1483
  "stage": "deploy stage",
1536
1484
  "variables": {
@@ -1549,46 +1497,6 @@ exports[`matches snapshot 1`] = `
1549
1497
  "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
1550
1498
  },
1551
1499
  },
1552
- "api 🧾 sbom upload | prod ": {
1553
- "allow_failure": true,
1554
- "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1555
- "interruptible": true,
1556
- "needs": [
1557
- "api 🧾 sbom | prod ",
1558
- ],
1559
- "retry": {
1560
- "max": 2,
1561
- "when": [
1562
- "runner_system_failure",
1563
- "stuck_or_timeout_failure",
1564
- ],
1565
- },
1566
- "script": [
1567
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "prod" "__sbom.json" vex.json",
1568
- ],
1569
- "stage": "verify",
1570
- "variables": {},
1571
- },
1572
- "api 🧾 sbom upload | stage ": {
1573
- "allow_failure": true,
1574
- "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1575
- "interruptible": true,
1576
- "needs": [
1577
- "api 🧾 sbom | stage ",
1578
- ],
1579
- "retry": {
1580
- "max": 2,
1581
- "when": [
1582
- "runner_system_failure",
1583
- "stuck_or_timeout_failure",
1584
- ],
1585
- },
1586
- "script": [
1587
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "stage" "__sbom.json" vex.json",
1588
- ],
1589
- "stage": "verify",
1590
- "variables": {},
1591
- },
1592
1500
  "api 🧾 sbom | prod ": {
1593
1501
  "allow_failure": true,
1594
1502
  "artifacts": {
@@ -1598,9 +1506,7 @@ exports[`matches snapshot 1`] = `
1598
1506
  },
1599
1507
  "image": "aquasec/trivy:0.38.3",
1600
1508
  "interruptible": true,
1601
- "needs": [
1602
- "api 🚀 Deploy | prod ",
1603
- ],
1509
+ "needs": [],
1604
1510
  "retry": {
1605
1511
  "max": 2,
1606
1512
  "when": [
@@ -1611,7 +1517,7 @@ exports[`matches snapshot 1`] = `
1611
1517
  "script": [
1612
1518
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1613
1519
  ],
1614
- "stage": "verify",
1520
+ "stage": "build",
1615
1521
  "variables": {},
1616
1522
  },
1617
1523
  "api 🧾 sbom | stage ": {
@@ -1623,9 +1529,7 @@ exports[`matches snapshot 1`] = `
1623
1529
  },
1624
1530
  "image": "aquasec/trivy:0.38.3",
1625
1531
  "interruptible": true,
1626
- "needs": [
1627
- "api 🚀 Deploy | stage ",
1628
- ],
1532
+ "needs": [],
1629
1533
  "retry": {
1630
1534
  "max": 2,
1631
1535
  "when": [
@@ -1636,7 +1540,7 @@ exports[`matches snapshot 1`] = `
1636
1540
  "script": [
1637
1541
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" api",
1638
1542
  ],
1639
- "stage": "verify",
1543
+ "stage": "build",
1640
1544
  "variables": {},
1641
1545
  },
1642
1546
  "www 🔨 app | prod ": {
@@ -1801,6 +1705,10 @@ exports[`matches snapshot 1`] = `
1801
1705
  "artifacts": true,
1802
1706
  "job": "www 🔨 app | prod ",
1803
1707
  },
1708
+ {
1709
+ "artifacts": true,
1710
+ "job": "www 🧾 sbom | prod ",
1711
+ },
1804
1712
  ],
1805
1713
  "retry": {
1806
1714
  "max": 2,
@@ -1817,6 +1725,8 @@ exports[`matches snapshot 1`] = `
1817
1725
  "script": [
1818
1726
  "cd www",
1819
1727
  "yarn deploy",
1728
+ "echo Uploading SBOM to Dependency Track",
1729
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1820
1730
  ],
1821
1731
  "stage": "deploy prod",
1822
1732
  "variables": {
@@ -1853,6 +1763,10 @@ exports[`matches snapshot 1`] = `
1853
1763
  "artifacts": true,
1854
1764
  "job": "www 🔨 app | stage ",
1855
1765
  },
1766
+ {
1767
+ "artifacts": true,
1768
+ "job": "www 🧾 sbom | stage ",
1769
+ },
1856
1770
  ],
1857
1771
  "retry": {
1858
1772
  "max": 2,
@@ -1869,6 +1783,8 @@ exports[`matches snapshot 1`] = `
1869
1783
  "script": [
1870
1784
  "cd www",
1871
1785
  "yarn deploy",
1786
+ "echo Uploading SBOM to Dependency Track",
1787
+ "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
1872
1788
  ],
1873
1789
  "stage": "deploy stage",
1874
1790
  "variables": {
@@ -1887,46 +1803,6 @@ exports[`matches snapshot 1`] = `
1887
1803
  "_ALL_ENV_VAR_KEYS": "["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INFO_BUILD_TIME","BUILD_INFO_CURRENT_VERSION","HOST","ROOT_URL"]",
1888
1804
  },
1889
1805
  },
1890
- "www 🧾 sbom upload | prod ": {
1891
- "allow_failure": true,
1892
- "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1893
- "interruptible": true,
1894
- "needs": [
1895
- "www 🧾 sbom | prod ",
1896
- ],
1897
- "retry": {
1898
- "max": 2,
1899
- "when": [
1900
- "runner_system_failure",
1901
- "stuck_or_timeout_failure",
1902
- ],
1903
- },
1904
- "script": [
1905
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "prod" "__sbom.json" vex.json",
1906
- ],
1907
- "stage": "verify",
1908
- "variables": {},
1909
- },
1910
- "www 🧾 sbom upload | stage ": {
1911
- "allow_failure": true,
1912
- "image": "git.panter.ch:5001/open-source/dependency-track-uploader:dtrackuploader-v0.2.1",
1913
- "interruptible": true,
1914
- "needs": [
1915
- "www 🧾 sbom | stage ",
1916
- ],
1917
- "retry": {
1918
- "max": 2,
1919
- "when": [
1920
- "runner_system_failure",
1921
- "stuck_or_timeout_failure",
1922
- ],
1923
- },
1924
- "script": [
1925
- "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "stage" "__sbom.json" vex.json",
1926
- ],
1927
- "stage": "verify",
1928
- "variables": {},
1929
- },
1930
1806
  "www 🧾 sbom | prod ": {
1931
1807
  "allow_failure": true,
1932
1808
  "artifacts": {
@@ -1936,9 +1812,7 @@ exports[`matches snapshot 1`] = `
1936
1812
  },
1937
1813
  "image": "aquasec/trivy:0.38.3",
1938
1814
  "interruptible": true,
1939
- "needs": [
1940
- "www 🚀 Deploy | prod ",
1941
- ],
1815
+ "needs": [],
1942
1816
  "retry": {
1943
1817
  "max": 2,
1944
1818
  "when": [
@@ -1949,7 +1823,7 @@ exports[`matches snapshot 1`] = `
1949
1823
  "script": [
1950
1824
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1951
1825
  ],
1952
- "stage": "verify",
1826
+ "stage": "build",
1953
1827
  "variables": {},
1954
1828
  },
1955
1829
  "www 🧾 sbom | stage ": {
@@ -1961,9 +1835,7 @@ exports[`matches snapshot 1`] = `
1961
1835
  },
1962
1836
  "image": "aquasec/trivy:0.38.3",
1963
1837
  "interruptible": true,
1964
- "needs": [
1965
- "www 🚀 Deploy | stage ",
1966
- ],
1838
+ "needs": [],
1967
1839
  "retry": {
1968
1840
  "max": 2,
1969
1841
  "when": [
@@ -1974,7 +1846,7 @@ exports[`matches snapshot 1`] = `
1974
1846
  "script": [
1975
1847
  "trivy fs --quiet --format cyclonedx --output "__sbom.json" www",
1976
1848
  ],
1977
- "stage": "verify",
1849
+ "stage": "build",
1978
1850
  "variables": {},
1979
1851
  },
1980
1852
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@catladder/pipeline",
3
- "version": "1.110.1",
3
+ "version": "1.110.3",
4
4
  "scripts": {
5
5
  "build:tsc": "yarn tsc",
6
6
  "build": "yarn build:compile && yarn build:inline-variables && yarn build:bundle",
@@ -0,0 +1,49 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`createArtifactsConfig merges junit files if both given 1`] = `
4
+ {
5
+ "artifacts": {
6
+ "paths": [
7
+ "testpath",
8
+ ],
9
+ "reports": {
10
+ "junit": [
11
+ "partial-report.xml",
12
+ "full-report.xml",
13
+ ],
14
+ "terraform": "something",
15
+ },
16
+ },
17
+ }
18
+ `;
19
+
20
+ exports[`createArtifactsConfig returns artifacts if no artifactsReports 1`] = `
21
+ {
22
+ "artifacts": {
23
+ "paths": [
24
+ "testpath",
25
+ ],
26
+ "reports": {
27
+ "coverage_report": {
28
+ "coverage_format": "cobertura",
29
+ "path": "some",
30
+ },
31
+ "junit": [],
32
+ "terraform": "something",
33
+ },
34
+ },
35
+ }
36
+ `;
37
+
38
+ exports[`createArtifactsConfig returns junit parts of artifactsReports 1`] = `
39
+ {
40
+ "artifacts": {
41
+ "paths": [],
42
+ "reports": {
43
+ "junit": [
44
+ "report.xml",
45
+ ],
46
+ },
47
+ },
48
+ }
49
+ `;
@@ -0,0 +1,41 @@
1
+ import { createArtifactsConfig } from "../createArtifactsConfig";
2
+
3
+ describe("createArtifactsConfig", () => {
4
+ it("returns undefined if no artifacts or artifactsReports", () => {
5
+ expect(createArtifactsConfig(".")).toBeUndefined();
6
+ });
7
+
8
+ it("returns artifacts if no artifactsReports", () => {
9
+ expect(
10
+ createArtifactsConfig(".", undefined, {
11
+ paths: ["testpath"],
12
+ reports: {
13
+ coverage_report: { coverage_format: "cobertura", path: "some" },
14
+ terraform: "something",
15
+ },
16
+ })
17
+ ).toMatchSnapshot();
18
+ });
19
+
20
+ it("returns junit parts of artifactsReports", () => {
21
+ expect(
22
+ createArtifactsConfig(".", { junit: ["report.xml"] })
23
+ ).toMatchSnapshot();
24
+ });
25
+
26
+ it("merges junit files if both given", () => {
27
+ const result = createArtifactsConfig(
28
+ ".",
29
+ { junit: ["partial-report.xml"] },
30
+ {
31
+ paths: ["testpath"],
32
+ reports: {
33
+ junit: "full-report.xml",
34
+ terraform: "something",
35
+ },
36
+ }
37
+ );
38
+ expect(result).toMatchSnapshot();
39
+ expect(result?.artifacts?.reports?.junit).toHaveLength(2);
40
+ });
41
+ });
@@ -0,0 +1,34 @@
1
+ import { join } from "path";
2
+ import type { BuildConfigArtifactsReports } from "../types";
3
+ import type { Artifacts } from "../../types";
4
+ import type { OptionalArtifacts } from "../custom/testJob";
5
+
6
+ export const createArtifactsConfig = (
7
+ rootPath: string,
8
+ artifactsReports?: BuildConfigArtifactsReports,
9
+ artifacts?: Artifacts
10
+ ): OptionalArtifacts =>
11
+ artifactsReports || artifacts
12
+ ? {
13
+ artifacts: {
14
+ paths: [],
15
+ ...artifacts,
16
+ reports: {
17
+ ...artifacts?.reports,
18
+ junit: [
19
+ artifactsReports?.junit,
20
+ Array.isArray(artifacts?.reports?.junit) &&
21
+ artifacts?.reports?.junit,
22
+ typeof artifacts?.reports?.junit === "string" && [
23
+ artifacts?.reports?.junit,
24
+ ],
25
+ ]
26
+ .filter(Array.isArray)
27
+ .reduce(
28
+ (acc, curr) => [...acc, ...curr.map((p) => join(rootPath, p))],
29
+ []
30
+ ),
31
+ },
32
+ },
33
+ }
34
+ : undefined;
@@ -0,0 +1,32 @@
1
+ import type { Context } from "../../..";
2
+ import { createCustomTestJobs } from "../testJob";
3
+
4
+ describe("createCustomTestJobs", () => {
5
+ const componentConfig: Context["componentConfig"] = {
6
+ dir: ".",
7
+ build: { type: "custom", docker: { type: "custom" }, jobImage: "" },
8
+ deploy: {},
9
+ } as Context["componentConfig"];
10
+ const baseContext: Context = {
11
+ componentName: "testComponent",
12
+ environment: {
13
+ jobOnlyVars: {
14
+ build: {},
15
+ },
16
+ },
17
+ componentConfig,
18
+ } as Context;
19
+
20
+ it("throws error when not build type custom", () => {
21
+ componentConfig.build.type = "node";
22
+ expect(() => createCustomTestJobs(baseContext)).toThrowError(
23
+ "deploy config is not custom"
24
+ );
25
+ componentConfig.build.type = "custom";
26
+ });
27
+
28
+ it("returns empty array if no audit, lint, and test definition", () => {
29
+ const jobs = createCustomTestJobs(baseContext);
30
+ expect(jobs).toEqual([]);
31
+ });
32
+ });
@@ -7,6 +7,8 @@ import { createDockerBuildJobDefault, requiresDockerBuild } from "../docker";
7
7
  import { isOfBuildType } from "../types";
8
8
 
9
9
  import type { CatladderJob } from "../../types/jobs";
10
+ import { createSbomBuildJob } from "../sbom";
11
+ import { sbomDeactivated } from "../../deploy/sbom";
10
12
 
11
13
  const RUNNER_BUILD_VARIABLES = {
12
14
  KUBERNETES_CPU_REQUEST: "0.5",
@@ -61,5 +63,6 @@ export const createCustomBuildJobs = (context: Context): CatladderJob[] => {
61
63
  }),
62
64
  ]
63
65
  : []),
66
+ ...(sbomDeactivated(context) ? [] : [createSbomBuildJob(context)]),
64
67
  ];
65
68
  };