@catapultjs/deploy 0.0.1-alpha.19

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 (68) hide show
  1. package/README.md +24 -0
  2. package/build/bin/run.d.ts +2 -0
  3. package/build/bin/run.js +60 -0
  4. package/build/bin/run.js.map +1 -0
  5. package/build/commands/deploy.d.ts +7 -0
  6. package/build/commands/deploy.js +55 -0
  7. package/build/commands/deploy.js.map +1 -0
  8. package/build/commands/init.d.ts +6 -0
  9. package/build/commands/init.js +41 -0
  10. package/build/commands/init.js.map +1 -0
  11. package/build/commands/list_pipeline.d.ts +6 -0
  12. package/build/commands/list_pipeline.js +14 -0
  13. package/build/commands/list_pipeline.js.map +1 -0
  14. package/build/commands/list_releases.d.ts +6 -0
  15. package/build/commands/list_releases.js +40 -0
  16. package/build/commands/list_releases.js.map +1 -0
  17. package/build/commands/list_tasks.d.ts +6 -0
  18. package/build/commands/list_tasks.js +23 -0
  19. package/build/commands/list_tasks.js.map +1 -0
  20. package/build/commands/rollback.d.ts +6 -0
  21. package/build/commands/rollback.js +25 -0
  22. package/build/commands/rollback.js.map +1 -0
  23. package/build/commands/run_task.d.ts +7 -0
  24. package/build/commands/run_task.js +36 -0
  25. package/build/commands/run_task.js.map +1 -0
  26. package/build/commands/setup.d.ts +6 -0
  27. package/build/commands/setup.js +22 -0
  28. package/build/commands/setup.js.map +1 -0
  29. package/build/commands/status.d.ts +6 -0
  30. package/build/commands/status.js +46 -0
  31. package/build/commands/status.js.map +1 -0
  32. package/build/commands/version.d.ts +6 -0
  33. package/build/commands/version.js +14 -0
  34. package/build/commands/version.js.map +1 -0
  35. package/build/index.d.ts +5 -0
  36. package/build/index.js +6 -0
  37. package/build/index.js.map +1 -0
  38. package/build/recipes/adonisjs.d.ts +7 -0
  39. package/build/recipes/adonisjs.js +19 -0
  40. package/build/recipes/adonisjs.js.map +1 -0
  41. package/build/recipes/pm2.d.ts +11 -0
  42. package/build/recipes/pm2.js +52 -0
  43. package/build/recipes/pm2.js.map +1 -0
  44. package/build/recipes/rsync.d.ts +6 -0
  45. package/build/recipes/rsync.js +14 -0
  46. package/build/recipes/rsync.js.map +1 -0
  47. package/build/src/base_command.d.ts +6 -0
  48. package/build/src/base_command.js +41 -0
  49. package/build/src/base_command.js.map +1 -0
  50. package/build/src/ctx.d.ts +3 -0
  51. package/build/src/ctx.js +10 -0
  52. package/build/src/ctx.js.map +1 -0
  53. package/build/src/define_config.d.ts +2 -0
  54. package/build/src/define_config.js +6 -0
  55. package/build/src/define_config.js.map +1 -0
  56. package/build/src/host.d.ts +21 -0
  57. package/build/src/host.js +237 -0
  58. package/build/src/host.js.map +1 -0
  59. package/build/src/task.d.ts +28 -0
  60. package/build/src/task.js +122 -0
  61. package/build/src/task.js.map +1 -0
  62. package/build/src/types.d.ts +52 -0
  63. package/build/src/types.js +2 -0
  64. package/build/src/types.js.map +1 -0
  65. package/build/src/utils.d.ts +10 -0
  66. package/build/src/utils.js +43 -0
  67. package/build/src/utils.js.map +1 -0
  68. package/package.json +80 -0
