@catladder/pipeline 1.111.5 → 1.113.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 (72) hide show
  1. package/dist/build/base/createAppBuildJob.d.ts +8 -0
  2. package/dist/build/base/{createBuildJob.js → createAppBuildJob.js} +3 -3
  3. package/dist/build/base/index.d.ts +8 -0
  4. package/dist/build/base/index.js +57 -0
  5. package/dist/build/custom/buildJob.js +19 -22
  6. package/dist/build/docker.d.ts +2 -4
  7. package/dist/build/docker.js +4 -39
  8. package/dist/build/node/buildJob.js +30 -32
  9. package/dist/build/node/meteor.js +19 -21
  10. package/dist/build/rails/build.js +12 -19
  11. package/dist/build/types.d.ts +4 -3
  12. package/dist/bundles/catladder-gitlab/index.js +1 -1
  13. package/dist/constants.js +1 -1
  14. package/dist/context/getLabels.d.ts +1 -0
  15. package/dist/context/getLabels.js +1 -0
  16. package/dist/deploy/base/deploy.d.ts +3 -2
  17. package/dist/deploy/base/deploy.js +9 -4
  18. package/dist/deploy/base/index.d.ts +10 -3
  19. package/dist/deploy/base/index.js +37 -16
  20. package/dist/deploy/base/rollback.d.ts +3 -2
  21. package/dist/deploy/base/rollback.js +8 -6
  22. package/dist/deploy/base/stop.d.ts +3 -2
  23. package/dist/deploy/base/stop.js +8 -6
  24. package/dist/deploy/cloudRun/deployJob.js +28 -26
  25. package/dist/deploy/custom/deployJob.js +14 -11
  26. package/dist/deploy/dockerTag/deployJob.js +15 -5
  27. package/dist/deploy/kubernetes/deployJob.js +14 -14
  28. package/dist/deploy/kubernetes/mongodb.d.ts +1 -1
  29. package/dist/deploy/kubernetes/mongodb.js +8 -7
  30. package/dist/deploy/types/index.d.ts +1 -1
  31. package/dist/pipeline/gitlab/createGitlabJobs.d.ts +1 -0
  32. package/dist/pipeline/gitlab/createGitlabJobs.js +4 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/dist/types/gitlab-ci-yml.d.ts +769 -0
  35. package/dist/types/gitlab-ci-yml.js +9 -0
  36. package/dist/types/gitlab-types.d.ts +12 -82
  37. package/dist/types/jobs.d.ts +3 -3
  38. package/examples/__snapshots__/cloud-run-memory-limit.ts.snap +4 -4
  39. package/examples/__snapshots__/cloud-run-no-cpu-throttling.ts.snap +4 -4
  40. package/examples/__snapshots__/cloud-run-non-public.ts.snap +4 -4
  41. package/examples/__snapshots__/cloud-run-with-sql-reuse-db.ts.snap +8 -8
  42. package/examples/__snapshots__/cloud-run-with-sql.ts.snap +24 -24
  43. package/examples/__snapshots__/custom-build-job-with-tests.ts.snap +4 -4
  44. package/examples/__snapshots__/custom-build-job.ts.snap +4 -4
  45. package/examples/__snapshots__/custom-sbom-java.ts.snap +4 -4
  46. package/examples/__snapshots__/native-app.ts.snap +4 -4
  47. package/examples/__snapshots__/node-build-with-custom-image.ts.snap +4 -4
  48. package/package.json +4 -2
  49. package/scripts/generate-gitlab-ci-types.ts +51 -0
  50. package/src/build/base/{createBuildJob.ts → createAppBuildJob.ts} +3 -2
  51. package/src/build/base/index.ts +35 -0
  52. package/src/build/custom/buildJob.ts +32 -45
  53. package/src/build/docker.ts +14 -17
  54. package/src/build/node/buildJob.ts +50 -61
  55. package/src/build/node/meteor.ts +31 -36
  56. package/src/build/rails/build.ts +8 -10
  57. package/src/build/types.ts +4 -8
  58. package/src/context/getLabels.ts +1 -0
  59. package/src/deploy/base/deploy.ts +16 -2
  60. package/src/deploy/base/index.ts +22 -3
  61. package/src/deploy/base/rollback.ts +13 -2
  62. package/src/deploy/base/stop.ts +13 -4
  63. package/src/deploy/cloudRun/deployJob.ts +13 -15
  64. package/src/deploy/custom/deployJob.ts +17 -20
  65. package/src/deploy/dockerTag/deployJob.ts +6 -7
  66. package/src/deploy/kubernetes/deployJob.ts +17 -23
  67. package/src/deploy/kubernetes/mongodb.ts +3 -2
  68. package/src/pipeline/gitlab/createGitlabJobs.ts +3 -0
  69. package/src/types/gitlab-ci-yml.ts +892 -0
  70. package/src/types/gitlab-types.ts +49 -83
  71. package/src/types/jobs.ts +3 -4
  72. package/dist/build/base/createBuildJob.d.ts +0 -7
