@catladder/cli 5.5.0 → 5.7.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 (109) hide show
  1. package/dist/apps/cli/src/catci.js +22 -0
  2. package/dist/apps/cli/src/catci.js.map +1 -1
  3. package/dist/apps/cli/src/commands/index.d.ts +1 -0
  4. package/dist/apps/cli/src/commands/index.js +4 -1
  5. package/dist/apps/cli/src/commands/index.js.map +1 -1
  6. package/dist/apps/cli/src/commands/project/commandMrPin.d.ts +9 -0
  7. package/dist/apps/cli/src/commands/project/commandMrPin.js +11 -13
  8. package/dist/apps/cli/src/commands/project/commandMrPin.js.map +1 -1
  9. package/dist/apps/cli/src/commands/project/commandMrReviewApp.d.ts +21 -0
  10. package/dist/apps/cli/src/commands/project/commandMrReviewApp.js +102 -0
  11. package/dist/apps/cli/src/commands/project/commandMrReviewApp.js.map +1 -0
  12. package/dist/apps/cli/src/reviewApps/github.d.ts +10 -0
  13. package/dist/apps/cli/src/reviewApps/github.js +196 -0
  14. package/dist/apps/cli/src/reviewApps/github.js.map +1 -0
  15. package/dist/bundles/catci/index.js +4 -4
  16. package/dist/bundles/catenv/index.js +1261 -70
  17. package/dist/bundles/catenv/xdg-open +0 -0
  18. package/dist/bundles/cli/clipboard_i686.exe +0 -0
  19. package/dist/bundles/cli/clipboard_x86_64.exe +0 -0
  20. package/dist/bundles/cli/index.js +1387 -86
  21. package/dist/bundles/cli/xdg-open +0 -0
  22. package/dist/bundles/cli/xsel +0 -0
  23. package/dist/bundles/runner-images/changesets/scripts/changesetsRelease +0 -0
  24. package/dist/bundles/runner-images/kubernetes/scripts/kubernetesCreateSecret +0 -0
  25. package/dist/bundles/runner-images/kubernetes/scripts/kubernetesDelete +0 -0
  26. package/dist/bundles/runner-images/kubernetes/scripts/kubernetesDeploy +0 -0
  27. package/dist/bundles/runner-images/kubernetes/scripts/kubernetesRollback +0 -0
  28. package/dist/bundles/skills/catladder-builds/SKILL.md +50 -2
  29. package/dist/bundles/skills/catladder-builds/references/build-types.md +10 -2
  30. package/dist/bundles/skills/catladder-cli/references/commands.md +13 -0
  31. package/dist/bundles/skills/catladder-config/SKILL.md +4 -0
  32. package/dist/bundles/skills/catladder-deploys/SKILL.md +6 -0
  33. package/dist/bundles/skills/catladder-pipelines/SKILL.md +97 -3
  34. package/dist/packages/pipeline/src/backends/github/GithubBackend.js +60 -3
  35. package/dist/packages/pipeline/src/backends/github/GithubBackend.js.map +1 -1
  36. package/dist/packages/pipeline/src/backends/github/aggregateCheckJob.d.ts +1 -1
  37. package/dist/packages/pipeline/src/backends/github/aggregateCheckJob.js +22 -8
  38. package/dist/packages/pipeline/src/backends/github/aggregateCheckJob.js.map +1 -1
  39. package/dist/packages/pipeline/src/backends/github/artifactArchive.d.ts +22 -0
  40. package/dist/packages/pipeline/src/backends/github/artifactArchive.js +84 -0
  41. package/dist/packages/pipeline/src/backends/github/artifactArchive.js.map +1 -0
  42. package/dist/packages/pipeline/src/backends/github/createGithubJobs.js +12 -29
  43. package/dist/packages/pipeline/src/backends/github/createGithubJobs.js.map +1 -1
  44. package/dist/packages/pipeline/src/backends/github/reviewDeployWorkflow.d.ts +128 -0
  45. package/dist/packages/pipeline/src/backends/github/reviewDeployWorkflow.js +510 -0
  46. package/dist/packages/pipeline/src/backends/github/reviewDeployWorkflow.js.map +1 -0
  47. package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js +32 -5
  48. package/dist/packages/pipeline/src/backends/gitlab/GitlabBackend.js.map +1 -1
  49. package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.d.ts +11 -1
  50. package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.js +17 -5
  51. package/dist/packages/pipeline/src/backends/gitlab/createGitlabPipeline.js.map +1 -1
  52. package/dist/packages/pipeline/src/backends/gitlab/getPipelineStages.d.ts +4 -1
  53. package/dist/packages/pipeline/src/backends/gitlab/getPipelineStages.js +11 -2
  54. package/dist/packages/pipeline/src/backends/gitlab/getPipelineStages.js.map +1 -1
  55. package/dist/packages/pipeline/src/backends/gitlab/reviewDeployGate.d.ts +26 -0
  56. package/dist/packages/pipeline/src/backends/gitlab/reviewDeployGate.js +94 -0
  57. package/dist/packages/pipeline/src/backends/gitlab/reviewDeployGate.js.map +1 -0
  58. package/dist/packages/pipeline/src/build/types.d.ts +4 -3
  59. package/dist/packages/pipeline/src/build/types.js.map +1 -1
  60. package/dist/packages/pipeline/src/deploy/base/deploy.js +25 -12
  61. package/dist/packages/pipeline/src/deploy/base/deploy.js.map +1 -1
  62. package/dist/packages/pipeline/src/index.d.ts +2 -0
  63. package/dist/packages/pipeline/src/index.js +2 -0
  64. package/dist/packages/pipeline/src/index.js.map +1 -1
  65. package/dist/packages/pipeline/src/pipeline/createJobsForComponent.js +12 -2
  66. package/dist/packages/pipeline/src/pipeline/createJobsForComponent.js.map +1 -1
  67. package/dist/packages/pipeline/src/pipeline/createJobsForWorkspace.js +7 -2
  68. package/dist/packages/pipeline/src/pipeline/createJobsForWorkspace.js.map +1 -1
  69. package/dist/packages/pipeline/src/pipeline/resolveRequirements.d.ts +2 -0
  70. package/dist/packages/pipeline/src/pipeline/resolveRequirements.js +4 -2
  71. package/dist/packages/pipeline/src/pipeline/resolveRequirements.js.map +1 -1
  72. package/dist/packages/pipeline/src/postBuildTest/createPostBuildTestJobs.d.ts +16 -0
  73. package/dist/packages/pipeline/src/postBuildTest/createPostBuildTestJobs.js +167 -0
  74. package/dist/packages/pipeline/src/postBuildTest/createPostBuildTestJobs.js.map +1 -0
  75. package/dist/packages/pipeline/src/postBuildTest/index.d.ts +2 -0
  76. package/dist/packages/pipeline/src/postBuildTest/index.js +19 -0
  77. package/dist/packages/pipeline/src/postBuildTest/index.js.map +1 -0
  78. package/dist/packages/pipeline/src/postBuildTest/types.d.ts +61 -0
  79. package/dist/packages/pipeline/src/postBuildTest/types.js +3 -0
  80. package/dist/packages/pipeline/src/postBuildTest/types.js.map +1 -0
  81. package/dist/packages/pipeline/src/reviewApps.d.ts +38 -0
  82. package/dist/packages/pipeline/src/reviewApps.js +86 -0
  83. package/dist/packages/pipeline/src/reviewApps.js.map +1 -0
  84. package/dist/packages/pipeline/src/reviewAppsPolicy.d.ts +46 -0
  85. package/dist/packages/pipeline/src/reviewAppsPolicy.js +37 -0
  86. package/dist/packages/pipeline/src/reviewAppsPolicy.js.map +1 -0
  87. package/dist/packages/pipeline/src/types/config.d.ts +55 -0
  88. package/dist/packages/pipeline/src/types/config.js.map +1 -1
  89. package/dist/packages/pipeline/src/types/jobs.d.ts +2 -2
  90. package/dist/packages/pipeline/src/types/jobs.js +1 -0
  91. package/dist/packages/pipeline/src/types/jobs.js.map +1 -1
  92. package/dist/runner-images/changesets/scripts/changesetsRelease +0 -0
  93. package/dist/runner-images/kubernetes/scripts/kubernetesCreateSecret +0 -0
  94. package/dist/runner-images/kubernetes/scripts/kubernetesDelete +0 -0
  95. package/dist/runner-images/kubernetes/scripts/kubernetesDeploy +0 -0
  96. package/dist/runner-images/kubernetes/scripts/kubernetesRollback +0 -0
  97. package/dist/skills/catladder-builds/SKILL.md +50 -2
  98. package/dist/skills/catladder-builds/references/build-types.md +10 -2
  99. package/dist/skills/catladder-cli/references/commands.md +13 -0
  100. package/dist/skills/catladder-config/SKILL.md +4 -0
  101. package/dist/skills/catladder-deploys/SKILL.md +6 -0
  102. package/dist/skills/catladder-pipelines/SKILL.md +97 -3
  103. package/dist/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +1 -1
  105. package/src/catci.ts +29 -0
  106. package/src/commands/index.ts +4 -0
  107. package/src/commands/project/commandMrPin.ts +15 -14
  108. package/src/commands/project/commandMrReviewApp.ts +143 -0
  109. package/src/reviewApps/github.ts +253 -0