@@ -0,0 +1,52 @@
1
+ export interface BranchWithPrompt {
2
+ name: string;
3
+ ask: boolean;
4
+ }
5
+ export interface SshConfig {
6
+ user: string;
7
+ host: string;
8
+ port?: number;
9
+ }
10
+ export interface Host {
11
+ name: string;
12
+ ssh: string | SshConfig;
13
+ deployPath: string;
14
+ branch?: string | BranchWithPrompt;
15
+ healthcheckUrl?: string;
16
+ }
17
+ export interface Paths {
18
+ base: string;
19
+ current: string;
20
+ releases: string;
21
+ release: string;
22
+ shared: string;
23
+ lock: string;
24
+ }
25
+ export interface TaskRegistry {
26
+ }
27
+ export type TaskName = keyof TaskRegistry | (string & {});
28
+ export type HookContext = {
29
+ host?: Host;
30
+ hosts?: Host[];
31
+ };
32
+ export type HookFn = (context: HookContext) => Promise<void>;
33
+ export interface Hooks {
34
+ beforeDeploy?: HookFn;
35
+ afterDeploy?: HookFn;
36
+ beforeHostDeploy?: HookFn;
37
+ afterHostDeploy?: HookFn;
38
+ }
39
+ export interface Config {
40
+ keepReleases: number;
41
+ repository?: string;
42
+ healthcheckRetries?: number;
43
+ healthcheckDelayMs?: number;
44
+ hosts: Host[];
45
+ hooks?: Hooks;
46
+ verbose?: boolean;
47
+ }
48
+ export interface DeployContext {
49
+ config: Config;
50
+ release: string;
51
+ hooks: Hooks;
52
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { Host, Paths } from './types.ts';
2
+ export declare function q(value: unknown): string;
3
+ export declare function getPaths(baseDir: string, releaseName: string): Paths;
4
+ export declare function resolveSshArgs(host: Host): string[];
5
+ export declare function sshControlArgs(host: Host): string[];
6
+ export declare function rsyncSshFlag(host: Host): string;
7
+ export declare function ssh(host: Host, command: string, _opts?: {
8
+ quiet?: boolean;
9
+ }): Promise<import("execa").Result<{}>>;
10
+ export declare function sleep(ms: number): Promise<void>;
@@ -0,0 +1,43 @@
1
+ import { $ } from 'execa';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { createHash } from 'node:crypto';
5
+ export function q(value) {
6
+ return `'${String(value).replace(/'/g, `'\\''`)}'`;
7
+ }
8
+ export function getPaths(baseDir, releaseName) {
9
+ return {
10
+ base: baseDir,
11
+ current: `${baseDir}/current`,
12
+ releases: `${baseDir}/releases`,
13
+ release: `${baseDir}/releases/${releaseName}`,
14
+ shared: `${baseDir}/shared`,
15
+ lock: `${baseDir}/deploy.lock`,
16
+ };
17
+ }
18
+ export function resolveSshArgs(host) {
19
+ if (typeof host.ssh === 'string')
20
+ return [host.ssh];
21
+ const { user, host: h, port } = host.ssh;
22
+ return port ? ['-p', String(port), `${user}@${h}`] : [`${user}@${h}`];
23
+ }
24
+ export function sshControlArgs(host) {
25
+ const target = typeof host.ssh === 'string' ? host.ssh : `${host.ssh.user}@${host.ssh.host}`;
26
+ const hash = createHash('sha1').update(target).digest('hex').slice(0, 8);
27
+ const socket = join(tmpdir(), `cata-${hash}.sock`);
28
+ return ['-o', 'ControlMaster=auto', '-o', `ControlPath=${socket}`, '-o', 'ControlPersist=60'];
29
+ }
30
+ export function rsyncSshFlag(host) {
31
+ const controlOpts = sshControlArgs(host).join(' ');
32
+ const port = typeof host.ssh === 'object' && host.ssh.port ? ` -p ${host.ssh.port}` : '';
33
+ return `ssh${port} ${controlOpts}`;
34
+ }
35
+ export async function ssh(host, command, _opts) {
36
+ const b64 = Buffer.from(command).toString('base64');
37
+ const args = [...sshControlArgs(host), ...resolveSshArgs(host)];
38
+ return $ `ssh ${args} ${"bash -lc 'echo " + b64 + "|base64 -d|bash'"}`;
39
+ }
40
+ export async function sleep(ms) {
41
+ return new Promise((resolve) => setTimeout(resolve, ms));
42
+ }
43
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@catapultjs/deploy",
3
+ "version": "0.0.1-alpha.19",
4
+ "type": "module",
5
+ "main": "build/index.js",
6
+ "bin": {
7
+ "cata": "./build/bin/run.js",
8
+ "catapult": "./build/bin/run.js",
9
+ "catapultjs": "./build/bin/run.js"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/batosai/catapult.git"
14
+ },
15
+ "files": [
16
+ "build"
17
+ ],
18
+ "scripts": {
19
+ "lint": "eslint .",
20
+ "format": "prettier --write .",
21
+ "typecheck": "tsc --noEmit",
22
+ "build": "tsc",
23
+ "prepublishOnly": "npm run build",
24
+ "docs:dev": "vitepress dev docs",
25
+ "docs:build": "vitepress build docs",
26
+ "docs:preview": "vitepress preview docs"
27
+ },
28
+ "author": "Jeremy Chaufourier jeremy@chaufourier.fr",
29
+ "license": "MIT",
30
+ "description": "SSH deployment tool for Node.js applications",
31
+ "keywords": [
32
+ "deploy",
33
+ "deployment",
34
+ "ssh",
35
+ "nodejs",
36
+ "adonisjs",
37
+ "pm2",
38
+ "rsync",
39
+ "cli"
40
+ ],
41
+ "types": "./build/index.d.ts",
42
+ "exports": {
43
+ ".": {
44
+ "types": "./build/index.d.ts",
45
+ "import": "./build/index.js"
46
+ },
47
+ "./recipes/*": {
48
+ "types": "./build/recipes/*.d.ts",
49
+ "import": "./build/recipes/*.js"
50
+ }
51
+ },
52
+ "devDependencies": {
53
+ "@adonisjs/eslint-config": "^3.0.0",
54
+ "@adonisjs/prettier-config": "^1.4.5",
55
+ "@adonisjs/tsconfig": "^2.0.0",
56
+ "@types/node": "^24.12.0",
57
+ "eslint": "^10.1.0",
58
+ "prettier": "^3.8.1",
59
+ "typescript": "^5.9.3",
60
+ "vitepress": "^2.0.0-alpha.17"
61
+ },
62
+ "dependencies": {
63
+ "@adonisjs/ace": "^14.1.0",
64
+ "execa": "^9.6.1"
65
+ },
66
+ "eslintConfig": {
67
+ "extends": "@adonisjs/eslint-config/app"
68
+ },
69
+ "prettier": "@adonisjs/prettier-config",
70
+ "publishConfig": {
71
+ "access": "public",
72
+ "tag": "alpha"
73
+ },
74
+ "engines": {
75
+ "node": ">=24.0.0"
76
+ },
77
+ "volta": {
78
+ "node": "24.13.0"
79
+ }
80
+ }