@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
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # Catapult
2
+
3
+ SSH deployment tool for Node.js applications.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @catapultjs/deploy
9
+ ```
10
+
11
+ ## Quick start
12
+
13
+ ```bash
14
+ cata init # create deploy.ts
15
+ cata deploy # deploy
16
+ ```
17
+
18
+ ## Documentation
19
+
20
+ Full documentation at **https://batosai.github.io/catapult/**
21
+
22
+ ## Inspiration
23
+
24
+ Inspired by [Deployer PHP](https://deployer.org) and [Capistrano](https://capistranorb.com).
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
3
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
4
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
5
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
6
+ });
7
+ }
8
+ return path;
9
+ };
10
+ import { existsSync } from 'fs';
11
+ import { resolve } from 'path';
12
+ import { pathToFileURL } from 'url';
13
+ import { Kernel, ListLoader, HelpCommand } from '@adonisjs/ace';
14
+ import Version from '../commands/version.js';
15
+ import Init from '../commands/init.js';
16
+ import Setup from '../commands/setup.js';
17
+ import Deploy from '../commands/deploy.js';
18
+ import Rollback from '../commands/rollback.js';
19
+ import Status from '../commands/status.js';
20
+ import ListReleases from '../commands/list_releases.js';
21
+ import ListTasks from '../commands/list_tasks.js';
22
+ import ListPipeline from '../commands/list_pipeline.js';
23
+ import RunTask from '../commands/run_task.js';
24
+ const skipDeployFile = ['init', 'version'].includes(process.argv[2]);
25
+ if (!skipDeployFile) {
26
+ const candidates = ['deploy.ts', 'deploy.js', 'bin/deploy.ts', 'bin/deploy.js'];
27
+ const deployFile = candidates.map((f) => resolve(process.cwd(), f)).find(existsSync);
28
+ if (!deployFile) {
29
+ console.error('No deploy.ts or deploy.js found in current directory. Run `cata init` to create one.');
30
+ process.exit(1);
31
+ }
32
+ await import(__rewriteRelativeImportExtension(pathToFileURL(deployFile).href));
33
+ }
34
+ const kernel = Kernel.create();
35
+ kernel.defineFlag('help', {
36
+ type: 'boolean',
37
+ description: HelpCommand.description,
38
+ });
39
+ kernel.on('help', async (command, $kernel, parsed) => {
40
+ parsed.args.unshift(command.commandName);
41
+ const help = new HelpCommand($kernel, parsed, kernel.ui, kernel.prompt);
42
+ await help.exec();
43
+ return $kernel.shortcircuit();
44
+ });
45
+ kernel.defineFlag('ansi', {
46
+ type: 'boolean',
47
+ showNegatedVariantInHelp: true,
48
+ description: 'Force enable or disable colored output',
49
+ });
50
+ kernel.on('ansi', async (_, $kernel, parsed) => {
51
+ if (parsed.flags.ansi === false) {
52
+ $kernel.ui.switchMode('silent');
53
+ }
54
+ if (parsed.flags.ansi === true) {
55
+ $kernel.ui.switchMode('normal');
56
+ }
57
+ });
58
+ kernel.addLoader(new ListLoader([Version, Init, Setup, Deploy, Rollback, Status, ListReleases, ListTasks, ListPipeline, RunTask]));
59
+ await kernel.handle(process.argv.splice(2));
60
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../bin/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseDeployCommand } from '../src/base_command.ts';
2
+ export default class Deploy extends BaseDeployCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ branch: string | undefined;
6
+ run(): Promise<void>;
7
+ }
@@ -0,0 +1,55 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { flags } from '@adonisjs/ace';
11
+ import { getCtx } from "../src/ctx.js";
12
+ import { deployHost } from "../src/host.js";
13
+ import { BaseDeployCommand } from "../src/base_command.js";
14
+ export default class Deploy extends BaseDeployCommand {
15
+ static commandName = 'deploy';
16
+ static description = 'Deploy to servers';
17
+ async run() {
18
+ const ctx = getCtx();
19
+ let hosts = await this.selectHosts();
20
+ if (!hosts)
21
+ return;
22
+ hosts = await Promise.all(hosts.map(async (host) => {
23
+ if (this.branch)
24
+ return { ...host, branch: this.branch };
25
+ if (typeof host.branch === 'object' && host.branch.ask) {
26
+ const branch = await this.prompt.ask(`Branch to deploy for ${host.name}`, {
27
+ default: host.branch.name,
28
+ });
29
+ return { ...host, branch };
30
+ }
31
+ return host;
32
+ }));
33
+ console.log(`🚀 deploy release ${ctx.release}`);
34
+ if (ctx.hooks.beforeDeploy)
35
+ await ctx.hooks.beforeDeploy({ hosts });
36
+ for (const host of hosts) {
37
+ try {
38
+ await deployHost(ctx, host);
39
+ }
40
+ catch (error) {
41
+ this.logger.error(error.message);
42
+ this.exitCode = 1;
43
+ return;
44
+ }
45
+ }
46
+ if (ctx.hooks.afterDeploy)
47
+ await ctx.hooks.afterDeploy({ hosts });
48
+ this.logger.action('rollout').succeeded();
49
+ }
50
+ }
51
+ __decorate([
52
+ flags.string({ description: 'Override the branch to deploy' }),
53
+ __metadata("design:type", Object)
54
+ ], Deploy.prototype, "branch", void 0);
55
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../commands/deploy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,iBAAiB;IACnD,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAA;IAC7B,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAA;IAKxC,KAAK,CAAC,GAAG;QACP,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;QAEpB,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACpC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CACvB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;YACxD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,EAAE;oBACxE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;iBAC1B,CAAC,CAAA;gBACF,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAA;YAC5B,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CACH,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAE/C,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY;YAAE,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAA;gBAC3C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACjB,OAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW;YAAE,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAEjE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAA;IAC3C,CAAC;;AApCO;IADP,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;;sCAC7B"}
@@ -0,0 +1,6 @@
1
+ import { BaseCommand } from '@adonisjs/ace';
2
+ export default class Init extends BaseCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,41 @@
1
+ import { BaseCommand } from '@adonisjs/ace';
2
+ import { access, writeFile } from 'fs/promises';
3
+ import { resolve } from 'path';
4
+ import { execa } from 'execa';
5
+ const TEMPLATE = `import { defineConfig } from '@catapultjs/deploy'
6
+
7
+ await defineConfig({
8
+ keepReleases: 5,
9
+
10
+ hosts: [
11
+ {
12
+ name: 'production',
13
+ ssh: 'deploy@example.com',
14
+ deployPath: '/home/deploy/myapp',
15
+ branch: 'main',
16
+ },
17
+ ],
18
+ })
19
+ `;
20
+ export default class Init extends BaseCommand {
21
+ static commandName = 'init';
22
+ static description = 'Create a deploy.ts configuration file';
23
+ async run() {
24
+ const dest = resolve(process.cwd(), 'deploy.ts');
25
+ try {
26
+ await access(dest);
27
+ this.logger.warning('deploy.ts already exists');
28
+ return;
29
+ }
30
+ catch { }
31
+ await writeFile(dest, TEMPLATE);
32
+ this.logger.action('create deploy.ts').succeeded();
33
+ this.logger.info('Installing @catapultjs/deploy...');
34
+ await execa('npm', ['install', '-D', '@catapultjs/deploy'], {
35
+ cwd: process.cwd(),
36
+ stdio: 'inherit',
37
+ });
38
+ this.logger.action('install @catapultjs/deploy').succeeded();
39
+ }
40
+ }
41
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAE7B,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;CAchB,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW;IAC3C,MAAM,CAAC,WAAW,GAAG,MAAM,CAAA;IAC3B,MAAM,CAAC,WAAW,GAAG,uCAAuC,CAAA;IAE5D,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAA;QAEhD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;YAC/C,OAAM;QACR,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAA;QAElD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;QACpD,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE;YAC1D,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,SAAS,EAAE,CAAA;IAC9D,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { BaseCommand } from '@adonisjs/ace';
2
+ export default class ListPipeline extends BaseCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '@adonisjs/ace';
2
+ import { getPipeline } from "../src/task.js";
3
+ export default class ListPipeline extends BaseCommand {
4
+ static commandName = 'list:pipeline';
5
+ static description = 'Show the current deployment pipeline';
6
+ async run() {
7
+ const pipeline = getPipeline();
8
+ const table = this.ui.table();
9
+ table.head(['#', 'Task']);
10
+ pipeline.forEach((name, i) => table.row([String(i + 1), name]));
11
+ table.render();
12
+ }
13
+ }
14
+ //# sourceMappingURL=list_pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_pipeline.js","sourceRoot":"","sources":["../../commands/list_pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,WAAW,GAAG,eAAe,CAAA;IACpC,MAAM,CAAC,WAAW,GAAG,sCAAsC,CAAA;IAE3D,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;QAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;QAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;QACzB,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/D,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { BaseDeployCommand } from '../src/base_command.ts';
2
+ export default class ListReleases extends BaseDeployCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,40 @@
1
+ import { getCtx } from "../src/ctx.js";
2
+ import { getCurrentRelease } from "../src/host.js";
3
+ import { q, getPaths, ssh } from "../src/utils.js";
4
+ import { BaseDeployCommand } from "../src/base_command.js";
5
+ export default class ListReleases extends BaseDeployCommand {
6
+ static commandName = 'list:releases';
7
+ static description = 'List releases on servers';
8
+ async run() {
9
+ const ctx = getCtx();
10
+ const hosts = await this.selectHosts();
11
+ if (!hosts)
12
+ return;
13
+ for (const host of hosts) {
14
+ const paths = getPaths(host.deployPath, ctx.release);
15
+ const current = await getCurrentRelease(ctx, host);
16
+ const { stdout } = await ssh(host, `
17
+ set -e
18
+ [ -d ${q(paths.releases)} ] || exit 0
19
+ cd ${q(paths.releases)}
20
+ ls -1dt */ 2>/dev/null || true
21
+ `);
22
+ const releases = stdout
23
+ .split('\n')
24
+ .map((line) => line.trim().replace(/\/$/, ''))
25
+ .filter(Boolean);
26
+ const table = this.ui.table();
27
+ table.head(['', 'Release', 'Host']);
28
+ if (releases.length === 0) {
29
+ table.row(['', 'no releases', host.name]);
30
+ }
31
+ else {
32
+ for (const item of releases) {
33
+ table.row([item === current ? '*' : '', item, host.name]);
34
+ }
35
+ }
36
+ table.render();
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=list_releases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_releases.js","sourceRoot":"","sources":["../../commands/list_releases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,iBAAiB;IACzD,MAAM,CAAC,WAAW,GAAG,eAAe,CAAA;IACpC,MAAM,CAAC,WAAW,GAAG,0BAA0B,CAAA;IAE/C,KAAK,CAAC,GAAG;QACP,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;QAEpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;YAEpD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAElD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAC1B,IAAI,EACJ;;eAEO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;aACnB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;;OAEvB,CACA,CAAA;YAED,MAAM,QAAQ,GAAG,MAAM;iBACpB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;iBAC7C,MAAM,CAAC,OAAO,CAAC,CAAA;YAElB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;YAEnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;YAC3C,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC3D,CAAC;YACH,CAAC;YAED,KAAK,CAAC,MAAM,EAAE,CAAA;QAChB,CAAC;IACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { BaseCommand } from '@adonisjs/ace';
2
+ export default class ListTasks extends BaseCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,23 @@
1
+ import { BaseCommand } from '@adonisjs/ace';
2
+ import { getPipeline, getTasks } from "../src/task.js";
3
+ export default class ListTasks extends BaseCommand {
4
+ static commandName = 'list:tasks';
5
+ static description = 'List registered tasks and the current pipeline';
6
+ async run() {
7
+ const pipeline = getPipeline();
8
+ const extra = getTasks().filter((t) => !pipeline.includes(t));
9
+ this.logger.log('Pipeline');
10
+ const pipelineTable = this.ui.table();
11
+ pipelineTable.head(['Task']);
12
+ pipeline.forEach((name) => pipelineTable.row([name]));
13
+ pipelineTable.render();
14
+ if (extra.length > 0) {
15
+ this.logger.log('Extra tasks');
16
+ const extraTable = this.ui.table();
17
+ extraTable.head(['Task']);
18
+ extra.forEach((name) => extraTable.row([name]));
19
+ extraTable.render();
20
+ }
21
+ }
22
+ }
23
+ //# sourceMappingURL=list_tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_tasks.js","sourceRoot":"","sources":["../../commands/list_tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEtD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,WAAW,GAAG,gDAAgD,CAAA;IAErE,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAE7D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;QACrC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrD,aAAa,CAAC,MAAM,EAAE,CAAA;QAEtB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAClC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;YACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC/C,UAAU,CAAC,MAAM,EAAE,CAAA;QACrB,CAAC;IACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { BaseDeployCommand } from '../src/base_command.ts';
2
+ export default class Rollback extends BaseDeployCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,25 @@
1
+ import { getCtx } from "../src/ctx.js";
2
+ import { rollbackHost } from "../src/host.js";
3
+ import { runTask } from "../src/task.js";
4
+ import { BaseDeployCommand } from "../src/base_command.js";
5
+ export default class Rollback extends BaseDeployCommand {
6
+ static commandName = 'rollback';
7
+ static description = 'Rollback to the previous release';
8
+ async run() {
9
+ const ctx = getCtx();
10
+ const hosts = await this.selectHosts();
11
+ if (!hosts)
12
+ return;
13
+ for (const host of hosts) {
14
+ await runTask('deploy:lock', ctx, host);
15
+ try {
16
+ await rollbackHost(ctx, host);
17
+ }
18
+ finally {
19
+ await runTask('deploy:unlock', ctx, host);
20
+ }
21
+ }
22
+ this.logger.action('rollback').succeeded();
23
+ }
24
+ }
25
+ //# sourceMappingURL=rollback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../commands/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,iBAAiB;IACrD,MAAM,CAAC,WAAW,GAAG,UAAU,CAAA;IAC/B,MAAM,CAAC,WAAW,GAAG,kCAAkC,CAAA;IAEvD,KAAK,CAAC,GAAG;QACP,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;QAEpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YACvC,IAAI,CAAC;gBACH,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC/B,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAA;IAC5C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseDeployCommand } from '../src/base_command.ts';
2
+ export default class RunTask extends BaseDeployCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ taskName: string;
6
+ run(): Promise<void>;
7
+ }
@@ -0,0 +1,36 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { args } from '@adonisjs/ace';
11
+ import { getCtx } from "../src/ctx.js";
12
+ import { hasTask, runTask, getTasks } from "../src/task.js";
13
+ import { BaseDeployCommand } from "../src/base_command.js";
14
+ export default class RunTask extends BaseDeployCommand {
15
+ static commandName = 'task';
16
+ static description = 'Run a registered task on servers';
17
+ async run() {
18
+ const ctx = getCtx();
19
+ if (!hasTask(this.taskName)) {
20
+ this.logger.error(`Unknown task: ${this.taskName}. Available: ${getTasks().join(', ')}`);
21
+ this.exitCode = 1;
22
+ return;
23
+ }
24
+ const hosts = await this.selectHosts();
25
+ if (!hosts)
26
+ return;
27
+ for (const host of hosts) {
28
+ await runTask(this.taskName, ctx, host);
29
+ }
30
+ }
31
+ }
32
+ __decorate([
33
+ args.string({ description: 'Task name to run' }),
34
+ __metadata("design:type", String)
35
+ ], RunTask.prototype, "taskName", void 0);
36
+ //# sourceMappingURL=run_task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run_task.js","sourceRoot":"","sources":["../../commands/run_task.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,iBAAiB;IACpD,MAAM,CAAC,WAAW,GAAG,MAAM,CAAA;IAC3B,MAAM,CAAC,WAAW,GAAG,kCAAkC,CAAA;IAKvD,KAAK,CAAC,GAAG;QACP,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;QAEpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,QAAQ,gBAAgB,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACxF,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;;AAjBO;IADP,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;;yCACzB"}
@@ -0,0 +1,6 @@
1
+ import { BaseDeployCommand } from '../src/base_command.ts';
2
+ export default class Setup extends BaseDeployCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,22 @@
1
+ import { getCtx } from "../src/ctx.js";
2
+ import { setupHost } from "../src/host.js";
3
+ import { getSetupHooks } from "../src/task.js";
4
+ import { BaseDeployCommand } from "../src/base_command.js";
5
+ export default class Setup extends BaseDeployCommand {
6
+ static commandName = 'deploy:setup';
7
+ static description = 'Initialize directories on servers';
8
+ async run() {
9
+ const ctx = getCtx();
10
+ const hosts = await this.selectHosts();
11
+ if (!hosts)
12
+ return;
13
+ for (const host of hosts) {
14
+ await setupHost(ctx, host);
15
+ for (const hook of getSetupHooks()) {
16
+ await hook(ctx, host);
17
+ }
18
+ }
19
+ this.logger.action('setup').succeeded();
20
+ }
21
+ }
22
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,iBAAiB;IAClD,MAAM,CAAC,WAAW,GAAG,cAAc,CAAA;IACnC,MAAM,CAAC,WAAW,GAAG,mCAAmC,CAAA;IAExD,KAAK,CAAC,GAAG;QACP,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC1B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAA;IACzC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { BaseDeployCommand } from '../src/base_command.ts';
2
+ export default class Status extends BaseDeployCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,46 @@
1
+ import { getCtx } from "../src/ctx.js";
2
+ import { getCurrentRelease } from "../src/host.js";
3
+ import { getPipeline, getStatusHooks } from "../src/task.js";
4
+ import { q, getPaths, ssh } from "../src/utils.js";
5
+ import { BaseDeployCommand } from "../src/base_command.js";
6
+ export default class Status extends BaseDeployCommand {
7
+ static commandName = 'status';
8
+ static description = 'Show server status';
9
+ async run() {
10
+ const ctx = getCtx();
11
+ const hosts = await this.selectHosts();
12
+ if (!hosts)
13
+ return;
14
+ for (const host of hosts) {
15
+ const paths = getPaths(host.deployPath, ctx.release);
16
+ this.logger.log(this.colors.bold(`\n# ${host.name}`));
17
+ try {
18
+ const current = await getCurrentRelease(ctx, host);
19
+ this.logger.log(`Release ${current ? this.colors.cyan(current) : this.colors.dim('none')}`);
20
+ if (getPipeline().includes('deploy:healthcheck')) {
21
+ try {
22
+ await ssh(host, `set -e\ncurl --fail --silent --show-error --max-time 5 ${q(host.healthcheckUrl)} >/dev/null`);
23
+ this.logger.log(`Health ${this.colors.green('OK')}`);
24
+ }
25
+ catch {
26
+ this.logger.log(`Health ${this.colors.red('FAIL')}`);
27
+ }
28
+ }
29
+ const { stdout: versionsStdout } = await ssh(host, `set +e\ncd ${q(paths.current)}\nnode --version 2>/dev/null || true\nnpm --version 2>/dev/null || true`);
30
+ const [nodeVersion, npmVersion] = versionsStdout.trim().split('\n');
31
+ this.logger.log(`Node ${this.colors.dim(nodeVersion?.trim() || 'unavailable')}`);
32
+ this.logger.log(`npm ${this.colors.dim(npmVersion?.trim() || 'unavailable')}`);
33
+ for (const hook of getStatusHooks()) {
34
+ await hook(ctx, host);
35
+ }
36
+ const { stdout: lockStdout } = await ssh(host, `set +e\n[ -f ${q(paths.lock)} ] && cat ${q(paths.lock)} || true`);
37
+ const lock = lockStdout.trim();
38
+ this.logger.log(`Lock ${lock ? this.colors.yellow(lock) : this.colors.dim('none')}`);
39
+ }
40
+ catch (error) {
41
+ this.logger.error(`status error: ${error.message}`);
42
+ }
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { BaseCommand } from '@adonisjs/ace';
2
+ export default class Version extends BaseCommand {
3
+ static commandName: string;
4
+ static description: string;
5
+ run(): Promise<void>;
6
+ }
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '@adonisjs/ace';
2
+ import { readFile } from 'fs/promises';
3
+ import { resolve, dirname } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ export default class Version extends BaseCommand {
6
+ static commandName = 'version';
7
+ static description = 'Show the current version';
8
+ async run() {
9
+ const pkgPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../package.json');
10
+ const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
11
+ this.logger.log(pkg.version);
12
+ }
13
+ }
14
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../commands/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW;IAC9C,MAAM,CAAC,WAAW,GAAG,SAAS,CAAA;IAC9B,MAAM,CAAC,WAAW,GAAG,0BAA0B,CAAA;IAE/C,KAAK,CAAC,GAAG;QACP,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAA;QACtF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QACxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './src/types.ts';
2
+ export * from './src/utils.ts';
3
+ export * from './src/task.ts';
4
+ export * from './src/host.ts';
5
+ export * from './src/define_config.ts';
package/build/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from "./src/types.js";
2
+ export * from "./src/utils.js";
3
+ export * from "./src/task.js";
4
+ export * from "./src/host.js";
5
+ export * from "./src/define_config.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,7 @@
1
+ declare module '../src/types.ts' {
2
+ interface TaskRegistry {
3
+ 'adonisjs:build': true;
4
+ 'adonisjs:migrate': true;
5
+ }
6
+ }
7
+ export {};
@@ -0,0 +1,19 @@
1
+ import { task, cd, run, after, bin, get, set } from "../index.js";
2
+ set('writable_dirs', ['storage', 'logs', 'tmp']);
3
+ set('shared_files', ['.env']);
4
+ set('adonisjs_path', '');
5
+ task('adonisjs:build', () => {
6
+ const adonisjs_path = get('adonisjs_path');
7
+ cd(`{{release_path}}${adonisjs_path}`);
8
+ run(`${bin('npm')} ci`);
9
+ run(`${bin('node')} ace build`);
10
+ run(`if [ -f package-lock.tson ]; then ${bin('npm')} ci --omit=dev; else ${bin('npm')} install --omit=dev; fi`);
11
+ });
12
+ task('adonisjs:migrate', () => {
13
+ const adonisjs_path = get('adonisjs_path');
14
+ cd(`{{release_path}}${adonisjs_path}`);
15
+ run(`${bin('node')} ace migration:run`);
16
+ });
17
+ after('deploy:shared', 'adonisjs:build');
18
+ after('adonisjs:build', 'adonisjs:migrate');
19
+ //# sourceMappingURL=adonisjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adonisjs.js","sourceRoot":"","sources":["../../recipes/adonisjs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AASjE,GAAG,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;AAChD,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;AAC7B,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;AAExB,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC1B,MAAM,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC,CAAA;IAC1C,EAAE,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAA;IACtC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACvB,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAC/B,GAAG,CACD,qCAAqC,GAAG,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAC3G,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC5B,MAAM,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC,CAAA;IAC1C,EAAE,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAA;IACtC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;AACzC,CAAC,CAAC,CAAA;AAEF,KAAK,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAA;AACxC,KAAK,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ declare module '../src/types.ts' {
2
+ interface TaskRegistry {
3
+ 'pm2:start': true;
4
+ 'pm2:reload': true;
5
+ 'pm2:logs': true;
6
+ 'pm2:list': true;
7
+ 'pm2:stop': true;
8
+ 'pm2:restart': true;
9
+ }
10
+ }
11
+ export {};