indraq_cli 1.3.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1031 -662
- package/dist/cli/create-program.d.ts.map +1 -1
- package/dist/cli/create-program.js +6 -6
- package/dist/cli/create-program.js.map +1 -1
- package/dist/cli/doctor.command.d.ts.map +1 -1
- package/dist/cli/doctor.command.js +23 -0
- package/dist/cli/doctor.command.js.map +1 -1
- package/dist/modules/configure/configure.command.d.ts.map +1 -0
- package/dist/modules/configure/configure.command.js +116 -0
- package/dist/modules/configure/configure.command.js.map +1 -0
- package/dist/modules/deploy/commands/build.command.d.ts +2 -2
- package/dist/modules/deploy/commands/build.command.d.ts.map +1 -1
- package/dist/modules/deploy/commands/build.command.js +45 -16
- package/dist/modules/deploy/commands/build.command.js.map +1 -1
- package/dist/modules/deploy/commands/configure-docker.command.d.ts +2 -0
- package/dist/modules/deploy/commands/configure-docker.command.d.ts.map +1 -0
- package/dist/modules/deploy/commands/configure-docker.command.js +169 -0
- package/dist/modules/deploy/commands/configure-docker.command.js.map +1 -0
- package/dist/modules/deploy/config/docker-config.d.ts +21 -0
- package/dist/modules/deploy/config/docker-config.d.ts.map +1 -0
- package/dist/modules/deploy/config/docker-config.js +187 -0
- package/dist/modules/deploy/config/docker-config.js.map +1 -0
- package/dist/modules/deploy/index.d.ts.map +1 -1
- package/dist/modules/deploy/index.js +9 -26
- package/dist/modules/deploy/index.js.map +1 -1
- package/dist/modules/mobile/commands/build-mobile.command.d.ts +11 -0
- package/dist/modules/mobile/commands/build-mobile.command.d.ts.map +1 -0
- package/dist/modules/mobile/commands/build-mobile.command.js +188 -0
- package/dist/modules/mobile/commands/build-mobile.command.js.map +1 -0
- package/dist/modules/mobile/commands/configure-mobile.command.d.ts +8 -0
- package/dist/modules/mobile/commands/configure-mobile.command.d.ts.map +1 -0
- package/dist/modules/mobile/commands/configure-mobile.command.js +353 -0
- package/dist/modules/mobile/commands/configure-mobile.command.js.map +1 -0
- package/dist/modules/mobile/config/mobile-config.d.ts +43 -0
- package/dist/modules/mobile/config/mobile-config.d.ts.map +1 -0
- package/dist/modules/mobile/config/mobile-config.js +211 -0
- package/dist/modules/mobile/config/mobile-config.js.map +1 -0
- package/dist/modules/mobile/index.d.ts +3 -0
- package/dist/modules/mobile/index.d.ts.map +1 -0
- package/dist/modules/mobile/index.js +50 -0
- package/dist/modules/mobile/index.js.map +1 -0
- package/dist/modules/mobile/services/jenkins-mobile.service.d.ts +31 -0
- package/dist/modules/mobile/services/jenkins-mobile.service.d.ts.map +1 -0
- package/dist/modules/mobile/services/jenkins-mobile.service.js +175 -0
- package/dist/modules/mobile/services/jenkins-mobile.service.js.map +1 -0
- package/dist/modules/mobile/services/project.service.d.ts +11 -0
- package/dist/modules/mobile/services/project.service.d.ts.map +1 -0
- package/dist/modules/mobile/services/project.service.js +73 -0
- package/dist/modules/mobile/services/project.service.js.map +1 -0
- package/dist/modules/mobile/services/source-bundle.service.d.ts +9 -0
- package/dist/modules/mobile/services/source-bundle.service.d.ts.map +1 -0
- package/dist/modules/mobile/services/source-bundle.service.js +114 -0
- package/dist/modules/mobile/services/source-bundle.service.js.map +1 -0
- package/dist/modules/mobile/services/version-sync.service.d.ts +7 -0
- package/dist/modules/mobile/services/version-sync.service.d.ts.map +1 -0
- package/dist/modules/mobile/services/version-sync.service.js +88 -0
- package/dist/modules/mobile/services/version-sync.service.js.map +1 -0
- package/dist/shared/config/config-files.d.ts +5 -0
- package/dist/shared/config/config-files.d.ts.map +1 -0
- package/dist/shared/config/config-files.js +88 -0
- package/dist/shared/config/config-files.js.map +1 -0
- package/dist/shared/config/jenkins-config.d.ts +36 -0
- package/dist/shared/config/jenkins-config.d.ts.map +1 -0
- package/dist/shared/config/jenkins-config.js +164 -0
- package/dist/shared/config/jenkins-config.js.map +1 -0
- package/dist/shared/jenkins/configure-jenkins.d.ts +7 -0
- package/dist/shared/jenkins/configure-jenkins.d.ts.map +1 -0
- package/dist/shared/jenkins/configure-jenkins.js +84 -0
- package/dist/shared/jenkins/configure-jenkins.js.map +1 -0
- package/dist/{modules/deploy/services → shared/jenkins}/jenkins.service.d.ts +5 -4
- package/dist/shared/jenkins/jenkins.service.d.ts.map +1 -0
- package/dist/{modules/deploy/services → shared/jenkins}/jenkins.service.js +43 -89
- package/dist/shared/jenkins/jenkins.service.js.map +1 -0
- package/dist/shared/runtime/runtime-doctor.js.map +1 -1
- package/package.json +10 -5
- package/templates/jenkins/Jenkinsfile-Mobile-App +633 -0
- package/dist/modules/deploy/commands/configure.command.d.ts.map +0 -1
- package/dist/modules/deploy/commands/configure.command.js +0 -404
- package/dist/modules/deploy/commands/configure.command.js.map +0 -1
- package/dist/modules/deploy/config/deployment-config.d.ts +0 -29
- package/dist/modules/deploy/config/deployment-config.d.ts.map +0 -1
- package/dist/modules/deploy/config/deployment-config.js +0 -164
- package/dist/modules/deploy/config/deployment-config.js.map +0 -1
- package/dist/modules/deploy/services/jenkins.service.d.ts.map +0 -1
- package/dist/modules/deploy/services/jenkins.service.js.map +0 -1
- /package/dist/modules/{deploy/commands → configure}/configure.command.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-program.d.ts","sourceRoot":"","sources":["../../src/cli/create-program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"create-program.d.ts","sourceRoot":"","sources":["../../src/cli/create-program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,QAAO,OAsBhC,CAAC"}
|
|
@@ -3,25 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createProgram = void 0;
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
5
|
const deploy_1 = require("../modules/deploy");
|
|
6
|
-
const
|
|
6
|
+
const mobile_1 = require("../modules/mobile");
|
|
7
|
+
const configure_command_1 = require("../modules/configure/configure.command");
|
|
7
8
|
const doctor_command_1 = require("./doctor.command");
|
|
8
9
|
const createProgram = () => {
|
|
9
10
|
const program = new commander_1.Command();
|
|
10
11
|
program
|
|
11
12
|
.name('indraq')
|
|
12
13
|
.description('IndraQ internal engineering CLI.')
|
|
13
|
-
.version('1.
|
|
14
|
+
.version('1.5.1');
|
|
14
15
|
program
|
|
15
16
|
.command('doctor')
|
|
16
17
|
.description('Diagnose Node and command-resolution problems.')
|
|
17
18
|
.action(() => (0, doctor_command_1.doctor)());
|
|
18
19
|
program
|
|
19
20
|
.command('configure')
|
|
20
|
-
.description('Configure
|
|
21
|
-
.action(async () =>
|
|
22
|
-
await (0, configure_command_1.configure)();
|
|
23
|
-
});
|
|
21
|
+
.description('Configure Jenkins, Docker/GHCR, and Mobile App settings for the current project.')
|
|
22
|
+
.action(async () => (0, configure_command_1.configure)());
|
|
24
23
|
(0, deploy_1.registerDeployModule)(program);
|
|
24
|
+
(0, mobile_1.registerMobileModule)(program);
|
|
25
25
|
return program;
|
|
26
26
|
};
|
|
27
27
|
exports.createProgram = createProgram;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-program.js","sourceRoot":"","sources":["../../src/cli/create-program.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,8CAAyD;AACzD,
|
|
1
|
+
{"version":3,"file":"create-program.js","sourceRoot":"","sources":["../../src/cli/create-program.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,8CAAyD;AACzD,8CAAyD;AACzD,8EAAmE;AACnE,qDAA0C;AAEnC,MAAM,aAAa,GAAG,GAAY,EAAE;IACzC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,kCAAkC,CAAC;SAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAM,GAAE,CAAC,CAAC;IAE1B,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kFAAkF,CAAC;SAC/F,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,IAAA,6BAAS,GAAE,CAAC,CAAC;IAEnC,IAAA,6BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,6BAAoB,EAAC,OAAO,CAAC,CAAC;IAE9B,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAtBW,QAAA,aAAa,iBAsBxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.command.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.command.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.command.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,MAAM,QAAO,IA+BzB,CAAC"}
|
|
@@ -5,12 +5,35 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.doctor = void 0;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
9
|
const runtime_doctor_1 = require("../shared/runtime/runtime-doctor");
|
|
10
|
+
const checkCommand = (command, args, label) => {
|
|
11
|
+
const result = (0, node_child_process_1.spawnSync)(command, args, {
|
|
12
|
+
encoding: 'utf8',
|
|
13
|
+
stdio: ['ignore', 'pipe', 'pipe']
|
|
14
|
+
});
|
|
15
|
+
if (result.error || result.status !== 0) {
|
|
16
|
+
console.log(chalk_1.default.red(`✗ ${label} not found in PATH`));
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const output = `${result.stdout || ''}\n${result.stderr || ''}`.trim().split(/\r?\n/)[0] ?? '';
|
|
20
|
+
console.log(chalk_1.default.green(`✓ ${label}${output ? ` — ${output}` : ''}`));
|
|
21
|
+
return true;
|
|
22
|
+
};
|
|
9
23
|
const doctor = () => {
|
|
10
24
|
console.log(chalk_1.default.bold('\nIndraQ CLI Doctor\n'));
|
|
11
25
|
console.log(`Node: ${process.version}`);
|
|
12
26
|
console.log(`Platform: ${process.platform} ${process.arch}`);
|
|
13
27
|
console.log(`CLI file: ${process.argv[1] ?? 'unknown'}\n`);
|
|
28
|
+
const major = Number(process.versions.node.split('.')[0]);
|
|
29
|
+
if (major >= 22)
|
|
30
|
+
console.log(chalk_1.default.green('✓ Node.js version is supported (22+).'));
|
|
31
|
+
else
|
|
32
|
+
console.log(chalk_1.default.red('✗ Node.js 22 or newer is required.'));
|
|
33
|
+
checkCommand('java', ['-version'], 'Java');
|
|
34
|
+
checkCommand('git', ['--version'], 'Git');
|
|
35
|
+
checkCommand('tar', ['--version'], 'tar');
|
|
36
|
+
console.log('');
|
|
14
37
|
const resolution = (0, runtime_doctor_1.resolveCommand)('indraq');
|
|
15
38
|
if (resolution.paths.length) {
|
|
16
39
|
console.log('Command resolution order:');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.command.js","sourceRoot":"","sources":["../../src/cli/doctor.command.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,qEAAkE;
|
|
1
|
+
{"version":3,"file":"doctor.command.js","sourceRoot":"","sources":["../../src/cli/doctor.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.command.d.ts","sourceRoot":"","sources":["../../../src/modules/configure/configure.command.ts"],"names":[],"mappings":"AA8FA,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,IAAI,CA8B9C,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.configure = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const configure_docker_command_1 = require("../deploy/commands/configure-docker.command");
|
|
10
|
+
const jenkins_config_1 = require("../../shared/config/jenkins-config");
|
|
11
|
+
const configure_jenkins_1 = require("../../shared/jenkins/configure-jenkins");
|
|
12
|
+
const configure_mobile_command_1 = require("../mobile/commands/configure-mobile.command");
|
|
13
|
+
const docker_config_1 = require("../deploy/config/docker-config");
|
|
14
|
+
const mobile_config_1 = require("../mobile/config/mobile-config");
|
|
15
|
+
const credentialStatus = (environment) => {
|
|
16
|
+
const binding = (0, jenkins_config_1.getJenkinsLocalBindingsConfig)().environments[environment];
|
|
17
|
+
return binding ? 'credentials available on this computer' : 'credentials not configured on this computer';
|
|
18
|
+
};
|
|
19
|
+
const printJenkinsReview = () => {
|
|
20
|
+
const config = (0, jenkins_config_1.getJenkinsConnectionsConfig)();
|
|
21
|
+
console.log(chalk_1.default.blue.bold('\n📋 Jenkins connections\n'));
|
|
22
|
+
console.log(` Development: ${config.environments.dev ? `${config.environments.dev.url} — ${credentialStatus('dev')}` : '<not configured>'}`);
|
|
23
|
+
console.log(` Production: ${config.environments.prod ? `${config.environments.prod.url} — ${credentialStatus('prod')}` : '<not configured>'}`);
|
|
24
|
+
console.log(chalk_1.default.gray('\n Docker Development uses Development Jenkins.'));
|
|
25
|
+
console.log(chalk_1.default.gray(' Docker Production uses Production Jenkins.'));
|
|
26
|
+
console.log(chalk_1.default.gray(' ALL Mobile Development/Staging/Production builds use Production Jenkins.'));
|
|
27
|
+
console.log(chalk_1.default.gray(' Jenkins URL/transport are project-shared. Username/token/password are local only and never committed.'));
|
|
28
|
+
console.log(chalk_1.default.gray(` Shared config: ${(0, jenkins_config_1.getJenkinsConnectionsConfigPath)()}\n`));
|
|
29
|
+
};
|
|
30
|
+
const configureJenkins = async () => {
|
|
31
|
+
const config = (0, jenkins_config_1.getJenkinsConnectionsConfig)();
|
|
32
|
+
const local = (0, jenkins_config_1.getJenkinsLocalBindingsConfig)();
|
|
33
|
+
while (true) {
|
|
34
|
+
const { target } = await inquirer_1.default.prompt([
|
|
35
|
+
{
|
|
36
|
+
type: 'list',
|
|
37
|
+
name: 'target',
|
|
38
|
+
message: 'Jenkins — which environment do you want to configure?',
|
|
39
|
+
choices: [
|
|
40
|
+
{ name: `Development (${config.environments.dev?.url || 'not configured'})`, value: 'dev' },
|
|
41
|
+
{ name: `Production (${config.environments.prod?.url || 'not configured'}) — used by all mobile builds`, value: 'prod' },
|
|
42
|
+
new inquirer_1.default.Separator(),
|
|
43
|
+
{ name: 'Review Jenkins connections', value: 'review' },
|
|
44
|
+
{ name: 'Back', value: 'back' }
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
]);
|
|
48
|
+
if (target === 'back')
|
|
49
|
+
return;
|
|
50
|
+
if (target === 'review') {
|
|
51
|
+
printJenkinsReview();
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const result = await (0, configure_jenkins_1.promptForJenkinsConnection)(config.environments[target], local.environments[target], target === 'dev'
|
|
55
|
+
? 'Development Jenkins'
|
|
56
|
+
: 'Production Jenkins (Docker Production + all Mobile builds)');
|
|
57
|
+
config.environments[target] = result.endpoint;
|
|
58
|
+
local.environments[target] = result.binding;
|
|
59
|
+
(0, jenkins_config_1.saveJenkinsConnectionsConfig)(config);
|
|
60
|
+
(0, jenkins_config_1.saveJenkinsLocalBindingsConfig)(local);
|
|
61
|
+
console.log(chalk_1.default.green('✓ Jenkins connection saved. Returning to Jenkins settings.\n'));
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const reviewEverything = () => {
|
|
65
|
+
console.log(chalk_1.default.blue.bold('\nIndraQ project configuration\n'));
|
|
66
|
+
printJenkinsReview();
|
|
67
|
+
const docker = (0, docker_config_1.getDockerConfig)();
|
|
68
|
+
if (!docker)
|
|
69
|
+
console.log(chalk_1.default.yellow('Docker / GHCR: not configured\n'));
|
|
70
|
+
else {
|
|
71
|
+
console.log(chalk_1.default.blue.bold('Docker / GHCR'));
|
|
72
|
+
console.log(` Owner: ${docker.github.owner || '<not configured>'}`);
|
|
73
|
+
console.log(` Development: ${docker.environments.dev.imageName || '<not configured>'}`);
|
|
74
|
+
console.log(` Production: ${docker.environments.prod.imageName || '<not configured>'}\n`);
|
|
75
|
+
}
|
|
76
|
+
const mobile = (0, mobile_config_1.getMobileConfig)();
|
|
77
|
+
if (!mobile)
|
|
78
|
+
console.log(chalk_1.default.yellow('Mobile App: not configured\n'));
|
|
79
|
+
else
|
|
80
|
+
(0, configure_mobile_command_1.printMobileConfiguration)(mobile);
|
|
81
|
+
};
|
|
82
|
+
const configure = async () => {
|
|
83
|
+
console.log(chalk_1.default.blue.bold('\nIndraQ CLI Configuration\n'));
|
|
84
|
+
console.log(chalk_1.default.gray('Configure only what you need. After each change you return to this home screen.\n'));
|
|
85
|
+
while (true) {
|
|
86
|
+
const { section } = await inquirer_1.default.prompt([
|
|
87
|
+
{
|
|
88
|
+
type: 'list',
|
|
89
|
+
name: 'section',
|
|
90
|
+
message: 'What do you want to configure?',
|
|
91
|
+
choices: [
|
|
92
|
+
{ name: 'Jenkins', value: 'jenkins' },
|
|
93
|
+
{ name: 'Docker / GHCR', value: 'docker' },
|
|
94
|
+
{ name: 'Mobile App', value: 'mobile' },
|
|
95
|
+
new inquirer_1.default.Separator(),
|
|
96
|
+
{ name: 'Review current project configuration', value: 'review' },
|
|
97
|
+
{ name: 'Exit', value: 'exit' }
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
]);
|
|
101
|
+
if (section === 'exit') {
|
|
102
|
+
console.log(chalk_1.default.green('\n✓ Configuration finished.\n'));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (section === 'jenkins')
|
|
106
|
+
await configureJenkins();
|
|
107
|
+
else if (section === 'docker')
|
|
108
|
+
await (0, configure_docker_command_1.configureDocker)();
|
|
109
|
+
else if (section === 'mobile')
|
|
110
|
+
await (0, configure_mobile_command_1.configureMobile)();
|
|
111
|
+
else
|
|
112
|
+
reviewEverything();
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
exports.configure = configure;
|
|
116
|
+
//# sourceMappingURL=configure.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.command.js","sourceRoot":"","sources":["../../../src/modules/configure/configure.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type DockerEnvironmentName } from '../config/docker-config';
|
|
2
2
|
export interface BuildOptions {
|
|
3
|
-
env:
|
|
3
|
+
env: DockerEnvironmentName;
|
|
4
4
|
}
|
|
5
5
|
export declare const build: (options: BuildOptions) => Promise<void>;
|
|
6
6
|
//# sourceMappingURL=build.command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.command.d.ts","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/build.command.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,
|
|
1
|
+
{"version":3,"file":"build.command.d.ts","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/build.command.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AAsBjC,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,qBAAqB,CAAC;CAC5B;AA2BD,eAAO,MAAM,KAAK,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,IAAI,CAmK/D,CAAC"}
|
|
@@ -7,27 +7,49 @@ exports.build = void 0;
|
|
|
7
7
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
9
|
const node_fs_1 = require("node:fs");
|
|
10
|
-
const
|
|
10
|
+
const docker_config_1 = require("../config/docker-config");
|
|
11
|
+
const jenkins_config_1 = require("../../../shared/config/jenkins-config");
|
|
11
12
|
const github_auth_service_1 = require("../../../shared/github/github-auth.service");
|
|
12
13
|
const docker_service_1 = require("../services/docker.service");
|
|
13
|
-
const jenkins_service_1 = require("
|
|
14
|
+
const jenkins_service_1 = require("../../../shared/jenkins/jenkins.service");
|
|
14
15
|
const TAG_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/;
|
|
16
|
+
const normalizeConfiguredImageRepository = (configuredImageName) => configuredImageName.trim().replace(/^ghcr\.io\//i, '').replace(/^\/+|\/+$/g, '');
|
|
15
17
|
const getGhcrImageName = (config, configuredImageName) => {
|
|
16
|
-
const withoutRegistry = configuredImageName
|
|
18
|
+
const withoutRegistry = normalizeConfiguredImageRepository(configuredImageName);
|
|
17
19
|
const hasOwner = withoutRegistry.includes('/');
|
|
18
20
|
const repository = hasOwner ? withoutRegistry : `${config.github.owner}/${withoutRegistry}`;
|
|
19
21
|
return `ghcr.io/${repository.toLowerCase()}`;
|
|
20
22
|
};
|
|
23
|
+
const getDockerJenkinsJobName = (configuredImageName) => {
|
|
24
|
+
const repository = normalizeConfiguredImageRepository(configuredImageName);
|
|
25
|
+
const segments = repository.split('/').filter(Boolean);
|
|
26
|
+
const jobName = segments.at(-1)?.trim() ?? '';
|
|
27
|
+
if (!jobName)
|
|
28
|
+
throw new Error('Docker image name cannot be empty.');
|
|
29
|
+
return jobName;
|
|
30
|
+
};
|
|
21
31
|
const build = async (options) => {
|
|
22
32
|
const { env } = options;
|
|
23
33
|
console.log(chalk_1.default.blue.bold(`🚀 Deploying ${env.toUpperCase()} environment...\n`));
|
|
24
|
-
const config = (0,
|
|
34
|
+
const config = (0, docker_config_1.ensureDockerConfig)();
|
|
35
|
+
const jenkinsConnections = (0, jenkins_config_1.getJenkinsConnectionsConfig)();
|
|
25
36
|
const environmentConfig = config.environments[env];
|
|
26
37
|
const dockerfilePath = environmentConfig.dockerfilePath;
|
|
27
38
|
const imageName = getGhcrImageName(config, environmentConfig.imageName);
|
|
28
|
-
const jenkinsJobName = environmentConfig.imageName;
|
|
29
|
-
if (!
|
|
30
|
-
throw new Error(
|
|
39
|
+
const jenkinsJobName = getDockerJenkinsJobName(environmentConfig.imageName);
|
|
40
|
+
if (!environmentConfig.imageName.trim()) {
|
|
41
|
+
throw new Error(`Docker ${env.toUpperCase()} image name is not configured. Run \`indraq configure\` → Docker / GHCR.`);
|
|
42
|
+
}
|
|
43
|
+
if (!config.github.owner.trim()) {
|
|
44
|
+
throw new Error('GitHub / GHCR destination is not configured. Run `indraq configure` → Docker / GHCR → GitHub / GHCR destination.');
|
|
45
|
+
}
|
|
46
|
+
const jenkinsEndpoint = jenkinsConnections.environments[env];
|
|
47
|
+
const jenkins = (0, jenkins_config_1.getResolvedJenkinsConnection)(env);
|
|
48
|
+
if (!jenkinsEndpoint) {
|
|
49
|
+
throw new Error(`Docker ${env.toUpperCase()} Jenkins URL is not configured. Run \`indraq configure\` → Jenkins → ${env === 'dev' ? 'Development' : 'Production'}.`);
|
|
50
|
+
}
|
|
51
|
+
if (!jenkins) {
|
|
52
|
+
throw new Error(`Docker ${env.toUpperCase()} Jenkins credentials are not configured on this computer. Run \`indraq configure\` → Jenkins → ${env === 'dev' ? 'Development' : 'Production'}.`);
|
|
31
53
|
}
|
|
32
54
|
(0, docker_service_1.assertDockerAvailable)();
|
|
33
55
|
(0, jenkins_service_1.assertJavaAvailable)();
|
|
@@ -38,21 +60,23 @@ const build = async (options) => {
|
|
|
38
60
|
if (!(0, node_fs_1.existsSync)(dockerfilePath)) {
|
|
39
61
|
throw new Error(`Dockerfile not found: ${dockerfilePath}`);
|
|
40
62
|
}
|
|
41
|
-
if (!(0, node_fs_1.existsSync)((0, jenkins_service_1.getJenkinsCliJarPath)(
|
|
63
|
+
if (!(0, node_fs_1.existsSync)((0, jenkins_service_1.getJenkinsCliJarPath)(jenkins.serverId))) {
|
|
42
64
|
throw new Error('Jenkins CLI JAR is missing. Run `indraq configure` again.');
|
|
43
65
|
}
|
|
44
|
-
if (!(0, node_fs_1.existsSync)((0, jenkins_service_1.getJenkinsAuthFilePath)(
|
|
66
|
+
if (!(0, node_fs_1.existsSync)((0, jenkins_service_1.getJenkinsAuthFilePath)(jenkins.serverId))) {
|
|
45
67
|
throw new Error('Jenkins credentials are missing. Run `indraq configure` again.');
|
|
46
68
|
}
|
|
47
69
|
console.log(chalk_1.default.blue.bold('🔎 Preflight Checks\n'));
|
|
48
70
|
console.log(chalk_1.default.green(`✓ Docker available; GitHub authenticated via ${(0, github_auth_service_1.describeGitHubAuthentication)(githubAuth)}`));
|
|
49
71
|
console.log(chalk_1.default.gray(`✓ Registry owner: ${config.github.owner} (${config.github.ownerType === 'personal' ? 'personal account' : 'organization'})`));
|
|
50
|
-
const authResult = (0, jenkins_service_1.validateJenkinsAuthentication)(
|
|
51
|
-
if (authResult.connectionMode !==
|
|
52
|
-
|
|
72
|
+
const authResult = (0, jenkins_service_1.validateJenkinsAuthentication)(jenkins);
|
|
73
|
+
if (authResult.connectionMode !== jenkins.connectionMode) {
|
|
74
|
+
jenkinsConnections.environments[env] = { url: jenkins.url, connectionMode: authResult.connectionMode };
|
|
75
|
+
jenkins.connectionMode = authResult.connectionMode;
|
|
76
|
+
(0, jenkins_config_1.saveJenkinsConnectionsConfig)(jenkinsConnections);
|
|
53
77
|
}
|
|
54
|
-
console.log(chalk_1.default.green(`✓ Jenkins authenticated: ${
|
|
55
|
-
await (0, jenkins_service_1.assertJenkinsJobExists)(
|
|
78
|
+
console.log(chalk_1.default.green(`✓ Jenkins authenticated: ${jenkins.url}`));
|
|
79
|
+
await (0, jenkins_service_1.assertJenkinsJobExists)(jenkins, jenkinsJobName);
|
|
56
80
|
console.log(chalk_1.default.green(`✓ Jenkins pipeline/job found: ${jenkinsJobName}\n`));
|
|
57
81
|
console.log(chalk_1.default.blue.bold('🏷️ Step 1: Specify Image Tags\n'));
|
|
58
82
|
const { tags: rawTags } = await inquirer_1.default.prompt([
|
|
@@ -107,10 +131,15 @@ const build = async (options) => {
|
|
|
107
131
|
const primaryImage = `${imageName}:${primaryTag}`;
|
|
108
132
|
const digest = (0, docker_service_1.getDockerImageDigest)(primaryImage);
|
|
109
133
|
console.log(chalk_1.default.blue.bold('⚡ Step 5: Running Jenkins Pipeline\n'));
|
|
110
|
-
console.log(chalk_1.default.gray(`Jenkins: ${
|
|
134
|
+
console.log(chalk_1.default.gray(`Jenkins: ${jenkins.url}`));
|
|
111
135
|
console.log(chalk_1.default.gray(`Pipeline/job: ${jenkinsJobName}`));
|
|
112
136
|
console.log(chalk_1.default.gray('Live Jenkins console output starts below.\n'));
|
|
113
|
-
await (0, jenkins_service_1.triggerJenkinsDeployment)(
|
|
137
|
+
await (0, jenkins_service_1.triggerJenkinsDeployment)(jenkins, jenkinsJobName, {
|
|
138
|
+
ACTION: 'DEPLOY',
|
|
139
|
+
IMAGE_TAG: primaryTag,
|
|
140
|
+
...(digest ? { IMAGE_DIGEST: digest } : {}),
|
|
141
|
+
DEPLOYMENT_SOURCE: 'INDRAQ_CLI'
|
|
142
|
+
});
|
|
114
143
|
console.log(chalk_1.default.green.bold('\n🎉 Build, push, and Jenkins deployment completed successfully!\n'));
|
|
115
144
|
console.log(chalk_1.default.blue('📊 Summary:'));
|
|
116
145
|
console.log(chalk_1.default.gray(` Environment: ${env}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.command.js","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/build.command.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,kDAA0B;AAC1B,qCAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"build.command.js","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/build.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-docker.command.d.ts","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/configure-docker.command.ts"],"names":[],"mappings":"AAkKA,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,IAAI,CAyBpD,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.configureDocker = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const docker_config_1 = require("../config/docker-config");
|
|
11
|
+
const github_auth_service_1 = require("../../../shared/github/github-auth.service");
|
|
12
|
+
const github_api_service_1 = require("../../../shared/github/github-api.service");
|
|
13
|
+
const environmentLabel = (env) => env === 'dev' ? 'Development' : 'Production';
|
|
14
|
+
const configureEnvironment = async (config, env) => {
|
|
15
|
+
const current = config.environments[env];
|
|
16
|
+
console.log(chalk_1.default.blue.bold(`\n🐳 Docker ${environmentLabel(env)}\n`));
|
|
17
|
+
const { imageName } = await inquirer_1.default.prompt([
|
|
18
|
+
{
|
|
19
|
+
type: 'input',
|
|
20
|
+
name: 'imageName',
|
|
21
|
+
message: `Image name for ${environmentLabel(env)}:`,
|
|
22
|
+
default: current.imageName,
|
|
23
|
+
filter: (input) => input.trim(),
|
|
24
|
+
validate: (input) => /^[a-z0-9]+(?:[._-][a-z0-9]+)*$/i.test(input.trim())
|
|
25
|
+
? true
|
|
26
|
+
: 'Use a valid image name such as my-service.'
|
|
27
|
+
}
|
|
28
|
+
]);
|
|
29
|
+
const { useDefault } = await inquirer_1.default.prompt([
|
|
30
|
+
{
|
|
31
|
+
type: 'confirm',
|
|
32
|
+
name: 'useDefault',
|
|
33
|
+
message: 'Use Dockerfile at project root?',
|
|
34
|
+
default: current.dockerfilePath === 'Dockerfile'
|
|
35
|
+
}
|
|
36
|
+
]);
|
|
37
|
+
let dockerfilePath = 'Dockerfile';
|
|
38
|
+
if (!useDefault) {
|
|
39
|
+
const answer = await inquirer_1.default.prompt([
|
|
40
|
+
{
|
|
41
|
+
type: 'input',
|
|
42
|
+
name: 'dockerfilePath',
|
|
43
|
+
message: 'Dockerfile path:',
|
|
44
|
+
default: current.dockerfilePath,
|
|
45
|
+
filter: (input) => input.trim(),
|
|
46
|
+
validate: (input) => input.trim() ? true : 'Dockerfile path is required.'
|
|
47
|
+
}
|
|
48
|
+
]);
|
|
49
|
+
dockerfilePath = answer.dockerfilePath;
|
|
50
|
+
}
|
|
51
|
+
if (!(0, node_fs_1.existsSync)(dockerfilePath)) {
|
|
52
|
+
console.log(chalk_1.default.yellow(`⚠ ${dockerfilePath} does not exist right now. The setting will still be saved.`));
|
|
53
|
+
}
|
|
54
|
+
config.environments[env] = {
|
|
55
|
+
name: environmentLabel(env),
|
|
56
|
+
imageName,
|
|
57
|
+
dockerfilePath
|
|
58
|
+
};
|
|
59
|
+
(0, docker_config_1.saveDockerConfig)(config);
|
|
60
|
+
console.log(chalk_1.default.green(`✓ Docker ${environmentLabel(env)} configuration saved.`));
|
|
61
|
+
};
|
|
62
|
+
const promptManualOwner = async (message, current) => {
|
|
63
|
+
const answer = await inquirer_1.default.prompt([
|
|
64
|
+
{
|
|
65
|
+
type: 'input',
|
|
66
|
+
name: 'owner',
|
|
67
|
+
message,
|
|
68
|
+
default: current,
|
|
69
|
+
filter: (input) => input.trim(),
|
|
70
|
+
validate: (input) => /^[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?$/.test(input.trim())
|
|
71
|
+
? true
|
|
72
|
+
: 'Enter a valid GitHub username/organization.'
|
|
73
|
+
}
|
|
74
|
+
]);
|
|
75
|
+
return answer.owner;
|
|
76
|
+
};
|
|
77
|
+
const configureGitHub = async (config) => {
|
|
78
|
+
console.log(chalk_1.default.blue.bold('\n🐙 GitHub / GHCR destination\n'));
|
|
79
|
+
const auth = (0, github_auth_service_1.detectGitHubAuthentication)();
|
|
80
|
+
if (!auth) {
|
|
81
|
+
throw new Error('No authenticated GitHub session found. Sign in using normal Git/Git Bash credentials first.');
|
|
82
|
+
}
|
|
83
|
+
console.log(chalk_1.default.green(`✓ GitHub authentication detected via ${(0, github_auth_service_1.describeGitHubAuthentication)(auth)}`));
|
|
84
|
+
console.log(chalk_1.default.gray('Reading account and organization memberships...'));
|
|
85
|
+
const identity = await (0, github_api_service_1.getGitHubIdentity)(auth);
|
|
86
|
+
const personal = identity.username ?? auth.username;
|
|
87
|
+
const { ownerType } = await inquirer_1.default.prompt([
|
|
88
|
+
{
|
|
89
|
+
type: 'list',
|
|
90
|
+
name: 'ownerType',
|
|
91
|
+
message: 'Where should Docker images be pushed?',
|
|
92
|
+
choices: [
|
|
93
|
+
...(personal ? [{ name: `Personal account (${personal})`, value: 'personal' }] : []),
|
|
94
|
+
{ name: 'Organization', value: 'organization' }
|
|
95
|
+
],
|
|
96
|
+
default: config.github.ownerType
|
|
97
|
+
}
|
|
98
|
+
]);
|
|
99
|
+
let owner;
|
|
100
|
+
if (ownerType === 'personal') {
|
|
101
|
+
if (!personal)
|
|
102
|
+
throw new Error('GitHub username could not be determined.');
|
|
103
|
+
owner = personal;
|
|
104
|
+
}
|
|
105
|
+
else if (identity.organizations.length > 0) {
|
|
106
|
+
const answer = await inquirer_1.default.prompt([
|
|
107
|
+
{
|
|
108
|
+
type: 'list',
|
|
109
|
+
name: 'owner',
|
|
110
|
+
message: 'Select GitHub organization:',
|
|
111
|
+
choices: [
|
|
112
|
+
...identity.organizations.map((org) => ({ name: org, value: org })),
|
|
113
|
+
new inquirer_1.default.Separator(),
|
|
114
|
+
{ name: 'Enter another organization manually', value: '__manual__' }
|
|
115
|
+
],
|
|
116
|
+
default: config.github.ownerType === 'organization' ? config.github.owner : undefined
|
|
117
|
+
}
|
|
118
|
+
]);
|
|
119
|
+
owner = answer.owner === '__manual__'
|
|
120
|
+
? await promptManualOwner('Organization name:', config.github.ownerType === 'organization' ? config.github.owner : '')
|
|
121
|
+
: answer.owner;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
owner = await promptManualOwner('Organization name:', config.github.ownerType === 'organization' ? config.github.owner : '');
|
|
125
|
+
}
|
|
126
|
+
config.github = { ownerType, owner };
|
|
127
|
+
(0, docker_config_1.saveDockerConfig)(config);
|
|
128
|
+
console.log(chalk_1.default.green(`✓ GHCR destination saved: ghcr.io/${owner.toLowerCase()}/...`));
|
|
129
|
+
};
|
|
130
|
+
const printReview = (config) => {
|
|
131
|
+
console.log(chalk_1.default.blue.bold('\n📋 Docker / GHCR configuration\n'));
|
|
132
|
+
console.log(` GHCR owner: ${config.github.owner || '<not configured>'} (${config.github.ownerType})`);
|
|
133
|
+
for (const env of ['dev', 'prod']) {
|
|
134
|
+
const item = config.environments[env];
|
|
135
|
+
console.log(` ${environmentLabel(env)} image: ${item.imageName || '<not configured>'}`);
|
|
136
|
+
console.log(` ${environmentLabel(env)} Dockerfile: ${item.dockerfilePath}`);
|
|
137
|
+
}
|
|
138
|
+
console.log(chalk_1.default.gray(`\n Config file: ${(0, docker_config_1.getDockerConfigPath)()}\n`));
|
|
139
|
+
};
|
|
140
|
+
const configureDocker = async () => {
|
|
141
|
+
const config = (0, docker_config_1.getDockerConfig)() ?? (0, docker_config_1.createDefaultDockerConfig)();
|
|
142
|
+
while (true) {
|
|
143
|
+
const { action } = await inquirer_1.default.prompt([
|
|
144
|
+
{
|
|
145
|
+
type: 'list',
|
|
146
|
+
name: 'action',
|
|
147
|
+
message: 'Docker / GHCR — what do you want to configure?',
|
|
148
|
+
choices: [
|
|
149
|
+
{ name: `Development (${config.environments.dev.imageName || 'not configured'})`, value: 'dev' },
|
|
150
|
+
{ name: `Production (${config.environments.prod.imageName || 'not configured'})`, value: 'prod' },
|
|
151
|
+
{ name: `GitHub / GHCR destination (${config.github.owner || 'not configured'})`, value: 'github' },
|
|
152
|
+
new inquirer_1.default.Separator(),
|
|
153
|
+
{ name: 'Review Docker configuration', value: 'review' },
|
|
154
|
+
{ name: 'Back', value: 'back' }
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
]);
|
|
158
|
+
if (action === 'back')
|
|
159
|
+
return;
|
|
160
|
+
if (action === 'review')
|
|
161
|
+
printReview(config);
|
|
162
|
+
else if (action === 'github')
|
|
163
|
+
await configureGitHub(config);
|
|
164
|
+
else
|
|
165
|
+
await configureEnvironment(config, action);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
exports.configureDocker = configureDocker;
|
|
169
|
+
//# sourceMappingURL=configure-docker.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-docker.command.js","sourceRoot":"","sources":["../../../../src/modules/deploy/commands/configure-docker.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type DockerEnvironmentName = 'dev' | 'prod';
|
|
2
|
+
export type GitHubOwnerType = 'personal' | 'organization';
|
|
3
|
+
export interface DockerEnvironmentConfig {
|
|
4
|
+
name: string;
|
|
5
|
+
imageName: string;
|
|
6
|
+
dockerfilePath: string;
|
|
7
|
+
}
|
|
8
|
+
export interface DockerConfig {
|
|
9
|
+
schemaVersion: 1;
|
|
10
|
+
github: {
|
|
11
|
+
ownerType: GitHubOwnerType;
|
|
12
|
+
owner: string;
|
|
13
|
+
};
|
|
14
|
+
environments: Record<DockerEnvironmentName, DockerEnvironmentConfig>;
|
|
15
|
+
}
|
|
16
|
+
export declare const createDefaultDockerConfig: () => DockerConfig;
|
|
17
|
+
export declare const getDockerConfigPath: () => string;
|
|
18
|
+
export declare const getDockerConfig: () => DockerConfig | null;
|
|
19
|
+
export declare const saveDockerConfig: (config: DockerConfig) => void;
|
|
20
|
+
export declare const ensureDockerConfig: () => DockerConfig;
|
|
21
|
+
//# sourceMappingURL=docker-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-config.d.ts","sourceRoot":"","sources":["../../../../src/modules/deploy/config/docker-config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,MAAM,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,cAAc,CAAC;AAE1D,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE;QACN,SAAS,EAAE,eAAe,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,EAAE,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;CACtE;AAgHD,eAAO,MAAM,yBAAyB,QAAO,YAkB3C,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAAO,MAA8C,CAAC;AAiEtF,eAAO,MAAM,eAAe,QAAO,YAAY,GAAG,IAcjD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,YAAY,KAAG,IAMvD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,YAIrC,CAAC"}
|