@@ -20,6 +20,7 @@ const changesetCheckJob_1 = require("./release/changesetCheckJob");
20
20
  const githubDeployKey_1 = require("./release/githubDeployKey");
21
21
  const githubQueuedRelease_1 = require("./release/githubQueuedRelease");
22
22
  const npmPublishJob_1 = require("./publish/npmPublishJob");
23
+ const github_1 = require("./reviewApps/github");
23
24
  const gitlabHost_1 = require("./utils/gitlabHost");
24
25
  const USAGE = `catci — catladder CI companion
25
26
 
@@ -67,6 +68,17 @@ usage:
67
68
  queue marker when it matches the completed main run and decides
68
69
  whether the release step runs (release=true step output)
69
70
 
71
+ catci review-app github-trigger
72
+ github only, last job of the review workflow: once the PR's CI is
73
+ green, dispatches the review deploy workflow when the reviewApps
74
+ policy (labels, draft) says the PR deploys
75
+
76
+ catci review-app github-guard
77
+ github only, first job of the review deploy workflow: decides
78
+ whether the run deploys (deploy=true step output) — explicit
79
+ dispatches always do, label events and ci dispatches follow the
80
+ policy; all need the PR open and its CI green
81
+
70
82
  catci publish npm --dir <dir> --env-type <envType> [--access <access>] [--registry <url>] [--dist-tag <tag>]
71
83
  npmPackage deploy job: derives version + dist-tag from the
72
84
  pipeline trigger (tagged release -> tag version @latest; branch/MR
@@ -162,6 +174,16 @@ const main = async () => {
162
174
  args.length === 2) {
163
175
  return (0, githubQueuedRelease_1.githubQueuedGuardJob)(args[0], args[1]);
164
176
  }
177
+ if (group === "review-app" &&
178
+ command === "github-trigger" &&
179
+ args.length === 0) {
180
+ return (0, github_1.githubReviewDeployTriggerJob)();
181
+ }
182
+ if (group === "review-app" &&
183
+ command === "github-guard" &&
184
+ args.length === 0) {
185
+ return (0, github_1.githubReviewDeployGuardJob)();
186
+ }
165
187
  if (group === "publish" && command === "npm") {
166
188
  const options = (0, npmPublishJob_1.parseNpmPublishArgs)(args);
167
189
  if (options) {
@@ -1 +1 @@
1
- {"version":3,"file":"catci.js","sourceRoot":"","sources":["../../../../src/catci.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;GAWG;AACH,0CAAyC;AACzC,4EAG0C;AAC1C,gGAGoD;AACpD,yEAGwC;AACxC,mEAAgE;AAChE,+DAAqE;AACrE,uEAGuC;AACvC,2DAA6E;AAC7E,mDAAsD;AAEtD,MAAM,KAAK,GAAG;;;;kBAII,0DAAwB;;;;kBAIxB,0DAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CzC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,OAAe,EAAS,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAC1C,MAAM,UAAU,GAAG,MAAM,IAAA,6CAAqB,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;QAChD,IAAI,CACF,yCAAyC;YACvC,oCAAoC,0DAAwB,4DAA4D,CAC3H,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAA,iDAAyB,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,OAAO,UAAU,CAAC,KAAK,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAChD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CACF,sBAAsB,0DAAwB,IAAI;YAChD,gBAAgB,0DAAwB,6CAA6C;YACrF,4EAA4E,CAC/E,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAC9B,IAAY,EACZ,KAAa,EACb,UAAkB,EAClB,SAAiB,EACjB,MAAc,EACd,EAAE;IACF,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAE1E,MAAM,GAAG,GAAG,IAAI,aAAM,CAAC,EAAE,IAAI,EAAE,MAAM,IAAA,6BAAgB,GAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,MAAM,IAAA,iEAA+B,EAAC;QAC/C,GAAG;QACH,UAAU;QACV,SAAS;QACT,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;KACzB,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;QACf,IAAI,CACF,gEAAgE,EAAE,CAAC,KAAK,EAAE,CAC3E,CAAC;QACF,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CACT,oCAAoC,0DAAwB,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CACpF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,gBAAgB,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5E,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;QAC1D,OAAO,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,KAAK,KAAK,gBAAgB,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3E,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,IAAA,2CAAoB,GAAE,CAAC;IAChC,CAAC;IACD,IACE,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,iBAAiB;QAC7B,IAAI,CAAC,MAAM,KAAK,CAAC,EACjB,CAAC;QACD,OAAO,IAAA,qCAAiB,GAAE,CAAC;IAC7B,CAAC;IACD,IACE,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,0BAA0B;QACtC,IAAI,CAAC,MAAM,KAAK,CAAC,EACjB,CAAC;QACD,OAAO,IAAA,oDAA6B,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,IACE,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,0BAA0B;QACtC,IAAI,CAAC,MAAM,KAAK,CAAC,EACjB,CAAC;QACD,OAAO,IAAA,0CAAwB,GAAE,CAAC;IACpC,CAAC;IACD,IACE,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,oBAAoB;QAChC,IAAI,CAAC,MAAM,KAAK,CAAC,EACjB,CAAC;QACD,OAAO,IAAA,yCAAmB,GAAE,CAAC;IAC/B,CAAC;IACD,IACE,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,qBAAqB;QACjC,IAAI,CAAC,MAAM,KAAK,CAAC,EACjB,CAAC;QACD,OAAO,IAAA,0CAAoB,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAA,mCAAmB,EAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAA,6BAAa,EAAC,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,IAAI,CAAC,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"catci.js","sourceRoot":"","sources":["../../../../src/catci.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export { commandCiJobOpen, commandCiJobLog } from "./project/commandGitlabCi";
27
27
  export { commandProjectRestoreDb } from "./project/commandProjectRestoreDb";
28
28
  export { commandSecurityEvaluate } from "./project/commandSecurityEvaluate";
29
29
  export { commandMrPin, commandMrUnpin } from "./project/commandMrPin";
30
+ export { commandMrReviewAppOn, commandMrReviewAppOff, } from "./project/commandMrReviewApp";
30
31
  export { commandNamespace } from "./project/k8s/commandNamespace";
31
32
  export { commandListPods } from "./project/k8s/commandListPods";
32
33
  export { commandGetShell } from "./project/k8s/commandGetShell";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.commandStarwars = exports.commandDadjoke = exports.commandSecurityAuditCreate = exports.commandSecurityAuditEvaluate = exports.commandSecurityAuditCiJob = exports.commandRestoreDb = exports.commandMongoDestroyMember = exports.commandMongoPortForward = exports.commandMongoGetShell = exports.commandTriggerCronjobProject = exports.commandDeleteProject = exports.commandPauseProject = exports.commandDeletePods = exports.commandGetShell = exports.commandListPods = exports.commandNamespace = exports.commandMrUnpin = exports.commandMrPin = exports.commandSecurityEvaluate = exports.commandProjectRestoreDb = exports.commandCiJobLog = exports.commandCiJobOpen = exports.commandDoctor = exports.commandSetup = exports.commandGetMyTotalWorktime = exports.commandRenewToken = exports.commandTriggerCronjobGeneral = exports.commandOpenLogs = exports.commandSecretsSyncGithub = exports.commandSecretsClearBackups = exports.commandSecretsList = exports.commandSecretsSet = exports.commandSecretsPush = exports.commandSecretsPull = exports.commandConfigSecrets = exports.commandCloudSqlProxy = exports.commandOpenGit = exports.commandOpenEnv = exports.commandPortForward = exports.commandEnvVars = exports.commandKubePortForward = exports.commandKubeGetShell = exports.commandKubeStopPortforward = exports.commandKubeListPods = exports.commandKubeListSecrets = exports.commandKubeListNamespaces = exports.commandKubeCurrentContext = void 0;
3
+ exports.commandStarwars = exports.commandDadjoke = exports.commandSecurityAuditCreate = exports.commandSecurityAuditEvaluate = exports.commandSecurityAuditCiJob = exports.commandRestoreDb = exports.commandMongoDestroyMember = exports.commandMongoPortForward = exports.commandMongoGetShell = exports.commandTriggerCronjobProject = exports.commandDeleteProject = exports.commandPauseProject = exports.commandDeletePods = exports.commandGetShell = exports.commandListPods = exports.commandNamespace = exports.commandMrReviewAppOff = exports.commandMrReviewAppOn = exports.commandMrUnpin = exports.commandMrPin = exports.commandSecurityEvaluate = exports.commandProjectRestoreDb = exports.commandCiJobLog = exports.commandCiJobOpen = exports.commandDoctor = exports.commandSetup = exports.commandGetMyTotalWorktime = exports.commandRenewToken = exports.commandTriggerCronjobGeneral = exports.commandOpenLogs = exports.commandSecretsSyncGithub = exports.commandSecretsClearBackups = exports.commandSecretsList = exports.commandSecretsSet = exports.commandSecretsPush = exports.commandSecretsPull = exports.commandConfigSecrets = exports.commandCloudSqlProxy = exports.commandOpenGit = exports.commandOpenEnv = exports.commandPortForward = exports.commandEnvVars = exports.commandKubePortForward = exports.commandKubeGetShell = exports.commandKubeStopPortforward = exports.commandKubeListPods = exports.commandKubeListSecrets = exports.commandKubeListNamespaces = exports.commandKubeCurrentContext = void 0;
4
4
  // General commands
5
5
  var commandKubeCurrentContext_1 = require("./general/commandKubeCurrentContext");
6
6
  Object.defineProperty(exports, "commandKubeCurrentContext", { enumerable: true, get: function () { return commandKubeCurrentContext_1.commandKubeCurrentContext; } });
@@ -63,6 +63,9 @@ Object.defineProperty(exports, "commandSecurityEvaluate", { enumerable: true, ge
63
63
  var commandMrPin_1 = require("./project/commandMrPin");
64
64
  Object.defineProperty(exports, "commandMrPin", { enumerable: true, get: function () { return commandMrPin_1.commandMrPin; } });
65
65
  Object.defineProperty(exports, "commandMrUnpin", { enumerable: true, get: function () { return commandMrPin_1.commandMrUnpin; } });
66
+ var commandMrReviewApp_1 = require("./project/commandMrReviewApp");
67
+ Object.defineProperty(exports, "commandMrReviewAppOn", { enumerable: true, get: function () { return commandMrReviewApp_1.commandMrReviewAppOn; } });
68
+ Object.defineProperty(exports, "commandMrReviewAppOff", { enumerable: true, get: function () { return commandMrReviewApp_1.commandMrReviewAppOff; } });
66
69
  // Project k8s commands
67
70
  var commandNamespace_1 = require("./project/k8s/commandNamespace");
68
71
  Object.defineProperty(exports, "commandNamespace", { enumerable: true, get: function () { return commandNamespace_1.commandNamespace; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,mBAAmB;AACnB,iFAAgF;AAAvE,sIAAA,yBAAyB,OAAA;AAClC,iFAAgF;AAAvE,sIAAA,yBAAyB,OAAA;AAClC,2EAA0E;AAAjE,gIAAA,sBAAsB,OAAA;AAC/B,qEAAoE;AAA3D,0HAAA,mBAAmB,OAAA;AAC5B,mFAAkF;AAAzE,wIAAA,0BAA0B,OAAA;AACnC,qEAAoE;AAA3D,0HAAA,mBAAmB,OAAA;AAC5B,2EAA0E;AAAjE,gIAAA,sBAAsB,OAAA;AAE/B,mBAAmB;AACnB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,mEAAkE;AAAzD,wHAAA,kBAAkB,OAAA;AAC3B,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,uEAAsE;AAA7D,4HAAA,oBAAoB,OAAA;AAC7B,uEAAsE;AAA7D,4HAAA,oBAAoB,OAAA;AAC7B,2EAA0E;AAAjE,wHAAA,kBAAkB,OAAA;AAC3B,2EAA0E;AAAjE,wHAAA,kBAAkB,OAAA;AAC3B,yEAAwE;AAA/D,sHAAA,iBAAiB,OAAA;AAC1B,2EAA0E;AAAjE,wHAAA,kBAAkB,OAAA;AAC3B,mFAAkF;AAAzE,wIAAA,0BAA0B,OAAA;AACnC,+EAA8E;AAArE,oIAAA,wBAAwB,OAAA;AACjC,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AACxB,6EAAmF;AAA1E,qIAAA,4BAA4B,OAAA;AACrC,iEAAgE;AAAvD,sHAAA,iBAAiB,OAAA;AAC1B,iFAAgF;AAAvE,sIAAA,yBAAyB,OAAA;AAClC,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,yDAAwD;AAA/C,8GAAA,aAAa,OAAA;AACtB,6DAA8E;AAArE,mHAAA,gBAAgB,OAAA;AAAE,kHAAA,eAAe,OAAA;AAC1C,6EAA4E;AAAnE,kIAAA,uBAAuB,OAAA;AAChC,6EAA4E;AAAnE,kIAAA,uBAAuB,OAAA;AAChC,uDAAsE;AAA7D,4GAAA,YAAY,OAAA;AAAE,8GAAA,cAAc,OAAA;AAErC,uBAAuB;AACvB,mEAAkE;AAAzD,oHAAA,gBAAgB,OAAA;AACzB,iEAAgE;AAAvD,kHAAA,eAAe,OAAA;AACxB,iEAAgE;AAAvD,kHAAA,eAAe,OAAA;AACxB,qEAAoE;AAA3D,sHAAA,iBAAiB,OAAA;AAC1B,yEAAwE;AAA/D,0HAAA,mBAAmB,OAAA;AAC5B,2EAA0E;AAAjE,4HAAA,oBAAoB,OAAA;AAC7B,6EAAmF;AAA1E,qIAAA,4BAA4B,OAAA;AAErC,mBAAmB;AACnB,uEAAsE;AAA7D,4HAAA,oBAAoB,OAAA;AAC7B,6EAA4E;AAAnE,kIAAA,uBAAuB,OAAA;AAChC,iFAAgF;AAAvE,sIAAA,yBAAyB,OAAA;AAElC,oBAAoB;AACpB,gEAA+D;AAAtD,oHAAA,gBAAgB,OAAA;AAEzB,oBAAoB;AACpB,kFAAiF;AAAxE,sIAAA,yBAAyB,OAAA;AAClC,wFAAuF;AAA9E,4IAAA,4BAA4B,OAAA;AACrC,oFAAmF;AAA1E,wIAAA,0BAA0B,OAAA;AAEnC,eAAe;AACf,uDAAsD;AAA7C,gHAAA,cAAc,OAAA;AACvB,yDAAwD;AAA/C,kHAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,mBAAmB;AACnB,iFAAgF;AAAvE,sIAAA,yBAAyB,OAAA;AAClC,iFAAgF;AAAvE,sIAAA,yBAAyB,OAAA;AAClC,2EAA0E;AAAjE,gIAAA,sBAAsB,OAAA;AAC/B,qEAAoE;AAA3D,0HAAA,mBAAmB,OAAA;AAC5B,mFAAkF;AAAzE,wIAAA,0BAA0B,OAAA;AACnC,qEAAoE;AAA3D,0HAAA,mBAAmB,OAAA;AAC5B,2EAA0E;AAAjE,gIAAA,sBAAsB,OAAA;AAE/B,mBAAmB;AACnB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,mEAAkE;AAAzD,wHAAA,kBAAkB,OAAA;AAC3B,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AACvB,uEAAsE;AAA7D,4HAAA,oBAAoB,OAAA;AAC7B,uEAAsE;AAA7D,4HAAA,oBAAoB,OAAA;AAC7B,2EAA0E;AAAjE,wHAAA,kBAAkB,OAAA;AAC3B,2EAA0E;AAAjE,wHAAA,kBAAkB,OAAA;AAC3B,yEAAwE;AAA/D,sHAAA,iBAAiB,OAAA;AAC1B,2EAA0E;AAAjE,wHAAA,kBAAkB,OAAA;AAC3B,mFAAkF;AAAzE,wIAAA,0BAA0B,OAAA;AACnC,+EAA8E;AAArE,oIAAA,wBAAwB,OAAA;AACjC,6DAA4D;AAAnD,kHAAA,eAAe,OAAA;AACxB,6EAAmF;AAA1E,qIAAA,4BAA4B,OAAA;AACrC,iEAAgE;AAAvD,sHAAA,iBAAiB,OAAA;AAC1B,iFAAgF;AAAvE,sIAAA,yBAAyB,OAAA;AAClC,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,yDAAwD;AAA/C,8GAAA,aAAa,OAAA;AACtB,6DAA8E;AAArE,mHAAA,gBAAgB,OAAA;AAAE,kHAAA,eAAe,OAAA;AAC1C,6EAA4E;AAAnE,kIAAA,uBAAuB,OAAA;AAChC,6EAA4E;AAAnE,kIAAA,uBAAuB,OAAA;AAChC,uDAAsE;AAA7D,4GAAA,YAAY,OAAA;AAAE,8GAAA,cAAc,OAAA;AACrC,mEAGsC;AAFpC,0HAAA,oBAAoB,OAAA;AACpB,2HAAA,qBAAqB,OAAA;AAGvB,uBAAuB;AACvB,mEAAkE;AAAzD,oHAAA,gBAAgB,OAAA;AACzB,iEAAgE;AAAvD,kHAAA,eAAe,OAAA;AACxB,iEAAgE;AAAvD,kHAAA,eAAe,OAAA;AACxB,qEAAoE;AAA3D,sHAAA,iBAAiB,OAAA;AAC1B,yEAAwE;AAA/D,0HAAA,mBAAmB,OAAA;AAC5B,2EAA0E;AAAjE,4HAAA,oBAAoB,OAAA;AAC7B,6EAAmF;AAA1E,qIAAA,4BAA4B,OAAA;AAErC,mBAAmB;AACnB,uEAAsE;AAA7D,4HAAA,oBAAoB,OAAA;AAC7B,6EAA4E;AAAnE,kIAAA,uBAAuB,OAAA;AAChC,iFAAgF;AAAvE,sIAAA,yBAAyB,OAAA;AAElC,oBAAoB;AACpB,gEAA+D;AAAtD,oHAAA,gBAAgB,OAAA;AAEzB,oBAAoB;AACpB,kFAAiF;AAAxE,sIAAA,yBAAyB,OAAA;AAClC,wFAAuF;AAA9E,4IAAA,4BAA4B,OAAA;AACrC,oFAAmF;AAA1E,wIAAA,0BAA0B,OAAA;AAEnC,eAAe;AACf,uDAAsD;AAA7C,gHAAA,cAAc,OAAA;AACvB,yDAAwD;AAA/C,kHAAA,eAAe,OAAA"}
@@ -1,3 +1,12 @@
1
+ import type { IO } from "../../core/types";
2
+ export type GitlabMr = {
3
+ iid: number;
4
+ title: string;
5
+ web_url: string;
6
+ labels: string[];
7
+ };
8
+ export declare const findMr: (io: IO, projectId: string, mrIid: number | undefined) => Promise<GitlabMr>;
9
+ export declare const ensureLabelExists: (io: IO, projectId: string, name: string, description: string) => Promise<void>;
1
10
  export declare const commandMrPin: import("../../core/types").CommandDef<{
2
11
  readonly mr: {
3
12
  readonly type: "number";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.commandMrUnpin = exports.commandMrPin = void 0;
3
+ exports.commandMrUnpin = exports.commandMrPin = exports.ensureLabelExists = exports.findMr = void 0;
4
4
  const child_process_promise_1 = require("child-process-promise");
5
5
  const pipeline_1 = require("../../../../../packages/pipeline/src/index.js");
6
6
  const getProjectConfig_1 = require("../../config/getProjectConfig");
@@ -36,18 +36,16 @@ const findMr = async (io, projectId, mrIid) => {
36
36
  }
37
37
  return mrs[0];
38
38
  };
39
- const ensurePinLabelExists = async (io, projectId, pinLabel) => {
40
- const existing = await (0, gitlab_1.doGitlabRequest)(io, `projects/${projectId}/labels?search=${encodeURIComponent(pinLabel)}`);
41
- if (existing === null || existing === void 0 ? void 0 : existing.some((label) => label.name === pinLabel)) {
39
+ exports.findMr = findMr;
40
+ const ensureLabelExists = async (io, projectId, name, description) => {
41
+ const existing = await (0, gitlab_1.doGitlabRequest)(io, `projects/${projectId}/labels?search=${encodeURIComponent(name)}`);
42
+ if (existing === null || existing === void 0 ? void 0 : existing.some((label) => label.name === name)) {
42
43
  return;
43
44
  }
44
- await (0, gitlab_1.doGitlabRequest)(io, `projects/${projectId}/labels`, {
45
- name: pinLabel,
46
- color: PIN_LABEL_COLOR,
47
- description: "review apps of this MR are pinned — deploys use auto_stop_in: never (managed by catladder)",
48
- }, "POST");
49
- io.log(`created the '${pinLabel}' label in the project`);
45
+ await (0, gitlab_1.doGitlabRequest)(io, `projects/${projectId}/labels`, { name, color: PIN_LABEL_COLOR, description }, "POST");
46
+ io.log(`created the '${name}' label in the project`);
50
47
  };
48
+ exports.ensureLabelExists = ensureLabelExists;
51
49
  exports.commandMrPin = (0, defineCommand_1.defineCommand)({
52
50
  name: "mr pin",
53
51
  description: "pin the review apps of a merge request (disable their auto-stop) by adding the pin label; merging or closing the MR still stops them",
@@ -69,8 +67,8 @@ exports.commandMrPin = (0, defineCommand_1.defineCommand)({
69
67
  var _a, _b;
70
68
  const pinLabel = await getPinLabel();
71
69
  const { id: projectId } = await (0, gitlab_1.getProjectInfo)(ctx);
72
- const mr = await findMr(ctx, projectId, await ctx.get("mr"));
73
- await ensurePinLabelExists(ctx, projectId, pinLabel);
70
+ const mr = await (0, exports.findMr)(ctx, projectId, await ctx.get("mr"));
71
+ await (0, exports.ensureLabelExists)(ctx, projectId, pinLabel, "review apps of this MR are pinned — deploys use auto_stop_in: never (managed by catladder)");
74
72
  if ((_a = mr.labels) === null || _a === void 0 ? void 0 : _a.includes(pinLabel)) {
75
73
  ctx.log(`already pinned: mr!${mr.iid} carries the '${pinLabel}' label`);
76
74
  }
@@ -106,7 +104,7 @@ exports.commandMrUnpin = (0, defineCommand_1.defineCommand)({
106
104
  var _a;
107
105
  const pinLabel = await getPinLabel();
108
106
  const { id: projectId } = await (0, gitlab_1.getProjectInfo)(ctx);
109
- const mr = await findMr(ctx, projectId, await ctx.get("mr"));
107
+ const mr = await (0, exports.findMr)(ctx, projectId, await ctx.get("mr"));
110
108
  if (!((_a = mr.labels) === null || _a === void 0 ? void 0 : _a.includes(pinLabel))) {
111
109
  ctx.log(`mr!${mr.iid} is not pinned (no '${pinLabel}' label)`);
112
110
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"commandMrPin.js","sourceRoot":"","sources":["../../../../../../src/commands/project/commandMrPin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commandMrPin.js","sourceRoot":"","sources":["../../../../../../src/commands/project/commandMrPin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare const commandMrReviewAppOn: import("../../core").CommandDef<{
2
+ readonly pipeline: {
3
+ readonly type: "boolean";
4
+ readonly message: "trigger a merge-request pipeline so the review apps deploy now";
5
+ readonly required: false;
6
+ };
7
+ readonly mr: {
8
+ readonly type: "number";
9
+ readonly message: "merge request IID (defaults to the open MR of the current branch)";
10
+ readonly positional: true;
11
+ readonly required: false;
12
+ };
13
+ }>;
14
+ export declare const commandMrReviewAppOff: import("../../core").CommandDef<{
15
+ readonly mr: {
16
+ readonly type: "number";
17
+ readonly message: "merge request IID (defaults to the open MR of the current branch)";
18
+ readonly positional: true;
19
+ readonly required: false;
20
+ };
21
+ }>;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.commandMrReviewAppOff = exports.commandMrReviewAppOn = void 0;
4
+ const pipeline_1 = require("../../../../../packages/pipeline/src/index.js");
5
+ const getProjectConfig_1 = require("../../config/getProjectConfig");
6
+ const defineCommand_1 = require("../../core/defineCommand");
7
+ const gitlab_1 = require("../../utils/gitlab");
8
+ const commandMrPin_1 = require("./commandMrPin");
9
+ /**
10
+ * the label switch of the project's review apps — errors when the
11
+ * project has none (github, or a policy without labels)
12
+ */
13
+ const getSwitch = async () => {
14
+ const config = await (0, getProjectConfig_1.getProjectConfig)();
15
+ if (!config) {
16
+ throw new Error("no catladder config found");
17
+ }
18
+ const reviewApps = (0, pipeline_1.getReviewAppsConfig)(config);
19
+ const switchLabel = (0, pipeline_1.getReviewAppsSwitchLabel)(reviewApps);
20
+ if (!switchLabel) {
21
+ throw new Error(reviewApps.deploy === "manual"
22
+ ? "review apps deploy on request in this project (reviewApps.deploy: manual) — play the '🚀 deploy review' job of the MR pipeline"
23
+ : "review apps of this project are not switched by label (set reviewApps.deploy to optIn or optOut)");
24
+ }
25
+ if (!(0, pipeline_1.getEnabledPipelineTypes)(config).includes("gitlab")) {
26
+ throw new Error(`this command switches gitlab merge requests — on github, set the label on the pull request instead (gh pr edit --${switchLabel.deployOn === "labeled" ? "add" : "remove"}-label ${switchLabel.label}); the label change deploys by itself`);
27
+ }
28
+ return switchLabel;
29
+ };
30
+ const mrInput = {
31
+ mr: {
32
+ type: "number",
33
+ message: "merge request IID (defaults to the open MR of the current branch)",
34
+ positional: true,
35
+ required: false,
36
+ },
37
+ };
38
+ exports.commandMrReviewAppOn = (0, defineCommand_1.defineCommand)({
39
+ name: "mr review-app-on",
40
+ description: "deploy the review apps of a merge request: switches the reviewApps label on (opt-in: adds it, opt-out: removes the skip label) and triggers a pipeline, since gitlab doesn't start one for label changes",
41
+ group: "mr",
42
+ inputs: {
43
+ ...mrInput,
44
+ pipeline: {
45
+ type: "boolean",
46
+ message: "trigger a merge-request pipeline so the review apps deploy now",
47
+ required: false,
48
+ },
49
+ },
50
+ execute: async (ctx) => {
51
+ var _a, _b;
52
+ const switchLabel = await getSwitch();
53
+ const { id: projectId } = await (0, gitlab_1.getProjectInfo)(ctx);
54
+ const mr = await (0, commandMrPin_1.findMr)(ctx, projectId, await ctx.get("mr"));
55
+ if (switchLabel.deployOn === "labeled") {
56
+ await (0, commandMrPin_1.ensureLabelExists)(ctx, projectId, switchLabel.label, "review apps of this MR deploy (managed by catladder)");
57
+ }
58
+ const hasLabel = (_a = mr.labels) === null || _a === void 0 ? void 0 : _a.includes(switchLabel.label);
59
+ if (hasLabel === (switchLabel.deployOn === "labeled")) {
60
+ ctx.log(`review apps of mr!${mr.iid} are already switched on`);
61
+ }
62
+ else {
63
+ await (0, gitlab_1.doGitlabRequest)(ctx, `projects/${projectId}/merge_requests/${mr.iid}`, switchLabel.deployOn === "labeled"
64
+ ? { add_labels: switchLabel.label }
65
+ : { remove_labels: switchLabel.label }, "PUT");
66
+ ctx.log(`review apps of mr!${mr.iid} "${mr.title}" switched on — label '${switchLabel.label}' ${switchLabel.deployOn === "labeled" ? "added" : "removed"}`);
67
+ }
68
+ if ((_b = (await ctx.get("pipeline"))) !== null && _b !== void 0 ? _b : true) {
69
+ const pipeline = await (0, gitlab_1.doGitlabRequest)(ctx, `projects/${projectId}/merge_requests/${mr.iid}/pipelines`, {}, "POST");
70
+ ctx.log(`🚀 triggered a pipeline that deploys them: ${pipeline.web_url}`);
71
+ }
72
+ else {
73
+ ctx.log("the review apps deploy with the next pipeline of the MR");
74
+ }
75
+ },
76
+ });
77
+ exports.commandMrReviewAppOff = (0, defineCommand_1.defineCommand)({
78
+ name: "mr review-app-off",
79
+ description: "stop deploying the review apps of a merge request: switches the reviewApps label off (opt-in: removes it, opt-out: adds the skip label). Running review apps stay until the MR closes or they auto-stop",
80
+ group: "mr",
81
+ inputs: mrInput,
82
+ execute: async (ctx) => {
83
+ var _a;
84
+ const switchLabel = await getSwitch();
85
+ const { id: projectId } = await (0, gitlab_1.getProjectInfo)(ctx);
86
+ const mr = await (0, commandMrPin_1.findMr)(ctx, projectId, await ctx.get("mr"));
87
+ if (switchLabel.stopOn === "labeled") {
88
+ await (0, commandMrPin_1.ensureLabelExists)(ctx, projectId, switchLabel.label, "review apps of this MR don't deploy (managed by catladder)");
89
+ }
90
+ const hasLabel = (_a = mr.labels) === null || _a === void 0 ? void 0 : _a.includes(switchLabel.label);
91
+ if (hasLabel === (switchLabel.stopOn === "labeled")) {
92
+ ctx.log(`review apps of mr!${mr.iid} are already switched off`);
93
+ return;
94
+ }
95
+ await (0, gitlab_1.doGitlabRequest)(ctx, `projects/${projectId}/merge_requests/${mr.iid}`, switchLabel.stopOn === "labeled"
96
+ ? { add_labels: switchLabel.label }
97
+ : { remove_labels: switchLabel.label }, "PUT");
98
+ ctx.log(`review apps of mr!${mr.iid} switched off — label '${switchLabel.label}' ${switchLabel.stopOn === "labeled" ? "added" : "removed"}`);
99
+ ctx.log("already running review apps stay until the MR is closed or they auto-stop — stop them earlier with the stop job of the MR pipeline");
100
+ },
101
+ });
102
+ //# sourceMappingURL=commandMrReviewApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandMrReviewApp.js","sourceRoot":"","sources":["../../../../../../src/commands/project/commandMrReviewApp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `catci review-app github-guard` — first job of the review deploy
3
+ * workflow, sets the `deploy` step output
4
+ */
5
+ export declare const githubReviewDeployGuardJob: () => Promise<void>;
6
+ /**
7
+ * `catci review-app github-trigger` — last job of the review workflow:
8
+ * dispatches the review deploy workflow when the PR deploys
9
+ */
10
+ export declare const githubReviewDeployTriggerJob: () => Promise<void>;
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.githubReviewDeployTriggerJob = exports.githubReviewDeployGuardJob = void 0;
4
+ /**
5
+ * the review deploy switch on github (see the pipeline's
6
+ * `reviewApps.ts` and `backends/github/reviewDeployWorkflow.ts`).
7
+ *
8
+ * github runs can't pause for a click, so the switch is a workflow of
9
+ * its own, `▶️ catladder deploy review`, holding the review delivery
10
+ * chains (docker → deploy → verify) behind a guard:
11
+ *
12
+ * - `github-trigger` is the last job of the review workflow: once the
13
+ * PR's CI is green it reads the PR fresh (labels, draft) and
14
+ * dispatches the deploy workflow when the policy says it deploys
15
+ * - `github-guard` is the first job of the deploy workflow and decides
16
+ * whether the run deploys (`deploy` step output):
17
+ * - source `manual` (a dispatch by a human or agent): always,
18
+ * provided the PR is open and its CI is green
19
+ * - source `ci` (dispatched by the trigger) and `label` (the switch
20
+ * label changed / a draft was marked ready): when the policy says
21
+ * so — and the CI is green. A label switched on while CI still runs
22
+ * is no deploy here: the trigger picks it up once CI is green.
23
+ */
24
+ const reviewAppsPolicy_1 = require("../../../../packages/pipeline/src/reviewAppsPolicy");
25
+ const fs_1 = require("fs");
26
+ const stepSummary_1 = require("../release/stepSummary");
27
+ /**
28
+ * the generated review deploy workflow. Keep in sync with
29
+ * REVIEW_DEPLOY_WORKFLOW_FILE in
30
+ * packages/pipeline/src/backends/github/reviewDeployWorkflow.ts.
31
+ */
32
+ const GITHUB_REVIEW_DEPLOY_WORKFLOW = "catladder-deploy-review.yml";
33
+ /**
34
+ * the review workflow's aggregate job — its check run says whether the
35
+ * PR's CI is green. Keep in sync with AGGREGATE_CHECK_JOB_NAME in
36
+ * packages/pipeline/src/backends/github/aggregateCheckJob.ts.
37
+ */
38
+ const AGGREGATE_CHECK_NAME = "catladder ✅";
39
+ const requireEnv = (name) => {
40
+ const value = process.env[name];
41
+ if (!value) {
42
+ throw new Error(`${name} is not set`);
43
+ }
44
+ return value;
45
+ };
46
+ const fail = (message) => {
47
+ console.error(message);
48
+ process.exit(1);
49
+ };
50
+ const setStepOutput = (name, value) => {
51
+ const file = process.env.GITHUB_OUTPUT;
52
+ if (file) {
53
+ (0, fs_1.appendFileSync)(file, `${name}=${value}\n`);
54
+ }
55
+ };
56
+ const getReviewAppsConfig = () => JSON.parse(requireEnv("CL_REVIEW_APPS"));
57
+ const githubApi = async (path, init = {}) => {
58
+ var _a;
59
+ const apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : "https://api.github.com";
60
+ const repository = requireEnv("GITHUB_REPOSITORY");
61
+ return fetch(`${apiUrl}/repos/${repository}/${path}`, {
62
+ ...init,
63
+ headers: {
64
+ authorization: `Bearer ${requireEnv("GITHUB_TOKEN")}`,
65
+ accept: "application/vnd.github+json",
66
+ ...init.headers,
67
+ },
68
+ });
69
+ };
70
+ const getPullRequest = async (prNumber) => {
71
+ const response = await githubApi(`pulls/${prNumber}`);
72
+ if (!response.ok) {
73
+ throw new Error(`reading pull request #${prNumber} failed: ${response.status} ${await response.text()}`);
74
+ }
75
+ return (await response.json());
76
+ };
77
+ /**
78
+ * the newest `catladder ✅` check run of a commit — null while the
79
+ * review workflow hasn't reported yet
80
+ */
81
+ const getAggregateCheck = async (sha) => {
82
+ var _a;
83
+ const response = await githubApi(`commits/${sha}/check-runs?check_name=${encodeURIComponent(AGGREGATE_CHECK_NAME)}&filter=latest`);
84
+ if (!response.ok) {
85
+ throw new Error(`reading the checks of ${sha} failed: ${response.status} ${await response.text()}`);
86
+ }
87
+ const data = (await response.json());
88
+ const [newest] = [...((_a = data.check_runs) !== null && _a !== void 0 ? _a : [])].sort((a, b) => b.id - a.id);
89
+ return newest !== null && newest !== void 0 ? newest : null;
90
+ };
91
+ const short = (sha) => sha.slice(0, 7);
92
+ const mrState = (pr) => ({
93
+ labels: pr.labels.map((label) => label.name),
94
+ draft: pr.draft,
95
+ });
96
+ /**
97
+ * `catci review-app github-guard` — first job of the review deploy
98
+ * workflow, sets the `deploy` step output
99
+ */
100
+ const githubReviewDeployGuardJob = async () => {
101
+ const config = getReviewAppsConfig();
102
+ const prNumber = requireEnv("CL_PR_NUMBER");
103
+ const source = process.env.CL_DEPLOY_SOURCE || "manual";
104
+ const headSha = requireEnv("CL_HEAD_SHA");
105
+ const explicit = source === "manual";
106
+ const skip = (message) => {
107
+ console.log(`not deploying: ${message}`);
108
+ (0, stepSummary_1.appendStepSummary)(`⏭️ **Not deploying** the review apps: ${message}`);
109
+ setStepOutput("deploy", "false");
110
+ };
111
+ // an explicit request that can't be served is an error, an automatic
112
+ // one simply doesn't deploy
113
+ const refuse = (message) => {
114
+ if (explicit) {
115
+ (0, stepSummary_1.appendStepSummary)(`❌ **Can't deploy** the review apps: ${message}`);
116
+ setStepOutput("deploy", "false");
117
+ fail(`can't deploy the review apps: ${message}`);
118
+ }
119
+ skip(message);
120
+ };
121
+ const pr = await getPullRequest(prNumber);
122
+ if (pr.state !== "open") {
123
+ return refuse(`pull request #${pr.number} is ${pr.state}`);
124
+ }
125
+ let reason = "requested explicitly";
126
+ if (!explicit) {
127
+ const decision = (0, reviewAppsPolicy_1.shouldAutoDeployReviewApps)(config, mrState(pr));
128
+ if (!decision.deploy) {
129
+ return skip(decision.reason);
130
+ }
131
+ reason = decision.reason;
132
+ }
133
+ if (pr.head.sha !== headSha) {
134
+ return refuse(explicit
135
+ ? `this run is for ${short(headSha)}, but #${pr.number}'s head is ${short(pr.head.sha)} — dispatch the workflow from the pull request's branch ('${pr.head.ref}')`
136
+ : `#${pr.number} moved on to ${short(pr.head.sha)} — its own review run decides`);
137
+ }
138
+ const check = await getAggregateCheck(headSha);
139
+ if (!check || check.status !== "completed") {
140
+ return refuse(`the CI of ${short(headSha)} (${AGGREGATE_CHECK_NAME}) is not finished yet` +
141
+ (explicit
142
+ ? " — dispatch again once it is green"
143
+ : " — the review workflow starts the deploy once it is green"));
144
+ }
145
+ if (check.conclusion !== "success") {
146
+ return refuse(`the CI of ${short(headSha)} (${AGGREGATE_CHECK_NAME}) concluded '${check.conclusion}'`);
147
+ }
148
+ console.log(`deploying the review apps of #${pr.number} (${short(headSha)}): ${reason}`);
149
+ (0, stepSummary_1.appendStepSummary)(`🚀 **Deploying** the review apps of #${pr.number} (\`${short(headSha)}\`): ${reason}.`);
150
+ setStepOutput("deploy", "true");
151
+ };
152
+ exports.githubReviewDeployGuardJob = githubReviewDeployGuardJob;
153
+ /**
154
+ * `catci review-app github-trigger` — last job of the review workflow:
155
+ * dispatches the review deploy workflow when the PR deploys
156
+ */
157
+ const githubReviewDeployTriggerJob = async () => {
158
+ const config = getReviewAppsConfig();
159
+ const prNumber = requireEnv("CL_PR_NUMBER");
160
+ const headRef = requireEnv("CL_HEAD_REF");
161
+ const headSha = requireEnv("CL_HEAD_SHA");
162
+ const pr = await getPullRequest(prNumber);
163
+ if (pr.head.sha !== headSha) {
164
+ console.log(`#${pr.number} moved on to ${short(pr.head.sha)} — its own review run decides`);
165
+ return;
166
+ }
167
+ const decision = (0, reviewAppsPolicy_1.shouldAutoDeployReviewApps)(config, mrState(pr));
168
+ if (!decision.deploy) {
169
+ console.log(`not deploying the review apps: ${decision.reason}`);
170
+ (0, stepSummary_1.appendStepSummary)(`⏭️ Review apps not deployed: ${decision.reason}. ` +
171
+ `Deploy anyway: \`gh workflow run ${GITHUB_REVIEW_DEPLOY_WORKFLOW} --ref ${headRef} -f pr=${pr.number}\``);
172
+ return;
173
+ }
174
+ const response = await githubApi(`actions/workflows/${GITHUB_REVIEW_DEPLOY_WORKFLOW}/dispatches`, {
175
+ method: "POST",
176
+ headers: { "content-type": "application/json" },
177
+ body: JSON.stringify({
178
+ ref: headRef,
179
+ inputs: { pr: String(pr.number), source: "ci" },
180
+ }),
181
+ });
182
+ if (response.status === 404) {
183
+ // github only dispatches workflows that exist on the default branch
184
+ const message = `the ${GITHUB_REVIEW_DEPLOY_WORKFLOW} workflow is not on the default branch yet — review apps deploy automatically once this change is merged`;
185
+ console.log(`::warning::${message}`);
186
+ (0, stepSummary_1.appendStepSummary)(`⚠️ ${message}`);
187
+ return;
188
+ }
189
+ if (!response.ok) {
190
+ fail(`dispatching ${GITHUB_REVIEW_DEPLOY_WORKFLOW} failed: ${response.status} ${await response.text()}`);
191
+ }
192
+ console.log(`review deploy dispatched for #${pr.number} (${short(headSha)}): ${decision.reason}`);
193
+ (0, stepSummary_1.appendStepSummary)(`▶️ **Review deploy started** for #${pr.number} (\`${short(headSha)}\`): ${decision.reason} — see ${(0, stepSummary_1.workflowLink)(GITHUB_REVIEW_DEPLOY_WORKFLOW, "catladder deploy review")}.`);
194
+ };
195
+ exports.githubReviewDeployTriggerJob = githubReviewDeployTriggerJob;
196
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../../src/reviewApps/github.ts"],"names":[],"mappings":"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"}