@catladder/pipeline 1.147.0 → 1.148.1
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/bundles/catladder-gitlab/index.js +2 -2
- package/dist/constants.js +1 -1
- package/dist/deploy/cloudRun/createJobs/common.js +1 -1
- package/dist/deploy/sbom.js +2 -2
- package/dist/pipeline/generatePipelineFiles.js +40 -9
- package/dist/pipeline/gitlab/createGitlabJobs.js +2 -9
- package/dist/pipeline/gitlab/sortGitLabJobDefProps.d.ts +7 -0
- package/dist/pipeline/gitlab/sortGitLabJobDefProps.js +27 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/removeUndefined.d.ts +1 -0
- package/dist/utils/removeUndefined.js +36 -0
- package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-meteor-with-worker.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-no-service.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-non-public.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-post-stop-job.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-service-gen2.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-service-with-volumes.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-storybook.ts.snap +8 -8
- package/examples/__snapshots__/cloud-run-with-ngnix.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__/cloud-run-with-worker.ts.snap +8 -8
- 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 +8 -8
- package/examples/__snapshots__/custom-sbom-java.ts.snap +8 -8
- package/examples/__snapshots__/kubernetes-application-customization.ts.snap +8 -8
- package/examples/__snapshots__/kubernetes-with-cloud-sql-legacy.ts.snap +8 -8
- package/examples/__snapshots__/kubernetes-with-cloud-sql.ts.snap +8 -8
- package/examples/__snapshots__/kubernetes-with-jobs.ts.snap +16 -16
- package/examples/__snapshots__/kubernetes-with-mongodb.ts.snap +8 -8
- package/examples/__snapshots__/local-dot-env.ts.snap +8 -8
- package/examples/__snapshots__/meteor-kubernetes.ts.snap +8 -8
- package/examples/__snapshots__/multiline-var.ts.snap +16 -16
- package/examples/__snapshots__/native-app.ts.snap +12 -12
- package/examples/__snapshots__/node-build-with-custom-image.ts.snap +8 -8
- package/examples/__snapshots__/node-build-with-docker-additions.ts.snap +8 -8
- package/examples/__snapshots__/rails-k8s-with-worker.ts.snap +16 -16
- package/examples/__snapshots__/wait-for-other-deploy.ts.snap +8 -8
- package/package.json +1 -1
- package/src/deploy/cloudRun/createJobs/common.ts +1 -1
- package/src/deploy/sbom.ts +2 -2
- package/src/pipeline/generatePipelineFiles.ts +21 -8
- package/src/pipeline/gitlab/createGitlabJobs.ts +2 -7
- package/src/pipeline/gitlab/sortGitLabJobDefProps.ts +59 -0
- package/src/utils/removeUndefined.ts +4 -0
|
@@ -328,7 +328,7 @@ EOF
|
|
|
328
328
|
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
329
329
|
"kubernetesCreateSecret",
|
|
330
330
|
"kubernetesDeploy",
|
|
331
|
-
"echo Uploading SBOM to Dependency Track",
|
|
331
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
332
332
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
333
333
|
"echo deployment successful 😻",
|
|
334
334
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
@@ -404,7 +404,7 @@ EOF
|
|
|
404
404
|
"kubectl config set-context "kube-pan-test-app-dev-app" --cluster="kube-pan-test-app-dev-app" --user="kube-pan-test-app-dev-app" --namespace="pan-test-app-dev"",
|
|
405
405
|
"kubectl config use-context "kube-pan-test-app-dev-app"",
|
|
406
406
|
"kubernetesDelete",
|
|
407
|
-
"echo Disabling component in Dependency Track",
|
|
407
|
+
"echo 'Disabling component in Dependency Track'",
|
|
408
408
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.dev.test-app.pan.panter.cloud" || true",
|
|
409
409
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
410
410
|
],
|
|
@@ -902,7 +902,7 @@ EOF
|
|
|
902
902
|
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
903
903
|
"kubernetesCreateSecret",
|
|
904
904
|
"kubernetesDeploy",
|
|
905
|
-
"echo Uploading SBOM to Dependency Track",
|
|
905
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
906
906
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
907
907
|
"echo deployment successful 😻",
|
|
908
908
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
@@ -978,7 +978,7 @@ EOF
|
|
|
978
978
|
"kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --namespace="pan-test-app-review"",
|
|
979
979
|
"kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
|
|
980
980
|
"kubernetesDelete",
|
|
981
|
-
"echo Disabling component in Dependency Track",
|
|
981
|
+
"echo 'Disabling component in Dependency Track'",
|
|
982
982
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" || true",
|
|
983
983
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
984
984
|
],
|
|
@@ -1543,7 +1543,7 @@ EOF
|
|
|
1543
1543
|
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
1544
1544
|
"kubernetesCreateSecret",
|
|
1545
1545
|
"kubernetesDeploy",
|
|
1546
|
-
"echo Uploading SBOM to Dependency Track",
|
|
1546
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
1547
1547
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://my-fancy-website.com" "__sbom.json" vex.json || true",
|
|
1548
1548
|
"echo deployment successful 😻",
|
|
1549
1549
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://my-fancy-website.com" >> gitlab_environment.env",
|
|
@@ -1715,7 +1715,7 @@ EOF
|
|
|
1715
1715
|
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
1716
1716
|
"kubernetesCreateSecret",
|
|
1717
1717
|
"kubernetesDeploy",
|
|
1718
|
-
"echo Uploading SBOM to Dependency Track",
|
|
1718
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
1719
1719
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
1720
1720
|
"echo deployment successful 😻",
|
|
1721
1721
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
@@ -1791,7 +1791,7 @@ EOF
|
|
|
1791
1791
|
"kubectl config set-context "kube-pan-test-app-prod-app" --cluster="kube-pan-test-app-prod-app" --user="kube-pan-test-app-prod-app" --namespace="pan-test-app-prod"",
|
|
1792
1792
|
"kubectl config use-context "kube-pan-test-app-prod-app"",
|
|
1793
1793
|
"kubernetesDelete",
|
|
1794
|
-
"echo Disabling component in Dependency Track",
|
|
1794
|
+
"echo 'Disabling component in Dependency Track'",
|
|
1795
1795
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://my-fancy-website.com" || true",
|
|
1796
1796
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://my-fancy-website.com" >> gitlab_environment.env",
|
|
1797
1797
|
],
|
|
@@ -1867,7 +1867,7 @@ EOF
|
|
|
1867
1867
|
"kubectl config set-context "kube-pan-test-app-stage-app" --cluster="kube-pan-test-app-stage-app" --user="kube-pan-test-app-stage-app" --namespace="pan-test-app-stage"",
|
|
1868
1868
|
"kubectl config use-context "kube-pan-test-app-stage-app"",
|
|
1869
1869
|
"kubernetesDelete",
|
|
1870
|
-
"echo Disabling component in Dependency Track",
|
|
1870
|
+
"echo 'Disabling component in Dependency Track'",
|
|
1871
1871
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.stage.test-app.pan.panter.cloud" || true",
|
|
1872
1872
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
1873
1873
|
],
|
|
@@ -2338,7 +2338,7 @@ EOF
|
|
|
2338
2338
|
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
2339
2339
|
"kubernetesCreateSecret",
|
|
2340
2340
|
"kubernetesDeploy",
|
|
2341
|
-
"echo Uploading SBOM to Dependency Track",
|
|
2341
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
2342
2342
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.dev.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
2343
2343
|
"echo deployment successful 😻",
|
|
2344
2344
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
@@ -2414,7 +2414,7 @@ EOF
|
|
|
2414
2414
|
"kubectl config set-context "kube-pan-test-app-dev-app" --cluster="kube-pan-test-app-dev-app" --user="kube-pan-test-app-dev-app" --namespace="pan-test-app-dev"",
|
|
2415
2415
|
"kubectl config use-context "kube-pan-test-app-dev-app"",
|
|
2416
2416
|
"kubernetesDelete",
|
|
2417
|
-
"echo Disabling component in Dependency Track",
|
|
2417
|
+
"echo 'Disabling component in Dependency Track'",
|
|
2418
2418
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.dev.test-app.pan.panter.cloud" || true",
|
|
2419
2419
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.dev.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2420
2420
|
],
|
|
@@ -2916,7 +2916,7 @@ EOF
|
|
|
2916
2916
|
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
2917
2917
|
"kubernetesCreateSecret",
|
|
2918
2918
|
"kubernetesDeploy",
|
|
2919
|
-
"echo Uploading SBOM to Dependency Track",
|
|
2919
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
2920
2920
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
2921
2921
|
"echo deployment successful 😻",
|
|
2922
2922
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
@@ -2992,7 +2992,7 @@ EOF
|
|
|
2992
2992
|
"kubectl config set-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --cluster="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --user="kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app" --namespace="pan-test-app-review"",
|
|
2993
2993
|
"kubectl config use-context "kube-pan-test-app-review-$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; })-app"",
|
|
2994
2994
|
"kubernetesDelete",
|
|
2995
|
-
"echo Disabling component in Dependency Track",
|
|
2995
|
+
"echo 'Disabling component in Dependency Track'",
|
|
2996
2996
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" || true",
|
|
2997
2997
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.$([ -n "$CI_MERGE_REQUEST_IID" ] && echo "mr$CI_MERGE_REQUEST_IID" || { [ -n "$CI_COMMIT_REF_SLUG" ] && echo "$CI_COMMIT_REF_SLUG" || echo "unknown"; }).review.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
2998
2998
|
],
|
|
@@ -3565,7 +3565,7 @@ EOF
|
|
|
3565
3565
|
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
3566
3566
|
"kubernetesCreateSecret",
|
|
3567
3567
|
"kubernetesDeploy",
|
|
3568
|
-
"echo Uploading SBOM to Dependency Track",
|
|
3568
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
3569
3569
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://my-fancy-website.com" "__sbom.json" vex.json || true",
|
|
3570
3570
|
"echo deployment successful 😻",
|
|
3571
3571
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://my-fancy-website.com" >> gitlab_environment.env",
|
|
@@ -3737,7 +3737,7 @@ EOF
|
|
|
3737
3737
|
"echo -e "\\e[0Ksection_end:$(date +%s):writeallvalues\\r\\e[0K"",
|
|
3738
3738
|
"kubernetesCreateSecret",
|
|
3739
3739
|
"kubernetesDeploy",
|
|
3740
|
-
"echo Uploading SBOM to Dependency Track",
|
|
3740
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
3741
3741
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://app.stage.test-app.pan.panter.cloud" "__sbom.json" vex.json || true",
|
|
3742
3742
|
"echo deployment successful 😻",
|
|
3743
3743
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
@@ -3813,7 +3813,7 @@ EOF
|
|
|
3813
3813
|
"kubectl config set-context "kube-pan-test-app-prod-app" --cluster="kube-pan-test-app-prod-app" --user="kube-pan-test-app-prod-app" --namespace="pan-test-app-prod"",
|
|
3814
3814
|
"kubectl config use-context "kube-pan-test-app-prod-app"",
|
|
3815
3815
|
"kubernetesDelete",
|
|
3816
|
-
"echo Disabling component in Dependency Track",
|
|
3816
|
+
"echo 'Disabling component in Dependency Track'",
|
|
3817
3817
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://my-fancy-website.com" || true",
|
|
3818
3818
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://my-fancy-website.com" >> gitlab_environment.env",
|
|
3819
3819
|
],
|
|
@@ -3889,7 +3889,7 @@ EOF
|
|
|
3889
3889
|
"kubectl config set-context "kube-pan-test-app-stage-app" --cluster="kube-pan-test-app-stage-app" --user="kube-pan-test-app-stage-app" --namespace="pan-test-app-stage"",
|
|
3890
3890
|
"kubectl config use-context "kube-pan-test-app-stage-app"",
|
|
3891
3891
|
"kubernetesDelete",
|
|
3892
|
-
"echo Disabling component in Dependency Track",
|
|
3892
|
+
"echo 'Disabling component in Dependency Track'",
|
|
3893
3893
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "pan-test-app/app" "https://app.stage.test-app.pan.panter.cloud" || true",
|
|
3894
3894
|
"echo "CL_GITLAB_ENVIRONMENT_URL=https://app.stage.test-app.pan.panter.cloud" >> gitlab_environment.env",
|
|
3895
3895
|
],
|
|
@@ -196,7 +196,7 @@ exports[`matches snapshot 1`] = `
|
|
|
196
196
|
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
197
197
|
"cd api",
|
|
198
198
|
"yarn deploy",
|
|
199
|
-
"echo Uploading SBOM to Dependency Track",
|
|
199
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
200
200
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
|
|
201
201
|
],
|
|
202
202
|
"stage": "deploy dev",
|
|
@@ -504,7 +504,7 @@ exports[`matches snapshot 1`] = `
|
|
|
504
504
|
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
505
505
|
"cd www",
|
|
506
506
|
"yarn deploy",
|
|
507
|
-
"echo Uploading SBOM to Dependency Track",
|
|
507
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
508
508
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
|
|
509
509
|
],
|
|
510
510
|
"stage": "deploy dev",
|
|
@@ -885,7 +885,7 @@ exports[`matches snapshot 1`] = `
|
|
|
885
885
|
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
886
886
|
"cd api",
|
|
887
887
|
"yarn deploy",
|
|
888
|
-
"echo Uploading SBOM to Dependency Track",
|
|
888
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
889
889
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
|
|
890
890
|
],
|
|
891
891
|
"stage": "deploy review",
|
|
@@ -1193,7 +1193,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1193
1193
|
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1194
1194
|
"cd www",
|
|
1195
1195
|
"yarn deploy",
|
|
1196
|
-
"echo Uploading SBOM to Dependency Track",
|
|
1196
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
1197
1197
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
|
|
1198
1198
|
],
|
|
1199
1199
|
"stage": "deploy review",
|
|
@@ -1593,7 +1593,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1593
1593
|
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1594
1594
|
"cd api",
|
|
1595
1595
|
"yarn deploy",
|
|
1596
|
-
"echo Uploading SBOM to Dependency Track",
|
|
1596
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
1597
1597
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
|
|
1598
1598
|
],
|
|
1599
1599
|
"stage": "deploy prod",
|
|
@@ -1647,7 +1647,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1647
1647
|
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1648
1648
|
"cd api",
|
|
1649
1649
|
"yarn deploy",
|
|
1650
|
-
"echo Uploading SBOM to Dependency Track",
|
|
1650
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
1651
1651
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
|
|
1652
1652
|
],
|
|
1653
1653
|
"stage": "deploy stage",
|
|
@@ -1921,7 +1921,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1921
1921
|
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1922
1922
|
"cd www",
|
|
1923
1923
|
"yarn deploy",
|
|
1924
|
-
"echo Uploading SBOM to Dependency Track",
|
|
1924
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
1925
1925
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
|
|
1926
1926
|
],
|
|
1927
1927
|
"stage": "deploy prod",
|
|
@@ -1979,7 +1979,7 @@ exports[`matches snapshot 1`] = `
|
|
|
1979
1979
|
"echo -e "\\e[0Ksection_end:$(date +%s):injectvars\\r\\e[0K"",
|
|
1980
1980
|
"cd www",
|
|
1981
1981
|
"yarn deploy",
|
|
1982
|
-
"echo Uploading SBOM to Dependency Track",
|
|
1982
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
1983
1983
|
"/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://unknown-host.example.com" "__sbom.json" vex.json || true",
|
|
1984
1984
|
],
|
|
1985
1985
|
"stage": "deploy stage",
|
package/package.json
CHANGED
|
@@ -21,7 +21,7 @@ export const setGoogleProjectNumberScript = (
|
|
|
21
21
|
`export GCLOUD_PROJECT_NUMBER=$(${gcloudCmd()} projects describe ${
|
|
22
22
|
deployConfig.projectId
|
|
23
23
|
} --format="value(projectNumber)")`,
|
|
24
|
-
|
|
24
|
+
'echo "GCLOUD_PROJECT_NUMBER: $GCLOUD_PROJECT_NUMBER"',
|
|
25
25
|
];
|
|
26
26
|
|
|
27
27
|
export const makeLabelString = (obj: Record<string, unknown>) =>
|
package/src/deploy/sbom.ts
CHANGED
|
@@ -10,7 +10,7 @@ export const getDependencyTrackUploadScript = (
|
|
|
10
10
|
return sbomDeactivated(context)
|
|
11
11
|
? []
|
|
12
12
|
: [
|
|
13
|
-
"echo Uploading SBOM to Dependency Track",
|
|
13
|
+
"echo 'Uploading SBOM to Dependency Track'",
|
|
14
14
|
`/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "${context.fullConfig.customerName}-${context.fullConfig.appName}/${context.componentName}" "${context.environment.url}" "${SBOM_FILE}" vex.json || true`,
|
|
15
15
|
];
|
|
16
16
|
};
|
|
@@ -21,7 +21,7 @@ export const getDependencyTrackDeleteScript = (
|
|
|
21
21
|
return sbomDeactivated(context)
|
|
22
22
|
? []
|
|
23
23
|
: [
|
|
24
|
-
"echo Disabling component in Dependency Track",
|
|
24
|
+
"echo 'Disabling component in Dependency Track'",
|
|
25
25
|
`/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" disable "${context.fullConfig.customerName}-${context.fullConfig.appName}/${context.componentName}" "${context.environment.url}" || true`,
|
|
26
26
|
];
|
|
27
27
|
};
|
|
@@ -3,6 +3,7 @@ import { writeYamlfile } from "../utils/writeFiles";
|
|
|
3
3
|
import { createChildPipeline } from "./createChildPipeline";
|
|
4
4
|
import { createMainPipeline } from "./createMainPipeline";
|
|
5
5
|
import { getPipelineTriggerForGitlabChildPipeline } from "./gitlab/getPipelineTriggerForGitlabChildPipeline";
|
|
6
|
+
import { sortGitLabJobDefProps } from "./gitlab/sortGitLabJobDefProps";
|
|
6
7
|
export async function generatePipelineFiles<T extends PipelineType>(
|
|
7
8
|
config: Config,
|
|
8
9
|
pipelineType: T,
|
|
@@ -11,28 +12,40 @@ export async function generatePipelineFiles<T extends PipelineType>(
|
|
|
11
12
|
if (mode === "childpipeline") {
|
|
12
13
|
const trigger = getPipelineTriggerForGitlabChildPipeline();
|
|
13
14
|
|
|
14
|
-
const { jobs, image, stages, variables, workflow, ...
|
|
15
|
+
const { jobs, image, stages, variables, workflow, ...pipelineRest } =
|
|
15
16
|
await createChildPipeline(pipelineType, trigger, config);
|
|
16
|
-
|
|
17
|
+
const jobsWithSortedProps = Object.fromEntries(
|
|
18
|
+
Object.entries(jobs).map(([jobName, job]) => [
|
|
19
|
+
jobName,
|
|
20
|
+
sortGitLabJobDefProps(job),
|
|
21
|
+
]),
|
|
22
|
+
);
|
|
17
23
|
await writeYamlfile(`__pipeline.yml`, {
|
|
18
24
|
image,
|
|
19
25
|
stages,
|
|
20
26
|
variables,
|
|
21
27
|
workflow,
|
|
22
|
-
...
|
|
23
|
-
|
|
28
|
+
...pipelineRest,
|
|
29
|
+
// jobs need to be spread into main YAML, because GitLab pipeline YAML has no jobs key - jobs are top level with their key as their name
|
|
30
|
+
...jobsWithSortedProps,
|
|
24
31
|
});
|
|
25
32
|
} else {
|
|
26
|
-
const { jobs, image, stages, variables, workflow, ...
|
|
33
|
+
const { jobs, image, stages, variables, workflow, ...pipelineRest } =
|
|
27
34
|
await createMainPipeline(pipelineType, config);
|
|
28
|
-
|
|
35
|
+
const jobsWithSortedProps = Object.fromEntries(
|
|
36
|
+
Object.entries(jobs).map(([jobName, job]) => [
|
|
37
|
+
jobName,
|
|
38
|
+
sortGitLabJobDefProps(job),
|
|
39
|
+
]),
|
|
40
|
+
);
|
|
29
41
|
await writeYamlfile(`.gitlab-ci.yml`, {
|
|
30
42
|
image,
|
|
31
43
|
stages,
|
|
32
44
|
variables,
|
|
33
45
|
workflow,
|
|
34
|
-
...
|
|
35
|
-
|
|
46
|
+
...pipelineRest,
|
|
47
|
+
// jobs need to be spread into main YAML, because GitLab pipeline YAML has no jobs key - jobs are top level with their key as their name
|
|
48
|
+
...jobsWithSortedProps,
|
|
36
49
|
});
|
|
37
50
|
}
|
|
38
51
|
}
|
|
@@ -11,6 +11,7 @@ import type { CatladderJob, CatladderJobNeed } from "../../types/jobs";
|
|
|
11
11
|
import { notNil } from "../../utils";
|
|
12
12
|
import { collapseableSection } from "../../utils/gitlab";
|
|
13
13
|
import type { AllCatladderJobs } from "../createAllJobs";
|
|
14
|
+
import { removeUndefined } from "../../utils/removeUndefined";
|
|
14
15
|
|
|
15
16
|
export type AllGitlabJobs = {
|
|
16
17
|
name: string;
|
|
@@ -20,10 +21,6 @@ export type AllGitlabJobs = {
|
|
|
20
21
|
}[];
|
|
21
22
|
|
|
22
23
|
export const GITLAB_ENVIRONMENT_URL_VARIABLE = "CL_GITLAB_ENVIRONMENT_URL";
|
|
23
|
-
const removeUndefined = (obj: GitlabJobDef): GitlabJobDef =>
|
|
24
|
-
Object.fromEntries(
|
|
25
|
-
Object.entries(obj).filter(([, value]) => value !== undefined),
|
|
26
|
-
) as GitlabJobDef;
|
|
27
24
|
const getFullJobName = (
|
|
28
25
|
name: string,
|
|
29
26
|
componentName: string,
|
|
@@ -197,9 +194,7 @@ export const makeGitlabJob = (
|
|
|
197
194
|
allJobs,
|
|
198
195
|
);
|
|
199
196
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
return [fullJobName, gitlabJob];
|
|
197
|
+
return [fullJobName, removeUndefined(modified)];
|
|
203
198
|
};
|
|
204
199
|
|
|
205
200
|
const addGitlabEnvironment = (
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { GitlabJobDef } from "../../types";
|
|
2
|
+
|
|
3
|
+
type GitlabJobDefKey = keyof GitlabJobDef;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The desired order of GitLab job definition keys.
|
|
7
|
+
*/
|
|
8
|
+
const jobDefOrder: GitlabJobDefKey[] = [
|
|
9
|
+
"stage",
|
|
10
|
+
"tags",
|
|
11
|
+
"image",
|
|
12
|
+
"services",
|
|
13
|
+
"variables",
|
|
14
|
+
"before_script",
|
|
15
|
+
"script",
|
|
16
|
+
"after_script",
|
|
17
|
+
"cache",
|
|
18
|
+
"coverage",
|
|
19
|
+
"environment",
|
|
20
|
+
"release",
|
|
21
|
+
"artifacts",
|
|
22
|
+
"rules",
|
|
23
|
+
"only",
|
|
24
|
+
"except",
|
|
25
|
+
"needs",
|
|
26
|
+
"dependencies",
|
|
27
|
+
"trigger",
|
|
28
|
+
"retry",
|
|
29
|
+
"interruptible",
|
|
30
|
+
"allow_failure",
|
|
31
|
+
"parallel",
|
|
32
|
+
"hooks",
|
|
33
|
+
"resource_group",
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const sortGitLabJobDefKeys = (jobDef: GitlabJobDef): GitlabJobDefKey[] =>
|
|
37
|
+
(Object.keys(jobDef) as GitlabJobDefKey[]).sort((a, b) =>
|
|
38
|
+
jobDefOrder.indexOf(a) === -1 && jobDefOrder.indexOf(b) === -1
|
|
39
|
+
? 0
|
|
40
|
+
: jobDefOrder.indexOf(a) === -1
|
|
41
|
+
? 1
|
|
42
|
+
: jobDefOrder.indexOf(b) === -1
|
|
43
|
+
? -1
|
|
44
|
+
: jobDefOrder.indexOf(a) - jobDefOrder.indexOf(b),
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Sorts the properties of a GitLab job definition based on the desired order.
|
|
49
|
+
*
|
|
50
|
+
* This is only useful when generating a GitLab pipeline YAML file.
|
|
51
|
+
*/
|
|
52
|
+
export const sortGitLabJobDefProps = (jobDef: GitlabJobDef): GitlabJobDef =>
|
|
53
|
+
sortGitLabJobDefKeys(jobDef).reduce(
|
|
54
|
+
(acc, key) =>
|
|
55
|
+
jobDef[key] !== undefined
|
|
56
|
+
? Object.assign(acc, { [key]: jobDef[key] })
|
|
57
|
+
: acc,
|
|
58
|
+
{} as GitlabJobDef,
|
|
59
|
+
);
|