rampway 0.2.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.
Files changed (143) hide show
  1. package/README.md +183 -0
  2. package/build/src/cli.d.ts +3 -0
  3. package/build/src/cli.d.ts.map +1 -0
  4. package/build/src/cli.js +104 -0
  5. package/build/src/cli.js.map +1 -0
  6. package/build/src/commands/context.d.ts +12 -0
  7. package/build/src/commands/context.d.ts.map +1 -0
  8. package/build/src/commands/context.js +16 -0
  9. package/build/src/commands/context.js.map +1 -0
  10. package/build/src/commands/deploy.d.ts +6 -0
  11. package/build/src/commands/deploy.d.ts.map +1 -0
  12. package/build/src/commands/deploy.js +14 -0
  13. package/build/src/commands/deploy.js.map +1 -0
  14. package/build/src/commands/doctor.d.ts +14 -0
  15. package/build/src/commands/doctor.d.ts.map +1 -0
  16. package/build/src/commands/doctor.js +54 -0
  17. package/build/src/commands/doctor.js.map +1 -0
  18. package/build/src/commands/init.d.ts +8 -0
  19. package/build/src/commands/init.d.ts.map +1 -0
  20. package/build/src/commands/init.js +42 -0
  21. package/build/src/commands/init.js.map +1 -0
  22. package/build/src/commands/plan.d.ts +6 -0
  23. package/build/src/commands/plan.d.ts.map +1 -0
  24. package/build/src/commands/plan.js +24 -0
  25. package/build/src/commands/plan.js.map +1 -0
  26. package/build/src/commands/releases.d.ts +27 -0
  27. package/build/src/commands/releases.d.ts.map +1 -0
  28. package/build/src/commands/releases.js +91 -0
  29. package/build/src/commands/releases.js.map +1 -0
  30. package/build/src/commands/rollback.d.ts +6 -0
  31. package/build/src/commands/rollback.d.ts.map +1 -0
  32. package/build/src/commands/rollback.js +12 -0
  33. package/build/src/commands/rollback.js.map +1 -0
  34. package/build/src/commands/rollbridge.d.ts +21 -0
  35. package/build/src/commands/rollbridge.d.ts.map +1 -0
  36. package/build/src/commands/rollbridge.js +69 -0
  37. package/build/src/commands/rollbridge.js.map +1 -0
  38. package/build/src/commands/validate.d.ts +6 -0
  39. package/build/src/commands/validate.d.ts.map +1 -0
  40. package/build/src/commands/validate.js +12 -0
  41. package/build/src/commands/validate.js.map +1 -0
  42. package/build/src/config/load-config.d.ts +10 -0
  43. package/build/src/config/load-config.d.ts.map +1 -0
  44. package/build/src/config/load-config.js +71 -0
  45. package/build/src/config/load-config.js.map +1 -0
  46. package/build/src/config/validate-config.d.ts +7 -0
  47. package/build/src/config/validate-config.d.ts.map +1 -0
  48. package/build/src/config/validate-config.js +117 -0
  49. package/build/src/config/validate-config.js.map +1 -0
  50. package/build/src/core/deploy-runner.d.ts +46 -0
  51. package/build/src/core/deploy-runner.d.ts.map +1 -0
  52. package/build/src/core/deploy-runner.js +221 -0
  53. package/build/src/core/deploy-runner.js.map +1 -0
  54. package/build/src/core/expo-web-artifacts.d.ts +10 -0
  55. package/build/src/core/expo-web-artifacts.d.ts.map +1 -0
  56. package/build/src/core/expo-web-artifacts.js +16 -0
  57. package/build/src/core/expo-web-artifacts.js.map +1 -0
  58. package/build/src/core/git-source.d.ts +22 -0
  59. package/build/src/core/git-source.d.ts.map +1 -0
  60. package/build/src/core/git-source.js +63 -0
  61. package/build/src/core/git-source.js.map +1 -0
  62. package/build/src/core/health-checks.d.ts +8 -0
  63. package/build/src/core/health-checks.d.ts.map +1 -0
  64. package/build/src/core/health-checks.js +19 -0
  65. package/build/src/core/health-checks.js.map +1 -0
  66. package/build/src/core/hooks.d.ts +12 -0
  67. package/build/src/core/hooks.d.ts.map +1 -0
  68. package/build/src/core/hooks.js +26 -0
  69. package/build/src/core/hooks.js.map +1 -0
  70. package/build/src/core/locks.d.ts +16 -0
  71. package/build/src/core/locks.d.ts.map +1 -0
  72. package/build/src/core/locks.js +32 -0
  73. package/build/src/core/locks.js.map +1 -0
  74. package/build/src/core/node-package-tasks.d.ts +26 -0
  75. package/build/src/core/node-package-tasks.d.ts.map +1 -0
  76. package/build/src/core/node-package-tasks.js +143 -0
  77. package/build/src/core/node-package-tasks.js.map +1 -0
  78. package/build/src/core/path-change-gate.d.ts +15 -0
  79. package/build/src/core/path-change-gate.d.ts.map +1 -0
  80. package/build/src/core/path-change-gate.js +95 -0
  81. package/build/src/core/path-change-gate.js.map +1 -0
  82. package/build/src/core/paths.d.ts +7 -0
  83. package/build/src/core/paths.d.ts.map +1 -0
  84. package/build/src/core/paths.js +20 -0
  85. package/build/src/core/paths.js.map +1 -0
  86. package/build/src/core/redaction.d.ts +22 -0
  87. package/build/src/core/redaction.d.ts.map +1 -0
  88. package/build/src/core/redaction.js +39 -0
  89. package/build/src/core/redaction.js.map +1 -0
  90. package/build/src/core/release-id.d.ts +6 -0
  91. package/build/src/core/release-id.d.ts.map +1 -0
  92. package/build/src/core/release-id.js +20 -0
  93. package/build/src/core/release-id.js.map +1 -0
  94. package/build/src/core/release-manager.d.ts +49 -0
  95. package/build/src/core/release-manager.d.ts.map +1 -0
  96. package/build/src/core/release-manager.js +115 -0
  97. package/build/src/core/release-manager.js.map +1 -0
  98. package/build/src/core/task-runner.d.ts +38 -0
  99. package/build/src/core/task-runner.d.ts.map +1 -0
  100. package/build/src/core/task-runner.js +102 -0
  101. package/build/src/core/task-runner.js.map +1 -0
  102. package/build/src/core/velocious-migrate.d.ts +11 -0
  103. package/build/src/core/velocious-migrate.d.ts.map +1 -0
  104. package/build/src/core/velocious-migrate.js +20 -0
  105. package/build/src/core/velocious-migrate.js.map +1 -0
  106. package/build/src/runtimes/index.d.ts +56 -0
  107. package/build/src/runtimes/index.d.ts.map +1 -0
  108. package/build/src/runtimes/index.js +132 -0
  109. package/build/src/runtimes/index.js.map +1 -0
  110. package/build/src/runtimes/none-runtime.d.ts +22 -0
  111. package/build/src/runtimes/none-runtime.d.ts.map +1 -0
  112. package/build/src/runtimes/none-runtime.js +23 -0
  113. package/build/src/runtimes/none-runtime.js.map +1 -0
  114. package/build/src/runtimes/rollbridge-runtime.d.ts +137 -0
  115. package/build/src/runtimes/rollbridge-runtime.d.ts.map +1 -0
  116. package/build/src/runtimes/rollbridge-runtime.js +224 -0
  117. package/build/src/runtimes/rollbridge-runtime.js.map +1 -0
  118. package/build/src/tasks.d.ts +5 -0
  119. package/build/src/tasks.d.ts.map +1 -0
  120. package/build/src/tasks.js +5 -0
  121. package/build/src/tasks.js.map +1 -0
  122. package/build/src/test-helpers.d.ts +25 -0
  123. package/build/src/test-helpers.d.ts.map +1 -0
  124. package/build/src/test-helpers.js +40 -0
  125. package/build/src/test-helpers.js.map +1 -0
  126. package/build/src/transports/local-transport.d.ts +67 -0
  127. package/build/src/transports/local-transport.d.ts.map +1 -0
  128. package/build/src/transports/local-transport.js +121 -0
  129. package/build/src/transports/local-transport.js.map +1 -0
  130. package/build/src/transports/ssh-transport.d.ts +189 -0
  131. package/build/src/transports/ssh-transport.d.ts.map +1 -0
  132. package/build/src/transports/ssh-transport.js +369 -0
  133. package/build/src/transports/ssh-transport.js.map +1 -0
  134. package/build/src/types.d.ts +290 -0
  135. package/build/src/types.d.ts.map +1 -0
  136. package/build/src/types.js +8 -0
  137. package/build/src/types.js.map +1 -0
  138. package/docs/config-reference.md +264 -0
  139. package/docs/migration-from-capistrano.md +167 -0
  140. package/docs/roadmap.md +27 -0
  141. package/examples/local/rampway.config.mjs +20 -0
  142. package/examples/monorepo/rampway.config.mjs +73 -0
  143. package/package.json +92 -0
