@catapultjs/deploy 0.0.1 → 0.0.2

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 (94) hide show
  1. package/build/bin/test.d.ts +1 -0
  2. package/build/bin/test.js +9 -0
  3. package/build/bin/test.js.map +1 -0
  4. package/build/commands/deploy.d.ts +1 -0
  5. package/build/commands/deploy.js +5 -4
  6. package/build/commands/deploy.js.map +1 -1
  7. package/build/commands/init.js +3 -2
  8. package/build/commands/init.js.map +1 -1
  9. package/build/commands/list_pipeline.js +1 -1
  10. package/build/commands/list_pipeline.js.map +1 -1
  11. package/build/commands/list_releases.js +3 -3
  12. package/build/commands/list_releases.js.map +1 -1
  13. package/build/commands/list_tasks.js +2 -1
  14. package/build/commands/list_tasks.js.map +1 -1
  15. package/build/commands/rollback.js +3 -3
  16. package/build/commands/rollback.js.map +1 -1
  17. package/build/commands/run_task.js +3 -3
  18. package/build/commands/run_task.js.map +1 -1
  19. package/build/commands/setup.js +5 -5
  20. package/build/commands/setup.js.map +1 -1
  21. package/build/commands/ssh.d.ts +1 -1
  22. package/build/commands/ssh.js +2 -2
  23. package/build/commands/ssh.js.map +1 -1
  24. package/build/commands/status.js +12 -9
  25. package/build/commands/status.js.map +1 -1
  26. package/build/index.d.ts +3 -2
  27. package/build/index.js +3 -2
  28. package/build/index.js.map +1 -1
  29. package/build/recipes/git.js +5 -8
  30. package/build/recipes/git.js.map +1 -1
  31. package/build/recipes/pm2.js +9 -15
  32. package/build/recipes/pm2.js.map +1 -1
  33. package/build/recipes/rsync.js +3 -4
  34. package/build/recipes/rsync.js.map +1 -1
  35. package/build/src/base_command.d.ts +1 -1
  36. package/build/src/base_command.js +2 -2
  37. package/build/src/base_command.js.map +1 -1
  38. package/build/src/context.d.ts +6 -0
  39. package/build/src/context.js +12 -0
  40. package/build/src/context.js.map +1 -0
  41. package/build/src/defaults.d.ts +14 -0
  42. package/build/src/defaults.js +82 -0
  43. package/build/src/defaults.js.map +1 -0
  44. package/build/src/define_config.d.ts +1 -0
  45. package/build/src/define_config.js +8 -2
  46. package/build/src/define_config.js.map +1 -1
  47. package/build/src/deployer.d.ts +5 -0
  48. package/build/src/{host.js → deployer.js} +8 -100
  49. package/build/src/deployer.js.map +1 -0
  50. package/build/src/package_manager.d.ts +3 -0
  51. package/build/src/package_manager.js +22 -0
  52. package/build/src/package_manager.js.map +1 -0
  53. package/build/src/pipeline/hooks.d.ts +10 -0
  54. package/build/src/pipeline/hooks.js +18 -0
  55. package/build/src/pipeline/hooks.js.map +1 -0
  56. package/build/src/pipeline/store.d.ts +9 -0
  57. package/build/src/pipeline/store.js +38 -0
  58. package/build/src/pipeline/store.js.map +1 -0
  59. package/build/src/pipeline.d.ts +10 -0
  60. package/build/src/pipeline.js +25 -0
  61. package/build/src/pipeline.js.map +1 -0
  62. package/build/src/store.d.ts +2 -0
  63. package/build/src/store.js +8 -0
  64. package/build/src/store.js.map +1 -0
  65. package/build/src/task/runner.d.ts +18 -0
  66. package/build/src/task/runner.js +50 -0
  67. package/build/src/task/runner.js.map +1 -0
  68. package/build/src/task/store.d.ts +10 -0
  69. package/build/src/task/store.js +35 -0
  70. package/build/src/task/store.js.map +1 -0
  71. package/build/src/task.d.ts +6 -28
  72. package/build/src/task.js +17 -136
  73. package/build/src/task.js.map +1 -1
  74. package/build/src/utils.d.ts +3 -1
  75. package/build/src/utils.js +28 -4
  76. package/build/src/utils.js.map +1 -1
  77. package/build/tests/package_manager.spec.d.ts +1 -0
  78. package/build/tests/package_manager.spec.js +43 -0
  79. package/build/tests/package_manager.spec.js.map +1 -0
  80. package/build/tests/pipeline.spec.d.ts +1 -0
  81. package/build/tests/pipeline.spec.js +69 -0
  82. package/build/tests/pipeline.spec.js.map +1 -0
  83. package/build/tests/store.spec.d.ts +1 -0
  84. package/build/tests/store.spec.js +40 -0
  85. package/build/tests/store.spec.js.map +1 -0
  86. package/build/tests/task.spec.d.ts +1 -0
  87. package/build/tests/task.spec.js +97 -0
  88. package/build/tests/task.spec.js.map +1 -0
  89. package/package.json +12 -5
  90. package/build/src/ctx.d.ts +0 -3
  91. package/build/src/ctx.js +0 -10
  92. package/build/src/ctx.js.map +0 -1
  93. package/build/src/host.d.ts +0 -20
  94. package/build/src/host.js.map +0 -1
