@joltdesign/scripts 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # jolt-scripts
@@ -0,0 +1,67 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Option } from 'clipanion';
11
+ import JoltCommand from './JoltCommand.js';
12
+ import chalk from 'chalk';
13
+ import shelljs from 'shelljs';
14
+ import { execC } from '../utils.js';
15
+ const { which } = shelljs;
16
+ export class ECSDeployCommand extends JoltCommand {
17
+ constructor() {
18
+ super(...arguments);
19
+ this.requiredCommands = ['aws'];
20
+ this.dev = Option.Boolean('--dev', false);
21
+ this.prod = !this.dev;
22
+ }
23
+ command() {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ var _a;
26
+ const { config, dev, context, context: { stdout, stderr }, } = this;
27
+ const awsCommand = config.command('aws');
28
+ const cluster = yield config.tfVar(dev ? 'ecs_cluster_dev' : 'ecs_cluster');
29
+ const service = yield config.tfVar(dev ? 'ecs_service_dev' : 'ecs_service');
30
+ const args = ['ecs', 'update-service', `--cluster='${cluster}'`, `--service='${service}'`, '--force-new-deployment'];
31
+ if (!cluster) {
32
+ stderr.write(chalk.red('ECS cluster must be configured!\n'));
33
+ return 1;
34
+ }
35
+ if (!service) {
36
+ stderr.write(chalk.red('ECS service must be configured!\n'));
37
+ return 1;
38
+ }
39
+ if (!which(awsCommand)) {
40
+ stderr.write(chalk.red(`Could not find command ${awsCommand}!\n`));
41
+ return 2;
42
+ }
43
+ stdout.write(chalk.blue(`⛅ Deploying service ${service} on cluster ${cluster}...\n`));
44
+ const result = yield execC(awsCommand, args, {
45
+ stderr: this.context.stderr,
46
+ env: {
47
+ AWS_PAGER: '',
48
+ },
49
+ extendEnv: true,
50
+ });
51
+ const output = (_a = result.stdout) === null || _a === void 0 ? void 0 : _a.toString();
52
+ if (!result.exitCode && output) {
53
+ const resultJson = JSON.parse(output);
54
+ const { service } = resultJson;
55
+ stdout.write(chalk.blue.bold('⛅ Started deploy:\n'));
56
+ stdout.write(`${chalk.white('Cluster ARN:')} ${service.clusterArn}\n`);
57
+ stdout.write(`${chalk.white('Service Name:')} ${service.serviceName}\n`);
58
+ stdout.write(`${chalk.white('Service ARN:')} ${service.serviceArn}\n`);
59
+ return 0;
60
+ }
61
+ stderr.write(chalk.red('Failed to deploy!\n'));
62
+ return result.exitCode;
63
+ });
64
+ }
65
+ }
66
+ ECSDeployCommand.paths = [['aws', 'ecs', 'deploy']];
67
+ //# sourceMappingURL=AWS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AWS.js","sourceRoot":"","sources":["../../src/Command/AWS.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from 'chalk';
11
+ import { Option } from 'clipanion';
12
+ import { DockerBuildCommand } from './Docker.js';
13
+ import JoltCommand from './JoltCommand.js';
14
+ export class BuildCommand extends JoltCommand {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.dev = Option.Boolean('--dev', false);
18
+ this.prod = Option.Boolean('--prod', true);
19
+ }
20
+ command() {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ const { config, context, context: { stdout, stderr }, dev, } = this;
23
+ const imageName = config.get('imageName');
24
+ if (imageName) {
25
+ stdout.write(chalk.yellow(`Found a configured image name (${imageName}) - assuming you wanted to build Docker.\n\n`));
26
+ const args = ['build', 'docker'];
27
+ args.push(dev ? '--dev' : '--prod');
28
+ return yield this.cli.run(args, context);
29
+ }
30
+ stderr.write(this.cli.usage(DockerBuildCommand));
31
+ return 1;
32
+ });
33
+ }
34
+ }
35
+ BuildCommand.paths = [['build']];
36
+ //# sourceMappingURL=Build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Build.js","sourceRoot":"","sources":["../../src/Command/Build.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAE1C,MAAM,OAAO,YAAa,SAAQ,WAAW;IAA7C;;QAGE,QAAG,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACpC,SAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAyBvC,CAAC;IAvBO,OAAO;;YACX,MAAM,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAC3B,GAAG,GACJ,GAAG,IAAI,CAAA;YAER,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAEzC,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CACV,KAAK,CAAC,MAAM,CAAC,kCAAkC,SAAS,8CAA8C,CAAC,CACxG,CAAA;gBAED,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;gBAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;gBACnC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAC1C,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAA;YAChD,OAAO,CAAC,CAAA;QACV,CAAC;KAAA;;AA3BM,kBAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,AAAd,CAAc"}
@@ -0,0 +1,91 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { stderr } from 'node:process';
11
+ import chalk from 'chalk';
12
+ import { Option } from 'clipanion';
13
+ import shelljs from 'shelljs';
14
+ import * as t from 'typanion';
15
+ import JoltCommand from './JoltCommand.js';
16
+ const { which } = shelljs;
17
+ var ConfigCommandFormat;
18
+ (function (ConfigCommandFormat) {
19
+ ConfigCommandFormat["Pretty"] = "pretty";
20
+ ConfigCommandFormat["Json"] = "json";
21
+ })(ConfigCommandFormat || (ConfigCommandFormat = {}));
22
+ export class ConfigCommand extends JoltCommand {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.format = Option.String('--format', {
26
+ required: false,
27
+ validator: t.isEnum(ConfigCommandFormat),
28
+ });
29
+ this.commands = ['aws', 'docker', 'docker-compose', 'node', 'ssh', 'tofu', 'yarn'];
30
+ }
31
+ command() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const { config, format, context: { stdout }, } = this;
34
+ if (format === undefined || format === ConfigCommandFormat.Pretty) {
35
+ stdout.write(chalk.bold.whiteBright(this.getHeader('Config')));
36
+ yield this.listCommands();
37
+ stdout.write('\n');
38
+ yield this.listConfig();
39
+ return 0;
40
+ }
41
+ if (format === ConfigCommandFormat.Json) {
42
+ stderr.write(`${config.asJson()}\n`);
43
+ return 0;
44
+ }
45
+ stderr.write(chalk.red(`Unknown format "${format}"\n`));
46
+ return 1;
47
+ });
48
+ }
49
+ listCommands() {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ const { config, commands, context: { stdout }, } = this;
52
+ stdout.write(chalk.bold.blue('Commands:\n'));
53
+ for (const commandName of commands) {
54
+ const { command, source, sourceType } = config.getCommandOverride(commandName);
55
+ stdout.write(chalk.bold(`${commandName}: `));
56
+ if (which(command)) {
57
+ stdout.write(chalk.green(command));
58
+ }
59
+ else {
60
+ stdout.write(chalk.red(`${command} ${chalk.bold('[Missing!]')}`));
61
+ }
62
+ let sourceString = '';
63
+ switch (sourceType) {
64
+ case 'env':
65
+ sourceString = `[Env var: ${source}]`;
66
+ break;
67
+ case 'config':
68
+ sourceString = `[Config: ${source}]`;
69
+ break;
70
+ }
71
+ if (sourceString) {
72
+ stdout.write(` ${chalk.gray(sourceString)}`);
73
+ }
74
+ stdout.write('\n');
75
+ }
76
+ });
77
+ }
78
+ listConfig() {
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ const { config, context: { stdout }, } = this;
81
+ const sourceString = config.configPath ? chalk.dim(`[Source file: ${config.configPath}]`) : '';
82
+ stdout.write(chalk.bold.blue(`Config: ${sourceString}\n`));
83
+ for (const [key, value] of config) {
84
+ stdout.write(chalk.bold(`${key}: `));
85
+ stdout.write(`${value}\n`);
86
+ }
87
+ });
88
+ }
89
+ }
90
+ ConfigCommand.paths = [['config']];
91
+ //# sourceMappingURL=Config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/Command/Config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from 'chalk';
11
+ import { Option } from 'clipanion';
12
+ import { ExecaError, execa } from 'execa';
13
+ import shelljs from 'shelljs';
14
+ import { execC } from '../utils.js';
15
+ import JoltCommand from './JoltCommand.js';
16
+ const { which } = shelljs;
17
+ export class DockerCommand extends JoltCommand {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.requiredCommands = ['docker'];
21
+ this.dev = Option.Boolean('--dev', false);
22
+ this.prod = !this.dev;
23
+ }
24
+ }
25
+ export class DockerBuildCommand extends DockerCommand {
26
+ command() {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ const { config, context, context: { stdout, stderr }, dev, prod, } = this;
29
+ const imageName = yield config.getDockerImageName(dev);
30
+ const imageType = dev ? 'dev' : prod ? 'prod' : 'unknown';
31
+ const dockerCommand = config.command('docker');
32
+ if (!imageName) {
33
+ stderr.write(chalk.red('Image name must be configured!\n'));
34
+ return 1;
35
+ }
36
+ if (!which(dockerCommand)) {
37
+ stderr.write(chalk.red(`Could not find command ${dockerCommand}!\n`));
38
+ return 2;
39
+ }
40
+ stdout.write(chalk.blue(`🐳 Building image ${imageName} for ${imageType} using ${dockerCommand}...\n`));
41
+ const args = yield this.buildArgs();
42
+ const command = [dockerCommand, ...args].join(' ');
43
+ stdout.write(`Running command: ${command}\n`);
44
+ const result = yield execC(dockerCommand, args, { context });
45
+ return result.exitCode;
46
+ });
47
+ }
48
+ buildArgs() {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const { config, dev } = this;
51
+ const imageName = yield config.getDockerImageName(dev);
52
+ const platform = config.get('buildPlatform');
53
+ const context = config.get('buildContext');
54
+ const dockerFile = config.get('dockerFile');
55
+ const buildArgs = dev ? '--build-arg=DEVBUILD=1' : '';
56
+ return [
57
+ 'buildx',
58
+ 'build',
59
+ platform && `--platform=${platform}`,
60
+ dockerFile && `-f ${dockerFile}`,
61
+ `-t ${imageName}`,
62
+ buildArgs,
63
+ context !== null && context !== void 0 ? context : '.',
64
+ ]
65
+ .filter((x) => !!x)
66
+ .map(String);
67
+ });
68
+ }
69
+ }
70
+ DockerBuildCommand.paths = [['docker', 'build']];
71
+ export class DockerLoginCommand extends DockerCommand {
72
+ constructor() {
73
+ super(...arguments);
74
+ this.requiredCommands = ['aws', 'docker'];
75
+ }
76
+ command() {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ var _a, _b, _c;
79
+ const { config, context: { stdout, stderr }, } = this;
80
+ // TODO get URL from ecr_repo_url, get region from repo URL
81
+ const ecrBaseUrl = (_a = config.get('ecrBaseUrl')) !== null && _a !== void 0 ? _a : (yield config.tfVar('ecr_base_url'));
82
+ const region = (_c = (_b = config.get('awsRegion')) !== null && _b !== void 0 ? _b : (yield config.tfVar('region'))) !== null && _c !== void 0 ? _c : config.awsRegion();
83
+ stdout.write(chalk.blue(`🐳 Logging in to ECR repository ${ecrBaseUrl} on ${region}...\n`));
84
+ try {
85
+ const result = yield execa(config.command('aws'), ['ecr', 'get-login-password', '--region', region]).pipe(config.command('docker'), ['login', '--username', 'AWS', '--password-stdin', ecrBaseUrl], { stdout, stderr });
86
+ return result.exitCode;
87
+ }
88
+ catch (e) {
89
+ if (e instanceof ExecaError) {
90
+ stderr.write(chalk.red(`Failed to log in! Reason: ${e.message}\n`));
91
+ return e.exitCode;
92
+ }
93
+ throw e;
94
+ }
95
+ });
96
+ }
97
+ }
98
+ DockerLoginCommand.paths = [['docker', 'login']];
99
+ export class DockerTagCommand extends DockerCommand {
100
+ command() {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ const { config, dev, context, context: { stdout, stderr }, } = this;
103
+ const dockerCommand = config.command('docker');
104
+ const imageName = yield config.getDockerImageName(dev);
105
+ const remoteRepo = yield config.getRemoteRepo(dev);
106
+ const localTag = 'latest';
107
+ const remoteTag = 'latest';
108
+ const args = ['tag', `${imageName}:${localTag}`, `${remoteRepo}:${remoteTag}`];
109
+ if (!imageName) {
110
+ stderr.write(chalk.red('Image name must be configured!\n'));
111
+ return 1;
112
+ }
113
+ if (!which(dockerCommand)) {
114
+ stderr.write(chalk.red(`Could not find command ${dockerCommand}!\n`));
115
+ return 2;
116
+ }
117
+ stdout.write(chalk.blue(`🐳 Tagging image ${imageName}:${localTag} as ${remoteRepo}:${remoteTag}...\n`));
118
+ // const command = [dockerCommand, ...args].join(' ')
119
+ // stdout.write(`Running command: ${command}\n`)
120
+ const result = yield execC(dockerCommand, args, { context });
121
+ return result.exitCode;
122
+ });
123
+ }
124
+ }
125
+ DockerTagCommand.paths = [['docker', 'tag']];
126
+ export class DockerPushCommand extends DockerCommand {
127
+ command() {
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ const { config, dev, context, context: { stdout, stderr }, } = this;
130
+ const dockerCommand = config.command('docker');
131
+ const remoteRepo = yield config.getRemoteRepo(dev);
132
+ const remoteTag = 'latest';
133
+ const args = ['push', `${remoteRepo}:${remoteTag}`];
134
+ if (!remoteRepo) {
135
+ stderr.write(chalk.red('Remote repo must be configured!\n'));
136
+ return 1;
137
+ }
138
+ if (!which(dockerCommand)) {
139
+ stderr.write(chalk.red(`Could not find command ${dockerCommand}!\n`));
140
+ return 2;
141
+ }
142
+ stdout.write(chalk.blue(`🐳 Pushing image ${remoteRepo}:${remoteTag}...\n`));
143
+ // const command = [dockerCommand, ...args].join(' ')
144
+ // stdout.write(`Running command: ${command}\n`)
145
+ const result = yield execC(dockerCommand, args, { context });
146
+ return result.exitCode;
147
+ });
148
+ }
149
+ }
150
+ DockerPushCommand.paths = [['docker', 'push']];
151
+ //# sourceMappingURL=Docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Docker.js","sourceRoot":"","sources":["../../src/Command/Docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import chalk from 'chalk';
11
+ import { Command } from 'clipanion';
12
+ import shelljs from 'shelljs';
13
+ import getConfig from '../Config.js';
14
+ const { which } = shelljs;
15
+ export default class JoltCommand extends Command {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.logo = chalk.magentaBright('⚡');
19
+ this.requiredCommands = [];
20
+ }
21
+ getHeader(suffix = '') {
22
+ const header = chalk.whiteBright(`${this.logo} ${this.cli.binaryLabel}`);
23
+ return [header, suffix, '\n\n'].filter((x) => !!x).join(' ');
24
+ }
25
+ execute() {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ const { stderr } = this.context;
28
+ const config = yield getConfig();
29
+ this.config = config;
30
+ if (this.requiredCommands && !process.env.JOLT_IGNORE_REQUIRED_COMMANDS) {
31
+ const missingCommands = [];
32
+ for (const baseCommand of this.requiredCommands) {
33
+ const realCommand = config.command(baseCommand);
34
+ if (!which(realCommand)) {
35
+ missingCommands.push(realCommand);
36
+ }
37
+ }
38
+ if (missingCommands.length > 0) {
39
+ stderr.write(this.getHeader());
40
+ stderr.write(chalk.red('Missing the following commands:\n'));
41
+ for (const missingCommand of missingCommands) {
42
+ stderr.write(chalk.red(`- ${missingCommand}\n`));
43
+ }
44
+ stderr.write('\n\nSee `jolt config` for more information.\n');
45
+ return 4;
46
+ }
47
+ }
48
+ return yield this.command();
49
+ });
50
+ }
51
+ }
52
+ //# sourceMappingURL=JoltCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JoltCommand.js","sourceRoot":"","sources":["../../src/Command/JoltCommand.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,SAAS,MAAM,cAAc,CAAA;AACpC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;AAEzB,MAAM,CAAC,OAAO,OAAgB,WAAY,SAAQ,OAAO;IAAzD;;QACE,SAAI,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAE/B,qBAAgB,GAAa,EAAE,CAAA;IAwCjC,CAAC;IApCC,SAAS,CAAC,MAAM,GAAG,EAAE;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;QACxE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9D,CAAC;IAEK,OAAO;;YACX,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;YAC/B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;YAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YAEpB,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC;gBACxE,MAAM,eAAe,GAAG,EAAE,CAAA;gBAE1B,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAChD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;oBAE/C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;wBACxB,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;oBACnC,CAAC;gBACH,CAAC;gBAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;oBAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAA;oBAE5D,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;wBAC7C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,cAAc,IAAI,CAAC,CAAC,CAAA;oBAClD,CAAC;oBAED,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;oBAC7D,OAAO,CAAC,CAAA;gBACV,CAAC;YACH,CAAC;YAED,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QAC7B,CAAC;KAAA;CACF"}
@@ -0,0 +1,79 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { userInfo } from 'node:os';
11
+ import chalk from 'chalk';
12
+ import { Option } from 'clipanion';
13
+ import { execC } from '../utils.js';
14
+ import JoltCommand from './JoltCommand.js';
15
+ export class WPCommand extends JoltCommand {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.wpArgs = Option.Proxy();
19
+ }
20
+ command() {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ const { config, context, context: { stderr }, } = this;
23
+ const containerName = yield this.getContainerName();
24
+ if (!containerName) {
25
+ stderr.write(chalk.red(`Couldn't find a WP CLI container. Set it with the 'wpCliContainer' config key.\n`));
26
+ return 1;
27
+ }
28
+ const { uid, gid } = userInfo();
29
+ // On Windows, uid is -1 so we shouldn't try to set the user
30
+ const userArg = uid !== undefined && uid !== -1 && `--user='${uid}:${gid}'`;
31
+ const profile = yield this.getContainerProfile(containerName);
32
+ const args = [
33
+ profile ? `--profile=${profile}` : '',
34
+ 'run',
35
+ '--rm',
36
+ userArg || '',
37
+ containerName,
38
+ 'wp',
39
+ ...this.wpArgs,
40
+ ];
41
+ const result = yield execC(config.command('docker compose'), args, { context, reject: false });
42
+ return result.exitCode;
43
+ });
44
+ }
45
+ getContainerName() {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ var _a;
48
+ const { config } = this;
49
+ if (config.has('wpCliContainer')) {
50
+ return config.get('wpCliContainer');
51
+ }
52
+ const composeConfig = yield config.getComposeConfig();
53
+ if (!composeConfig) {
54
+ return undefined;
55
+ }
56
+ for (const [key, service] of Object.entries(composeConfig.services)) {
57
+ if ((_a = service.image) === null || _a === void 0 ? void 0 : _a.match(/\bwp[_-]cli\b/i)) {
58
+ return key;
59
+ }
60
+ }
61
+ });
62
+ }
63
+ getContainerProfile(container) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const { config } = this;
66
+ if (config.has('wpCliContainerProfile')) {
67
+ return config.get('wpCliContainerProfile');
68
+ }
69
+ const composeConfig = yield config.getComposeConfig();
70
+ if (!composeConfig) {
71
+ return undefined;
72
+ }
73
+ const service = composeConfig.services[container];
74
+ return service.profiles ? service.profiles[0] : undefined;
75
+ });
76
+ }
77
+ }
78
+ WPCommand.paths = [['wp'], ['wp-cli']];
79
+ //# sourceMappingURL=WP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WP.js","sourceRoot":"","sources":["../../src/Command/WP.ts"],"names":[],"mappings":"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"}
package/bin/Config.js ADDED
@@ -0,0 +1,229 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { readFile } from 'node:fs/promises';
11
+ import path from 'node:path';
12
+ import dotenv from 'dotenv';
13
+ import shelljs from 'shelljs';
14
+ import { constToCamel, execC, fileExists } from './utils.js';
15
+ const { which } = shelljs;
16
+ function parseEnvFile(env) {
17
+ const parsed = {};
18
+ for (const [k, v] of Object.entries(env)) {
19
+ parsed[constToCamel(k)] = v;
20
+ }
21
+ return parsed;
22
+ }
23
+ export const DEFAULT_AWS_REGION = 'eu-west-1';
24
+ export class Config {
25
+ get configPath() {
26
+ return this._configPath;
27
+ }
28
+ *[Symbol.iterator]() {
29
+ for (const entry of Object.entries(this.config)) {
30
+ yield entry;
31
+ }
32
+ }
33
+ constructor(config = {}, configPath = undefined) {
34
+ this.config = config;
35
+ if (configPath) {
36
+ this._configPath = path.resolve(configPath);
37
+ }
38
+ }
39
+ command(name) {
40
+ return this.getCommandOverride(name).command;
41
+ }
42
+ getCommandOverride(command) {
43
+ let envVar;
44
+ let def;
45
+ switch (command) {
46
+ case 'docker':
47
+ def = 'docker';
48
+ envVar = 'DOCKER_COMMAND';
49
+ break;
50
+ case 'compose':
51
+ case 'docker compose':
52
+ case 'docker-compose':
53
+ case 'docker_compose':
54
+ def = 'docker compose';
55
+ envVar = 'COMPOSE_COMMAND';
56
+ break;
57
+ case 'tofu':
58
+ case 'terraform':
59
+ def = which('tofu') ? 'tofu' : 'terraform';
60
+ envVar = 'TERRAFORM_COMMAND';
61
+ break;
62
+ case 'node':
63
+ def = 'node';
64
+ envVar = 'NODE_COMMAND';
65
+ break;
66
+ case 'yarn':
67
+ def = 'yarn';
68
+ envVar = 'YARN_COMMAND';
69
+ break;
70
+ case 'aws':
71
+ def = 'aws';
72
+ envVar = 'AWS_COMMAND';
73
+ break;
74
+ case 'ssh':
75
+ def = 'ssh';
76
+ envVar = 'SSH_COMMAND';
77
+ break;
78
+ default:
79
+ return { command, source: 'unknown', sourceType: 'unknown' };
80
+ }
81
+ const toTry = [`JOLT_${envVar}`, envVar];
82
+ for (const varName of toTry) {
83
+ if (process.env[varName]) {
84
+ return {
85
+ command: process.env[varName],
86
+ source: varName,
87
+ sourceType: 'env',
88
+ };
89
+ }
90
+ }
91
+ const configName = constToCamel(envVar);
92
+ const configuredValue = this.get(configName);
93
+ if (configuredValue) {
94
+ return {
95
+ command: configuredValue,
96
+ source: configName,
97
+ sourceType: 'config',
98
+ };
99
+ }
100
+ return {
101
+ command: def,
102
+ source: 'Default',
103
+ sourceType: 'default',
104
+ };
105
+ }
106
+ get(key) {
107
+ return this.config[key];
108
+ }
109
+ has(key) {
110
+ return key in this.config;
111
+ }
112
+ // biome-ignore lint/suspicious/noExplicitAny: the TF var could be anything
113
+ tfVar(key_1) {
114
+ return __awaiter(this, arguments, void 0, function* (key, throwOnFail = false) {
115
+ var _a;
116
+ try {
117
+ const result = yield execC(this.command('tofu'), ['output', '-json', key]);
118
+ const output = (_a = result.stdout) === null || _a === void 0 ? void 0 : _a.toString();
119
+ if (output !== undefined) {
120
+ return JSON.parse(output);
121
+ }
122
+ }
123
+ catch (e) {
124
+ if (throwOnFail) {
125
+ throw e;
126
+ }
127
+ }
128
+ });
129
+ }
130
+ awsRegion() {
131
+ var _a;
132
+ return (_a = process.env.AWS_REGION) !== null && _a !== void 0 ? _a : DEFAULT_AWS_REGION;
133
+ }
134
+ getDockerImageName() {
135
+ return __awaiter(this, arguments, void 0, function* (isDev = false) {
136
+ if (isDev) {
137
+ if (this.has('devImageName')) {
138
+ return this.get('devImageName');
139
+ }
140
+ const tfDevImageName = yield this.tfVar('dev_docker_image_name');
141
+ if (tfDevImageName) {
142
+ return tfDevImageName;
143
+ }
144
+ if (this.has('imageName')) {
145
+ return `${this.get('imageName')}-dev`;
146
+ }
147
+ const tfImageName = yield this.tfVar('docker_image_name');
148
+ if (tfImageName) {
149
+ return `${tfImageName}-dev`;
150
+ }
151
+ return undefined;
152
+ }
153
+ if (this.has('imageName')) {
154
+ return this.get('imageName');
155
+ }
156
+ const tfImageName = yield this.tfVar('docker_image_name');
157
+ if (tfImageName) {
158
+ return tfImageName;
159
+ }
160
+ });
161
+ }
162
+ getRemoteRepo() {
163
+ return __awaiter(this, arguments, void 0, function* (isDev = false) {
164
+ if (isDev) {
165
+ if (this.has('devRemoteRepo')) {
166
+ return this.get('devRemoteRepo');
167
+ }
168
+ const tfDevEcrRepo = yield this.tfVar('dev_ecr_url');
169
+ if (tfDevEcrRepo) {
170
+ return tfDevEcrRepo;
171
+ }
172
+ return undefined;
173
+ }
174
+ if (this.has('remoteRepo')) {
175
+ return this.get('remoteRepo');
176
+ }
177
+ const tfEcrRepo = yield this.tfVar('ecr_url');
178
+ if (tfEcrRepo) {
179
+ return tfEcrRepo;
180
+ }
181
+ });
182
+ }
183
+ getComposeConfig() {
184
+ return __awaiter(this, arguments, void 0, function* (throwOnFail = false) {
185
+ var _a;
186
+ if (this.composeConfig !== undefined) {
187
+ return this.composeConfig || undefined;
188
+ }
189
+ try {
190
+ const result = yield execC(this.command('docker compose'), ["--profile='*'", 'config', '--format=json']);
191
+ const output = (_a = result.stdout) === null || _a === void 0 ? void 0 : _a.toString();
192
+ if (output !== undefined) {
193
+ const parsed = JSON.parse(output);
194
+ this.composeConfig = parsed;
195
+ return parsed;
196
+ }
197
+ }
198
+ catch (e) {
199
+ if (throwOnFail) {
200
+ throw e;
201
+ }
202
+ this.composeConfig = false;
203
+ return undefined;
204
+ }
205
+ });
206
+ }
207
+ asJson() {
208
+ return JSON.stringify(this.config);
209
+ }
210
+ }
211
+ let cachedConfig;
212
+ export default function getConfig() {
213
+ return __awaiter(this, void 0, void 0, function* () {
214
+ if (!cachedConfig) {
215
+ const paths = ['./bin/.env', '.env'];
216
+ for (const path of paths) {
217
+ if (yield fileExists(path)) {
218
+ const contents = yield readFile(path);
219
+ const parsedConfig = parseEnvFile(dotenv.parse(contents));
220
+ cachedConfig = new Config(parsedConfig, path);
221
+ break;
222
+ }
223
+ }
224
+ cachedConfig || (cachedConfig = new Config());
225
+ }
226
+ return cachedConfig;
227
+ });
228
+ }
229
+ //# sourceMappingURL=Config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.js","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"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"}
package/bin/cli.js ADDED
@@ -0,0 +1,22 @@
1
+ import { Cli } from 'clipanion';
2
+ import { BuildCommand } from './Command/Build.js';
3
+ import { ConfigCommand } from './Command/Config.js';
4
+ import { DockerBuildCommand, DockerLoginCommand, DockerPushCommand, DockerTagCommand } from './Command/Docker.js';
5
+ import { WPCommand } from './Command/WP.js';
6
+ import { ECSDeployCommand } from './Command/AWS.js';
7
+ const [node, app, ...args] = process.argv;
8
+ const cli = new Cli({
9
+ binaryLabel: 'Jolt Scripts',
10
+ binaryName: 'jolt',
11
+ binaryVersion: '1.0.0',
12
+ });
13
+ cli.register(BuildCommand);
14
+ cli.register(ConfigCommand);
15
+ cli.register(DockerBuildCommand);
16
+ cli.register(DockerLoginCommand);
17
+ cli.register(DockerTagCommand);
18
+ cli.register(DockerPushCommand);
19
+ cli.register(WPCommand);
20
+ cli.register(ECSDeployCommand);
21
+ cli.runExit(args);
22
+ //# sourceMappingURL=cli.js.map
package/bin/cli.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACjH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAA;AAEzC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;IAClB,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,OAAO;CACvB,CAAC,CAAA;AAEF,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;AAC1B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;AAC3B,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;AAChC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;AAChC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;AAC9B,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;AAC/B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;AACvB,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;AAC9B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
package/bin/utils.js ADDED
@@ -0,0 +1,39 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { stat } from 'node:fs/promises';
11
+ import { execa } from 'execa';
12
+ export function fileExists(path) {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ try {
15
+ return (yield stat(path)).isFile();
16
+ }
17
+ catch (e) {
18
+ return false;
19
+ }
20
+ });
21
+ }
22
+ export function constToCamel(key) {
23
+ let parts = key.split('_');
24
+ parts = parts.map((x) => x.toLocaleLowerCase().replace(/^./, (y) => y.toLocaleUpperCase()));
25
+ parts[0] = parts[0].toLocaleLowerCase();
26
+ return parts.join('');
27
+ }
28
+ export function execC(command_1) {
29
+ return __awaiter(this, arguments, void 0, function* (command, args = [], options = {}) {
30
+ const allOptions = Object.assign({ shell: true }, options);
31
+ if (options.context) {
32
+ allOptions.stdin || (allOptions.stdin = options.context.stdin);
33
+ allOptions.stdout || (allOptions.stdout = options.context.stdout);
34
+ allOptions.stderr || (allOptions.stderr = options.context.stderr);
35
+ }
36
+ return yield execa(command, args, allOptions);
37
+ });
38
+ }
39
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAGvC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAM7B,MAAM,UAAgB,UAAU,CAAC,IAAc;;QAC7C,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CAAA;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;IAC3F,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAA;IAEvC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACvB,CAAC;AAED,MAAM,UAAgB,KAAK;yDAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,UAAwB,EAAE;QAC1F,MAAM,UAAU,mBACd,KAAK,EAAE,IAAI,IACR,OAAO,CACX,CAAA;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,UAAU,CAAC,KAAK,KAAhB,UAAU,CAAC,KAAK,GAAK,OAAO,CAAC,OAAO,CAAC,KAAK,EAAA;YAC1C,UAAU,CAAC,MAAM,KAAjB,UAAU,CAAC,MAAM,GAAK,OAAO,CAAC,OAAO,CAAC,MAAM,EAAA;YAC5C,UAAU,CAAC,MAAM,KAAjB,UAAU,CAAC,MAAM,GAAK,OAAO,CAAC,OAAO,CAAC,MAAM,EAAA;QAC9C,CAAC;QAED,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;IAC/C,CAAC;CAAA"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@joltdesign/scripts",
3
+ "packageManager": "yarn@4.9.1+sha512.f95ce356460e05be48d66401c1ae64ef84d163dd689964962c6888a9810865e39097a5e9de748876c2e0bf89b232d583c33982773e9903ae7a76257270986538",
4
+ "bin": {
5
+ "jolt": "./bin/cli.js"
6
+ },
7
+ "version": "0.1.0",
8
+ "type": "module",
9
+ "devDependencies": {
10
+ "@biomejs/biome": "1.9.4",
11
+ "@types/node": "^22.15.18",
12
+ "@types/shelljs": "^0",
13
+ "typescript": "^5.8.3"
14
+ },
15
+ "files": [
16
+ "/bin"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "debug": "node --inspect-brk ./bin/cli.js",
21
+ "lint": "biome check",
22
+ "fmt": "biome format",
23
+ "watch": "tsc -w"
24
+ },
25
+ "dependencies": {
26
+ "chalk": "^5.4.1",
27
+ "clipanion": "^4.0.0-rc.4",
28
+ "dotenv": "^16.5.0",
29
+ "execa": "^9.5.3",
30
+ "shelljs": "^0.10.0",
31
+ "typanion": "^3.14.0"
32
+ }
33
+ }