@@ -0,0 +1,221 @@
1
+ import path from "node:path";
2
+ import os from "node:os";
3
+ import { releaseIdFromDate } from "./release-id.js";
4
+ import { deployPaths } from "./paths.js";
5
+ import { acquireLock, releaseLock } from "./locks.js";
6
+ import { ensureBaseDirs, prepareSharedLinks, publishCurrent, cleanupReleases, currentReleaseId, previousRelease } from "./release-manager.js";
7
+ import { runTasks } from "./task-runner.js";
8
+ import { runHealthChecks } from "./health-checks.js";
9
+ import { runHooks } from "./hooks.js";
10
+ import { runtimeFor } from "../runtimes/index.js";
11
+ import { prepareRemoteGitSource, remoteGitRepoLabel } from "./git-source.js";
12
+ const IMPLEMENTED_STRATEGIES = new Set(["local-copy", "remote-git"]);
13
+ /**
14
+ * @param {import('#types').StageConfig} stage
15
+ * @param {{revision?: string, releaseId?: string}} [opts]
16
+ * @returns {string[]}
17
+ */
18
+ export function createDeployPlan(stage, { revision = stage.revision ?? stage.branch, releaseId = "<timestamp>" } = {}) {
19
+ return createDeployPlanDetails(stage, { revision, releaseId }).map(step => step.detail);
20
+ }
21
+ /**
22
+ * @param {import('#types').StageConfig} stage
23
+ * @param {{revision?: string, releaseId?: string}} [opts]
24
+ * @returns {import('#types').DeployPlanStep[]}
25
+ */
26
+ export function createDeployPlanDetails(stage, { revision = stage.revision ?? stage.branch, releaseId = "<timestamp>" } = {}) {
27
+ const runtime = runtimeFor(stage);
28
+ const sourceDetail = sourcePlanDetail(stage, revision);
29
+ return [
30
+ { phase: "transport", action: "connect", detail: "connect transport" },
31
+ { phase: "lock", action: "acquire", detail: "acquire deploy lock" },
32
+ { phase: "release", action: "create", detail: `create release dir releases/${releaseId}` },
33
+ { phase: "source", action: sourceDetail.action, detail: sourceDetail.detail },
34
+ { phase: "shared", action: "link", detail: "link shared files and directories" },
35
+ ...Object.keys(stage.tasks).map(name => ({ phase: "task", action: "run", name, detail: `run task group ${name}` })),
36
+ ...runtime.plan().map(detail => ({ phase: "runtime", action: "run", detail })),
37
+ ...stage.healthChecks.map(check => ({ phase: "health", action: "check", name: check.name ?? check.path ?? check.command, detail: `health check ${check.name ?? check.path ?? check.command}` })),
38
+ { phase: "publish", action: "symlink", detail: "publish current symlink" },
39
+ { phase: "cleanup", action: "prune", detail: `cleanup old releases keeping ${stage.keepReleases}` },
40
+ { phase: "lock", action: "release", detail: "release deploy lock" }
41
+ ];
42
+ }
43
+ /**
44
+ * @param {import('#types').StageConfig} stage
45
+ * @param {string} revision
46
+ * @returns {{action: string, detail: string}}
47
+ */
48
+ function sourcePlanDetail(stage, revision) {
49
+ if (stage.strategy === "local-copy")
50
+ return { action: "copy", detail: "copy local source into release" };
51
+ if (stage.strategy === "remote-git")
52
+ return { action: "checkout", detail: `git checkout ${revision} from ${remoteGitRepoLabel(stage.repo)}` };
53
+ return { action: "create", detail: "create empty release directory" };
54
+ }
55
+ /**
56
+ * @param {import('#types').DeployOptions} opts
57
+ * @returns {Promise<import('#types').DeployReport|{plan: string[]}>}
58
+ */
59
+ export async function deploy({ transport, stage, sourcePath = process.cwd(), revision, branch = stage.branch, dryRun = false, releaseId = releaseIdFromDate(), force = false }) {
60
+ const releaseRevision = /** @type {string} */ (revision ?? stage.revision ?? (branch ?? stage.branch));
61
+ if (dryRun)
62
+ return { plan: createDeployPlan(stage, { revision: releaseRevision, releaseId }) };
63
+ if (!IMPLEMENTED_STRATEGIES.has(stage.strategy))
64
+ throw new Error(`Deploy strategy '${stage.strategy}' is not implemented yet; refusing to publish an empty remote release.`);
65
+ const resolvedStage = { ...stage, revision: revision ?? stage.revision, branch };
66
+ const paths = deployPaths(stage, releaseId);
67
+ /** @type {string} */
68
+ const releasePath = /** @type {string} */ (paths.releasePath);
69
+ const startedAt = new Date();
70
+ let published = false;
71
+ let releaseCreated = false;
72
+ await runHooks(transport, stage, null, "before_deploy");
73
+ await ensureBaseDirs(transport, stage);
74
+ await runHooks(transport, stage, null, "before_lock");
75
+ await acquireLock(transport, stage, { force });
76
+ await runHooks(transport, stage, null, "after_lock");
77
+ try {
78
+ if (await transport.exists(releasePath))
79
+ throw new Error(`Release already exists: ${releasePath}`);
80
+ await runHooks(transport, stage, null, "before_source");
81
+ if (stage.strategy === "local-copy") {
82
+ await transport.copyDir(sourcePath, releasePath);
83
+ }
84
+ else if (resolvedStage.strategy === "remote-git") {
85
+ await prepareRemoteGitSource(transport, resolvedStage, releasePath);
86
+ }
87
+ else {
88
+ await transport.mkdirp(releasePath);
89
+ }
90
+ releaseCreated = true;
91
+ await runHooks(transport, stage, releasePath, "after_source");
92
+ await prepareSharedLinks(transport, stage, releasePath);
93
+ await writeMetadata(transport, stage, { releaseId, revision: releaseRevision, branch, releasePath });
94
+ const previousReleasePath = await resolveCurrentReleasePath(transport, paths.currentPath);
95
+ await runHooks(transport, stage, releasePath, "before_tasks", { previousReleasePath });
96
+ await runTasks(transport, stage, releasePath, { previousReleasePath });
97
+ await runHooks(transport, stage, releasePath, "after_tasks", { previousReleasePath });
98
+ await runHooks(transport, stage, releasePath, "before_runtime", { previousReleasePath });
99
+ const runtimeResult = await runtimeFor(stage).deploy(transport, { releasePath, currentPath: paths.currentPath, releaseId, revision: releaseRevision });
100
+ await runHooks(transport, stage, releasePath, "after_runtime", { previousReleasePath });
101
+ await runHooks(transport, stage, releasePath, "before_health", { previousReleasePath });
102
+ await runHealthChecks(transport, stage.healthChecks, releasePath);
103
+ await runHooks(transport, stage, releasePath, "after_health", { previousReleasePath });
104
+ const previous = await currentReleaseId(transport, stage);
105
+ await runHooks(transport, stage, releasePath, "before_publish", { previousReleasePath });
106
+ await publishCurrent(transport, stage, releasePath);
107
+ published = true;
108
+ await runHooks(transport, stage, releasePath, "after_publish", { previousReleasePath });
109
+ await runHooks(transport, stage, releasePath, "before_cleanup", { previousReleasePath });
110
+ const removed = await cleanupReleases(transport, stage);
111
+ await runHooks(transport, stage, releasePath, "after_cleanup", { previousReleasePath });
112
+ const report = { application: stage.application, stage: stage.stageName, releaseId, revision: releaseRevision, branch, deployedAt: new Date().toISOString(), event: "deploy", durationMs: Date.now() - startedAt.getTime(), previousRelease: previous ?? undefined, healthChecks: "passed", runtime: runtimeResult, cleanupRemoved: removed };
113
+ await appendReport(transport, stage, report);
114
+ return report;
115
+ }
116
+ catch (error) {
117
+ const err = /** @type {Error} */ (error);
118
+ err.message = deployFailureMessage({ error: err, published, releaseCreated, stage, releaseId });
119
+ throw err;
120
+ }
121
+ finally {
122
+ await releaseLock(transport, stage);
123
+ }
124
+ }
125
+ /**
126
+ * @param {{transport: import('#types').Transport, stage: import('#types').StageConfig, to?: string}} opts
127
+ * @returns {Promise<import('#types').RollbackReport>}
128
+ */
129
+ export async function rollback({ transport, stage, to }) {
130
+ await ensureBaseDirs(transport, stage);
131
+ await acquireLock(transport, stage);
132
+ try {
133
+ const target = to ?? await previousRelease(transport, stage);
134
+ if (!target)
135
+ throw new Error("No previous release available for rollback.");
136
+ const targetPath = path.join(deployPaths(stage).releasesPath, target);
137
+ if (!await transport.exists(targetPath))
138
+ throw new Error(`Rollback target does not exist: ${target}`);
139
+ const previous = await currentReleaseId(transport, stage);
140
+ await publishCurrent(transport, stage, targetPath);
141
+ const report = { application: stage.application, stage: stage.stageName, releaseId: target, rolledBackAt: new Date().toISOString(), previousRelease: previous ?? undefined, event: "rollback" };
142
+ await appendReport(transport, stage, report);
143
+ return report;
144
+ }
145
+ finally {
146
+ await releaseLock(transport, stage);
147
+ }
148
+ }
149
+ /**
150
+ * @param {{error: Error, published: boolean, releaseCreated?: boolean, stage: import('#types').StageConfig, releaseId: string}} opts
151
+ * @returns {string}
152
+ */
153
+ export function deployFailureMessage({ error, published, releaseCreated = false, stage, releaseId }) {
154
+ const beforePublishHints = [
155
+ `- Fix the failure and rerun: rampway deploy ${stage.stageName}`,
156
+ releaseCreated ? `- The failed release directory can be removed after inspection: ${path.join(deployPaths(stage).releasesPath, releaseId)}` : "- Do not remove an existing release directory unless you have confirmed it is not current or needed for rollback.",
157
+ "- If a stale deploy lock remains after verification, rerun with --force."
158
+ ];
159
+ const afterPublishHints = [
160
+ `- Inspect deployed state with: rampway status ${stage.stageName}`,
161
+ `- Inspect release history with: rampway releases ${stage.stageName}`,
162
+ `- Roll back if needed: rampway rollback ${stage.stageName}`
163
+ ];
164
+ const lines = [
165
+ `Deploy failed ${published ? "after" : "before"} publish for ${stage.application}/${stage.stageName} release ${releaseId}.`,
166
+ published ? "Current may have changed." : "Current release was not changed.",
167
+ error.message,
168
+ "Recovery hints:",
169
+ ...(published ? afterPublishHints : beforePublishHints)
170
+ ];
171
+ return lines.join("\n");
172
+ }
173
+ /**
174
+ * @param {import('#types').Transport} transport
175
+ * @param {import('#types').StageConfig} stage
176
+ * @param {{releaseId: string, revision: string, branch: string, releasePath: string}} opts
177
+ * @returns {Promise<void>}
178
+ */
179
+ async function writeMetadata(transport, stage, { releaseId, revision, branch, releasePath }) {
180
+ await transport.writeFile(path.join(releasePath, "REVISION"), `${revision}
181
+ `);
182
+ await transport.writeFile(path.join(releasePath, "RAMPWAY_RELEASE.json"), JSON.stringify({
183
+ application: stage.application,
184
+ stage: stage.stageName,
185
+ releaseId,
186
+ revision,
187
+ branch,
188
+ deployedAt: new Date().toISOString(),
189
+ deployedBy: process.env.USER ?? os.userInfo().username,
190
+ host: os.hostname(),
191
+ rampwayVersion: "0.1.0"
192
+ }, null, 2));
193
+ }
194
+ /**
195
+ * @param {import('#types').Transport} transport
196
+ * @param {import('#types').StageConfig} stage
197
+ * @param {import('#types').DeployReport|import('#types').RollbackReport} report
198
+ * @returns {Promise<void>}
199
+ */
200
+ async function appendReport(transport, stage, report) {
201
+ const reportPath = deployPaths(stage).reportPath;
202
+ let existing = "";
203
+ if (await transport.exists(reportPath))
204
+ existing = await transport.readFile(reportPath);
205
+ await transport.writeFile(reportPath, `${existing}${JSON.stringify(report)}\n`);
206
+ }
207
+ /**
208
+ * @param {import('#types').Transport} transport
209
+ * @param {string} currentPath
210
+ * @returns {Promise<string|null>}
211
+ */
212
+ async function resolveCurrentReleasePath(transport, currentPath) {
213
+ try {
214
+ const target = await transport.readlink(currentPath);
215
+ return target.startsWith("/") ? target : path.join(path.dirname(currentPath), target);
216
+ }
217
+ catch {
218
+ return null;
219
+ }
220
+ }
221
+ //# sourceMappingURL=deploy-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-runner.js","sourceRoot":"","sources":["../../../src/core/deploy-runner.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @param {{dir?: string, cwd?: string, optional?: boolean}} [options]
3
+ * @returns {import('#types').TaskEntry}
4
+ */
5
+ export function checkExpoWebArtifacts(options?: {
6
+ dir?: string;
7
+ cwd?: string;
8
+ optional?: boolean;
9
+ }): import("#types").TaskEntry;
10
+ //# sourceMappingURL=expo-web-artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expo-web-artifacts.d.ts","sourceRoot":"","sources":["../../../src/core/expo-web-artifacts.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,gDAHW;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAC,GAC9C,OAAO,QAAQ,EAAE,SAAS,CAYtC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @param {{dir?: string, cwd?: string, optional?: boolean}} [options]
3
+ * @returns {import('#types').TaskEntry}
4
+ */
5
+ export function checkExpoWebArtifacts(options = {}) {
6
+ if (options.dir !== undefined && (typeof options.dir !== "string" || options.dir.length === 0)) {
7
+ throw new Error("dir must be a non-empty string");
8
+ }
9
+ const dir = options.dir || "dist";
10
+ return {
11
+ command: `test -f "${dir}/index.html"`,
12
+ ...(options.cwd ? { cwd: options.cwd } : {}),
13
+ ...(options.optional === true ? { optional: true } : {})
14
+ };
15
+ }
16
+ //# sourceMappingURL=expo-web-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expo-web-artifacts.js","sourceRoot":"","sources":["../../../src/core/expo-web-artifacts.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAO,GAAG,EAAE;IAChD,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAA;IACjC,OAAO;QACL,OAAO,EAAE,YAAY,GAAG,cAAc;QACtC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAA;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @param {import('#types').Transport} transport
3
+ * @param {import('#types').StageConfig} stage
4
+ * @param {string} releasePath
5
+ * @returns {Promise<{repo: string, revision: string, branch: string}>}
6
+ */
7
+ export function prepareRemoteGitSource(transport: import("#types").Transport, stage: import("#types").StageConfig, releasePath: string): Promise<{
8
+ repo: string;
9
+ revision: string;
10
+ branch: string;
11
+ }>;
12
+ /**
13
+ * @param {unknown} value
14
+ * @returns {boolean}
15
+ */
16
+ export function isGitRevision(value: unknown): boolean;
17
+ /**
18
+ * @param {unknown} repo
19
+ * @returns {string}
20
+ */
21
+ export function remoteGitRepoLabel(repo: unknown): string;
22
+ //# sourceMappingURL=git-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-source.d.ts","sourceRoot":"","sources":["../../../src/core/git-source.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,kDALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,eAC5B,MAAM,GACJ,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,CAgCrE;AAED;;;GAGG;AACH,qCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;GAGG;AACH,yCAHW,OAAO,GACL,MAAM,CAIlB"}
@@ -0,0 +1,63 @@
1
+ import path from "node:path";
2
+ import { randomUUID } from "node:crypto";
3
+ import { releaseIdFromDate } from "./release-id.js";
4
+ import { shellQuote } from "../transports/ssh-transport.js";
5
+ const GIT_REVISION_PATTERN = /^[0-9a-f]{7,64}$/iu;
6
+ /**
7
+ * @param {import('#types').Transport} transport
8
+ * @param {import('#types').StageConfig} stage
9
+ * @param {string} releasePath
10
+ * @returns {Promise<{repo: string, revision: string, branch: string}>}
11
+ */
12
+ export async function prepareRemoteGitSource(transport, stage, releasePath) {
13
+ const repo = /** @type {string} */ (stage.repo);
14
+ const branch = stage.branch ?? "master";
15
+ if (stage.revision && !isGitRevision(stage.revision))
16
+ throw new Error("stage.revision must be a Git commit SHA");
17
+ const revision = /** @type {string} */ (stage.revision ?? branch);
18
+ try {
19
+ const tmpCheckout = path.join(path.dirname(releasePath), `.git-checkout-${releaseIdFromDate()}-${randomUUID()}`);
20
+ try {
21
+ if (stage.revision) {
22
+ await transport.run(`git init ${shellQuote(tmpCheckout)}`);
23
+ await transport.run(`git -C ${shellQuote(tmpCheckout)} remote add origin ${shellQuote(repo)}`);
24
+ await transport.run(`git -C ${shellQuote(tmpCheckout)} fetch --depth 1 origin ${shellQuote(revision)}`);
25
+ await transport.run(`git -C ${shellQuote(tmpCheckout)} checkout FETCH_HEAD`);
26
+ }
27
+ else {
28
+ await transport.run(`git clone --depth 1 --branch ${shellQuote(branch)} ${shellQuote(repo)} ${shellQuote(tmpCheckout)}`);
29
+ }
30
+ await transport.rm(path.join(tmpCheckout, ".git"));
31
+ await transport.mkdirp(path.dirname(releasePath));
32
+ await transport.rename(tmpCheckout, releasePath);
33
+ }
34
+ catch (error) {
35
+ try {
36
+ await transport.rm(tmpCheckout);
37
+ }
38
+ catch { /* cleanup did not need the checkout */ }
39
+ throw error;
40
+ }
41
+ return { repo, revision, branch };
42
+ }
43
+ catch (error) {
44
+ const err = /** @type {Error} */ (error);
45
+ const cleaned = remoteGitRepoLabel(err.message.replace(/[\r\n]+.*$/s, "").trim());
46
+ throw new Error(`Failed to prepare remote-git source from ${remoteGitRepoLabel(repo)} at ${revision} (branch ${branch}): ${cleaned}`, { cause: err });
47
+ }
48
+ }
49
+ /**
50
+ * @param {unknown} value
51
+ * @returns {boolean}
52
+ */
53
+ export function isGitRevision(value) {
54
+ return typeof value === "string" && GIT_REVISION_PATTERN.test(value);
55
+ }
56
+ /**
57
+ * @param {unknown} repo
58
+ * @returns {string}
59
+ */
60
+ export function remoteGitRepoLabel(repo) {
61
+ return String(repo).replace(/(https?:\/\/)[^/@\s]+@/i, "$1[REDACTED]@");
62
+ }
63
+ //# sourceMappingURL=git-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-source.js","sourceRoot":"","sources":["../../../src/core/git-source.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @param {import('#types').Transport} transport
3
+ * @param {import('#types').HealthCheckEntry[]} checks
4
+ * @param {string} releasePath
5
+ * @returns {Promise<void>}
6
+ */
7
+ export function runHealthChecks(transport: import("#types").Transport, checks: import("#types").HealthCheckEntry[], releasePath: string): Promise<void>;
8
+ //# sourceMappingURL=health-checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-checks.d.ts","sourceRoot":"","sources":["../../../src/core/health-checks.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,2CALW,OAAO,QAAQ,EAAE,SAAS,UAC1B,OAAO,QAAQ,EAAE,gBAAgB,EAAE,eACnC,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAWzB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @param {import('#types').Transport} transport
3
+ * @param {import('#types').HealthCheckEntry[]} checks
4
+ * @param {string} releasePath
5
+ * @returns {Promise<void>}
6
+ */
7
+ export async function runHealthChecks(transport, checks, releasePath) {
8
+ for (const check of checks) {
9
+ if (check.path) {
10
+ const target = `${releasePath}/${check.path}`;
11
+ if (!await transport.exists(target))
12
+ throw new Error(`Health check '${check.name ?? check.path}' failed: missing ${target}`);
13
+ }
14
+ else if (check.command) {
15
+ await transport.run(check.command, { cwd: releasePath });
16
+ }
17
+ }
18
+ }
19
+ //# sourceMappingURL=health-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-checks.js","sourceRoot":"","sources":["../../../src/core/health-checks.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW;IAClE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,GAAG,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;YAC7C,IAAI,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,qBAAqB,MAAM,EAAE,CAAC,CAAA;QAC9H,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,GAAG,EAAE,WAAW,EAAC,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @param {import('#types').Transport} transport
3
+ * @param {import('#types').StageConfig} stage
4
+ * @param {string|null} releasePath
5
+ * @param {string} hookName
6
+ * @param {{previousReleasePath?: string|null}} [opts]
7
+ * @returns {Promise<import('#types').TaskResult[]>}
8
+ */
9
+ export function runHooks(transport: import("#types").Transport, stage: import("#types").StageConfig, releasePath: string | null, hookName: string, { previousReleasePath }?: {
10
+ previousReleasePath?: string | null;
11
+ }): Promise<import("#types").TaskResult[]>;
12
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/core/hooks.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,oCAPW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,eAC5B,MAAM,GAAC,IAAI,YACX,MAAM,4BACN;IAAC,mBAAmB,CAAC,EAAE,MAAM,GAAC,IAAI,CAAA;CAAC,GACjC,OAAO,CAAC,OAAO,QAAQ,EAAE,UAAU,EAAE,CAAC,CAelD"}
@@ -0,0 +1,26 @@
1
+ import { commandsForEntries, runTask } from "./task-runner.js";
2
+ /**
3
+ * @param {import('#types').Transport} transport
4
+ * @param {import('#types').StageConfig} stage
5
+ * @param {string|null} releasePath
6
+ * @param {string} hookName
7
+ * @param {{previousReleasePath?: string|null}} [opts]
8
+ * @returns {Promise<import('#types').TaskResult[]>}
9
+ */
10
+ export async function runHooks(transport, stage, releasePath, hookName, { previousReleasePath } = {}) {
11
+ const hooks = stage.hooks;
12
+ if (!hooks || !Array.isArray(hooks[hookName]) || hooks[hookName].length === 0)
13
+ return [];
14
+ const entries = hooks[hookName];
15
+ const tasks = commandsForEntries(hookName, entries);
16
+ for (const task of tasks) {
17
+ if (!releasePath && task.cwd)
18
+ throw new Error(`Hook '${hookName}' has cwd set but no release path is available at this lifecycle phase.`);
19
+ }
20
+ const results = [];
21
+ for (const task of tasks) {
22
+ results.push(await runTask(transport, task, releasePath ?? "", { previousReleasePath }));
23
+ }
24
+ return results;
25
+ }
26
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/core/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,OAAO,EAAC,MAAM,kBAAkB,CAAA;AAE5D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAC,mBAAmB,EAAC,GAAG,EAAE;IAChG,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACxF,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,yEAAyE,CAAC,CAAA;IAC3I,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAA;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAC,CAAA;IACxF,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @param {import('#types').Transport} transport
3
+ * @param {import('#types').StageConfig} stage
4
+ * @param {{force?: boolean}} [opts]
5
+ * @returns {Promise<import('#types').LockInfo>}
6
+ */
7
+ export function acquireLock(transport: import("#types").Transport, stage: import("#types").StageConfig, { force }?: {
8
+ force?: boolean;
9
+ }): Promise<import("#types").LockInfo>;
10
+ /**
11
+ * @param {import('#types').Transport} transport
12
+ * @param {import('#types').StageConfig} stage
13
+ * @returns {Promise<void>}
14
+ */
15
+ export function releaseLock(transport: import("#types").Transport, stage: import("#types").StageConfig): Promise<void>;
16
+ //# sourceMappingURL=locks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../src/core/locks.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,uCALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,cAC5B;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,GACf,OAAO,CAAC,OAAO,QAAQ,EAAE,QAAQ,CAAC,CAc9C;AAED;;;;GAIG;AACH,uCAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,IAAI,CAAC,CAIzB"}
@@ -0,0 +1,32 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { deployPaths } from "./paths.js";
4
+ /**
5
+ * @param {import('#types').Transport} transport
6
+ * @param {import('#types').StageConfig} stage
7
+ * @param {{force?: boolean}} [opts]
8
+ * @returns {Promise<import('#types').LockInfo>}
9
+ */
10
+ export async function acquireLock(transport, stage, { force = false } = {}) {
11
+ const paths = deployPaths(stage);
12
+ await transport.mkdirp(path.dirname(paths.lockPath));
13
+ if (await transport.exists(paths.lockPath)) {
14
+ const lock = await transport.readFile(paths.lockPath);
15
+ if (!force)
16
+ throw new Error(`Deploy is locked:
17
+ ${lock}
18
+ Use --force only after verifying no deploy is running.`);
19
+ }
20
+ const lockInfo = { owner: process.env.USER ?? os.userInfo().username, host: os.hostname(), pid: process.pid, createdAt: new Date().toISOString() };
21
+ await transport.writeFile(paths.lockPath, JSON.stringify(lockInfo, null, 2));
22
+ return lockInfo;
23
+ }
24
+ /**
25
+ * @param {import('#types').Transport} transport
26
+ * @param {import('#types').StageConfig} stage
27
+ * @returns {Promise<void>}
28
+ */
29
+ export async function releaseLock(transport, stage) {
30
+ await transport.rm(deployPaths(stage).lockPath);
31
+ }
32
+ //# sourceMappingURL=locks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locks.js","sourceRoot":"","sources":["../../../src/core/locks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAA;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,EAAC,KAAK,GAAG,KAAK,EAAC,GAAG,EAAE;IACtE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpD,IAAI,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACrD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC;EAC9B,IAAI;uDACiD,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,QAAQ,GAAG,EAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAC,CAAA;IAChJ,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5E,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAS,EAAE,KAAK;IAChD,MAAM,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @param {import('#types').NodePackageInstallOptions} [options]
3
+ * @returns {import('#types').TaskEntry}
4
+ */
5
+ export function npmInstall(options?: import("#types").NodePackageInstallOptions): import("#types").TaskEntry;
6
+ /**
7
+ * @param {import('#types').NodePackageInstallOptions} [options]
8
+ * @returns {import('#types').TaskEntry}
9
+ */
10
+ export function pnpmInstall(options?: import("#types").NodePackageInstallOptions): import("#types").TaskEntry;
11
+ /**
12
+ * @param {import('#types').NodePackageInstallOptions} [options]
13
+ * @returns {import('#types').TaskEntry}
14
+ */
15
+ export function yarnInstall(options?: import("#types").NodePackageInstallOptions): import("#types").TaskEntry;
16
+ /**
17
+ * @param {import('#types').NodePackageInstallOptions} [options]
18
+ * @returns {import('#types').TaskEntry}
19
+ */
20
+ export function bunInstall(options?: import("#types").NodePackageInstallOptions): import("#types").TaskEntry;
21
+ /**
22
+ * @param {import('#types').NodePackageInstallOptions} [options]
23
+ * @returns {import('#types').TaskEntry}
24
+ */
25
+ export function nodePackageInstall(options?: import("#types").NodePackageInstallOptions): import("#types").TaskEntry;
26
+ //# sourceMappingURL=node-package-tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-package-tasks.d.ts","sourceRoot":"","sources":["../../../src/core/node-package-tasks.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qCAHW,OAAO,QAAQ,EAAE,yBAAyB,GACxC,OAAO,QAAQ,EAAE,SAAS,CAItC;AAED;;;GAGG;AACH,sCAHW,OAAO,QAAQ,EAAE,yBAAyB,GACxC,OAAO,QAAQ,EAAE,SAAS,CAItC;AAED;;;GAGG;AACH,sCAHW,OAAO,QAAQ,EAAE,yBAAyB,GACxC,OAAO,QAAQ,EAAE,SAAS,CAItC;AAED;;;GAGG;AACH,qCAHW,OAAO,QAAQ,EAAE,yBAAyB,GACxC,OAAO,QAAQ,EAAE,SAAS,CAItC;AAED;;;GAGG;AACH,6CAHW,OAAO,QAAQ,EAAE,yBAAyB,GACxC,OAAO,QAAQ,EAAE,SAAS,CAatC"}