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
|
@@ -0,0 +1,353 @@
|
|
|
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.configureMobile = exports.ensureMobileConfigForEnvironment = exports.printMobileConfiguration = exports.configureMobileEnvironment = exports.profileLabel = exports.outputLabel = 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 node_path_1 = require("node:path");
|
|
11
|
+
const mobile_config_1 = require("../config/mobile-config");
|
|
12
|
+
const jenkins_config_1 = require("../../../shared/config/jenkins-config");
|
|
13
|
+
const version_sync_service_1 = require("../services/version-sync.service");
|
|
14
|
+
const envLabel = (env) => env === 'dev' ? 'Development' : env === 'staging' ? 'Staging' : 'Production';
|
|
15
|
+
const projectTypeLabel = (projectType) => projectType === 'expo' ? 'Expo' : projectType === 'react-native' ? 'React Native CLI' : '<not configured>';
|
|
16
|
+
const onOff = (value) => value ? 'ON' : 'OFF';
|
|
17
|
+
const outputLabel = (output) => {
|
|
18
|
+
switch (output) {
|
|
19
|
+
case 'development-client': return 'Development Client';
|
|
20
|
+
case 'debug-apk': return 'Debug APK';
|
|
21
|
+
case 'release-apk': return 'Release APK';
|
|
22
|
+
case 'release-aab': return 'Release AAB';
|
|
23
|
+
default: return '<not configured>';
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.outputLabel = outputLabel;
|
|
27
|
+
const profileLabel = (profile) => {
|
|
28
|
+
switch (profile) {
|
|
29
|
+
case 'fast': return 'FAST';
|
|
30
|
+
case 'clean': return 'CLEAN';
|
|
31
|
+
case 'full-reset': return 'FULL_RESET';
|
|
32
|
+
default: return '<not configured>';
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.profileLabel = profileLabel;
|
|
36
|
+
const readPackageJson = () => {
|
|
37
|
+
const packagePath = (0, node_path_1.join)(process.cwd(), 'package.json');
|
|
38
|
+
if (!(0, node_fs_1.existsSync)(packagePath))
|
|
39
|
+
return null;
|
|
40
|
+
try {
|
|
41
|
+
return JSON.parse((0, node_fs_1.readFileSync)(packagePath, 'utf8'));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const detectProjectType = () => {
|
|
48
|
+
const pkg = readPackageJson();
|
|
49
|
+
if (!pkg)
|
|
50
|
+
return undefined;
|
|
51
|
+
const dependencies = typeof pkg.dependencies === 'object' && pkg.dependencies ? pkg.dependencies : {};
|
|
52
|
+
const devDependencies = typeof pkg.devDependencies === 'object' && pkg.devDependencies ? pkg.devDependencies : {};
|
|
53
|
+
const deps = { ...dependencies, ...devDependencies };
|
|
54
|
+
if (deps.expo)
|
|
55
|
+
return 'expo';
|
|
56
|
+
if (deps['react-native'])
|
|
57
|
+
return 'react-native';
|
|
58
|
+
return undefined;
|
|
59
|
+
};
|
|
60
|
+
const detectAppName = () => {
|
|
61
|
+
const appJsonPath = (0, node_path_1.join)(process.cwd(), 'app.json');
|
|
62
|
+
if ((0, node_fs_1.existsSync)(appJsonPath)) {
|
|
63
|
+
try {
|
|
64
|
+
const appJson = JSON.parse((0, node_fs_1.readFileSync)(appJsonPath, 'utf8'));
|
|
65
|
+
const value = appJson.expo?.name ?? appJson.name;
|
|
66
|
+
if (typeof value === 'string' && value.trim())
|
|
67
|
+
return value.trim();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// package.json fallback below
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const pkg = readPackageJson();
|
|
74
|
+
const packageName = pkg?.name;
|
|
75
|
+
return typeof packageName === 'string' && packageName.trim() ? packageName.trim() : undefined;
|
|
76
|
+
};
|
|
77
|
+
const configureProjectSettings = async (config) => {
|
|
78
|
+
console.log(chalk_1.default.blue.bold('\n📱 Mobile project settings\n'));
|
|
79
|
+
const detectedName = detectAppName();
|
|
80
|
+
const { appName } = await inquirer_1.default.prompt([
|
|
81
|
+
{
|
|
82
|
+
type: 'input',
|
|
83
|
+
name: 'appName',
|
|
84
|
+
message: 'Mobile app name:',
|
|
85
|
+
default: config.appName || detectedName,
|
|
86
|
+
filter: (input) => input.trim(),
|
|
87
|
+
validate: (input) => {
|
|
88
|
+
const trimmed = input.trim();
|
|
89
|
+
if (!trimmed)
|
|
90
|
+
return 'App name is required.';
|
|
91
|
+
if (trimmed.length > 80)
|
|
92
|
+
return 'App name must be 80 characters or fewer.';
|
|
93
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9 ._-]*$/.test(trimmed)) {
|
|
94
|
+
return 'Use letters, numbers, spaces, dots, underscores, or hyphens only.';
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
]);
|
|
100
|
+
const detected = detectProjectType();
|
|
101
|
+
const { projectType } = await inquirer_1.default.prompt([
|
|
102
|
+
{
|
|
103
|
+
type: 'list',
|
|
104
|
+
name: 'projectType',
|
|
105
|
+
message: 'Project type:',
|
|
106
|
+
choices: [
|
|
107
|
+
{ name: 'Expo', value: 'expo' },
|
|
108
|
+
{ name: 'React Native CLI', value: 'react-native' }
|
|
109
|
+
],
|
|
110
|
+
default: config.projectType ?? detected
|
|
111
|
+
}
|
|
112
|
+
]);
|
|
113
|
+
const jenkins = (0, jenkins_config_1.getJenkinsConnectionsConfig)().environments.prod;
|
|
114
|
+
if (jenkins) {
|
|
115
|
+
console.log(chalk_1.default.gray(`Mobile builds always target Jenkins job "${mobile_config_1.MOBILE_JENKINS_JOB_NAME}".`));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.log(chalk_1.default.yellow('⚠ Production Jenkins is not configured yet. All mobile builds use Production Jenkins. Configure Jenkins → Production before building.'));
|
|
119
|
+
}
|
|
120
|
+
config.appName = appName;
|
|
121
|
+
config.projectType = projectType;
|
|
122
|
+
// If project type changes, clear incompatible saved outputs rather than keeping a time bomb.
|
|
123
|
+
for (const env of ['dev', 'staging', 'prod']) {
|
|
124
|
+
const saved = config.environments[env].output;
|
|
125
|
+
if (saved && !(0, mobile_config_1.getAllowedOutputs)(projectType, env).includes(saved)) {
|
|
126
|
+
config.environments[env].output = null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
(0, mobile_config_1.saveMobileConfig)(config);
|
|
130
|
+
console.log(chalk_1.default.green('✓ Mobile project settings saved.'));
|
|
131
|
+
};
|
|
132
|
+
const printVersionConfiguration = (config) => {
|
|
133
|
+
console.log(chalk_1.default.blue.bold('\n🔢 Android version settings\n'));
|
|
134
|
+
console.log(` Version: ${config.versioning.version}`);
|
|
135
|
+
console.log(` versionCode: ${config.versioning.versionCode}`);
|
|
136
|
+
console.log(` Auto-increment Version: ${onOff(config.versioning.autoIncrementVersion)}`);
|
|
137
|
+
console.log(` Auto-increment versionCode: ${onOff(config.versioning.autoIncrementVersionCode)}`);
|
|
138
|
+
console.log(chalk_1.default.gray('\n Enabled counters advance only after a successful Jenkins build.'));
|
|
139
|
+
console.log(chalk_1.default.gray(' Failed/cancelled builds do not consume a version.\n'));
|
|
140
|
+
};
|
|
141
|
+
const syncConfiguredVersion = (config) => {
|
|
142
|
+
if (!config.projectType)
|
|
143
|
+
return;
|
|
144
|
+
const sync = (0, version_sync_service_1.syncMobileVersionIntoProject)(process.cwd(), config.projectType, config.versioning.version, config.versioning.versionCode);
|
|
145
|
+
for (const file of sync.updatedFiles)
|
|
146
|
+
console.log(chalk_1.default.gray(` Synced ${file}`));
|
|
147
|
+
for (const warning of sync.warnings)
|
|
148
|
+
console.log(chalk_1.default.yellow(`⚠ ${warning}`));
|
|
149
|
+
};
|
|
150
|
+
const configureVersioning = async (config) => {
|
|
151
|
+
while (true) {
|
|
152
|
+
const { action } = await inquirer_1.default.prompt([
|
|
153
|
+
{
|
|
154
|
+
type: 'list',
|
|
155
|
+
name: 'action',
|
|
156
|
+
message: 'Android Version / versionCode — what do you want to configure?',
|
|
157
|
+
choices: [
|
|
158
|
+
{ name: `Version (${config.versioning.version})`, value: 'version' },
|
|
159
|
+
{ name: `versionCode (${config.versioning.versionCode})`, value: 'versionCode' },
|
|
160
|
+
{ name: `Auto-increment Version (${onOff(config.versioning.autoIncrementVersion)})`, value: 'autoVersion' },
|
|
161
|
+
{ name: `Auto-increment versionCode (${onOff(config.versioning.autoIncrementVersionCode)})`, value: 'autoVersionCode' },
|
|
162
|
+
new inquirer_1.default.Separator(),
|
|
163
|
+
{ name: 'Review version settings', value: 'review' },
|
|
164
|
+
{ name: 'Back', value: 'back' }
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
]);
|
|
168
|
+
if (action === 'back')
|
|
169
|
+
return;
|
|
170
|
+
if (action === 'review') {
|
|
171
|
+
printVersionConfiguration(config);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (action === 'version') {
|
|
175
|
+
const { version } = await inquirer_1.default.prompt([
|
|
176
|
+
{
|
|
177
|
+
type: 'input',
|
|
178
|
+
name: 'version',
|
|
179
|
+
message: 'Android app Version:',
|
|
180
|
+
default: config.versioning.version,
|
|
181
|
+
filter: (input) => input.trim(),
|
|
182
|
+
validate: (input) => (0, mobile_config_1.isValidMobileVersion)(input.trim())
|
|
183
|
+
? true
|
|
184
|
+
: 'Use a numeric dotted version such as 0.1, 1.0, or 1.2.3.'
|
|
185
|
+
}
|
|
186
|
+
]);
|
|
187
|
+
config.versioning.version = version;
|
|
188
|
+
(0, mobile_config_1.saveMobileConfig)(config);
|
|
189
|
+
syncConfiguredVersion(config);
|
|
190
|
+
console.log(chalk_1.default.green(`✓ Version saved as ${version}.`));
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (action === 'versionCode') {
|
|
194
|
+
const { versionCode } = await inquirer_1.default.prompt([
|
|
195
|
+
{
|
|
196
|
+
type: 'input',
|
|
197
|
+
name: 'versionCode',
|
|
198
|
+
message: 'Android versionCode:',
|
|
199
|
+
default: String(config.versioning.versionCode),
|
|
200
|
+
filter: (input) => input.trim(),
|
|
201
|
+
validate: (input) => {
|
|
202
|
+
const parsed = Number(input.trim());
|
|
203
|
+
return (0, mobile_config_1.isValidAndroidVersionCode)(parsed)
|
|
204
|
+
? true
|
|
205
|
+
: `versionCode must be a whole number from 1 to ${mobile_config_1.MAX_ANDROID_VERSION_CODE}.`;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
]);
|
|
209
|
+
config.versioning.versionCode = Number(versionCode);
|
|
210
|
+
(0, mobile_config_1.saveMobileConfig)(config);
|
|
211
|
+
syncConfiguredVersion(config);
|
|
212
|
+
console.log(chalk_1.default.green(`✓ versionCode saved as ${config.versioning.versionCode}.`));
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
const isVersionToggle = action === 'autoVersion';
|
|
216
|
+
const current = isVersionToggle
|
|
217
|
+
? config.versioning.autoIncrementVersion
|
|
218
|
+
: config.versioning.autoIncrementVersionCode;
|
|
219
|
+
const label = isVersionToggle ? 'Version' : 'versionCode';
|
|
220
|
+
const { enabled } = await inquirer_1.default.prompt([
|
|
221
|
+
{
|
|
222
|
+
type: 'confirm',
|
|
223
|
+
name: 'enabled',
|
|
224
|
+
message: `Auto-increment ${label} after each successful mobile build?`,
|
|
225
|
+
default: current
|
|
226
|
+
}
|
|
227
|
+
]);
|
|
228
|
+
if (isVersionToggle)
|
|
229
|
+
config.versioning.autoIncrementVersion = enabled;
|
|
230
|
+
else
|
|
231
|
+
config.versioning.autoIncrementVersionCode = enabled;
|
|
232
|
+
(0, mobile_config_1.saveMobileConfig)(config);
|
|
233
|
+
console.log(chalk_1.default.green(`✓ Auto-increment ${label}: ${onOff(enabled)}.`));
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
const configureMobileEnvironment = async (config, env) => {
|
|
237
|
+
if (!config.projectType || !config.appName) {
|
|
238
|
+
console.log(chalk_1.default.yellow('\nMobile project settings must be configured first.'));
|
|
239
|
+
await configureProjectSettings(config);
|
|
240
|
+
}
|
|
241
|
+
const projectType = config.projectType;
|
|
242
|
+
if (!projectType)
|
|
243
|
+
throw new Error('Mobile project type is not configured.');
|
|
244
|
+
const allowed = (0, mobile_config_1.getAllowedOutputs)(projectType, env);
|
|
245
|
+
console.log(chalk_1.default.blue.bold(`\n📦 Mobile ${envLabel(env)} defaults\n`));
|
|
246
|
+
let output;
|
|
247
|
+
if (allowed.length === 1) {
|
|
248
|
+
output = allowed[0];
|
|
249
|
+
console.log(chalk_1.default.gray(`Build output is fixed for this combination: ${(0, exports.outputLabel)(output)}`));
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
const answer = await inquirer_1.default.prompt([
|
|
253
|
+
{
|
|
254
|
+
type: 'list',
|
|
255
|
+
name: 'output',
|
|
256
|
+
message: 'Default build output:',
|
|
257
|
+
choices: allowed.map((value) => ({ name: (0, exports.outputLabel)(value), value })),
|
|
258
|
+
default: config.environments[env].output && allowed.includes(config.environments[env].output)
|
|
259
|
+
? config.environments[env].output
|
|
260
|
+
: allowed[0]
|
|
261
|
+
}
|
|
262
|
+
]);
|
|
263
|
+
output = answer.output;
|
|
264
|
+
}
|
|
265
|
+
const { profile } = await inquirer_1.default.prompt([
|
|
266
|
+
{
|
|
267
|
+
type: 'list',
|
|
268
|
+
name: 'profile',
|
|
269
|
+
message: 'Default build profile:',
|
|
270
|
+
choices: [
|
|
271
|
+
{ name: 'FAST — fresh source, reuse global npm/Gradle caches', value: 'fast' },
|
|
272
|
+
{ name: 'CLEAN — clean project build state before building', value: 'clean' },
|
|
273
|
+
{ name: 'FULL_RESET — clear project and Jenkins build caches', value: 'full-reset' }
|
|
274
|
+
],
|
|
275
|
+
default: config.environments[env].profile ?? 'fast'
|
|
276
|
+
}
|
|
277
|
+
]);
|
|
278
|
+
config.environments[env] = { output, profile };
|
|
279
|
+
(0, mobile_config_1.saveMobileConfig)(config);
|
|
280
|
+
console.log(chalk_1.default.green(`✓ Mobile ${envLabel(env)} defaults saved.`));
|
|
281
|
+
};
|
|
282
|
+
exports.configureMobileEnvironment = configureMobileEnvironment;
|
|
283
|
+
const printMobileConfiguration = (config) => {
|
|
284
|
+
console.log(chalk_1.default.blue.bold('\n📋 Mobile App configuration\n'));
|
|
285
|
+
console.log(` Project ID: ${config.projectId}`);
|
|
286
|
+
console.log(` App name: ${config.appName || '<not configured>'}`);
|
|
287
|
+
console.log(` Project type: ${projectTypeLabel(config.projectType)}`);
|
|
288
|
+
console.log(` Jenkins job: ${mobile_config_1.MOBILE_JENKINS_JOB_NAME} (fixed)`);
|
|
289
|
+
console.log(` Version: ${config.versioning.version} (auto: ${onOff(config.versioning.autoIncrementVersion)})`);
|
|
290
|
+
console.log(` versionCode: ${config.versioning.versionCode} (auto: ${onOff(config.versioning.autoIncrementVersionCode)})`);
|
|
291
|
+
for (const env of ['dev', 'staging', 'prod']) {
|
|
292
|
+
const item = config.environments[env];
|
|
293
|
+
console.log(` ${envLabel(env)}: ${(0, exports.outputLabel)(item.output)} / ${(0, exports.profileLabel)(item.profile)}`);
|
|
294
|
+
}
|
|
295
|
+
const jenkins = (0, jenkins_config_1.getJenkinsConnectionsConfig)().environments.prod;
|
|
296
|
+
console.log(` Jenkins: ${jenkins ? `Production → ${jenkins.url}` : 'Production Jenkins <not configured>'}`);
|
|
297
|
+
console.log(chalk_1.default.gray(`\n Config file: ${(0, mobile_config_1.getMobileConfigPath)()}`));
|
|
298
|
+
console.log(chalk_1.default.gray(' mobile.json is intended to be committed. Jenkins login credentials and .env values are never stored there.\n'));
|
|
299
|
+
};
|
|
300
|
+
exports.printMobileConfiguration = printMobileConfiguration;
|
|
301
|
+
const ensureMobileConfigForEnvironment = async (env) => {
|
|
302
|
+
const config = (0, mobile_config_1.ensureMobileConfigObject)();
|
|
303
|
+
let changed = false;
|
|
304
|
+
if (!config.appName || !config.projectType) {
|
|
305
|
+
console.log(chalk_1.default.yellow('\nMobile project settings are incomplete. Let\'s configure them first.'));
|
|
306
|
+
await configureProjectSettings(config);
|
|
307
|
+
changed = true;
|
|
308
|
+
}
|
|
309
|
+
const envConfig = config.environments[env];
|
|
310
|
+
if (!envConfig.output || !envConfig.profile) {
|
|
311
|
+
console.log(chalk_1.default.yellow(`\nMobile ${envLabel(env)} defaults are not configured yet.`));
|
|
312
|
+
await (0, exports.configureMobileEnvironment)(config, env);
|
|
313
|
+
changed = true;
|
|
314
|
+
}
|
|
315
|
+
if (changed)
|
|
316
|
+
(0, mobile_config_1.saveMobileConfig)(config);
|
|
317
|
+
return config;
|
|
318
|
+
};
|
|
319
|
+
exports.ensureMobileConfigForEnvironment = ensureMobileConfigForEnvironment;
|
|
320
|
+
const configureMobile = async () => {
|
|
321
|
+
const config = (0, mobile_config_1.ensureMobileConfigObject)();
|
|
322
|
+
while (true) {
|
|
323
|
+
const { action } = await inquirer_1.default.prompt([
|
|
324
|
+
{
|
|
325
|
+
type: 'list',
|
|
326
|
+
name: 'action',
|
|
327
|
+
message: 'Mobile App — what do you want to configure?',
|
|
328
|
+
choices: [
|
|
329
|
+
{ name: `Project settings (${config.appName || 'app name not set'} / ${projectTypeLabel(config.projectType)} / Jenkins: ${mobile_config_1.MOBILE_JENKINS_JOB_NAME})`, value: 'project' },
|
|
330
|
+
{ name: `Version & versionCode (${config.versioning.version} / ${config.versioning.versionCode})`, value: 'versioning' },
|
|
331
|
+
{ name: `Development (${(0, exports.outputLabel)(config.environments.dev.output)} / ${(0, exports.profileLabel)(config.environments.dev.profile)})`, value: 'dev' },
|
|
332
|
+
{ name: `Staging (${(0, exports.outputLabel)(config.environments.staging.output)} / ${(0, exports.profileLabel)(config.environments.staging.profile)})`, value: 'staging' },
|
|
333
|
+
{ name: `Production (${(0, exports.outputLabel)(config.environments.prod.output)} / ${(0, exports.profileLabel)(config.environments.prod.profile)})`, value: 'prod' },
|
|
334
|
+
new inquirer_1.default.Separator(),
|
|
335
|
+
{ name: 'Review Mobile App configuration', value: 'review' },
|
|
336
|
+
{ name: 'Back', value: 'back' }
|
|
337
|
+
]
|
|
338
|
+
}
|
|
339
|
+
]);
|
|
340
|
+
if (action === 'back')
|
|
341
|
+
return;
|
|
342
|
+
if (action === 'review')
|
|
343
|
+
(0, exports.printMobileConfiguration)(config);
|
|
344
|
+
else if (action === 'project')
|
|
345
|
+
await configureProjectSettings(config);
|
|
346
|
+
else if (action === 'versioning')
|
|
347
|
+
await configureVersioning(config);
|
|
348
|
+
else
|
|
349
|
+
await (0, exports.configureMobileEnvironment)(config, action);
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
exports.configureMobile = configureMobile;
|
|
353
|
+
//# sourceMappingURL=configure-mobile.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-mobile.command.js","sourceRoot":"","sources":["../../../../src/modules/mobile/commands/configure-mobile.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export type MobileEnvironmentName = 'dev' | 'staging' | 'prod';
|
|
2
|
+
export type MobileProjectType = 'expo' | 'react-native';
|
|
3
|
+
export type MobileBuildOutput = 'development-client' | 'debug-apk' | 'release-apk' | 'release-aab';
|
|
4
|
+
export type MobileBuildProfile = 'fast' | 'clean' | 'full-reset';
|
|
5
|
+
export interface MobileEnvironmentConfig {
|
|
6
|
+
output: MobileBuildOutput | null;
|
|
7
|
+
profile: MobileBuildProfile | null;
|
|
8
|
+
}
|
|
9
|
+
export interface MobileVersionConfig {
|
|
10
|
+
version: string;
|
|
11
|
+
versionCode: number;
|
|
12
|
+
autoIncrementVersion: boolean;
|
|
13
|
+
autoIncrementVersionCode: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface MobileConfig {
|
|
16
|
+
schemaVersion: 3;
|
|
17
|
+
projectId: string;
|
|
18
|
+
appName: string;
|
|
19
|
+
projectType: MobileProjectType | null;
|
|
20
|
+
versioning: MobileVersionConfig;
|
|
21
|
+
environments: Record<MobileEnvironmentName, MobileEnvironmentConfig>;
|
|
22
|
+
}
|
|
23
|
+
export declare const MOBILE_JENKINS_JOB_NAME = "Mobile app Cli build";
|
|
24
|
+
export declare const DEFAULT_MOBILE_VERSION = "0.1";
|
|
25
|
+
export declare const DEFAULT_MOBILE_VERSION_CODE = 1;
|
|
26
|
+
export declare const MAX_ANDROID_VERSION_CODE = 2100000000;
|
|
27
|
+
export declare const isValidMobileVersion: (value: string) => boolean;
|
|
28
|
+
export declare const isValidAndroidVersionCode: (value: number) => boolean;
|
|
29
|
+
export declare const createDefaultMobileConfig: () => MobileConfig;
|
|
30
|
+
export declare const getMobileConfigPath: () => string;
|
|
31
|
+
export declare const getMobileConfig: () => MobileConfig | null;
|
|
32
|
+
export declare const ensureMobileConfigObject: () => MobileConfig;
|
|
33
|
+
export declare const saveMobileConfig: (config: MobileConfig) => void;
|
|
34
|
+
export declare const incrementMobileVersion: (version: string) => string;
|
|
35
|
+
export declare const advanceMobileVersionAfterSuccessfulBuild: (usedVersion: string, usedVersionCode: number) => {
|
|
36
|
+
config: MobileConfig;
|
|
37
|
+
versionAdvanced: boolean;
|
|
38
|
+
versionCodeAdvanced: boolean;
|
|
39
|
+
skippedBecauseChanged: boolean;
|
|
40
|
+
};
|
|
41
|
+
export declare const getAllowedOutputs: (projectType: MobileProjectType, environment: MobileEnvironmentName) => MobileBuildOutput[];
|
|
42
|
+
export declare const assertValidMobileCombination: (projectType: MobileProjectType, environment: MobileEnvironmentName, output: MobileBuildOutput) => void;
|
|
43
|
+
//# sourceMappingURL=mobile-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-config.d.ts","sourceRoot":"","sources":["../../../../src/modules/mobile/config/mobile-config.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAC/D,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,cAAc,CAAC;AACxD,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC;AACnG,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,CAAC;AAEjE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,CAAC,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;CACtE;AAqBD,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAC9D,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAC5C,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,wBAAwB,aAAgB,CAAC;AAkBtD,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,OACoB,CAAC;AAE1E,eAAO,MAAM,yBAAyB,GAAI,OAAO,MAAM,KAAG,OACkB,CAAC;AA+D7E,eAAO,MAAM,yBAAyB,QAAO,YAgB3C,CAAC;AAyBH,eAAO,MAAM,mBAAmB,QAAO,MAA8C,CAAC;AAEtF,eAAO,MAAM,eAAe,QAAO,YAAY,GAAG,IAqBjD,CAAC;AAEF,eAAO,MAAM,wBAAwB,QAAO,YAAgE,CAAC;AAE7G,eAAO,MAAM,gBAAgB,GAAI,QAAQ,YAAY,KAAG,IAQvD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,MAMxD,CAAC;AAEF,eAAO,MAAM,wCAAwC,GACnD,aAAa,MAAM,EACnB,iBAAiB,MAAM,KACtB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,eAAe,EAAE,OAAO,CAAC;IAAC,mBAAmB,EAAE,OAAO,CAAC;IAAC,qBAAqB,EAAE,OAAO,CAAA;CA8BhH,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,aAAa,iBAAiB,EAC9B,aAAa,qBAAqB,KACjC,iBAAiB,EAOnB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,aAAa,iBAAiB,EAC9B,aAAa,qBAAqB,EAClC,QAAQ,iBAAiB,KACxB,IAIF,CAAC"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertValidMobileCombination = exports.getAllowedOutputs = exports.advanceMobileVersionAfterSuccessfulBuild = exports.incrementMobileVersion = exports.saveMobileConfig = exports.ensureMobileConfigObject = exports.getMobileConfig = exports.getMobileConfigPath = exports.createDefaultMobileConfig = exports.isValidAndroidVersionCode = exports.isValidMobileVersion = exports.MAX_ANDROID_VERSION_CODE = exports.DEFAULT_MOBILE_VERSION_CODE = exports.DEFAULT_MOBILE_VERSION = exports.MOBILE_JENKINS_JOB_NAME = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const config_files_1 = require("../../../shared/config/config-files");
|
|
7
|
+
const CONFIG_FILENAME = 'mobile.json';
|
|
8
|
+
exports.MOBILE_JENKINS_JOB_NAME = 'Mobile app Cli build';
|
|
9
|
+
exports.DEFAULT_MOBILE_VERSION = '0.1';
|
|
10
|
+
exports.DEFAULT_MOBILE_VERSION_CODE = 1;
|
|
11
|
+
exports.MAX_ANDROID_VERSION_CODE = 2_100_000_000;
|
|
12
|
+
const isOutput = (value) => value === null ||
|
|
13
|
+
value === 'development-client' ||
|
|
14
|
+
value === 'debug-apk' ||
|
|
15
|
+
value === 'release-apk' ||
|
|
16
|
+
value === 'release-aab';
|
|
17
|
+
const isProfile = (value) => value === null || value === 'fast' || value === 'clean' || value === 'full-reset';
|
|
18
|
+
const isEnvConfig = (value) => {
|
|
19
|
+
if (!value || typeof value !== 'object')
|
|
20
|
+
return false;
|
|
21
|
+
const candidate = value;
|
|
22
|
+
return isOutput(candidate.output) && isProfile(candidate.profile);
|
|
23
|
+
};
|
|
24
|
+
const isValidMobileVersion = (value) => value.length > 0 && value.length <= 50 && /^\d+(?:\.\d+)*$/.test(value);
|
|
25
|
+
exports.isValidMobileVersion = isValidMobileVersion;
|
|
26
|
+
const isValidAndroidVersionCode = (value) => Number.isInteger(value) && value >= 1 && value <= exports.MAX_ANDROID_VERSION_CODE;
|
|
27
|
+
exports.isValidAndroidVersionCode = isValidAndroidVersionCode;
|
|
28
|
+
const isVersioning = (value) => {
|
|
29
|
+
if (!value || typeof value !== 'object')
|
|
30
|
+
return false;
|
|
31
|
+
const candidate = value;
|
|
32
|
+
return (typeof candidate.version === 'string' &&
|
|
33
|
+
(0, exports.isValidMobileVersion)(candidate.version) &&
|
|
34
|
+
typeof candidate.versionCode === 'number' &&
|
|
35
|
+
(0, exports.isValidAndroidVersionCode)(candidate.versionCode) &&
|
|
36
|
+
typeof candidate.autoIncrementVersion === 'boolean' &&
|
|
37
|
+
typeof candidate.autoIncrementVersionCode === 'boolean');
|
|
38
|
+
};
|
|
39
|
+
const hasValidEnvironments = (value) => {
|
|
40
|
+
if (!value.environments || typeof value.environments !== 'object')
|
|
41
|
+
return false;
|
|
42
|
+
const envs = value.environments;
|
|
43
|
+
return isEnvConfig(envs.dev) && isEnvConfig(envs.staging) && isEnvConfig(envs.prod);
|
|
44
|
+
};
|
|
45
|
+
const isCurrent = (value) => {
|
|
46
|
+
if (!value || typeof value !== 'object')
|
|
47
|
+
return false;
|
|
48
|
+
const candidate = value;
|
|
49
|
+
return (candidate.schemaVersion === 3 &&
|
|
50
|
+
typeof candidate.projectId === 'string' &&
|
|
51
|
+
candidate.projectId.length > 0 &&
|
|
52
|
+
typeof candidate.appName === 'string' &&
|
|
53
|
+
(candidate.projectType === null || candidate.projectType === 'expo' || candidate.projectType === 'react-native') &&
|
|
54
|
+
isVersioning(candidate.versioning) &&
|
|
55
|
+
hasValidEnvironments(candidate));
|
|
56
|
+
};
|
|
57
|
+
const isV2 = (value) => {
|
|
58
|
+
if (!value || typeof value !== 'object')
|
|
59
|
+
return false;
|
|
60
|
+
const candidate = value;
|
|
61
|
+
return (candidate.schemaVersion === 2 &&
|
|
62
|
+
typeof candidate.projectId === 'string' &&
|
|
63
|
+
candidate.projectId.length > 0 &&
|
|
64
|
+
typeof candidate.appName === 'string' &&
|
|
65
|
+
(candidate.projectType === null || candidate.projectType === 'expo' || candidate.projectType === 'react-native') &&
|
|
66
|
+
typeof candidate.jenkinsJobName === 'string' &&
|
|
67
|
+
isVersioning(candidate.versioning) &&
|
|
68
|
+
hasValidEnvironments(candidate));
|
|
69
|
+
};
|
|
70
|
+
const isV1 = (value) => {
|
|
71
|
+
if (!value || typeof value !== 'object')
|
|
72
|
+
return false;
|
|
73
|
+
const candidate = value;
|
|
74
|
+
return (candidate.schemaVersion === 1 &&
|
|
75
|
+
typeof candidate.projectId === 'string' &&
|
|
76
|
+
candidate.projectId.length > 0 &&
|
|
77
|
+
(candidate.projectType === null || candidate.projectType === 'expo' || candidate.projectType === 'react-native') &&
|
|
78
|
+
typeof candidate.jenkinsJobName === 'string' &&
|
|
79
|
+
hasValidEnvironments(candidate));
|
|
80
|
+
};
|
|
81
|
+
const createDefaultMobileConfig = () => ({
|
|
82
|
+
schemaVersion: 3,
|
|
83
|
+
projectId: (0, node_crypto_1.randomUUID)(),
|
|
84
|
+
appName: '',
|
|
85
|
+
projectType: null,
|
|
86
|
+
versioning: {
|
|
87
|
+
version: exports.DEFAULT_MOBILE_VERSION,
|
|
88
|
+
versionCode: exports.DEFAULT_MOBILE_VERSION_CODE,
|
|
89
|
+
autoIncrementVersion: true,
|
|
90
|
+
autoIncrementVersionCode: true
|
|
91
|
+
},
|
|
92
|
+
environments: {
|
|
93
|
+
dev: { output: null, profile: null },
|
|
94
|
+
staging: { output: null, profile: null },
|
|
95
|
+
prod: { output: null, profile: null }
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
exports.createDefaultMobileConfig = createDefaultMobileConfig;
|
|
99
|
+
const migrateV2 = (legacy) => ({
|
|
100
|
+
schemaVersion: 3,
|
|
101
|
+
projectId: legacy.projectId,
|
|
102
|
+
appName: legacy.appName,
|
|
103
|
+
projectType: legacy.projectType,
|
|
104
|
+
versioning: legacy.versioning,
|
|
105
|
+
environments: legacy.environments
|
|
106
|
+
});
|
|
107
|
+
const migrateV1 = (legacy) => ({
|
|
108
|
+
schemaVersion: 3,
|
|
109
|
+
projectId: legacy.projectId,
|
|
110
|
+
appName: '',
|
|
111
|
+
projectType: legacy.projectType,
|
|
112
|
+
versioning: {
|
|
113
|
+
version: exports.DEFAULT_MOBILE_VERSION,
|
|
114
|
+
versionCode: exports.DEFAULT_MOBILE_VERSION_CODE,
|
|
115
|
+
autoIncrementVersion: true,
|
|
116
|
+
autoIncrementVersionCode: true
|
|
117
|
+
},
|
|
118
|
+
environments: legacy.environments
|
|
119
|
+
});
|
|
120
|
+
const getMobileConfigPath = () => (0, config_files_1.getIndraqConfigPath)(CONFIG_FILENAME);
|
|
121
|
+
exports.getMobileConfigPath = getMobileConfigPath;
|
|
122
|
+
const getMobileConfig = () => {
|
|
123
|
+
const path = (0, exports.getMobileConfigPath)();
|
|
124
|
+
if (!(0, node_fs_1.existsSync)(path))
|
|
125
|
+
return null;
|
|
126
|
+
try {
|
|
127
|
+
const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
|
|
128
|
+
if (isCurrent(parsed))
|
|
129
|
+
return parsed;
|
|
130
|
+
if (isV2(parsed)) {
|
|
131
|
+
const migrated = migrateV2(parsed);
|
|
132
|
+
(0, exports.saveMobileConfig)(migrated);
|
|
133
|
+
return migrated;
|
|
134
|
+
}
|
|
135
|
+
if (isV1(parsed)) {
|
|
136
|
+
const migrated = migrateV1(parsed);
|
|
137
|
+
(0, exports.saveMobileConfig)(migrated);
|
|
138
|
+
return migrated;
|
|
139
|
+
}
|
|
140
|
+
throw new Error('invalid structure');
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
const message = error instanceof Error ? error.message : 'unknown error';
|
|
144
|
+
throw new Error(`Unable to read ${path}: ${message}`);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
exports.getMobileConfig = getMobileConfig;
|
|
148
|
+
const ensureMobileConfigObject = () => (0, exports.getMobileConfig)() ?? (0, exports.createDefaultMobileConfig)();
|
|
149
|
+
exports.ensureMobileConfigObject = ensureMobileConfigObject;
|
|
150
|
+
const saveMobileConfig = (config) => {
|
|
151
|
+
(0, config_files_1.ensureIndraqConfigDirectory)();
|
|
152
|
+
(0, node_fs_1.writeFileSync)((0, exports.getMobileConfigPath)(), `${JSON.stringify(config, null, 2)}\n`, 'utf8');
|
|
153
|
+
if ((0, config_files_1.isIndraqConfigIgnoredByGit)(CONFIG_FILENAME)) {
|
|
154
|
+
process.stderr.write('⚠ .indraq/mobile.json is ignored by Git. Remove the .indraq ignore rule so app version/versionCode and mobile settings survive Git clones.\n');
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
exports.saveMobileConfig = saveMobileConfig;
|
|
158
|
+
const incrementMobileVersion = (version) => {
|
|
159
|
+
if (!(0, exports.isValidMobileVersion)(version))
|
|
160
|
+
throw new Error(`Cannot auto-increment invalid mobile version: ${version}`);
|
|
161
|
+
const parts = version.split('.').map((part) => Number.parseInt(part, 10));
|
|
162
|
+
const lastIndex = parts.length - 1;
|
|
163
|
+
parts[lastIndex] = (parts[lastIndex] ?? 0) + 1;
|
|
164
|
+
return parts.join('.');
|
|
165
|
+
};
|
|
166
|
+
exports.incrementMobileVersion = incrementMobileVersion;
|
|
167
|
+
const advanceMobileVersionAfterSuccessfulBuild = (usedVersion, usedVersionCode) => {
|
|
168
|
+
const current = (0, exports.getMobileConfig)();
|
|
169
|
+
if (!current)
|
|
170
|
+
throw new Error('Mobile configuration disappeared while the build was running.');
|
|
171
|
+
let versionAdvanced = false;
|
|
172
|
+
let versionCodeAdvanced = false;
|
|
173
|
+
let skippedBecauseChanged = false;
|
|
174
|
+
if (current.versioning.version !== usedVersion || current.versioning.versionCode !== usedVersionCode) {
|
|
175
|
+
skippedBecauseChanged = true;
|
|
176
|
+
return { config: current, versionAdvanced, versionCodeAdvanced, skippedBecauseChanged };
|
|
177
|
+
}
|
|
178
|
+
if (current.versioning.autoIncrementVersion) {
|
|
179
|
+
current.versioning.version = (0, exports.incrementMobileVersion)(current.versioning.version);
|
|
180
|
+
versionAdvanced = true;
|
|
181
|
+
}
|
|
182
|
+
if (current.versioning.autoIncrementVersionCode) {
|
|
183
|
+
if (current.versioning.versionCode >= exports.MAX_ANDROID_VERSION_CODE) {
|
|
184
|
+
throw new Error(`The build succeeded, but Android versionCode ${current.versioning.versionCode} cannot be auto-incremented beyond ${exports.MAX_ANDROID_VERSION_CODE}. Update it manually in \`indraq configure\`.`);
|
|
185
|
+
}
|
|
186
|
+
current.versioning.versionCode += 1;
|
|
187
|
+
versionCodeAdvanced = true;
|
|
188
|
+
}
|
|
189
|
+
if (versionAdvanced || versionCodeAdvanced)
|
|
190
|
+
(0, exports.saveMobileConfig)(current);
|
|
191
|
+
return { config: current, versionAdvanced, versionCodeAdvanced, skippedBecauseChanged };
|
|
192
|
+
};
|
|
193
|
+
exports.advanceMobileVersionAfterSuccessfulBuild = advanceMobileVersionAfterSuccessfulBuild;
|
|
194
|
+
const getAllowedOutputs = (projectType, environment) => {
|
|
195
|
+
if (projectType === 'expo') {
|
|
196
|
+
if (environment === 'dev')
|
|
197
|
+
return ['development-client'];
|
|
198
|
+
return ['release-apk', 'release-aab'];
|
|
199
|
+
}
|
|
200
|
+
if (environment === 'dev')
|
|
201
|
+
return ['debug-apk'];
|
|
202
|
+
return ['release-apk', 'release-aab'];
|
|
203
|
+
};
|
|
204
|
+
exports.getAllowedOutputs = getAllowedOutputs;
|
|
205
|
+
const assertValidMobileCombination = (projectType, environment, output) => {
|
|
206
|
+
if (!(0, exports.getAllowedOutputs)(projectType, environment).includes(output)) {
|
|
207
|
+
throw new Error(`Invalid mobile build combination: ${projectType} + ${environment} cannot build ${output}.`);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
exports.assertValidMobileCombination = assertValidMobileCombination;
|
|
211
|
+
//# sourceMappingURL=mobile-config.js.map
|