@catladder/pipeline 1.110.2 โ†’ 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 (50) hide show
  1. package/dist/build/custom/buildJob.js +4 -2
  2. package/dist/build/node/buildJob.js +4 -2
  3. package/dist/build/rails/build.js +13 -2
  4. package/dist/build/sbom.d.ts +5 -0
  5. package/dist/build/sbom.js +29 -0
  6. package/dist/bundles/catladder-gitlab/index.js +3 -3
  7. package/dist/constants.js +1 -1
  8. package/dist/deploy/base.js +38 -2
  9. package/dist/deploy/cloudRun/deployJob.js +5 -4
  10. package/dist/deploy/custom/deployJob.js +3 -2
  11. package/dist/deploy/kubernetes/deployJob.js +3 -2
  12. package/dist/deploy/sbom.d.ts +4 -0
  13. package/dist/deploy/sbom.js +17 -0
  14. package/dist/pipeline/createJobsForComponent.js +1 -3
  15. package/dist/pipeline/gitlab/createGitlabJobs.js +5 -2
  16. package/dist/tsconfig.tsbuildinfo +1 -1
  17. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +40 -96
  18. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +40 -96
  19. package/examples/__snapshots__/cloud-run-non-public.ts.snap +40 -96
  20. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +80 -192
  21. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +80 -192
  22. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +40 -96
  23. package/examples/__snapshots__/custom-build-job.ts.snap +40 -96
  24. package/examples/__snapshots__/custom-deploy.ts.snap +40 -96
  25. package/examples/__snapshots__/custom-envs.ts.snap +6 -126
  26. package/examples/__snapshots__/custom-sbom-java.ts.snap +40 -96
  27. package/examples/__snapshots__/kubernetes-application-customization.ts.snap +40 -96
  28. package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +40 -96
  29. package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +40 -96
  30. package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +80 -192
  31. package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +40 -96
  32. package/examples/__snapshots__/native-app.ts.snap +72 -192
  33. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +40 -96
  34. package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +40 -96
  35. package/examples/__snapshots__/wait-for-other-deploy.ts.snap +64 -192
  36. package/package.json +1 -1
  37. package/src/build/custom/buildJob.ts +3 -0
  38. package/src/build/node/buildJob.ts +3 -0
  39. package/src/build/rails/build.ts +3 -0
  40. package/src/build/sbom.ts +43 -0
  41. package/src/deploy/base.ts +14 -7
  42. package/src/deploy/cloudRun/deployJob.ts +6 -0
  43. package/src/deploy/custom/deployJob.ts +9 -1
  44. package/src/deploy/kubernetes/deployJob.ts +10 -1
  45. package/src/deploy/sbom.ts +24 -0
  46. package/src/pipeline/createJobsForComponent.ts +1 -3
  47. package/src/pipeline/gitlab/createGitlabJobs.ts +6 -2
  48. package/dist/verify/reporting.d.ts +0 -3
  49. package/dist/verify/reporting.js +0 -48
  50. 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.2",
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",
@@ -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
  };
@@ -10,6 +10,8 @@ import { NODE_RUNNER_BUILD_VARIABLES } from "./constants";
10
10
  import { getDockerAppCopyAndBuildScript, getYarnInstall } from "./yarn";
11
11
  import type { CatladderJob } from "../../types/jobs";
12
12
  import { getRunnerImage } from "../../runner";
13
+ import { createSbomBuildJob } from "../sbom";
14
+ import { sbomDeactivated } from "../../deploy/sbom";
13
15
 
14
16
  export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
15
17
  const buildConfig = context.componentConfig.build;
@@ -76,5 +78,6 @@ export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
76
78
  }),
77
79
  ]
78
80
  : []),
81
+ ...(sbomDeactivated(context) ? [] : [createSbomBuildJob(context)]),
79
82
  ];
80
83
  };
@@ -2,6 +2,8 @@ import type { Context } from "../..";
2
2
  import { isOfBuildType } from "../types";
3
3
  import type { CatladderJob } from "../../types/jobs";
4
4
  import { createDockerBuildJobBase, gitlabDockerLogin } from "../docker";
5
+ import { sbomDeactivated } from "../../deploy/sbom";
6
+ import { createSbomBuildJob } from "../sbom";
5
7
 