@@ -158,7 +158,7 @@ exports[`matches snapshot 1`] = `
158
158
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
159
159
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
160
160
  "echo "$ENV_VARS" > ____envvars.yaml",
161
- "gcloud run deploy pan-test-app-dev-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
161
+ "gcloud run deploy pan-test-app-dev-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=dev,env-name=dev,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
162
162
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
163
163
  "echo Uploading SBOM to Dependency Track",
164
164
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-dev-www-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -509,7 +509,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
509
509
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
510
510
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
511
511
  "echo "$ENV_VARS" > ____envvars.yaml",
512
- "gcloud run deploy pan-test-app-review-mr1234-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
512
+ "gcloud run deploy pan-test-app-review-mr1234-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=review,env-name=review,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
513
513
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
514
514
  "echo Uploading SBOM to Dependency Track",
515
515
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-review-mr1234-www-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -960,7 +960,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
960
960
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
961
961
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
962
962
  "echo "$ENV_VARS" > ____envvars.yaml",
963
- "gcloud run deploy pan-test-app-prod-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
963
+ "gcloud run deploy pan-test-app-prod-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=prod,env-name=prod,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
964
964
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
965
965
  "echo Uploading SBOM to Dependency Track",
966
966
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-prod-www-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -1069,7 +1069,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1069
1069
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1070
1070
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1071
1071
  "echo "$ENV_VARS" > ____envvars.yaml",
1072
- "gcloud run deploy pan-test-app-stage-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1072
+ "gcloud run deploy pan-test-app-stage-www --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=stage,env-name=stage,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1073
1073
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1074
1074
  "echo Uploading SBOM to Dependency Track",
1075
1075
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-stage-www-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -159,7 +159,7 @@ exports[`matches snapshot 1`] = `
159
159
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
160
160
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
161
161
  "echo "$ENV_VARS" > ____envvars.yaml",
162
- "gcloud run deploy pan-test-app-dev-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
162
+ "gcloud run deploy pan-test-app-dev-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app,app-name=test-app,env-type=dev,env-name=dev,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
163
163
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
164
164
  "echo Uploading SBOM to Dependency Track",
165
165
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://pan-test-app-dev-app-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -512,7 +512,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
512
512
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
513
513
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
514
514
  "echo "$ENV_VARS" > ____envvars.yaml",
515
- "gcloud run deploy pan-test-app-review-mr1234-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
515
+ "gcloud run deploy pan-test-app-review-mr1234-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app,app-name=test-app,env-type=review,env-name=review,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
516
516
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
517
517
  "echo Uploading SBOM to Dependency Track",
518
518
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://pan-test-app-review-mr1234-app-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -966,7 +966,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
966
966
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
967
967
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
968
968
  "echo "$ENV_VARS" > ____envvars.yaml",
