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.
Files changed (86) hide show
  1. package/README.md +1031 -662
  2. package/dist/cli/create-program.d.ts.map +1 -1
  3. package/dist/cli/create-program.js +6 -6
  4. package/dist/cli/create-program.js.map +1 -1
  5. package/dist/cli/doctor.command.d.ts.map +1 -1
  6. package/dist/cli/doctor.command.js +23 -0
  7. package/dist/cli/doctor.command.js.map +1 -1
  8. package/dist/modules/configure/configure.command.d.ts.map +1 -0
  9. package/dist/modules/configure/configure.command.js +116 -0
  10. package/dist/modules/configure/configure.command.js.map +1 -0
  11. package/dist/modules/deploy/commands/build.command.d.ts +2 -2
  12. package/dist/modules/deploy/commands/build.command.d.ts.map +1 -1
  13. package/dist/modules/deploy/commands/build.command.js +45 -16
  14. package/dist/modules/deploy/commands/build.command.js.map +1 -1
  15. package/dist/modules/deploy/commands/configure-docker.command.d.ts +2 -0
  16. package/dist/modules/deploy/commands/configure-docker.command.d.ts.map +1 -0
  17. package/dist/modules/deploy/commands/configure-docker.command.js +169 -0
  18. package/dist/modules/deploy/commands/configure-docker.command.js.map +1 -0
  19. package/dist/modules/deploy/config/docker-config.d.ts +21 -0
  20. package/dist/modules/deploy/config/docker-config.d.ts.map +1 -0
  21. package/dist/modules/deploy/config/docker-config.js +187 -0
  22. package/dist/modules/deploy/config/docker-config.js.map +1 -0
  23. package/dist/modules/deploy/index.d.ts.map +1 -1
  24. package/dist/modules/deploy/index.js +9 -26
  25. package/dist/modules/deploy/index.js.map +1 -1
  26. package/dist/modules/mobile/commands/build-mobile.command.d.ts +11 -0
  27. package/dist/modules/mobile/commands/build-mobile.command.d.ts.map +1 -0
  28. package/dist/modules/mobile/commands/build-mobile.command.js +188 -0
  29. package/dist/modules/mobile/commands/build-mobile.command.js.map +1 -0
  30. package/dist/modules/mobile/commands/configure-mobile.command.d.ts +8 -0
  31. package/dist/modules/mobile/commands/configure-mobile.command.d.ts.map +1 -0
  32. package/dist/modules/mobile/commands/configure-mobile.command.js +353 -0
  33. package/dist/modules/mobile/commands/configure-mobile.command.js.map +1 -0
  34. package/dist/modules/mobile/config/mobile-config.d.ts +43 -0
  35. package/dist/modules/mobile/config/mobile-config.d.ts.map +1 -0
  36. package/dist/modules/mobile/config/mobile-config.js +211 -0
  37. package/dist/modules/mobile/config/mobile-config.js.map +1 -0
  38. package/dist/modules/mobile/index.d.ts +3 -0
  39. package/dist/modules/mobile/index.d.ts.map +1 -0
  40. package/dist/modules/mobile/index.js +50 -0
  41. package/dist/modules/mobile/index.js.map +1 -0
  42. package/dist/modules/mobile/services/jenkins-mobile.service.d.ts +31 -0
  43. package/dist/modules/mobile/services/jenkins-mobile.service.d.ts.map +1 -0
  44. package/dist/modules/mobile/services/jenkins-mobile.service.js +175 -0
  45. package/dist/modules/mobile/services/jenkins-mobile.service.js.map +1 -0
  46. package/dist/modules/mobile/services/project.service.d.ts +11 -0
  47. package/dist/modules/mobile/services/project.service.d.ts.map +1 -0
  48. package/dist/modules/mobile/services/project.service.js +73 -0
  49. package/dist/modules/mobile/services/project.service.js.map +1 -0
  50. package/dist/modules/mobile/services/source-bundle.service.d.ts +9 -0
  51. package/dist/modules/mobile/services/source-bundle.service.d.ts.map +1 -0
  52. package/dist/modules/mobile/services/source-bundle.service.js +114 -0
  53. package/dist/modules/mobile/services/source-bundle.service.js.map +1 -0
  54. package/dist/modules/mobile/services/version-sync.service.d.ts +7 -0
  55. package/dist/modules/mobile/services/version-sync.service.d.ts.map +1 -0
  56. package/dist/modules/mobile/services/version-sync.service.js +88 -0
  57. package/dist/modules/mobile/services/version-sync.service.js.map +1 -0
  58. package/dist/shared/config/config-files.d.ts +5 -0
  59. package/dist/shared/config/config-files.d.ts.map +1 -0
  60. package/dist/shared/config/config-files.js +88 -0
  61. package/dist/shared/config/config-files.js.map +1 -0
  62. package/dist/shared/config/jenkins-config.d.ts +36 -0
  63. package/dist/shared/config/jenkins-config.d.ts.map +1 -0
  64. package/dist/shared/config/jenkins-config.js +164 -0
  65. package/dist/shared/config/jenkins-config.js.map +1 -0
  66. package/dist/shared/jenkins/configure-jenkins.d.ts +7 -0
  67. package/dist/shared/jenkins/configure-jenkins.d.ts.map +1 -0
  68. package/dist/shared/jenkins/configure-jenkins.js +84 -0
  69. package/dist/shared/jenkins/configure-jenkins.js.map +1 -0
  70. package/dist/{modules/deploy/services → shared/jenkins}/jenkins.service.d.ts +5 -4
  71. package/dist/shared/jenkins/jenkins.service.d.ts.map +1 -0
  72. package/dist/{modules/deploy/services → shared/jenkins}/jenkins.service.js +43 -89
  73. package/dist/shared/jenkins/jenkins.service.js.map +1 -0
  74. package/dist/shared/runtime/runtime-doctor.js.map +1 -1
  75. package/package.json +10 -5
  76. package/templates/jenkins/Jenkinsfile-Mobile-App +633 -0
  77. package/dist/modules/deploy/commands/configure.command.d.ts.map +0 -1
  78. package/dist/modules/deploy/commands/configure.command.js +0 -404
  79. package/dist/modules/deploy/commands/configure.command.js.map +0 -1
  80. package/dist/modules/deploy/config/deployment-config.d.ts +0 -29
  81. package/dist/modules/deploy/config/deployment-config.d.ts.map +0 -1
  82. package/dist/modules/deploy/config/deployment-config.js +0 -164
  83. package/dist/modules/deploy/config/deployment-config.js.map +0 -1
  84. package/dist/modules/deploy/services/jenkins.service.d.ts.map +0 -1
  85. package/dist/modules/deploy/services/jenkins.service.js.map +0 -1
  86. /package/dist/modules/{deploy/commands → configure}/configure.command.d.ts +0 -0
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.syncMobileVersionIntoProject = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const syncExpoAppJson = (root, version, versionCode, result) => {
7
+ const appJsonPath = (0, node_path_1.join)(root, 'app.json');
8
+ if (!(0, node_fs_1.existsSync)(appJsonPath)) {
9
+ const dynamicConfig = ['app.config.js', 'app.config.ts', 'app.config.mjs', 'app.config.cjs']
10
+ .find((name) => (0, node_fs_1.existsSync)((0, node_path_1.join)(root, name)));
11
+ result.warnings.push(dynamicConfig
12
+ ? `${dynamicConfig} is dynamic, so IndraQ did not rewrite it. .indraq/mobile.json remains the source of truth and Jenkins applies the Android version during the build.`
13
+ : 'app.json was not found. .indraq/mobile.json remains the source of truth and Jenkins applies the Android version during the build.');
14
+ return;
15
+ }
16
+ try {
17
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(appJsonPath, 'utf8'));
18
+ const expo = parsed.expo && typeof parsed.expo === 'object' ? parsed.expo : {};
19
+ const android = expo.android && typeof expo.android === 'object' ? expo.android : {};
20
+ expo.version = version;
21
+ android.versionCode = versionCode;
22
+ expo.android = android;
23
+ parsed.expo = expo;
24
+ (0, node_fs_1.writeFileSync)(appJsonPath, `${JSON.stringify(parsed, null, 2)}\n`, 'utf8');
25
+ result.updatedFiles.push('app.json');
26
+ }
27
+ catch (error) {
28
+ const message = error instanceof Error ? error.message : 'unknown error';
29
+ result.warnings.push(`Could not update app.json: ${message}. Jenkins will still apply the requested Android version.`);
30
+ }
31
+ };
32
+ const syncReactNativeGradle = (root, version, versionCode, result) => {
33
+ const candidates = [
34
+ (0, node_path_1.join)(root, 'android', 'app', 'build.gradle'),
35
+ (0, node_path_1.join)(root, 'android', 'app', 'build.gradle.kts')
36
+ ];
37
+ const gradlePath = candidates.find((candidate) => (0, node_fs_1.existsSync)(candidate));
38
+ if (!gradlePath) {
39
+ result.warnings.push('android/app/build.gradle(.kts) was not found. Jenkins will validate/apply the Android version during the build.');
40
+ return;
41
+ }
42
+ const original = (0, node_fs_1.readFileSync)(gradlePath, 'utf8');
43
+ let codeUpdated = false;
44
+ let nameUpdated = false;
45
+ const lines = original.split(/\r?\n/).map((line) => {
46
+ if (!codeUpdated) {
47
+ let match = line.match(/^(\s*versionCode\s*=\s*).+$/);
48
+ if (match?.[1]) {
49
+ codeUpdated = true;
50
+ return `${match[1]}${versionCode}`;
51
+ }
52
+ match = line.match(/^(\s*versionCode\s+).+$/);
53
+ if (match?.[1]) {
54
+ codeUpdated = true;
55
+ return `${match[1]}${versionCode}`;
56
+ }
57
+ }
58
+ if (!nameUpdated) {
59
+ let match = line.match(/^(\s*versionName\s*=\s*).+$/);
60
+ if (match?.[1]) {
61
+ nameUpdated = true;
62
+ return `${match[1]}"${version}"`;
63
+ }
64
+ match = line.match(/^(\s*versionName\s+).+$/);
65
+ if (match?.[1]) {
66
+ nameUpdated = true;
67
+ return `${match[1]}"${version}"`;
68
+ }
69
+ }
70
+ return line;
71
+ });
72
+ if (!codeUpdated || !nameUpdated) {
73
+ result.warnings.push(`Could not safely rewrite ${gradlePath.endsWith('.kts') ? 'android/app/build.gradle.kts' : 'android/app/build.gradle'} because versionName/versionCode are not simple literals. Jenkins will still apply/validate them during the build.`);
74
+ return;
75
+ }
76
+ (0, node_fs_1.writeFileSync)(gradlePath, lines.join('\n'), 'utf8');
77
+ result.updatedFiles.push(gradlePath.endsWith('.kts') ? 'android/app/build.gradle.kts' : 'android/app/build.gradle');
78
+ };
79
+ const syncMobileVersionIntoProject = (root, projectType, version, versionCode) => {
80
+ const result = { updatedFiles: [], warnings: [] };
81
+ if (projectType === 'expo')
82
+ syncExpoAppJson(root, version, versionCode, result);
83
+ else
84
+ syncReactNativeGradle(root, version, versionCode, result);
85
+ return result;
86
+ };
87
+ exports.syncMobileVersionIntoProject = syncMobileVersionIntoProject;
88
+ //# sourceMappingURL=version-sync.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-sync.service.js","sourceRoot":"","sources":["../../../../src/modules/mobile/services/version-sync.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const getIndraqConfigDirectory: () => string;
2
+ export declare const getIndraqConfigPath: (filename: string) => string;
3
+ export declare const ensureIndraqConfigDirectory: () => string;
4
+ export declare const isIndraqConfigIgnoredByGit: (filename: string) => boolean;
5
+ //# sourceMappingURL=config-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-files.d.ts","sourceRoot":"","sources":["../../../src/shared/config/config-files.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,QAAO,MAAwC,CAAC;AAErF,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,KAAG,MACX,CAAC;AAmD7C,eAAO,MAAM,2BAA2B,QAAO,MAoB9C,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,UAAU,MAAM,KAAG,OAM7D,CAAC"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isIndraqConfigIgnoredByGit = exports.ensureIndraqConfigDirectory = exports.getIndraqConfigPath = exports.getIndraqConfigDirectory = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const node_child_process_1 = require("node:child_process");
7
+ const getIndraqConfigDirectory = () => (0, node_path_1.join)(process.cwd(), '.indraq');
8
+ exports.getIndraqConfigDirectory = getIndraqConfigDirectory;
9
+ const getIndraqConfigPath = (filename) => (0, node_path_1.join)((0, exports.getIndraqConfigDirectory)(), filename);
10
+ exports.getIndraqConfigPath = getIndraqConfigPath;
11
+ const SHARED_CONFIG_GITIGNORE = `# IndraQ project configuration is intentionally shared through Git.
12
+ # Machine-specific bindings and secrets must never be committed.
13
+ *.local.json
14
+ *.secret
15
+ auth
16
+ jenkins-cli.jar
17
+ `;
18
+ const ROOT_GITIGNORE_MARKER = '# IndraQ CLI shared project configuration';
19
+ const ROOT_GITIGNORE_BLOCK = `
20
+ ${ROOT_GITIGNORE_MARKER}
21
+ # These files are safe and intentionally shared with the project.
22
+ !.indraq/
23
+ !.indraq/.gitignore
24
+ !.indraq/jenkins.json
25
+ !.indraq/docker.json
26
+ !.indraq/mobile.json
27
+ `;
28
+ const ensureRootGitignoreAllowsSharedConfig = () => {
29
+ const gitCheck = (0, node_child_process_1.spawnSync)('git', ['rev-parse', '--is-inside-work-tree'], {
30
+ cwd: process.cwd(),
31
+ encoding: 'utf8',
32
+ stdio: ['ignore', 'pipe', 'ignore']
33
+ });
34
+ if (gitCheck.status !== 0 || gitCheck.stdout.trim() !== 'true')
35
+ return;
36
+ const rootGitignore = (0, node_path_1.join)(process.cwd(), '.gitignore');
37
+ let content = '';
38
+ try {
39
+ content = (0, node_fs_1.existsSync)(rootGitignore) ? (0, node_fs_1.readFileSync)(rootGitignore, 'utf8') : '';
40
+ }
41
+ catch {
42
+ return;
43
+ }
44
+ if (content.includes(ROOT_GITIGNORE_MARKER))
45
+ return;
46
+ // Earlier IndraQ CLI releases recommended ignoring the whole .indraq directory.
47
+ // Appending explicit re-includes makes the safe shared config trackable while the
48
+ // .indraq/.gitignore file continues to exclude machine-local bindings/secrets.
49
+ const separator = content.length > 0 && !content.endsWith('\n') ? '\n' : '';
50
+ try {
51
+ (0, node_fs_1.writeFileSync)(rootGitignore, `${content}${separator}${ROOT_GITIGNORE_BLOCK.replace(/^\n/, '')}`, 'utf8');
52
+ }
53
+ catch {
54
+ // The save methods still perform git check-ignore and will warn if the repository
55
+ // prevents the shared configuration from being tracked.
56
+ }
57
+ };
58
+ const ensureIndraqConfigDirectory = () => {
59
+ const directory = (0, exports.getIndraqConfigDirectory)();
60
+ (0, node_fs_1.mkdirSync)(directory, { recursive: true });
61
+ const gitignore = (0, node_path_1.join)(directory, '.gitignore');
62
+ const legacyContent = '*\n!.gitignore\n';
63
+ if (!(0, node_fs_1.existsSync)(gitignore)) {
64
+ (0, node_fs_1.writeFileSync)(gitignore, SHARED_CONFIG_GITIGNORE, 'utf8');
65
+ }
66
+ else {
67
+ try {
68
+ if ((0, node_fs_1.readFileSync)(gitignore, 'utf8') === legacyContent) {
69
+ (0, node_fs_1.writeFileSync)(gitignore, SHARED_CONFIG_GITIGNORE, 'utf8');
70
+ }
71
+ }
72
+ catch {
73
+ // Saving the actual config will surface any filesystem problem.
74
+ }
75
+ }
76
+ ensureRootGitignoreAllowsSharedConfig();
77
+ return directory;
78
+ };
79
+ exports.ensureIndraqConfigDirectory = ensureIndraqConfigDirectory;
80
+ const isIndraqConfigIgnoredByGit = (filename) => {
81
+ const result = (0, node_child_process_1.spawnSync)('git', ['check-ignore', '-q', '--', `.indraq/${filename}`], {
82
+ cwd: process.cwd(),
83
+ stdio: 'ignore'
84
+ });
85
+ return result.status === 0;
86
+ };
87
+ exports.isIndraqConfigIgnoredByGit = isIndraqConfigIgnoredByGit;
88
+ //# sourceMappingURL=config-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-files.js","sourceRoot":"","sources":["../../../src/shared/config/config-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export type JenkinsConnectionMode = 'webSocket' | 'http';
2
+ export type JenkinsEnvironmentName = 'dev' | 'prod';
3
+ export interface JenkinsEndpointConfig {
4
+ url: string;
5
+ connectionMode: JenkinsConnectionMode;
6
+ }
7
+ export interface JenkinsLocalBinding {
8
+ serverId: string;
9
+ }
10
+ export interface JenkinsResolvedConfig extends JenkinsEndpointConfig, JenkinsLocalBinding {
11
+ }
12
+ export interface JenkinsConnectionsConfig {
13
+ schemaVersion: 3;
14
+ environments: {
15
+ dev: JenkinsEndpointConfig | null;
16
+ prod: JenkinsEndpointConfig | null;
17
+ };
18
+ }
19
+ export interface JenkinsLocalBindingsConfig {
20
+ schemaVersion: 1;
21
+ environments: {
22
+ dev: JenkinsLocalBinding | null;
23
+ prod: JenkinsLocalBinding | null;
24
+ };
25
+ }
26
+ export declare const createDefaultJenkinsConnectionsConfig: () => JenkinsConnectionsConfig;
27
+ export declare const createDefaultJenkinsLocalBindingsConfig: () => JenkinsLocalBindingsConfig;
28
+ export declare const getJenkinsConnectionsConfigPath: () => string;
29
+ export declare const getJenkinsLocalBindingsConfigPath: () => string;
30
+ export declare const saveJenkinsConnectionsConfig: (config: JenkinsConnectionsConfig) => void;
31
+ export declare const saveJenkinsLocalBindingsConfig: (config: JenkinsLocalBindingsConfig) => void;
32
+ export declare const getJenkinsLocalBindingsConfig: () => JenkinsLocalBindingsConfig;
33
+ export declare const getJenkinsConnectionsConfig: () => JenkinsConnectionsConfig;
34
+ export declare const getResolvedJenkinsConnection: (environment: JenkinsEnvironmentName) => JenkinsResolvedConfig | null;
35
+ export declare const getMobileJenkinsConnection: () => JenkinsResolvedConfig | null;
36
+ //# sourceMappingURL=jenkins-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jenkins-config.d.ts","sourceRoot":"","sources":["../../../src/shared/config/jenkins-config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,MAAM,CAAC;AACzD,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,qBAAqB,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB,EAAE,mBAAmB;CAAG;AAE5F,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,CAAC,CAAC;IACjB,YAAY,EAAE;QACZ,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAC;KACpC,CAAC;CACH;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,CAAC,CAAC;IACjB,YAAY,EAAE;QACZ,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;KAClC,CAAC;CACH;AA6FD,eAAO,MAAM,qCAAqC,QAAO,wBAGvD,CAAC;AAEH,eAAO,MAAM,uCAAuC,QAAO,0BAGzD,CAAC;AAEH,eAAO,MAAM,+BAA+B,QAAO,MAA8C,CAAC;AAClG,eAAO,MAAM,iCAAiC,QAAO,MAAoD,CAAC;AAE1G,eAAO,MAAM,4BAA4B,GAAI,QAAQ,wBAAwB,KAAG,IAM/E,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,QAAQ,0BAA0B,KAAG,IAGnF,CAAC;AAEF,eAAO,MAAM,6BAA6B,QAAO,0BAgBhD,CAAC;AAqCF,eAAO,MAAM,2BAA2B,QAAO,wBAa9C,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,aAAa,sBAAsB,KAClC,qBAAqB,GAAG,IAK1B,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAO,qBAAqB,GAAG,IAChC,CAAC"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMobileJenkinsConnection = exports.getResolvedJenkinsConnection = exports.getJenkinsConnectionsConfig = exports.getJenkinsLocalBindingsConfig = exports.saveJenkinsLocalBindingsConfig = exports.saveJenkinsConnectionsConfig = exports.getJenkinsLocalBindingsConfigPath = exports.getJenkinsConnectionsConfigPath = exports.createDefaultJenkinsLocalBindingsConfig = exports.createDefaultJenkinsConnectionsConfig = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const config_files_1 = require("./config-files");
6
+ const CONFIG_FILENAME = 'jenkins.json';
7
+ const LOCAL_CONFIG_FILENAME = 'jenkins.local.json';
8
+ const isConnectionMode = (value) => value === 'webSocket' || value === 'http';
9
+ const isEndpoint = (value) => {
10
+ if (!value || typeof value !== 'object')
11
+ return false;
12
+ const candidate = value;
13
+ return typeof candidate.url === 'string' && isConnectionMode(candidate.connectionMode);
14
+ };
15
+ const isLegacyConnection = (value) => {
16
+ if (!value || typeof value !== 'object')
17
+ return false;
18
+ const candidate = value;
19
+ return (typeof candidate.url === 'string' &&
20
+ typeof candidate.username === 'string' &&
21
+ typeof candidate.serverId === 'string' &&
22
+ isConnectionMode(candidate.connectionMode));
23
+ };
24
+ const isNullableEndpoint = (value) => value === null || isEndpoint(value);
25
+ const isNullableLegacy = (value) => value === null || isLegacyConnection(value);
26
+ const isCurrent = (value) => {
27
+ if (!value || typeof value !== 'object')
28
+ return false;
29
+ const candidate = value;
30
+ return (candidate.schemaVersion === 3 &&
31
+ !!candidate.environments &&
32
+ isNullableEndpoint(candidate.environments.dev) &&
33
+ isNullableEndpoint(candidate.environments.prod));
34
+ };
35
+ const isV2 = (value) => {
36
+ if (!value || typeof value !== 'object')
37
+ return false;
38
+ const candidate = value;
39
+ return (candidate.schemaVersion === 2 &&
40
+ !!candidate.environments &&
41
+ isNullableLegacy(candidate.environments.dev) &&
42
+ isNullableLegacy(candidate.environments.prod));
43
+ };
44
+ const isV1 = (value) => {
45
+ if (!value || typeof value !== 'object')
46
+ return false;
47
+ const candidate = value;
48
+ return (candidate.schemaVersion === 1 &&
49
+ !!candidate.docker &&
50
+ isNullableLegacy(candidate.docker.dev) &&
51
+ isNullableLegacy(candidate.docker.prod) &&
52
+ isNullableLegacy(candidate.mobile));
53
+ };
54
+ const endpointFromLegacy = (legacy) => legacy ? { url: legacy.url, connectionMode: legacy.connectionMode } : null;
55
+ const bindingFromLegacy = (legacy) => legacy ? { serverId: legacy.serverId } : null;
56
+ const createDefaultJenkinsConnectionsConfig = () => ({
57
+ schemaVersion: 3,
58
+ environments: { dev: null, prod: null }
59
+ });
60
+ exports.createDefaultJenkinsConnectionsConfig = createDefaultJenkinsConnectionsConfig;
61
+ const createDefaultJenkinsLocalBindingsConfig = () => ({
62
+ schemaVersion: 1,
63
+ environments: { dev: null, prod: null }
64
+ });
65
+ exports.createDefaultJenkinsLocalBindingsConfig = createDefaultJenkinsLocalBindingsConfig;
66
+ const getJenkinsConnectionsConfigPath = () => (0, config_files_1.getIndraqConfigPath)(CONFIG_FILENAME);
67
+ exports.getJenkinsConnectionsConfigPath = getJenkinsConnectionsConfigPath;
68
+ const getJenkinsLocalBindingsConfigPath = () => (0, config_files_1.getIndraqConfigPath)(LOCAL_CONFIG_FILENAME);
69
+ exports.getJenkinsLocalBindingsConfigPath = getJenkinsLocalBindingsConfigPath;
70
+ const saveJenkinsConnectionsConfig = (config) => {
71
+ (0, config_files_1.ensureIndraqConfigDirectory)();
72
+ (0, node_fs_1.writeFileSync)((0, exports.getJenkinsConnectionsConfigPath)(), `${JSON.stringify(config, null, 2)}\n`, 'utf8');
73
+ if ((0, config_files_1.isIndraqConfigIgnoredByGit)(CONFIG_FILENAME)) {
74
+ process.stderr.write('⚠ .indraq/jenkins.json is ignored by Git. Remove the .indraq ignore rule if you want Jenkins URLs to survive clones.\n');
75
+ }
76
+ };
77
+ exports.saveJenkinsConnectionsConfig = saveJenkinsConnectionsConfig;
78
+ const saveJenkinsLocalBindingsConfig = (config) => {
79
+ (0, config_files_1.ensureIndraqConfigDirectory)();
80
+ (0, node_fs_1.writeFileSync)((0, exports.getJenkinsLocalBindingsConfigPath)(), `${JSON.stringify(config, null, 2)}\n`, 'utf8');
81
+ };
82
+ exports.saveJenkinsLocalBindingsConfig = saveJenkinsLocalBindingsConfig;
83
+ const getJenkinsLocalBindingsConfig = () => {
84
+ const path = (0, exports.getJenkinsLocalBindingsConfigPath)();
85
+ if (!(0, node_fs_1.existsSync)(path))
86
+ return (0, exports.createDefaultJenkinsLocalBindingsConfig)();
87
+ try {
88
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
89
+ if (parsed.schemaVersion !== 1 ||
90
+ !parsed.environments ||
91
+ ![parsed.environments.dev, parsed.environments.prod].every((item) => item === null || (typeof item === 'object' && typeof item.serverId === 'string')))
92
+ throw new Error('invalid structure');
93
+ return parsed;
94
+ }
95
+ catch (error) {
96
+ const message = error instanceof Error ? error.message : 'unknown error';
97
+ throw new Error(`Unable to read ${path}: ${message}`);
98
+ }
99
+ };
100
+ exports.getJenkinsLocalBindingsConfig = getJenkinsLocalBindingsConfig;
101
+ const migrateLegacy = (dev, prod) => {
102
+ const shared = {
103
+ schemaVersion: 3,
104
+ environments: {
105
+ dev: endpointFromLegacy(dev),
106
+ prod: endpointFromLegacy(prod)
107
+ }
108
+ };
109
+ const local = {
110
+ schemaVersion: 1,
111
+ environments: {
112
+ dev: bindingFromLegacy(dev),
113
+ prod: bindingFromLegacy(prod)
114
+ }
115
+ };
116
+ (0, exports.saveJenkinsConnectionsConfig)(shared);
117
+ (0, exports.saveJenkinsLocalBindingsConfig)(local);
118
+ return shared;
119
+ };
120
+ const migrateLegacyDeployJenkins = () => {
121
+ const legacyPath = (0, config_files_1.getIndraqConfigPath)('deploy.json');
122
+ if (!(0, node_fs_1.existsSync)(legacyPath))
123
+ return null;
124
+ try {
125
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(legacyPath, 'utf8'));
126
+ if (parsed.schemaVersion !== 2 || !isLegacyConnection(parsed.jenkins))
127
+ return null;
128
+ return migrateLegacy(parsed.jenkins, parsed.jenkins);
129
+ }
130
+ catch {
131
+ return null;
132
+ }
133
+ };
134
+ const getJenkinsConnectionsConfig = () => {
135
+ const path = (0, exports.getJenkinsConnectionsConfigPath)();
136
+ if (!(0, node_fs_1.existsSync)(path))
137
+ return migrateLegacyDeployJenkins() ?? (0, exports.createDefaultJenkinsConnectionsConfig)();
138
+ try {
139
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
140
+ if (isCurrent(parsed))
141
+ return parsed;
142
+ if (isV2(parsed))
143
+ return migrateLegacy(parsed.environments.dev, parsed.environments.prod);
144
+ if (isV1(parsed))
145
+ return migrateLegacy(parsed.docker.dev, parsed.docker.prod ?? parsed.mobile);
146
+ throw new Error('invalid structure');
147
+ }
148
+ catch (error) {
149
+ const message = error instanceof Error ? error.message : 'unknown error';
150
+ throw new Error(`Unable to read ${path}: ${message}`);
151
+ }
152
+ };
153
+ exports.getJenkinsConnectionsConfig = getJenkinsConnectionsConfig;
154
+ const getResolvedJenkinsConnection = (environment) => {
155
+ const endpoint = (0, exports.getJenkinsConnectionsConfig)().environments[environment];
156
+ const binding = (0, exports.getJenkinsLocalBindingsConfig)().environments[environment];
157
+ if (!endpoint || !binding)
158
+ return null;
159
+ return { ...endpoint, ...binding };
160
+ };
161
+ exports.getResolvedJenkinsConnection = getResolvedJenkinsConnection;
162
+ const getMobileJenkinsConnection = () => (0, exports.getResolvedJenkinsConnection)('prod');
163
+ exports.getMobileJenkinsConnection = getMobileJenkinsConnection;
164
+ //# sourceMappingURL=jenkins-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jenkins-config.js","sourceRoot":"","sources":["../../../src/shared/config/jenkins-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { JenkinsEndpointConfig, JenkinsLocalBinding } from '../config/jenkins-config';
2
+ export interface ConfiguredJenkinsConnection {
3
+ endpoint: JenkinsEndpointConfig;
4
+ binding: JenkinsLocalBinding;
5
+ }
6
+ export declare const promptForJenkinsConnection: (currentEndpoint: JenkinsEndpointConfig | null, currentBinding: JenkinsLocalBinding | null, label: string) => Promise<ConfiguredJenkinsConnection>;
7
+ //# sourceMappingURL=configure-jenkins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-jenkins.d.ts","sourceRoot":"","sources":["../../../src/shared/jenkins/configure-jenkins.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EAEpB,MAAM,0BAA0B,CAAC;AAiBlC,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAOD,eAAO,MAAM,0BAA0B,GACrC,iBAAiB,qBAAqB,GAAG,IAAI,EAC7C,gBAAgB,mBAAmB,GAAG,IAAI,EAC1C,OAAO,MAAM,KACZ,OAAO,CAAC,2BAA2B,CA4DrC,CAAC"}
@@ -0,0 +1,84 @@
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.promptForJenkinsConnection = 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 jenkins_service_1 = require("./jenkins.service");
11
+ const getExistingUsername = (binding) => {
12
+ if (!binding)
13
+ return '';
14
+ try {
15
+ return (0, jenkins_service_1.readJenkinsCredentials)(binding.serverId).username;
16
+ }
17
+ catch {
18
+ return '';
19
+ }
20
+ };
21
+ const promptForJenkinsConnection = async (currentEndpoint, currentBinding, label) => {
22
+ (0, jenkins_service_1.assertJavaAvailable)();
23
+ console.log(chalk_1.default.blue.bold(`\n⚙️ ${label}\n`));
24
+ console.log(chalk_1.default.gray('IndraQ downloads this controller\'s Jenkins CLI JAR and verifies the account before saving.'));
25
+ console.log(chalk_1.default.gray('Jenkins URL is project-shared. Username/token/password stay local to this computer and are never committed.\n'));
26
+ const { url } = await inquirer_1.default.prompt([{
27
+ type: 'input', name: 'url', message: 'Enter Jenkins URL/domain:',
28
+ default: currentEndpoint?.url ?? '',
29
+ filter: (input) => (0, jenkins_service_1.normalizeJenkinsUrl)(input),
30
+ validate: (input) => {
31
+ const value = (0, jenkins_service_1.normalizeJenkinsUrl)(input);
32
+ if (!value)
33
+ return 'Jenkins URL is required.';
34
+ try {
35
+ const parsed = new URL(value);
36
+ return parsed.protocol === 'http:' || parsed.protocol === 'https:' ? true : 'Use an http:// or https:// Jenkins URL.';
37
+ }
38
+ catch {
39
+ return 'Enter a valid Jenkins URL, for example https://jenkins.example.com';
40
+ }
41
+ }
42
+ }]);
43
+ const { username } = await inquirer_1.default.prompt([{
44
+ type: 'input', name: 'username', message: 'Enter Jenkins username:',
45
+ default: getExistingUsername(currentBinding),
46
+ filter: (input) => input.trim(),
47
+ validate: (input) => input.trim() ? true : 'Jenkins username is required.'
48
+ }]);
49
+ const { secret } = await inquirer_1.default.prompt([{
50
+ type: 'password', name: 'secret', message: 'Enter Jenkins API token or password:', mask: '*',
51
+ validate: (input) => input ? true : 'Jenkins API token/password is required.'
52
+ }]);
53
+ const normalizedUrl = (0, jenkins_service_1.normalizeJenkinsUrl)(url);
54
+ const serverId = (0, jenkins_service_1.createJenkinsServerId)(normalizedUrl, username);
55
+ const authPath = (0, jenkins_service_1.getJenkinsAuthFilePath)(serverId);
56
+ const previousAuth = (0, node_fs_1.existsSync)(authPath) ? (0, node_fs_1.readFileSync)(authPath, 'utf8') : null;
57
+ console.log(chalk_1.default.gray('\nDownloading Jenkins CLI...'));
58
+ await (0, jenkins_service_1.downloadJenkinsCli)(normalizedUrl, serverId, username, secret);
59
+ (0, jenkins_service_1.saveJenkinsCredentials)(serverId, username, secret);
60
+ try {
61
+ console.log(chalk_1.default.gray('Validating Jenkins credentials...'));
62
+ const runtime = {
63
+ url: normalizedUrl,
64
+ serverId,
65
+ connectionMode: currentEndpoint?.connectionMode ?? 'webSocket'
66
+ };
67
+ const result = (0, jenkins_service_1.validateJenkinsAuthentication)(runtime);
68
+ console.log(chalk_1.default.green(`✓ Jenkins authenticated successfully as ${username}`));
69
+ console.log(chalk_1.default.gray(` CLI transport: ${result.connectionMode}`));
70
+ return {
71
+ endpoint: { url: normalizedUrl, connectionMode: result.connectionMode },
72
+ binding: { serverId }
73
+ };
74
+ }
75
+ catch (error) {
76
+ if (previousAuth !== null)
77
+ (0, node_fs_1.writeFileSync)(authPath, previousAuth, { encoding: 'utf8', mode: 0o600 });
78
+ else
79
+ (0, jenkins_service_1.deleteJenkinsCredentials)(serverId);
80
+ throw error;
81
+ }
82
+ };
83
+ exports.promptForJenkinsConnection = promptForJenkinsConnection;
84
+ //# sourceMappingURL=configure-jenkins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-jenkins.js","sourceRoot":"","sources":["../../../src/shared/jenkins/configure-jenkins.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { JenkinsConfig, JenkinsConnectionMode } from '../config/deployment-config';
1
+ import type { JenkinsResolvedConfig, JenkinsConnectionMode } from '../config/jenkins-config';
2
2
  interface JenkinsCredentials {
3
3
  username: string;
4
4
  secret: string;
@@ -16,8 +16,9 @@ export declare const saveJenkinsCredentials: (serverId: string, username: string
16
16
  export declare const deleteJenkinsCredentials: (serverId: string) => void;
17
17
  export declare const readJenkinsCredentials: (serverId: string) => JenkinsCredentials;
18
18
  export declare const downloadJenkinsCli: (jenkinsUrl: string, serverId: string, username: string, secret: string) => Promise<string>;
19
- export declare const validateJenkinsAuthentication: (config: Pick<JenkinsConfig, "url" | "serverId">) => JenkinsWhoAmIResult;
20
- export declare const assertJenkinsJobExists: (config: JenkinsConfig, jobName: string) => Promise<void>;
21
- export declare const triggerJenkinsDeployment: (config: JenkinsConfig, jobName: string) => Promise<void>;
19
+ export declare const validateJenkinsAuthentication: (config: Pick<JenkinsResolvedConfig, "url" | "serverId">) => JenkinsWhoAmIResult;
20
+ export declare const getJenkinsJobBaseUrl: (jenkinsUrl: string, jobName: string) => string;
21
+ export declare const assertJenkinsJobExists: (config: JenkinsResolvedConfig, jobName: string, context?: string) => Promise<void>;
22
+ export declare const triggerJenkinsDeployment: (config: JenkinsResolvedConfig, jobName: string, parameters?: Record<string, string>) => Promise<void>;
22
23
  export {};
23
24
  //# sourceMappingURL=jenkins.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jenkins.service.d.ts","sourceRoot":"","sources":["../../../src/shared/jenkins/jenkins.service.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAE7F,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,mBAAmB;IAC3B,cAAc,EAAE,qBAAqB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAQD,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,KAAG,MAA2C,CAAC;AAEhG,eAAO,MAAM,qBAAqB,GAAI,YAAY,MAAM,EAAE,UAAU,MAAM,KAAG,MAI5D,CAAC;AAIlB,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,KAAG,MACF,CAAC;AAEvD,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,KAAG,MACP,CAAC;AAQpD,eAAO,MAAM,mBAAmB,QAAO,IAWtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,UAAU,MAAM,EAChB,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,MAgBF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,UAAU,MAAM,KAAG,IAG3D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,KAAG,kBAgBzD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,YAAY,MAAM,EAClB,UAAU,MAAM,EAChB,UAAU,MAAM,EAChB,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,CAiChB,CAAC;AAmDF,eAAO,MAAM,6BAA6B,GACxC,QAAQ,IAAI,CAAC,qBAAqB,EAAE,KAAK,GAAG,UAAU,CAAC,KACtD,mBAoBF,CAAC;AAQF,eAAO,MAAM,oBAAoB,GAAI,YAAY,MAAM,EAAE,SAAS,MAAM,KAAG,MACd,CAAC;AAE9D,eAAO,MAAM,sBAAsB,GACjC,QAAQ,qBAAqB,EAC7B,SAAS,MAAM,EACf,gBAAwB,KACvB,OAAO,CAAC,IAAI,CAqBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,qBAAqB,EAC7B,SAAS,MAAM,EACf,aAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,KACtC,OAAO,CAAC,IAAI,CA+Bd,CAAC"}