package/build/src/task.js CHANGED
@@ -1,149 +1,30 @@
1
- import { q, getPaths, ssh, yellow, blue, gray } from "./utils.js";
2
- export { yellow, blue, gray };
3
- const _registry = new Map();
4
- let _pipeline = [
5
- 'deploy:lock',
6
- 'deploy:release',
7
- 'deploy:update_code',
8
- 'deploy:shared',
9
- 'deploy:publish',
10
- 'deploy:log_revision',
11
- 'deploy:healthcheck',
12
- 'deploy:unlock',
13
- 'deploy:cleanup',
14
- ];
15
- let _execCtx = null;
16
- export function getContext() {
17
- if (!_execCtx)
18
- throw new Error('getContext() must be called inside a task');
19
- return _execCtx;
20
- }
1
+ import { TaskRunner } from "./task/runner.js";
2
+ import { TaskStore } from "./task/store.js";
3
+ import { q } from "./utils.js";
4
+ const runner = new TaskRunner();
5
+ const store = new TaskStore(runner);
21
6
  export function task(name, fn) {
22
- _registry.set(name, fn);
23
- }
24
- export function cd(path) {
25
- if (!_execCtx)
26
- throw new Error('cd() must be called inside a task');
27
- _execCtx.commands.push(`cd ${q(_resolve(path))}`);
28
- }
29
- export function run(command) {
30
- if (!_execCtx)
31
- throw new Error('run() must be called inside a task');
32
- _execCtx.commands.push(_resolve(command));
33
- }
34
- export async function runTask(name, deployCtx, host) {
35
- const fn = _registry.get(name);
36
- if (!fn)
37
- throw new Error(`Task not found: "${name}"`);
38
- const paths = getPaths(host.deployPath, deployCtx.release);
39
- _execCtx = { host, paths, deployCtx, commands: [] };
40
- try {
41
- const result = fn();
42
- if (result instanceof Promise)
43
- await result;
44
- await _flush();
45
- }
46
- finally {
47
- _execCtx = null;
48
- }
49
- }
50
- export function before(existing, newTask) {
51
- const idx = _pipeline.indexOf(existing);
52
- if (idx === -1)
53
- throw new Error(`Task "${existing}" not found in pipeline`);
54
- _pipeline.splice(idx, 0, newTask);
55
- }
56
- export function after(existing, newTask) {
57
- const idx = _pipeline.indexOf(existing);
58
- if (idx === -1)
59
- throw new Error(`Task "${existing}" not found in pipeline`);
60
- _pipeline.splice(idx + 1, 0, newTask);
61
- }
62
- export function getPipeline() {
63
- return [..._pipeline];
7
+ store.register(name, fn);
64
8
  }
65
9
  export function hasTask(name) {
66
- return _registry.has(name);
10
+ return store.has(name);
67
11
  }