969
- "gcloud run deploy pan-test-app-prod-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
969
+ "gcloud run deploy pan-test-app-prod-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app,app-name=test-app,env-type=prod,env-name=prod,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
970
970
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
971
971
  "echo Uploading SBOM to Dependency Track",
972
972
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://pan-test-app-prod-app-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -1075,7 +1075,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1075
1075
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1076
1076
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1077
1077
  "echo "$ENV_VARS" > ____envvars.yaml",
1078
- "gcloud run deploy pan-test-app-stage-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1078
+ "gcloud run deploy pan-test-app-stage-app --command="" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=app,app-name=test-app,env-type=stage,env-name=stage,build-type=custom --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1079
1079
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1080
1080
  "echo Uploading SBOM to Dependency Track",
1081
1081
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/app" "https://pan-test-app-stage-app-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -256,7 +256,7 @@ COPY --chown=node:node .yarn /app/.yarn",
256
256
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
257
257
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
258
258
  "echo "$ENV_VARS" > ____envvars.yaml",
259
- "gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
259
+ "gcloud run deploy pan-test-app-dev-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=dev,env-name=dev,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
260
260
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
261
261
  "echo Uploading SBOM to Dependency Track",
262
262
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-dev-api-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -1112,7 +1112,7 @@ COPY --chown=node:node .yarn /app/.yarn",
1112
1112
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1113
1113
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1114
1114
  "echo "$ENV_VARS" > ____envvars.yaml",
1115
- "gcloud run deploy pan-test-app-review-mr1234-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1115
+ "gcloud run deploy pan-test-app-review-mr1234-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=review,env-name=review,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1116
1116
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1117
1117
  "echo Uploading SBOM to Dependency Track",
1118
1118
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-review-mr1234-api-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -2056,7 +2056,7 @@ COPY --chown=node:node .yarn /app/.yarn",
2056
2056
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
2057
2057
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
2058
2058
  "echo "$ENV_VARS" > ____envvars.yaml",
2059
- "gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
2059
+ "gcloud run deploy pan-test-app-prod-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=prod,env-name=prod,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
2060
2060
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
2061
2061
  "echo Uploading SBOM to Dependency Track",
2062
2062
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-prod-api-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -2165,7 +2165,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
2165
2165
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
2166
2166
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
2167
2167
  "echo "$ENV_VARS" > ____envvars.yaml",
2168
- "gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
2168
+ "gcloud run deploy pan-test-app-stage-api --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=api,app-name=test-app,env-type=stage,env-name=stage,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
2169
2169
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
2170
2170
  "echo Uploading SBOM to Dependency Track",
2171
2171
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/api" "https://pan-test-app-stage-api-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -256,7 +256,7 @@ COPY --chown=node:node .yarn /app/.yarn",
256
256
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
257
257
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
258
258
  "echo "$ENV_VARS" > ____envvars.yaml",
259
- "gcloud run deploy pan-test-app-dev-www --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=dev,env-name=dev,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
259
+ "gcloud run deploy pan-test-app-dev-www --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=dev,env-name=dev,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
260
260
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
261
261
  "echo Uploading SBOM to Dependency Track",
262
262
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-dev-www-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -773,7 +773,7 @@ COPY --chown=node:node .yarn /app/.yarn",
773
773
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
774
774
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
775
775
  "echo "$ENV_VARS" > ____envvars.yaml",
776
- "gcloud run deploy pan-test-app-review-mr1234-www --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=review,env-name=review,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
776
+ "gcloud run deploy pan-test-app-review-mr1234-www --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=review,env-name=review,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
777
777
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
778
778
  "echo Uploading SBOM to Dependency Track",
779
779
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-review-mr1234-www-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -1378,7 +1378,7 @@ COPY --chown=node:node .yarn /app/.yarn",
1378
1378
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1379
1379
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1380
1380
  "echo "$ENV_VARS" > ____envvars.yaml",
1381
- "gcloud run deploy pan-test-app-prod-www --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=prod,env-name=prod,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1381
+ "gcloud run deploy pan-test-app-prod-www --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=prod,env-name=prod,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1382
1382
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1383
1383
  "echo Uploading SBOM to Dependency Track",