6
8
  export const createRailsBuildJobs = (context: Context): CatladderJob[] => {
7
9
  const buildConfig = context.componentConfig.build;
@@ -37,5 +39,6 @@ export const createRailsBuildJobs = (context: Context): CatladderJob[] => {
37
39
  }`,
38
40
  ],
39
41
  }),
42
+ ...(sbomDeactivated(context) ? [] : [createSbomBuildJob(context)]),
40
43
  ];
41
44
  };
@@ -0,0 +1,43 @@
1
+ import type { Context } from "../types/context";
2
+ import type { CatladderJob } from "../types/jobs";
3
+ import { ensureArray } from "../utils";
4
+
5
+ export const SBOM_BUILD_JOB_NAME = "๐Ÿงพ sbom";
6
+ export const SBOM_FILE = "__sbom.json";
7
+
8
+ export const createSbomBuildJob = (context: Context): CatladderJob => {
9
+ const buildConfig = context.componentConfig.build;
10
+
11
+ const defaultImage = "aquasec/trivy:0.38.3";
12
+ const defaultScript = [
13
+ `trivy fs --quiet --format cyclonedx --output "${SBOM_FILE}" ${
14
+ context.packageManagerInfo?.componentIsInWorkspace
15
+ ? "."
16
+ : context.componentConfig.dir
17
+ }`,
18
+ ];
19
+
20
+ const image =
21
+ buildConfig.type === "custom" && buildConfig.sbom !== false
22
+ ? buildConfig.sbom?.jobImage ?? defaultImage
23
+ : defaultImage;
24
+
25
+ const script =
26
+ buildConfig.type === "custom" && buildConfig.sbom !== false
27
+ ? ensureArray(buildConfig.sbom?.command) ?? defaultScript
28
+ : defaultScript;
29
+
30
+ return {
31
+ name: SBOM_BUILD_JOB_NAME,
32
+ stage: "build",
33
+ envMode: "jobPerEnv",
34
+ variables: {},
35
+ cache: undefined,
36
+ image,
37
+ script,
38
+ allow_failure: true,
39
+ artifacts: {
40
+ paths: [SBOM_FILE],
41
+ },
42
+ };
43
+ };
@@ -1,6 +1,8 @@
1
1
  import { getDockerImageVariables, requiresDockerBuild } from "../build/docker";
2
+ import { SBOM_BUILD_JOB_NAME } from "../build/sbom";
2
3
  import type { Context } from "../types";
3
4
  import type { CatladderJob } from "../types/jobs";
5
+ import { sbomDeactivated } from "./sbom";
4
6
  import { contextIsStoppable } from "./utils";
5
7
 
6
8
  export const DEPLOY_JOB_NAME = "๐Ÿš€ Deploy";
@@ -43,13 +45,18 @@ export const getBaseDeploymentJob = (context: Context): JobWithoutScript => {
43
45
  name: DEPLOY_JOB_NAME,
44
46
  envMode: "stagePerEnv", // makes it easier to run manual tasks er env
45
47
 
46
- needs: context.componentConfig.deploy
47
- ? context.componentConfig.deploy.waitFor?.map((c) => ({
48
- componentName: c,
49
- job: DEPLOY_JOB_NAME,
50
- artifacts: false,
51
- })) ?? undefined
52
- : undefined,
48
+ needs: [
49
+ ...(sbomDeactivated(context)
50
+ ? []
51
+ : [{ job: SBOM_BUILD_JOB_NAME, artifacts: true }]),
52
+ ...(context.componentConfig.deploy
53
+ ? context.componentConfig.deploy.waitFor?.map((c) => ({
54
+ componentName: c,
55
+ job: DEPLOY_JOB_NAME,
56
+ artifacts: false,
57
+ })) ?? []
58
+ : []),
59
+ ],
53
60
  // we don't want to deploy when there is a broken test
54
61
  needsStages: [
55
62
  {
@@ -22,6 +22,10 @@ import {
22
22
  import { allowFailureInScripts } from "../../utils/gitlab";
23
23
  import { getCloudRunJobName } from "./utils/jobName";
24
24
  import { createArgsString } from "./utils/createArgsString";
25
+ import {
26
+ getDependencyTrackDeleteScript,
27
+ getDependencyTrackUploadScript,
28
+ } from "../sbom";
25
29
 
26
30
  const setExtraVarsScripts = (deployConfig: DeployConfigCloudRun) => [
27
31
  `export GCLOUD_PROJECT_NUMBER=$(gcloud projects describe ${deployConfig.projectId} --format="value(projectNumber)")`,
@@ -234,6 +238,7 @@ export const createGoogleCloudRunDeployJobs = (
234
238
  ...getJobRunScripts("postDeploy"),
235
239
 
236
240
  `docker image rm ${gcloudImageName}`,
241
+ ...getDependencyTrackUploadScript(context),
237
242
  ];
238
243
 
239
244
  const stopScripts = [
@@ -250,6 +255,7 @@ export const createGoogleCloudRunDeployJobs = (
250
255
  ...(deployConfig.cloudSql && deployConfig.cloudSql.deleteDatabaseOnStop
251
256
  ? getDatabaseDeleteScript(context, deployConfig)
252
257
  : []),
258
+ ...getDependencyTrackDeleteScript(context),
253
259
  ];
254
260
  return [
255
261
  merge({}, baseDeploymentJob, getDockerJobBaseProps(context), {