68
12
  export function getTasks() {
69
- return [..._registry.keys()];
13
+ return store.list();
70
14
  }
71
- const _vars = new Map();
72
- export function set(key, value) {
73
- _vars.set(key, value);
74
- }
75
- export function get(key, defaultValue) {
76
- return (_vars.has(key) ? _vars.get(key) : defaultValue);
77
- }
78
- export function bin(name) {
79
- return _execCtx?.host.bin?.[name] ?? name;
80
- }
81
- export function pm() {
82
- return bin(get('package_manager', 'npm'));
83
- }
84
- export function pmInstall() {
85
- const manager = get('package_manager', 'npm');
86
- if (manager === 'pnpm')
87
- return `${pm()} install --frozen-lockfile`;
88
- if (manager === 'yarn')
89
- return `${pm()} install --frozen-lockfile`;
90
- return `${pm()} ci`;
91
- }
92
- export function pmInstallProd() {
93
- const manager = get('package_manager', 'npm');
94
- if (manager === 'pnpm')
95
- return `${pm()} install --prod`;
96
- if (manager === 'yarn')
97
- return `${pm()} install --production`;
98
- return `${pm()} install --omit=dev`;
99
- }
100
- export function remove(name) {
101
- const idx = _pipeline.indexOf(name);
102
- if (idx === -1)
103
- throw new Error(`Task "${name}" not found in pipeline`);
104
- _pipeline.splice(idx, 1);
105
- }
106
- export function setPipeline(tasks) {
107
- _pipeline = [...tasks];
108
- }
109
- const _setupHooks = [];
110
- export function onSetup(fn) {
111
- _setupHooks.push(fn);
112
- }
113
- export function getSetupHooks() {
114
- return [..._setupHooks];
15
+ export async function runTask(name, deployCtx, host) {
16
+ return store.run(name, deployCtx, host);
115
17
  }
116
- const _statusHooks = [];
117
- export function onStatus(fn) {
118
- _statusHooks.push(fn);
18
+ export function cd(path) {
19
+ runner.push(`cd ${q(runner.resolve(path))}`);
119
20
  }
120
- export function getStatusHooks() {
121
- return [..._statusHooks];
21
+ export function run(command) {
22
+ runner.push(runner.resolve(command));
122
23
  }
123
- function _resolve(str) {
124
- if (!_execCtx)
125
- return str;
126
- const p = _execCtx.paths;
127
- return str
128
- .replace(/\{\{release_path\}\}/g, p.release)
129
- .replace(/\{\{current_path\}\}/g, p.current)
130
- .replace(/\{\{shared_path\}\}/g, p.shared)
131
- .replace(/\{\{releases_path\}\}/g, p.releases)
132
- .replace(/\{\{base_path\}\}/g, p.base)
133
- .replace(/\{\{release\}\}/g, _execCtx.deployCtx.release);
24
+ export function bin(name) {
25
+ return runner.bin(name);
134
26
  }
135
27
  export function isVerbose() {
136
- return _execCtx?.deployCtx.config.verbose ?? false;
137
- }
138
- async function _flush() {
139
- if (!_execCtx || _execCtx.commands.length === 0)
140
- return;
141
- const cmds = _execCtx.commands.splice(0);
142
- const verbose = _execCtx.deployCtx.config.verbose;
143
- if (verbose) {
144
- for (const cmd of cmds)
145
- console.log(yellow(` $ ${cmd}`));
146
- }
147
- await ssh(_execCtx.host, ['set -e', ...cmds].join('\n'));
28
+ return runner.isVerbose();
148
29
  }
149
30
  //# sourceMappingURL=task.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/task.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAI9B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;AAC/B,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAA;AAEnC,MAAM,UAAU,IAAI,CAAC,IAAc,EAAE,EAAU;IAC7C,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAc;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAc,EAAE,SAAwB,EAAE,IAAU;IAChF,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;AACzC,CAAC;AAMD,MAAM,UAAU,EAAE,CAAC,IAAY;IAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAe;IACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAY;IAC9B,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC,SAAS,EAAE,CAAA;AAC3B,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import type { Host, Paths } from './types.ts';
2
- export declare function findDeployFile(cwd?: string): Promise<string | null>;
3
2
  export declare const yellow: (s: string) => string;
4
3
  export declare const blue: (s: string) => string;
5
4
  export declare const gray: (s: string) => string;
5
+ export declare function detectPackageManager(cwd?: string): Promise<string>;
6
+ export declare function findDeployFile(cwd?: string): Promise<string | null>;
6
7
  export declare function q(value: unknown): string;
7
8
  export declare function getPaths(baseDir: string, releaseName: string): Paths;
8
9
  export declare function resolveSshArgs(host: Host): string[];
@@ -13,3 +14,4 @@ export declare function ssh(host: Host, command: string, opts?: {
13
14
  verbose?: boolean;
14
15
  }): Promise<import("execa").Result<{}>>;
15
16
  export declare function sleep(ms: number): Promise<void>;
17
+ export declare function elapsed(ms: number): string;
@@ -5,6 +5,25 @@ import { createHash } from 'node:crypto';
5
5
  import { access } from 'node:fs/promises';
6
6
  import { colors } from '@poppinss/cliui';
7
7
  const DEPLOY_CANDIDATES = ['deploy.ts', 'deploy.js', 'bin/deploy.ts', 'bin/deploy.js'];
8
+ const PM_LOCK_FILES = [
9
+ ['bun.lockb', 'bun'],
10
+ ['pnpm-lock.yaml', 'pnpm'],
11
+ ['yarn.lock', 'yarn'],
12
+ ['package-lock.json', 'npm'],
13
+ ];
14
+ export const yellow = (s) => colors.ansi().yellow(s);
15
+ export const blue = (s) => colors.ansi().blue(s);
16
+ export const gray = (s) => colors.ansi().dim(s);
17
+ export async function detectPackageManager(cwd = process.cwd()) {
18
+ for (const [lockFile, manager] of PM_LOCK_FILES) {
19
+ try {
20
+ await access(resolve(cwd, lockFile));
21
+ return manager;
22
+ }
23
+ catch { }
24
+ }
25
+ return 'npm';
26
+ }
8
27
  export async function findDeployFile(cwd = process.cwd()) {
9
28
  for (const candidate of DEPLOY_CANDIDATES) {
10
29
  const full = resolve(cwd, candidate);
@@ -16,9 +35,6 @@ export async function findDeployFile(cwd = process.cwd()) {
16
35
  }
17
36
  return null;
18
37
  }
19
- export const yellow = (s) => colors.ansi().yellow(s);
20
- export const blue = (s) => colors.ansi().blue(s);
21
- export const gray = (s) => colors.ansi().dim(s);
22
38
  export function q(value) {
23
39
  return `'${String(value).replace(/'/g, `'\\''`)}'`;
24
40
  }
@@ -42,7 +58,7 @@ export function sshControlArgs(host) {
42
58
  const target = typeof host.ssh === 'string' ? host.ssh : `${host.ssh.user}@${host.ssh.host}`;
43
59
  const hash = createHash('sha1').update(target).digest('hex').slice(0, 8);
44
60
  const socket = join(tmpdir(), `cata-${hash}.sock`);
45
- return ['-o', 'ControlMaster=auto', '-o', `ControlPath=${socket}`, '-o', 'ControlPersist=60'];
61
+ return ['-o', 'ControlMaster=auto', '-o', `ControlPath=${socket}`, '-o', 'ControlPersist=300'];
46
62
  }
47
63
  export function rsyncSshFlag(host) {
48
64
  const controlOpts = sshControlArgs(host).join(' ');
@@ -59,4 +75,12 @@ export async function ssh(host, command, opts) {
59
75
  export async function sleep(ms) {
60
76
  return new Promise((resolve) => setTimeout(resolve, ms));
61
77
  }
78
+ export function elapsed(ms) {
79
+ const total = Math.round(ms / 1000);
80
+ const m = Math.floor(total / 60)
81
+ .toString()
82
+ .padStart(2, '0');
83
+ const s = (total % 60).toString().padStart(2, '0');
84
+ return `${m}:${s}`;
85
+ }
62
86
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ import { test } from '@japa/runner';
2
+ import { set } from "../src/store.js";
3
+ import { pm, pmInstall, pmInstallProd } from "../src/package_manager.js";
4
+ test.group('package_manager', (group) => {
5
+ group.each.teardown(() => set('package_manager', 'npm'));
6
+ test('pm() returns npm by default', ({ assert }) => {
7
+ set('package_manager', 'npm');
8
+ assert.equal(pm(), 'npm');
9
+ });
10
+ test('pm() returns pnpm when set', ({ assert }) => {
11
+ set('package_manager', 'pnpm');
12
+ assert.equal(pm(), 'pnpm');
13
+ });
14
+ test('pm() returns yarn when set', ({ assert }) => {
15
+ set('package_manager', 'yarn');
16
+ assert.equal(pm(), 'yarn');
17
+ });
18
+ test('pmInstall() returns npm ci for npm', ({ assert }) => {
19
+ set('package_manager', 'npm');
20
+ assert.equal(pmInstall(), 'npm ci');
21
+ });
22
+ test('pmInstall() returns frozen lockfile command for pnpm', ({ assert }) => {
23
+ set('package_manager', 'pnpm');
24
+ assert.equal(pmInstall(), 'pnpm install --frozen-lockfile');
25
+ });
26
+ test('pmInstall() returns frozen lockfile command for yarn', ({ assert }) => {
27
+ set('package_manager', 'yarn');
28
+ assert.equal(pmInstall(), 'yarn install --frozen-lockfile');
29
+ });
30
+ test('pmInstallProd() returns npm install --omit=dev for npm', ({ assert }) => {
31
+ set('package_manager', 'npm');
32
+ assert.equal(pmInstallProd(), 'npm install --omit=dev');
33
+ });
34
+ test('pmInstallProd() returns pnpm install --prod for pnpm', ({ assert }) => {
35
+ set('package_manager', 'pnpm');
36
+ assert.equal(pmInstallProd(), 'pnpm install --prod');
37
+ });
38
+ test('pmInstallProd() returns yarn install --production for yarn', ({ assert }) => {
39
+ set('package_manager', 'yarn');
40
+ assert.equal(pmInstallProd(), 'yarn install --production');
41
+ });
42
+ });
43
+ //# sourceMappingURL=package_manager.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package_manager.spec.js","sourceRoot":"","sources":["../../tests/package_manager.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAExE,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;IACtC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAAA;IAExD,IAAI,CAAC,6BAA6B,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACjD,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4BAA4B,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAChD,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4BAA4B,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAChD,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oCAAoC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACxD,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sDAAsD,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1E,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,gCAAgC,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sDAAsD,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1E,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,gCAAgC,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wDAAwD,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5E,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,wBAAwB,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sDAAsD,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1E,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,qBAAqB,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4DAA4D,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAChF,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,2BAA2B,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,69 @@
1
+ import { test } from '@japa/runner';
2
+ import { getPipeline, setPipeline, before, after, remove, onSetup, onStatus } from "../src/pipeline.js";
3
+ import { hooks } from "../src/pipeline/hooks.js";
4
+ const DEFAULT_PIPELINE = [
5
+ 'deploy:lock',
6
+ 'deploy:release',
7
+ 'deploy:update_code',
8
+ 'deploy:shared',
9
+ 'deploy:publish',
10
+ 'deploy:log_revision',
11
+ 'deploy:healthcheck',
12
+ 'deploy:unlock',
13
+ 'deploy:cleanup',
14
+ ];
15
+ test.group('pipeline', (group) => {
16
+ group.each.setup(() => setPipeline(DEFAULT_PIPELINE));
17
+ test('getPipeline returns the default pipeline', ({ assert }) => {
18
+ assert.deepEqual(getPipeline(), DEFAULT_PIPELINE);
19
+ });
20
+ test('getPipeline returns a copy, not a reference', ({ assert }) => {
21
+ const a = getPipeline();
22
+ const b = getPipeline();
23
+ assert.notStrictEqual(a, b);
24
+ });
25
+ test('setPipeline replaces the entire pipeline', ({ assert }) => {
26
+ setPipeline(['deploy:release', 'deploy:publish']);
27
+ assert.deepEqual(getPipeline(), ['deploy:release', 'deploy:publish']);
28
+ });
29
+ test('before inserts a task before an existing one', ({ assert }) => {
30
+ before('deploy:publish', 'my:task');
31
+ const pipeline = getPipeline();
32
+ const idx = pipeline.indexOf('my:task');
33
+ assert.isAbove(idx, -1);
34
+ assert.equal(pipeline[idx + 1], 'deploy:publish');
35
+ });
36
+ test('before throws when the reference task does not exist', ({ assert }) => {
37
+ assert.throws(() => before('nonexistent:task', 'my:task'), /not found in pipeline/);
38
+ });
39
+ test('after inserts a task after an existing one', ({ assert }) => {
40
+ after('deploy:publish', 'my:task');
41
+ const pipeline = getPipeline();
42
+ const idx = pipeline.indexOf('my:task');
43
+ assert.isAbove(idx, -1);
44
+ assert.equal(pipeline[idx - 1], 'deploy:publish');
45
+ });
46
+ test('after throws when the reference task does not exist', ({ assert }) => {
47
+ assert.throws(() => after('nonexistent:task', 'my:task'), /not found in pipeline/);
48
+ });
49
+ test('remove removes a task from the pipeline', ({ assert }) => {
50
+ remove('deploy:healthcheck');
51
+ assert.notInclude(getPipeline(), 'deploy:healthcheck');
52
+ });
53
+ test('remove throws when the task does not exist', ({ assert }) => {
54
+ assert.throws(() => remove('nonexistent:task'), /not found in pipeline/);
55
+ });
56
+ });
57
+ test.group('pipeline — hooks', () => {
58
+ test('onSetup registers a setup hook', ({ assert }) => {
59
+ const before = hooks.getSetup().length;
60
+ onSetup(async () => { });
61
+ assert.equal(hooks.getSetup().length, before + 1);
62
+ });
63
+ test('onStatus registers a status hook', ({ assert }) => {
64
+ const before = hooks.getStatus().length;
65
+ onStatus(async () => { });
66
+ assert.equal(hooks.getStatus().length, before + 1);
67
+ });
68
+ });
69
+ //# sourceMappingURL=pipeline.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.spec.js","sourceRoot":"","sources":["../../tests/pipeline.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ import { test } from '@japa/runner';
2
+ import { set, get } from "../src/store.js";
3
+ test.group('store', () => {
4
+ test('get returns undefined when key is not set', ({ assert }) => {
5
+ assert.isUndefined(get('store__unset_key'));
6
+ });
7
+ test('get returns default value when key is not set', ({ assert }) => {
8
+ assert.equal(get('store__missing', 'fallback'), 'fallback');
9
+ });
10
+ test('set and get a string value', ({ assert }) => {
11
+ set('store__str', 'hello');
12
+ assert.equal(get('store__str'), 'hello');
13
+ });
14
+ test('set overwrites existing value', ({ assert }) => {
15
+ set('store__overwrite', 'first');
16
+ set('store__overwrite', 'second');
17
+ assert.equal(get('store__overwrite'), 'second');
18
+ });
19
+ test('set value takes priority over default', ({ assert }) => {
20
+ set('store__priority', 'actual');
21
+ assert.equal(get('store__priority', 'fallback'), 'actual');
22
+ });
23
+ test('set and get a number', ({ assert }) => {
24
+ set('store__num', 42);
25
+ assert.equal(get('store__num'), 42);
26
+ });
27
+ test('set and get a boolean', ({ assert }) => {
28
+ set('store__bool', true);
29
+ assert.isTrue(get('store__bool'));
30
+ });
31
+ test('set and get an array', ({ assert }) => {
32
+ set('store__arr', [1, 2, 3]);
33
+ assert.deepEqual(get('store__arr'), [1, 2, 3]);
34
+ });
35
+ test('set and get an object', ({ assert }) => {
36
+ set('store__obj', { a: 1, b: 'x' });
37
+ assert.deepEqual(get('store__obj'), { a: 1, b: 'x' });
38
+ });
39
+ });
40
+ //# sourceMappingURL=store.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.spec.js","sourceRoot":"","sources":["../../tests/store.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAE1C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE;IACvB,IAAI,CAAC,2CAA2C,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/D,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+CAA+C,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACnE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4BAA4B,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAChD,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+BAA+B,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QACnD,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAA;QAChC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;QACjC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uCAAuC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3D,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;QAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1C,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;QACrB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAS,YAAY,CAAC,EAAE,EAAE,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3C,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QACxB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAU,aAAa,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1C,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAW,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3C,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACnC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAS,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,97 @@
1
+ import { test } from '@japa/runner';
2
+ import { task, hasTask, getTasks, runTask, cd, run, bin, isVerbose } from "../src/task.js";
3
+ function makeDeployCtx() {
4
+ return {
5
+ release: '2024-01-15T10-00-00-000Z',
6
+ hooks: {},
7
+ config: {
8
+ keepReleases: 5,
9
+ hosts: [],
10
+ verbose: false,
11
+ },
12
+ };
13
+ }
14
+ function makeHost() {
15
+ return {
16
+ name: 'test',
17
+ ssh: 'user@localhost',
18
+ deployPath: '/home/deploy/app',
19
+ };
20
+ }
21
+ test.group('task — registration', () => {
22
+ test('task registers a task function', ({ assert }) => {
23
+ task('test:register_a', () => { });
24
+ assert.isTrue(hasTask('test:register_a'));
25
+ });
26
+ test('hasTask returns false for an unknown task', ({ assert }) => {
27
+ assert.isFalse(hasTask('task:nonexistent_xyz'));
28
+ });
29
+ test('getTasks includes all registered tasks', ({ assert }) => {
30
+ task('test:list_a', () => { });
31
+ task('test:list_b', () => { });
32
+ const tasks = getTasks();
33
+ assert.include(tasks, 'test:list_a');
34
+ assert.include(tasks, 'test:list_b');
35
+ });
36
+ test('registering a task twice overwrites it', ({ assert }) => {
37
+ let result = 'none';
38
+ task('test:overwrite', () => { result = 'first'; });
39
+ task('test:overwrite', () => { result = 'second'; });
40
+ assert.isTrue(hasTask('test:overwrite'));
41
+ assert.equal(result, 'none');
42
+ });
43
+ });
44
+ test.group('task — runTask', () => {
45
+ test('runTask calls the registered task function', async ({ assert }) => {
46
+ let called = false;
47
+ task('test:run_sync', async () => { called = true; });
48
+ await runTask('test:run_sync', makeDeployCtx(), makeHost());
49
+ assert.isTrue(called);
50
+ });
51
+ test('runTask passes TaskContext to the task function', async ({ assert }) => {
52
+ let receivedHost;
53
+ task('test:run_ctx', async ({ host }) => { receivedHost = host; });
54
+ const host = makeHost();
55
+ await runTask('test:run_ctx', makeDeployCtx(), host);
56
+ assert.equal(receivedHost?.name, host.name);
57
+ });
58
+ test('runTask throws when the task does not exist', async ({ assert }) => {
59
+ await assert.rejects(() => runTask('task:does_not_exist_xyz', makeDeployCtx(), makeHost()), /Task not found/);
60
+ });
61
+ });
62
+ test.group('task — DSL', () => {
63
+ test('cd throws when called outside a task context', ({ assert }) => {
64
+ assert.throws(() => cd('/tmp'), /must be called inside a task/);
65
+ });
66
+ test('run throws when called outside a task context', ({ assert }) => {
67
+ assert.throws(() => run('echo hello'), /must be called inside a task/);
68
+ });
69
+ test('bin returns the binary name when no context is set', ({ assert }) => {
70
+ assert.equal(bin('node'), 'node');
71
+ assert.equal(bin('pnpm'), 'pnpm');
72
+ });
73
+ test('bin resolves from host.bin when inside a task', async ({ assert }) => {
74
+ let resolved;
75
+ task('test:bin_ctx', async ({ host: _ }) => {
76
+ resolved = bin('node');
77
+ });
78
+ const host = {
79
+ ...makeHost(),
80
+ bin: { node: '/home/deploy/.nvm/versions/node/v22/bin/node' },
81
+ };
82
+ await runTask('test:bin_ctx', makeDeployCtx(), host);
83
+ assert.equal(resolved, '/home/deploy/.nvm/versions/node/v22/bin/node');
84
+ });
85
+ test('isVerbose returns false when no context is set', ({ assert }) => {
86
+ assert.isFalse(isVerbose());
87
+ });
88
+ test('isVerbose returns the config value when inside a task', async ({ assert }) => {
89
+ let result;
90
+ task('test:verbose_ctx', async () => { result = isVerbose(); });
91
+ const ctx = makeDeployCtx();
92
+ ctx.config.verbose = true;
93
+ await runTask('test:verbose_ctx', ctx, makeHost());
94
+ assert.isTrue(result);
95
+ });
96
+ });
97
+ //# sourceMappingURL=task.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.spec.js","sourceRoot":"","sources":["../../tests/task.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@catapultjs/deploy",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "main": "build/index.js",
6
6
  "bin": {
@@ -23,7 +23,8 @@
23
23
  "prepublishOnly": "npm run build",
24
24
  "docs:dev": "vitepress dev docs",
25
25
  "docs:build": "vitepress build docs",
26
- "docs:preview": "vitepress preview docs"
26
+ "docs:preview": "vitepress preview docs",
27
+ "test": "node bin/test.ts"
27
28
  },
28
29
  "author": "Jeremy Chaufourier jeremy@chaufourier.fr",
29
30
  "license": "MIT",
@@ -44,6 +45,10 @@
44
45
  "types": "./build/index.d.ts",
45
46
  "import": "./build/index.js"
46
47
  },
48
+ "./utils": {
49
+ "types": "./build/src/utils.d.ts",
50
+ "import": "./build/src/utils.js"
51
+ },
47
52
  "./recipes/*": {
48
53
  "types": "./build/recipes/*.d.ts",
49
54
  "import": "./build/recipes/*.js"
@@ -53,10 +58,12 @@
53
58
  "@adonisjs/eslint-config": "^3.0.0",
54
59
  "@adonisjs/prettier-config": "^1.4.5",
55
60
  "@adonisjs/tsconfig": "^2.0.0",
56
- "@types/node": "^24.12.0",
57
- "eslint": "^10.1.0",
61
+ "@japa/assert": "^4.2.0",
62
+ "@japa/runner": "^5.3.0",
63
+ "@types/node": "^25.5.2",
64
+ "eslint": "^10.2.0",
58
65
  "prettier": "^3.8.1",
59
- "typescript": "^5.9.3",
66
+ "typescript": "^6.0.2",
60
67
  "vitepress": "^2.0.0-alpha.17"
61
68
  },
62
69
  "dependencies": {
@@ -1,3 +0,0 @@
1
- import type { DeployContext } from './types.ts';
2
- export declare function setCtx(ctx: DeployContext): void;
3
- export declare function getCtx(): DeployContext;
package/build/src/ctx.js DELETED
@@ -1,10 +0,0 @@
1
- let _ctx = null;
2
- export function setCtx(ctx) {
3
- _ctx = ctx;
4
- }
5
- export function getCtx() {
6
- if (!_ctx)
7
- throw new Error('No deploy context. Call defineConfig() first.');
8
- return _ctx;
9
- }
10
- //# sourceMappingURL=ctx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ctx.js","sourceRoot":"","sources":["../../src/ctx.ts"],"names":[],"mappings":"AAEA,IAAI,IAAI,GAAyB,IAAI,CAAA;AAErC,MAAM,UAAU,MAAM,CAAC,GAAkB;IACvC,IAAI,GAAG,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAC3E,OAAO,IAAI,CAAA;AACb,CAAC"}