1384
1384
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-prod-www-unknown-host.example.com" "__sbom.json" vex.json || true",
@@ -1487,7 +1487,7 @@ _ALL_ENV_VAR_KEYS: '["ENV_SHORT","APP_DIR","ENV_TYPE","BUILD_INFO_ID","BUILD_INF
1487
1487
  "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1488
1488
  "docker push asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1489
1489
  "echo "$ENV_VARS" > ____envvars.yaml",
1490
- "gcloud run deploy pan-test-app-stage-www --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,app-name=test-app,env-type=stage,env-name=stage,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1490
+ "gcloud run deploy pan-test-app-stage-www --command="yarn,start" --image=asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG --project=asdf --region=asia-east1 --labels=customer-name=pan,component-name=www,app-name=test-app,env-type=stage,env-name=stage,build-type=node --env-vars-file=____envvars.yaml --min-instances=0 --max-instances=100 --cpu-throttling --allow-unauthenticated --cpu-boost",
1491
1491
  "docker image rm asia-east1-docker.pkg.dev/asdf/catladder-deploy/pan-test-app/$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG",
1492
1492
  "echo Uploading SBOM to Dependency Track",
1493
1493
  "/dtrackuploader https://dep.panter.swiss/ "$DT_KEY_PROD" upload "pan-test-app/www" "https://pan-test-app-stage-www-unknown-host.example.com" "__sbom.json" vex.json || true",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@catladder/pipeline",
3
- "version": "1.111.5",
3
+ "version": "1.113.0",
4
4
  "scripts": {
5
5
  "build:tsc": "yarn tsc",
6
6
  "build": "yarn build:compile && yarn build:inline-variables && yarn build:bundle",
@@ -9,7 +9,8 @@
9
9
  "build:inline-variables": "yarn babel --keep-file-extension --extensions \".ts,.js\" --config-file ./babel-inline.json dist --out-dir dist",
10
10
  "build:watch": "yarn tsc -w",
11
11
  "lint": "eslint \"src/**/*.ts\"",
12
- "lint:fix": "eslint \"src/**/*.ts\" --fix"
12
+ "lint:fix": "eslint \"src/**/*.ts\" --fix",
13
+ "generate:gitlab-ci-yml-types": "ts-node ./scripts/generate-gitlab-ci-types.ts"
13
14
  },
14
15
  "types": "dist/index.d.ts",
15
16
  "main": "dist/index.js",
@@ -31,6 +32,7 @@
31
32
  "child-process-promise": "^2.2.1",
32
33
  "eslint": "^8.7.0",
33
34
  "js-yaml": "^4.1.0",
35
+ "json-schema-to-typescript": "^13.0.2",
34
36
  "lodash": "^4.17.21",
35
37
  "memoizee": "^0.4.15",
36
38
  "path-equal": "1.1.3",
@@ -0,0 +1,51 @@
1
+ import { compile } from "json-schema-to-typescript";
2
+ import { resolve, join } from "path";
3
+ import { existsSync } from "fs";
4
+ import { rm, writeFile } from "fs/promises";
5
+
6
+ const rootPath = resolve(__dirname, "..");
7
+ const typeOutputPath = join(rootPath, "src/types/gitlab-ci-yml.ts");
8
+
9
+ export const generateFromCurrentSchema = async () => {
10
+ const response = await fetch(
11
+ "https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json"
12
+ );
13
+ const gitLabCiJsonSchema = await response.json();
14
+ const schema = await compile(gitLabCiJsonSchema, "GitlabCiYml", {
15
+ additionalProperties: true,
16
+ enableConstEnums: true,
17
+ declareExternallyReferenced: true,
18
+ unreachableDefinitions: true,
19
+ strictIndexSignatures: true,
20
+ unknownAny: false,
21
+ ignoreMinAndMaxItems: true,
22
+ format: true,
23
+ style: {
24
+ bracketSpacing: true,
25
+ printWidth: 100,
26
+ semi: true,
27
+ tabWidth: 2,
28
+ useTabs: false,
29
+ trailingComma: "es5",
30
+ endOfLine: "lf",
31
+ },
32
+ cwd: rootPath,
33
+ });
34
+ /**
35
+ * Remove part that failes with tsc error
36
+ * ```
37
+ * error TS2411: Property '$schema' of type 'string | undefined' is not assignable to 'string' index type 'JobTemplate1'.
38
+ * ```
39
+ */
40
+ const sanitizedSchenma = schema.replace(
41
+ // eslint-disable-next-line no-useless-escape
42
+ /export interface HttpsGitlabComGitlabCiYml \{\n[ a-zA-Z0-9?$:;\n_!"\{\}\/*@\[\],.|\(\)]*\[k\: string\]: Job;\n\}/m,
43
+ ""
44
+ );
45
+ if (existsSync(typeOutputPath)) {
46
+ await rm(typeOutputPath);
47
+ }
48
+ await writeFile(typeOutputPath, sanitizedSchenma, { encoding: "utf-8" });
49
+ };
50
+
51
+ generateFromCurrentSchema();
@@ -12,9 +12,10 @@ import {
12
12
  import { writeBuildInfo } from "./writeBuildInfo";
13
13
  import { writeDotEnv } from "./writeDotEnv";
14
14
 
15
- export const createBuildJob = (
15
+ export type AppBuildJobDefinition = Partial<CatladderJob>;
16
+ export const createAppBuildJob = (
16
17
  context: Context,
17
- { script, variables, ...def }: Partial<CatladderJob>
18
+ { script, variables, ...def }: AppBuildJobDefinition
18
19
  ): CatladderJob => {
19
20
  return merge(
20
21
  {
@@ -0,0 +1,35 @@
1
+ import { sbomDeactivated } from "../../deploy/sbom";
2
+ import type { Context } from "../../types/context";
3
+ import type { CatladderJob } from "../../types/jobs";
4
+ import type { DockerBuildJobDefinition } from "../docker";
5
+ import { createDockerBuildJobBase, requiresDockerBuild } from "../docker";
6
+ import { createSbomBuildJob } from "../sbom";
7
+ import { APP_BUILD_JOB_NAME } from "./constants";
8
+ import type { AppBuildJobDefinition } from "./createAppBuildJob";
9
+ import { createAppBuildJob } from "./createAppBuildJob";
10
+
11
+ export const createBuildJobs = (
12
+ context: Context,
13
+ definitions: {
14
+ appBuild?: AppBuildJobDefinition;
15
+ dockerBuild: DockerBuildJobDefinition;
16
+ }
17
+ ): CatladderJob[] => {
18
+ return [
19
+ ...(definitions.appBuild
20
+ ? [createAppBuildJob(context, definitions.appBuild)]
21
+ : []),
22
+ ...(requiresDockerBuild(context)
23
+ ? [
24
+ createDockerBuildJobBase(context, {
25
+ ...definitions.dockerBuild,
26
+ needs: [
27
+ ...(definitions.dockerBuild.needs ?? []),
28
+ ...(definitions.appBuild ? [APP_BUILD_JOB_NAME] : []),
29
+ ],
30
+ }),
31
+ ]
32
+ : []),
33
+ ...(sbomDeactivated(context) ? [] : [createSbomBuildJob(context)]),
34
+ ];
35
+ };
@@ -1,14 +1,11 @@
1
1
  import { join } from "path";
2
2
  import type { Context } from "../../types/context";
3
3
  import { ensureArray } from "../../utils";
4
- import { APP_BUILD_JOB_NAME } from "../base/constants";
5
- import { createBuildJob } from "../base/createBuildJob";
6
- import { createDockerBuildJobDefault, requiresDockerBuild } from "../docker";
4
+ import { getDockerBuildDefaultScript, requiresDockerBuild } from "../docker";
7
5
  import { isOfBuildType } from "../types";
8
6
 
9
7
  import type { CatladderJob } from "../../types/jobs";
10
- import { createSbomBuildJob } from "../sbom";
11
- import { sbomDeactivated } from "../../deploy/sbom";
8
+ import { createBuildJobs } from "../base";
12
9
 
13
10
  const RUNNER_BUILD_VARIABLES = {
14
11
  KUBERNETES_CPU_REQUEST: "0.5",
@@ -24,45 +21,35 @@ export const createCustomBuildJobs = (context: Context): CatladderJob[] => {
24
21
  throw new Error("deploy config is not custom");
25
22
  }
26
23
 
27
- const appBuildJob: CatladderJob | null =
28
- buildConfig.buildCommand !== null
29
- ? createBuildJob(context, {
30
- image: buildConfig.jobImage,
31
- variables: {
32
- ...RUNNER_BUILD_VARIABLES,
33
- },
34
- cache: buildConfig.jobCache,
35
- services: buildConfig.jobServices,
36
- script: [...(ensureArray(buildConfig.buildCommand) ?? [])],
37
- artifacts: {
38
- paths: [
39
- join(context.componentConfig.dir, "__build_info.json"),
40
- join(context.componentConfig.dir, "dist"),
41
- ...(buildConfig.artifactsPaths?.map((path) =>
42
- join(context.componentConfig.dir, path)
43
- ) ?? []),
44
- ],
45
- expire_in: "1 day",
46
- },
47
- })
48
- : null;
49
- return [
50
- ...(appBuildJob ? [appBuildJob] : []),
51
- ...(requiresDockerBuild(context)
52
- ? [
53
- createDockerBuildJobDefault(context, {
54
- script: [
55
- buildConfig.docker?.type === "nginx"
56
- ? "ensureNginxDockerfile"
57
- : "", // e.g. custom,
58
- ].filter(Boolean),
24
+ return createBuildJobs(context, {
25
+ appBuild:
26
+ buildConfig.buildCommand !== null
27
+ ? {
28
+ image: buildConfig.jobImage,
29
+ variables: {
30
+ ...RUNNER_BUILD_VARIABLES,
31
+ },
32
+ cache: buildConfig.jobCache,
33
+ services: buildConfig.jobServices,
34
+ script: [...(ensureArray(buildConfig.buildCommand) ?? [])],
35
+ artifacts: {
36
+ paths: [
37
+ join(context.componentConfig.dir, "__build_info.json"),
38
+ join(context.componentConfig.dir, "dist"),
39
+ ...(buildConfig.artifactsPaths?.map((path) =>
40
+ join(context.componentConfig.dir, path)
41
+ ) ?? []),
42
+ ],
43
+ expire_in: "1 day",
44
+ },
45
+ }
46
+ : undefined,
47
+ dockerBuild: {
48
+ script: getDockerBuildDefaultScript(
49
+ buildConfig.docker?.type === "nginx" ? "ensureNginxDockerfile" : ""
50
+ ),
59
51
 
60
- variables: {},
61
-
62
- needs: appBuildJob ? [APP_BUILD_JOB_NAME] : [],
63
- }),
64
- ]
65
- : []),
66
- ...(sbomDeactivated(context) ? [] : [createSbomBuildJob(context)]),
67
- ];
52
+ variables: {},
53
+ },
54
+ });
68
55
  };
@@ -57,6 +57,7 @@ export const getDockerBuildVariables = (context: Context) => {
57
57
  };
58
58
 
59
59
  export const DOCKER_BUILD_JOB_NAME = "🔨 docker";
60
+
60
61
  export const getDockerJobBaseProps = (context: Context) => {
61
62
  return {
62
63
  image: getRunnerImage("docker-build"),
@@ -69,6 +70,8 @@ export const getDockerJobBaseProps = (context: Context) => {
69
70
  variables: getDockerBaseVariables(),
70
71
  };
71
72
  };
73
+
74
+ export type DockerBuildJobDefinition = Partial<CatladderJob>;
72
75
  export const createDockerBuildJobBase = (
73
76
  context: Context,
74
77
  { script, ...def }: Partial<CatladderJob>
@@ -90,20 +93,14 @@ export const createDockerBuildJobBase = (
90
93
 
91
94
  export const gitlabDockerLogin =
92
95
  "docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY";
93
- export const createDockerBuildJobDefault = (
94
- context: Context,
95
- { script, ...def }: Partial<CatladderJob>
96
- ): CatladderJob => {
97
- return createDockerBuildJobBase(context, {
98
- script: [
99
- ...(script || []),
100
- gitlabDockerLogin,
101
- "docker version",
102
- "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1", //BUILDKIT_INLINE_CACHE, see https://testdriven.io/blog/faster-ci-builds-with-docker-cache/
103
- "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
104
- "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
105
- "docker push $DOCKER_CACHE_IMAGE",
106
- ],
107
- ...def,
108
- });
109
- };
96
+
97
+ export const getDockerBuildDefaultScript = (ensureDockerFileScript?: string) =>
98
+ [
99
+ ensureDockerFileScript,
100
+ gitlabDockerLogin,
101
+ "docker version",
102
+ "docker build --network host --cache-from $DOCKER_CACHE_IMAGE --tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG -f $APP_DIR/Dockerfile . --build-arg BUILDKIT_INLINE_CACHE=1", //BUILDKIT_INLINE_CACHE, see https://testdriven.io/blog/faster-ci-builds-with-docker-cache/
103
+ "docker push $DOCKER_IMAGE:$DOCKER_IMAGE_TAG",
104
+ "docker tag $DOCKER_IMAGE:$DOCKER_IMAGE_TAG $DOCKER_CACHE_IMAGE",
105
+ "docker push $DOCKER_CACHE_IMAGE",
106
+ ].filter(Boolean);
@@ -1,17 +1,14 @@
1
+ import { join } from "path";
2
+ import { getRunnerImage } from "../../runner";
1
3
  import type { Context } from "../../types/context";
4
+ import type { CatladderJob } from "../../types/jobs";
2
5
  import { ensureArray } from "../../utils";
3
- import { APP_BUILD_JOB_NAME } from "../base/constants";
4
- import { createBuildJob } from "../base/createBuildJob";
5
- import { createDockerBuildJobDefault, requiresDockerBuild } from "../docker";
6
- import { join } from "path";
6
+ import { createBuildJobs } from "../base";
7
+ import { getDockerBuildDefaultScript, requiresDockerBuild } from "../docker";
7
8
  import { isOfBuildType } from "../types";
8
9
  import { getNextCache, getNodeCache, getYarnCache } from "./cache";
9
10
  import { NODE_RUNNER_BUILD_VARIABLES } from "./constants";
10
11
  import { getDockerAppCopyAndBuildScript, getYarnInstall } from "./yarn";
11
- import type { CatladderJob } from "../../types/jobs";
12
- import { getRunnerImage } from "../../runner";
13
- import { createSbomBuildJob } from "../sbom";
14
- import { sbomDeactivated } from "../../deploy/sbom";
15
12
 
16
13
  export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
17
14
  const buildConfig = context.componentConfig.build;
@@ -22,62 +19,54 @@ export const createNodeBuildJobs = (context: Context): CatladderJob[] => {
22
19
 
23
20
  const defaultImage = getRunnerImage("jobs-default");
24
21
  const yarnInstall = getYarnInstall(context);
25
- const appBuildJob: CatladderJob | null =
26
- buildConfig.buildCommand !== null
27
- ? createBuildJob(context, {
28
- image: buildConfig.jobImage ?? defaultImage,
29
- variables: {
30
- ...NODE_RUNNER_BUILD_VARIABLES,
31
- },
32
- cache: [
33
- ...(ensureArray(buildConfig.jobCache) ?? []),
34
- ...getNodeCache(context),
35
- ...getNextCache(context),
36
- ],
37
- script: [
38
- ...yarnInstall,
39
- ...(ensureArray(buildConfig.buildCommand) ?? []),
40
- ],
41
- artifacts: {
42
- paths: [
43
- join(context.componentConfig.dir, "__build_info.json"),
44
- join(context.componentConfig.dir, "dist"),
45
- join(context.componentConfig.dir, ".next"),
46
- ...(buildConfig.artifactsPaths?.map((path) =>
47
- join(context.componentConfig.dir, path)
48
- ) ?? []),
22
+
23
+ return createBuildJobs(context, {
24
+ appBuild:
25
+ buildConfig.buildCommand !== null
26
+ ? {
27
+ image: buildConfig.jobImage ?? defaultImage,
28
+ variables: {
29
+ ...NODE_RUNNER_BUILD_VARIABLES,
30
+ },
31
+ cache: [
32
+ ...(ensureArray(buildConfig.jobCache) ?? []),
33
+ ...getNodeCache(context),
34
+ ...getNextCache(context),
49
35
  ],
50
- expire_in: "1 day",
51
- },
52
- jobTags: buildConfig.jobTags,
53
- })
54
- : null;
55
- return [
56
- ...(appBuildJob ? [appBuildJob] : []),
57
- ...(requiresDockerBuild(context)
58
- ? [
59
- createDockerBuildJobDefault(context, {
60
36
  script: [
61
- buildConfig.type === "node-static" ||
62
- buildConfig.type === "storybook"
63
- ? "ensureNginxDockerfile"
64
- : "ensureNodeDockerfile",
37
+ ...yarnInstall,
38
+ ...(ensureArray(buildConfig.buildCommand) ?? []),
65
39
  ],
66
- cache: [...getYarnCache(context, "pull")],
67
- variables: {
68
- // only required for non static
69
- DOCKER_COPY_AND_INSTALL_APP:
70
- getDockerAppCopyAndBuildScript(context),
71
- DOCKER_COPY_WORKSPACE_FILES:
72
- context.packageManagerInfo?.pathsToCopyInDocker
73
- .map((dir) => `COPY --chown=node:node ${dir} /app/${dir}`)
74
- ?.join("\n"),
40
+ artifacts: {
41
+ paths: [
42
+ join(context.componentConfig.dir, "__build_info.json"),
43
+ join(context.componentConfig.dir, "dist"),
44
+ join(context.componentConfig.dir, ".next"),
45
+ ...(buildConfig.artifactsPaths?.map((path) =>
46
+ join(context.componentConfig.dir, path)
47
+ ) ?? []),
48
+ ],
49
+ expire_in: "1 day",
75
50
  },
51
+ jobTags: buildConfig.jobTags,
52
+ }
53
+ : undefined,
76
54
 
77
- needs: appBuildJob ? [APP_BUILD_JOB_NAME] : [],
78
- }),
79
- ]
80
- : []),
81
- ...(sbomDeactivated(context) ? [] : [createSbomBuildJob(context)]),
82
- ];
55
+ dockerBuild: {
56
+ script: getDockerBuildDefaultScript(
57
+ buildConfig.type === "node-static" || buildConfig.type === "storybook"
58
+ ? "ensureNginxDockerfile"
59
+ : "ensureNodeDockerfile"
60
+ ),
61
+ cache: [...getYarnCache(context, "pull")],
62
+ variables: {
63
+ // only required for non static
64
+ DOCKER_COPY_AND_INSTALL_APP: getDockerAppCopyAndBuildScript(context),
65
+ DOCKER_COPY_WORKSPACE_FILES:
66
+ context.packageManagerInfo?.pathsToCopyInDocker
67
+ .map((dir) => `COPY --chown=node:node ${dir} /app/${dir}`)
68
+ ?.join("\n"),
69
+ },
70
+ },
71
+ });
83
72
  };