expo-release-it 0.0.8 → 0.0.10
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/bin/expo-release-it.cjs +2 -0
- package/build/command/build.js +45 -39
- package/build/command/bump.js +27 -21
- package/build/command/init.js +59 -53
- package/build/command/submit.js +39 -33
- package/build/command/upload.js +39 -33
- package/build/index.js +18 -16
- package/build/util/EnvUtil.js +5 -2
- package/build/util/FileUtil.js +79 -29
- package/build/util/Logger.js +14 -8
- package/build/util/OptionHolder.js +12 -7
- package/build/util/VersionUtil.js +40 -33
- package/build/util/calculateElapsed.js +6 -3
- package/build/util/hydrateKeyholderFileValues.js +7 -4
- package/build/util/iterateAllFilesInGeneratedTemplate.js +11 -8
- package/build/util/setup/prepareAndroid.js +24 -21
- package/build/util/setup/prepareIos.js +18 -15
- package/build/util/setup/promptCommonInputs.js +17 -14
- package/build/util/setup/setup.js +10 -7
- package/build/util/throwError.js +7 -4
- package/package.json +3 -3
package/build/command/build.js
CHANGED
|
@@ -1,33 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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.build = build;
|
|
7
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
8
|
+
const prepareAndroid_1 = require("../util/setup/prepareAndroid");
|
|
9
|
+
const setup_1 = require("../util/setup/setup");
|
|
10
|
+
const prepareIos_1 = require("../util/setup/prepareIos");
|
|
11
|
+
const logger_1 = require("../util/logger");
|
|
12
|
+
const OptionHolder_1 = require("../util/OptionHolder");
|
|
13
|
+
const zx_1 = require("zx");
|
|
14
|
+
const FileUtil_1 = require("../util/FileUtil");
|
|
15
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
16
|
+
const calculateElapsed_1 = require("../util/calculateElapsed");
|
|
17
|
+
const EnvUtil_1 = require("../util/EnvUtil");
|
|
18
|
+
async function build({ options }) {
|
|
19
|
+
Object.assign(OptionHolder_1.OptionHolder.build, options);
|
|
14
20
|
const startTime = Date.now();
|
|
15
|
-
await setup();
|
|
21
|
+
await (0, setup_1.setup)();
|
|
16
22
|
await promptInputs();
|
|
17
|
-
logger.info('Build Started');
|
|
18
|
-
logger.info(`Version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);
|
|
19
|
-
if (OptionHolder.build.platform === 'ios') {
|
|
23
|
+
logger_1.logger.info('Build Started');
|
|
24
|
+
logger_1.logger.info(`Version: ${OptionHolder_1.OptionHolder.versionName}(${OptionHolder_1.OptionHolder.versionCode})`);
|
|
25
|
+
if (OptionHolder_1.OptionHolder.build.platform === 'ios') {
|
|
20
26
|
await buildIos();
|
|
21
|
-
logger.success(`iOS Build ${
|
|
27
|
+
logger_1.logger.success(`iOS Build ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
|
|
22
28
|
}
|
|
23
29
|
else {
|
|
24
30
|
await buildAndroid();
|
|
25
|
-
logger.success(`Android Build ${
|
|
31
|
+
logger_1.logger.success(`Android Build ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
|
|
26
32
|
}
|
|
27
33
|
}
|
|
28
34
|
async function promptInputs() {
|
|
29
|
-
if (!OptionHolder.build.platform) {
|
|
30
|
-
OptionHolder.build.platform = await select({
|
|
35
|
+
if (!OptionHolder_1.OptionHolder.build.platform) {
|
|
36
|
+
OptionHolder_1.OptionHolder.build.platform = await (0, prompts_1.select)({
|
|
31
37
|
message: 'Platform to release',
|
|
32
38
|
choices: [
|
|
33
39
|
{ name: 'ios', value: 'ios', description: 'Release ios' },
|
|
@@ -35,8 +41,8 @@ async function promptInputs() {
|
|
|
35
41
|
],
|
|
36
42
|
});
|
|
37
43
|
}
|
|
38
|
-
if (OptionHolder.build.platform === 'ios') {
|
|
39
|
-
OptionHolder.build.pod = await select({
|
|
44
|
+
if (OptionHolder_1.OptionHolder.build.platform === 'ios') {
|
|
45
|
+
OptionHolder_1.OptionHolder.build.pod = await (0, prompts_1.select)({
|
|
40
46
|
message: 'Install Cocoapods',
|
|
41
47
|
choices: [
|
|
42
48
|
{ name: 'yes', value: true, description: 'Install pods before release' },
|
|
@@ -46,36 +52,36 @@ async function promptInputs() {
|
|
|
46
52
|
}
|
|
47
53
|
}
|
|
48
54
|
async function buildIos() {
|
|
49
|
-
const iosDir = resolve(OptionHolder.rootDir, 'ios');
|
|
50
|
-
const $$ =
|
|
55
|
+
const iosDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios');
|
|
56
|
+
const $$ = (0, zx_1.$)({
|
|
51
57
|
verbose: false,
|
|
52
58
|
cwd: iosDir,
|
|
53
59
|
env: {
|
|
54
|
-
MATCH_PASSWORD: OptionHolder.keyholderFileValueMap.ios_match_password,
|
|
60
|
+
MATCH_PASSWORD: OptionHolder_1.OptionHolder.keyholderFileValueMap.ios_match_password,
|
|
55
61
|
},
|
|
56
62
|
});
|
|
57
|
-
await prepareIos();
|
|
63
|
+
await (0, prepareIos_1.prepareIos)();
|
|
58
64
|
await fastlane();
|
|
59
65
|
async function fastlane() {
|
|
60
|
-
await spinner('Bundler Install', () => $$ `bundle install`);
|
|
61
|
-
logger.success('Bundler Install');
|
|
62
|
-
if (OptionHolder.build.pod) {
|
|
63
|
-
await spinner('Pod Install', () => $$ `bundle exec pod install`);
|
|
64
|
-
logger.success('Pod Install');
|
|
66
|
+
await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
|
|
67
|
+
logger_1.logger.success('Bundler Install');
|
|
68
|
+
if (OptionHolder_1.OptionHolder.build.pod) {
|
|
69
|
+
await (0, zx_1.spinner)('Pod Install', () => $$ `bundle exec pod install`);
|
|
70
|
+
logger_1.logger.success('Pod Install');
|
|
65
71
|
}
|
|
66
|
-
remove(resolve(iosDir, '.xcode.env.local'));
|
|
67
|
-
await spinner('Fastlane', () => $$ `bundle exec fastlane build version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
|
|
72
|
+
(0, FileUtil_1.remove)((0, FileUtil_1.resolve)(iosDir, '.xcode.env.local'));
|
|
73
|
+
await (0, zx_1.spinner)('Fastlane', () => $$ `bundle exec fastlane build version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
|
|
68
74
|
}
|
|
69
75
|
}
|
|
70
76
|
async function buildAndroid() {
|
|
71
|
-
const $$ =
|
|
77
|
+
const $$ = (0, zx_1.$)({
|
|
72
78
|
verbose: false,
|
|
73
|
-
cwd: resolve(OptionHolder.rootDir, 'android'),
|
|
79
|
+
cwd: (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android'),
|
|
74
80
|
});
|
|
75
|
-
await prepareAndroid();
|
|
81
|
+
await (0, prepareAndroid_1.prepareAndroid)();
|
|
76
82
|
await fastlane();
|
|
77
83
|
async function fastlane() {
|
|
78
|
-
await spinner('Bundler Install', () => $$ `bundle install`);
|
|
79
|
-
await spinner('Bundle AAB', () => $$ `${isWin ? 'gradle.bat' : './gradlew'} app:bundleRelease`);
|
|
84
|
+
await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
|
|
85
|
+
await (0, zx_1.spinner)('Bundle AAB', () => $$ `${EnvUtil_1.isWin ? 'gradle.bat' : './gradlew'} app:bundleRelease`);
|
|
80
86
|
}
|
|
81
87
|
}
|
package/build/command/bump.js
CHANGED
|
@@ -1,38 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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.bump = bump;
|
|
7
|
+
const VersionUtil_1 = require("../util/VersionUtil");
|
|
8
|
+
const throwError_1 = require("../util/throwError");
|
|
9
|
+
const logger_1 = require("../util/logger");
|
|
10
|
+
const OptionHolder_1 = require("../util/OptionHolder");
|
|
11
|
+
const semver_1 = __importDefault(require("semver"));
|
|
12
|
+
const EnvUtil_1 = require("../util/EnvUtil");
|
|
13
|
+
const zx_1 = require("zx");
|
|
14
|
+
const setup_1 = require("../util/setup/setup");
|
|
15
|
+
async function bump({ options }) {
|
|
16
|
+
Object.assign(OptionHolder_1.OptionHolder.bump, options);
|
|
11
17
|
await preCheck();
|
|
12
|
-
await setup();
|
|
13
|
-
logger.info(`current version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);
|
|
14
|
-
const nextVersionName =
|
|
15
|
-
const nextVersionCode = Number(OptionHolder.versionCode) + 1 + '';
|
|
16
|
-
logger.info(`next version: ${nextVersionName}(${nextVersionCode})`);
|
|
17
|
-
await injectBinaryVersions({ versionName: nextVersionName, versionCode: nextVersionCode });
|
|
18
|
-
logger.success('Binary versions have been bumped in expo config file');
|
|
18
|
+
await (0, setup_1.setup)();
|
|
19
|
+
logger_1.logger.info(`current version: ${OptionHolder_1.OptionHolder.versionName}(${OptionHolder_1.OptionHolder.versionCode})`);
|
|
20
|
+
const nextVersionName = semver_1.default.inc(OptionHolder_1.OptionHolder.versionName, 'patch');
|
|
21
|
+
const nextVersionCode = Number(OptionHolder_1.OptionHolder.versionCode) + 1 + '';
|
|
22
|
+
logger_1.logger.info(`next version: ${nextVersionName}(${nextVersionCode})`);
|
|
23
|
+
await (0, VersionUtil_1.injectBinaryVersions)({ versionName: nextVersionName, versionCode: nextVersionCode });
|
|
24
|
+
logger_1.logger.success('Binary versions have been bumped in expo config file');
|
|
19
25
|
}
|
|
20
26
|
async function preCheck() {
|
|
21
|
-
if (isDev)
|
|
27
|
+
if (EnvUtil_1.isDev)
|
|
22
28
|
return;
|
|
23
29
|
try {
|
|
24
30
|
let hasChange = false;
|
|
25
31
|
try {
|
|
26
|
-
await
|
|
32
|
+
await (0, zx_1.$) `git diff --quiet HEAD`;
|
|
27
33
|
}
|
|
28
34
|
catch (_) {
|
|
29
35
|
hasChange = true;
|
|
30
36
|
}
|
|
31
37
|
if (hasChange) {
|
|
32
|
-
throwError('Workspace is not clean. Before bump version, you should commit all changes.');
|
|
38
|
+
(0, throwError_1.throwError)('Workspace is not clean. Before bump version, you should commit all changes.');
|
|
33
39
|
}
|
|
34
40
|
}
|
|
35
41
|
catch (e) {
|
|
36
|
-
throwError('Precheck Failed', e);
|
|
42
|
+
(0, throwError_1.throwError)('Precheck Failed', e);
|
|
37
43
|
}
|
|
38
44
|
}
|
package/build/command/init.js
CHANGED
|
@@ -1,100 +1,106 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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.init = init;
|
|
7
|
+
const OptionHolder_1 = require("../util/OptionHolder");
|
|
8
|
+
const logger_1 = require("../util/logger");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
11
|
+
const iterateAllFilesInGeneratedTemplate_1 = require("../util/iterateAllFilesInGeneratedTemplate");
|
|
12
|
+
const EnvUtil_1 = require("../util/EnvUtil");
|
|
13
|
+
const VersionUtil_1 = require("../util/VersionUtil");
|
|
14
|
+
const promptCommonInputs_1 = require("../util/setup/promptCommonInputs");
|
|
15
|
+
const FileUtil_1 = require("../util/FileUtil");
|
|
16
|
+
const zx_1 = require("zx");
|
|
17
|
+
async function init({ options }) {
|
|
18
|
+
Object.assign(OptionHolder_1.OptionHolder.init, options);
|
|
19
|
+
logger_1.logger.info(`${chalk_1.default.inverse('expo-local-build')}`);
|
|
20
|
+
await (0, promptCommonInputs_1.promptCommonInputs)();
|
|
21
|
+
await (0, VersionUtil_1.parseBinaryVersions)();
|
|
16
22
|
await promptInputs();
|
|
17
23
|
await copyTemplates();
|
|
18
24
|
await injectPlaceHolders();
|
|
19
|
-
logger.success('expo-local-build init success');
|
|
25
|
+
logger_1.logger.success('expo-local-build init success');
|
|
20
26
|
}
|
|
21
27
|
async function promptInputs() {
|
|
22
28
|
/* ios */
|
|
23
|
-
OptionHolder.iosBundleIdentifier = OptionHolder.templateValuePlaceholderMap.ios_app_identifier =
|
|
24
|
-
await input({
|
|
29
|
+
OptionHolder_1.OptionHolder.iosBundleIdentifier = OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_app_identifier =
|
|
30
|
+
await (0, prompts_1.input)({
|
|
25
31
|
message: 'IOS Bundle Identifier',
|
|
26
32
|
required: true,
|
|
27
|
-
default: isDev ? 'ios_app_identifier' : undefined,
|
|
33
|
+
default: EnvUtil_1.isDev ? 'ios_app_identifier' : undefined,
|
|
28
34
|
});
|
|
29
|
-
OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_team_id = await input({
|
|
35
|
+
OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_team_id = await (0, prompts_1.input)({
|
|
30
36
|
message: 'IOS App Store Connect Team Id',
|
|
31
|
-
default: isDev ? 'ios_app_store_connect_team_id' : undefined,
|
|
37
|
+
default: EnvUtil_1.isDev ? 'ios_app_store_connect_team_id' : undefined,
|
|
32
38
|
});
|
|
33
|
-
OptionHolder.templateValuePlaceholderMap.ios_developer_team_id = await input({
|
|
39
|
+
OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_developer_team_id = await (0, prompts_1.input)({
|
|
34
40
|
message: 'IOS Developer Portal Team Id',
|
|
35
|
-
default: isDev ? 'ios_developer_team_id' : undefined,
|
|
41
|
+
default: EnvUtil_1.isDev ? 'ios_developer_team_id' : undefined,
|
|
36
42
|
});
|
|
37
|
-
OptionHolder.templateValuePlaceholderMap.ios_match_git_url = await input({
|
|
43
|
+
OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_match_git_url = await (0, prompts_1.input)({
|
|
38
44
|
message: 'IOS Match Key Storage Github URL',
|
|
39
|
-
default: isDev ? 'ios_match_git_url' : undefined,
|
|
45
|
+
default: EnvUtil_1.isDev ? 'ios_match_git_url' : undefined,
|
|
40
46
|
});
|
|
41
|
-
OptionHolder.keyholderFileValueMap.ios_match_password = await input({
|
|
47
|
+
OptionHolder_1.OptionHolder.keyholderFileValueMap.ios_match_password = await (0, prompts_1.input)({
|
|
42
48
|
message: 'IOS Match Password',
|
|
43
|
-
default: isDev ? 'ios_match_password' : undefined,
|
|
49
|
+
default: EnvUtil_1.isDev ? 'ios_match_password' : undefined,
|
|
44
50
|
});
|
|
45
|
-
OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_api_key_id = await input({
|
|
51
|
+
OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_api_key_id = await (0, prompts_1.input)({
|
|
46
52
|
message: 'IOS App Store Connect Api Key Id',
|
|
47
|
-
default: isDev ? 'ios_app_store_connect_api_key_id' : undefined,
|
|
53
|
+
default: EnvUtil_1.isDev ? 'ios_app_store_connect_api_key_id' : undefined,
|
|
48
54
|
});
|
|
49
|
-
OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_api_key_issuer_id = await input({
|
|
55
|
+
OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_api_key_issuer_id = await (0, prompts_1.input)({
|
|
50
56
|
message: 'IOS App Store Connect Api Key Issuer Id',
|
|
51
|
-
default: isDev ? 'ios_app_store_connect_api_key_issuer_id' : undefined,
|
|
57
|
+
default: EnvUtil_1.isDev ? 'ios_app_store_connect_api_key_issuer_id' : undefined,
|
|
52
58
|
});
|
|
53
|
-
OptionHolder.templateValuePlaceholderMap.ios_xcode_project_target = await input({
|
|
59
|
+
OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_xcode_project_target = await (0, prompts_1.input)({
|
|
54
60
|
message: 'IOS Xcode Target Name',
|
|
55
61
|
default: 'app',
|
|
56
62
|
});
|
|
57
63
|
/* android */
|
|
58
|
-
OptionHolder.androidPackageName = OptionHolder.templateValuePlaceholderMap.android_package_name =
|
|
59
|
-
await input({
|
|
64
|
+
OptionHolder_1.OptionHolder.androidPackageName = OptionHolder_1.OptionHolder.templateValuePlaceholderMap.android_package_name =
|
|
65
|
+
await (0, prompts_1.input)({
|
|
60
66
|
message: 'Android Package Name',
|
|
61
|
-
default: isDev ? 'android_package_name' : undefined,
|
|
67
|
+
default: EnvUtil_1.isDev ? 'android_package_name' : undefined,
|
|
62
68
|
});
|
|
63
|
-
OptionHolder.keyholderFileValueMap.android_keystore_store_password = await input({
|
|
69
|
+
OptionHolder_1.OptionHolder.keyholderFileValueMap.android_keystore_store_password = await (0, prompts_1.input)({
|
|
64
70
|
message: 'Android Keystore Store Password',
|
|
65
|
-
default: isDev ? 'android_keystore_store_password' : undefined,
|
|
71
|
+
default: EnvUtil_1.isDev ? 'android_keystore_store_password' : undefined,
|
|
66
72
|
});
|
|
67
|
-
OptionHolder.keyholderFileValueMap.android_keystore_key_alias = await input({
|
|
73
|
+
OptionHolder_1.OptionHolder.keyholderFileValueMap.android_keystore_key_alias = await (0, prompts_1.input)({
|
|
68
74
|
message: 'Android Keystore Key Alias',
|
|
69
|
-
default: isDev ? 'android_keystore_key_alias' : undefined,
|
|
75
|
+
default: EnvUtil_1.isDev ? 'android_keystore_key_alias' : undefined,
|
|
70
76
|
});
|
|
71
|
-
OptionHolder.keyholderFileValueMap.android_keystore_key_password = await input({
|
|
77
|
+
OptionHolder_1.OptionHolder.keyholderFileValueMap.android_keystore_key_password = await (0, prompts_1.input)({
|
|
72
78
|
message: 'Android Keystore Key Password',
|
|
73
|
-
default: isDev ? 'android_keystore_key_password' : undefined,
|
|
79
|
+
default: EnvUtil_1.isDev ? 'android_keystore_key_password' : undefined,
|
|
74
80
|
});
|
|
75
|
-
writeJson(OptionHolder.keyholderFilePath, OptionHolder.keyholderFileValueMap);
|
|
81
|
+
(0, FileUtil_1.writeJson)(OptionHolder_1.OptionHolder.keyholderFilePath, OptionHolder_1.OptionHolder.keyholderFileValueMap);
|
|
76
82
|
}
|
|
77
83
|
async function copyTemplates() {
|
|
78
|
-
for (const dir of OptionHolder.templateDirNames) {
|
|
84
|
+
for (const dir of OptionHolder_1.OptionHolder.templateDirNames) {
|
|
79
85
|
await copyDirRecursively(dir);
|
|
80
86
|
}
|
|
81
87
|
async function copyDirRecursively(dir) {
|
|
82
|
-
const sourceDirPath = join(OptionHolder.cli.templateDir, dir);
|
|
83
|
-
const destDirPath = join(OptionHolder.outDir, dir);
|
|
84
|
-
if (exist(destDirPath)) {
|
|
85
|
-
remove(destDirPath);
|
|
88
|
+
const sourceDirPath = (0, FileUtil_1.join)(OptionHolder_1.OptionHolder.cli.templateDir, dir);
|
|
89
|
+
const destDirPath = (0, FileUtil_1.join)(OptionHolder_1.OptionHolder.outDir, dir);
|
|
90
|
+
if ((0, FileUtil_1.exist)(destDirPath)) {
|
|
91
|
+
(0, FileUtil_1.remove)(destDirPath);
|
|
86
92
|
}
|
|
87
|
-
copy(sourceDirPath, destDirPath);
|
|
93
|
+
(0, FileUtil_1.copy)(sourceDirPath, destDirPath);
|
|
88
94
|
}
|
|
89
95
|
}
|
|
90
96
|
async function injectPlaceHolders() {
|
|
91
|
-
await iterateAllFilesInGeneratedTemplate(async (filePath) => {
|
|
92
|
-
let content = read(filePath);
|
|
93
|
-
for (const [key, value] of Object.entries(OptionHolder.templateValuePlaceholderMap)) {
|
|
97
|
+
await (0, iterateAllFilesInGeneratedTemplate_1.iterateAllFilesInGeneratedTemplate)(async (filePath) => {
|
|
98
|
+
let content = (0, FileUtil_1.read)(filePath);
|
|
99
|
+
for (const [key, value] of Object.entries(OptionHolder_1.OptionHolder.templateValuePlaceholderMap)) {
|
|
94
100
|
content = content.replaceAll(`{{${key}}}`, value);
|
|
95
101
|
}
|
|
96
102
|
// dynamic replace
|
|
97
|
-
content = content.replaceAll('{{key_dir_relative_path}}', path.relative(filePath, OptionHolder.keyDir));
|
|
98
|
-
write(filePath, content);
|
|
103
|
+
content = content.replaceAll('{{key_dir_relative_path}}', zx_1.path.relative(filePath, OptionHolder_1.OptionHolder.keyDir));
|
|
104
|
+
(0, FileUtil_1.write)(filePath, content);
|
|
99
105
|
});
|
|
100
106
|
}
|
package/build/command/submit.js
CHANGED
|
@@ -1,32 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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.submit = submit;
|
|
7
|
+
const setup_1 = require("../util/setup/setup");
|
|
8
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
9
|
+
const logger_1 = require("../util/logger");
|
|
10
|
+
const OptionHolder_1 = require("../util/OptionHolder");
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const calculateElapsed_1 = require("../util/calculateElapsed");
|
|
13
|
+
const zx_1 = require("zx");
|
|
14
|
+
const prepareAndroid_1 = require("../util/setup/prepareAndroid");
|
|
15
|
+
const FileUtil_1 = require("../util/FileUtil");
|
|
16
|
+
const prepareIos_1 = require("../util/setup/prepareIos");
|
|
17
|
+
async function submit({ options }) {
|
|
18
|
+
Object.assign(OptionHolder_1.OptionHolder.submit, options);
|
|
13
19
|
const startTime = Date.now();
|
|
14
|
-
await setup();
|
|
20
|
+
await (0, setup_1.setup)();
|
|
15
21
|
await promptInputs();
|
|
16
|
-
logger.info('Submit Started');
|
|
17
|
-
logger.info(`Version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);
|
|
18
|
-
if (OptionHolder.submit.platform === 'ios') {
|
|
22
|
+
logger_1.logger.info('Submit Started');
|
|
23
|
+
logger_1.logger.info(`Version: ${OptionHolder_1.OptionHolder.versionName}(${OptionHolder_1.OptionHolder.versionCode})`);
|
|
24
|
+
if (OptionHolder_1.OptionHolder.submit.platform === 'ios') {
|
|
19
25
|
await submitIos();
|
|
20
|
-
logger.success(`Appstore Review Submitted ${
|
|
26
|
+
logger_1.logger.success(`Appstore Review Submitted ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
|
|
21
27
|
}
|
|
22
28
|
else {
|
|
23
29
|
await submitAndroid();
|
|
24
|
-
logger.success(`Playstore Review Submitted ${
|
|
30
|
+
logger_1.logger.success(`Playstore Review Submitted ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
33
|
async function promptInputs() {
|
|
28
|
-
if (!OptionHolder.submit.platform) {
|
|
29
|
-
OptionHolder.submit.platform = await select({
|
|
34
|
+
if (!OptionHolder_1.OptionHolder.submit.platform) {
|
|
35
|
+
OptionHolder_1.OptionHolder.submit.platform = await (0, prompts_1.select)({
|
|
30
36
|
message: 'Platform to submit',
|
|
31
37
|
choices: [
|
|
32
38
|
{ name: 'ios', value: 'ios', description: 'Release ios' },
|
|
@@ -36,30 +42,30 @@ async function promptInputs() {
|
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
44
|
async function submitAndroid() {
|
|
39
|
-
const $$ =
|
|
45
|
+
const $$ = (0, zx_1.$)({
|
|
40
46
|
verbose: false,
|
|
41
|
-
cwd: resolve(OptionHolder.rootDir, 'android'),
|
|
47
|
+
cwd: (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android'),
|
|
42
48
|
});
|
|
43
|
-
await prepareAndroid();
|
|
49
|
+
await (0, prepareAndroid_1.prepareAndroid)();
|
|
44
50
|
await fastlane();
|
|
45
51
|
async function fastlane() {
|
|
46
|
-
await spinner('Bundler Install', () => $$ `bundle install`);
|
|
47
|
-
logger.success('Bundler Install');
|
|
48
|
-
await spinner('Fastlane', () => $$ `bundle exec fastlane submit_playstore_review version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
|
|
52
|
+
await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
|
|
53
|
+
logger_1.logger.success('Bundler Install');
|
|
54
|
+
await (0, zx_1.spinner)('Fastlane', () => $$ `bundle exec fastlane submit_playstore_review version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
|
|
49
55
|
}
|
|
50
56
|
}
|
|
51
57
|
async function submitIos() {
|
|
52
|
-
const iosDir = resolve(OptionHolder.rootDir, 'ios');
|
|
53
|
-
const $$ =
|
|
58
|
+
const iosDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios');
|
|
59
|
+
const $$ = (0, zx_1.$)({
|
|
54
60
|
verbose: false,
|
|
55
61
|
cwd: iosDir,
|
|
56
62
|
});
|
|
57
|
-
await prepareIos();
|
|
63
|
+
await (0, prepareIos_1.prepareIos)();
|
|
58
64
|
await fastlane();
|
|
59
65
|
async function fastlane() {
|
|
60
|
-
await spinner('Bundler Install', () => $$ `bundle install`);
|
|
61
|
-
logger.success('Bundler Install');
|
|
62
|
-
remove(resolve(iosDir, '.xcode.env.local'));
|
|
63
|
-
await spinner('Fastlane', () => $$ `bundle exec fastlane submit_appstore_review version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
|
|
66
|
+
await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
|
|
67
|
+
logger_1.logger.success('Bundler Install');
|
|
68
|
+
(0, FileUtil_1.remove)((0, FileUtil_1.resolve)(iosDir, '.xcode.env.local'));
|
|
69
|
+
await (0, zx_1.spinner)('Fastlane', () => $$ `bundle exec fastlane submit_appstore_review version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
|
|
64
70
|
}
|
|
65
71
|
}
|
package/build/command/upload.js
CHANGED
|
@@ -1,32 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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.upload = upload;
|
|
7
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
8
|
+
const prepareAndroid_1 = require("../util/setup/prepareAndroid");
|
|
9
|
+
const setup_1 = require("../util/setup/setup");
|
|
10
|
+
const prepareIos_1 = require("../util/setup/prepareIos");
|
|
11
|
+
const logger_1 = require("../util/logger");
|
|
12
|
+
const OptionHolder_1 = require("../util/OptionHolder");
|
|
13
|
+
const zx_1 = require("zx");
|
|
14
|
+
const FileUtil_1 = require("../util/FileUtil");
|
|
15
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
16
|
+
const calculateElapsed_1 = require("../util/calculateElapsed");
|
|
17
|
+
async function upload({ options }) {
|
|
18
|
+
Object.assign(OptionHolder_1.OptionHolder.upload, options);
|
|
13
19
|
const startTime = Date.now();
|
|
14
|
-
await setup();
|
|
20
|
+
await (0, setup_1.setup)();
|
|
15
21
|
await promptInputs();
|
|
16
|
-
logger.info('Build & Upload Started');
|
|
17
|
-
logger.info(`Version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);
|
|
18
|
-
if (OptionHolder.upload.platform === 'ios') {
|
|
22
|
+
logger_1.logger.info('Build & Upload Started');
|
|
23
|
+
logger_1.logger.info(`Version: ${OptionHolder_1.OptionHolder.versionName}(${OptionHolder_1.OptionHolder.versionCode})`);
|
|
24
|
+
if (OptionHolder_1.OptionHolder.upload.platform === 'ios') {
|
|
19
25
|
await uploadIos();
|
|
20
|
-
logger.success(`iOS Upload ${
|
|
26
|
+
logger_1.logger.success(`iOS Upload ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
|
|
21
27
|
}
|
|
22
28
|
else {
|
|
23
29
|
await uploadAndroid();
|
|
24
|
-
logger.success(`Android Upload ${
|
|
30
|
+
logger_1.logger.success(`Android Upload ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
33
|
async function promptInputs() {
|
|
28
|
-
if (!OptionHolder.upload.platform) {
|
|
29
|
-
OptionHolder.upload.platform = await select({
|
|
34
|
+
if (!OptionHolder_1.OptionHolder.upload.platform) {
|
|
35
|
+
OptionHolder_1.OptionHolder.upload.platform = await (0, prompts_1.select)({
|
|
30
36
|
message: 'Platform to release',
|
|
31
37
|
choices: [
|
|
32
38
|
{ name: 'ios', value: 'ios', description: 'Release ios' },
|
|
@@ -36,32 +42,32 @@ async function promptInputs() {
|
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
44
|
async function uploadIos() {
|
|
39
|
-
const iosDir = resolve(OptionHolder.rootDir, 'ios');
|
|
40
|
-
const $$ =
|
|
45
|
+
const iosDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios');
|
|
46
|
+
const $$ = (0, zx_1.$)({
|
|
41
47
|
verbose: false,
|
|
42
48
|
cwd: iosDir,
|
|
43
49
|
env: {
|
|
44
|
-
MATCH_PASSWORD: OptionHolder.keyholderFileValueMap.ios_match_password,
|
|
50
|
+
MATCH_PASSWORD: OptionHolder_1.OptionHolder.keyholderFileValueMap.ios_match_password,
|
|
45
51
|
},
|
|
46
52
|
});
|
|
47
|
-
await prepareIos();
|
|
53
|
+
await (0, prepareIos_1.prepareIos)();
|
|
48
54
|
await fastlane();
|
|
49
55
|
async function fastlane() {
|
|
50
|
-
await spinner('Bundler Install', () => $$ `bundle install`);
|
|
51
|
-
logger.success('Bundler Install');
|
|
52
|
-
await spinner('Fastlane', () => $$ `bundle exec fastlane upload version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
|
|
56
|
+
await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
|
|
57
|
+
logger_1.logger.success('Bundler Install');
|
|
58
|
+
await (0, zx_1.spinner)('Fastlane', () => $$ `bundle exec fastlane upload version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
|
|
53
59
|
}
|
|
54
60
|
}
|
|
55
61
|
async function uploadAndroid() {
|
|
56
|
-
const $$ =
|
|
62
|
+
const $$ = (0, zx_1.$)({
|
|
57
63
|
verbose: false,
|
|
58
|
-
cwd: resolve(OptionHolder.rootDir, 'android'),
|
|
64
|
+
cwd: (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android'),
|
|
59
65
|
});
|
|
60
|
-
await prepareAndroid();
|
|
66
|
+
await (0, prepareAndroid_1.prepareAndroid)();
|
|
61
67
|
await fastlane();
|
|
62
68
|
async function fastlane() {
|
|
63
|
-
await spinner('Bundler Install', () => $$ `bundle install`);
|
|
64
|
-
logger.success('Bundler Install');
|
|
65
|
-
await spinner('Fastlane Supply', () => $$ `bundle exec fastlane deploy version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
|
|
69
|
+
await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
|
|
70
|
+
logger_1.logger.success('Bundler Install');
|
|
71
|
+
await (0, zx_1.spinner)('Fastlane Supply', () => $$ `bundle exec fastlane deploy version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
|
|
66
72
|
}
|
|
67
73
|
}
|
package/build/index.js
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commander_1 = require("commander");
|
|
4
|
+
const init_1 = require("./command/init");
|
|
5
|
+
const OptionHolder_1 = require("./util/OptionHolder");
|
|
6
|
+
const logger_1 = require("./util/logger");
|
|
7
|
+
const bump_1 = require("./command/bump");
|
|
8
|
+
const upload_1 = require("./command/upload");
|
|
9
|
+
const submit_1 = require("./command/submit");
|
|
10
|
+
const platformOption = new commander_1.Option('-p --platform <platform>', 'Platform').choices([
|
|
9
11
|
'android',
|
|
10
12
|
'ios',
|
|
11
13
|
]);
|
|
12
|
-
const program = new Command();
|
|
14
|
+
const program = new commander_1.Command();
|
|
13
15
|
program
|
|
14
16
|
.name('expo-release-it')
|
|
15
17
|
.description('Build & Upload & Submit locally for Expo project')
|
|
16
|
-
.version(OptionHolder.cli.version);
|
|
18
|
+
.version(OptionHolder_1.OptionHolder.cli.version);
|
|
17
19
|
program
|
|
18
20
|
.command('init')
|
|
19
21
|
.description('Initialize CLI utilities')
|
|
20
22
|
.action(async (options) => {
|
|
21
23
|
try {
|
|
22
|
-
await init({ options });
|
|
24
|
+
await (0, init_1.init)({ options });
|
|
23
25
|
}
|
|
24
26
|
catch (e) {
|
|
25
|
-
logger.error(e);
|
|
27
|
+
logger_1.logger.error(e);
|
|
26
28
|
}
|
|
27
29
|
});
|
|
28
30
|
program
|
|
@@ -32,27 +34,27 @@ program
|
|
|
32
34
|
// new Option('-i --increment <type>', 'increment type').choices(['major', 'minor', 'patch']),
|
|
33
35
|
// )
|
|
34
36
|
.action(async (options) => {
|
|
35
|
-
await bump({ options });
|
|
37
|
+
await (0, bump_1.bump)({ options });
|
|
36
38
|
});
|
|
37
39
|
program
|
|
38
40
|
.command('build')
|
|
39
41
|
.description('Build binary')
|
|
40
42
|
.addOption(platformOption)
|
|
41
43
|
.action(async (options) => {
|
|
42
|
-
await upload({ options });
|
|
44
|
+
await (0, upload_1.upload)({ options });
|
|
43
45
|
});
|
|
44
46
|
program
|
|
45
47
|
.command('upload')
|
|
46
48
|
.description('Upload artifact to play console internal test track(android) and testflight(ios)')
|
|
47
49
|
.addOption(platformOption)
|
|
48
50
|
.action(async (options) => {
|
|
49
|
-
await upload({ options });
|
|
51
|
+
await (0, upload_1.upload)({ options });
|
|
50
52
|
});
|
|
51
53
|
program
|
|
52
54
|
.command('submit')
|
|
53
55
|
.description('Submit Google Play Console & App Store Connect Review with latest testing track')
|
|
54
56
|
.addOption(platformOption)
|
|
55
57
|
.action(async (options) => {
|
|
56
|
-
await submit({ options });
|
|
58
|
+
await (0, submit_1.submit)({ options });
|
|
57
59
|
});
|
|
58
60
|
program.parse();
|
package/build/util/EnvUtil.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isWin = exports.isDev = void 0;
|
|
4
|
+
exports.isDev = process.env.NODE_ENV === 'development';
|
|
5
|
+
exports.isWin = process.platform.startsWith('win');
|
package/build/util/FileUtil.js
CHANGED
|
@@ -1,56 +1,106 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.filename = exports.resolve = exports.join = void 0;
|
|
40
|
+
exports.exist = exist;
|
|
41
|
+
exports.isDir = isDir;
|
|
42
|
+
exports.isFile = isFile;
|
|
43
|
+
exports.read = read;
|
|
44
|
+
exports.readdir = readdir;
|
|
45
|
+
exports.readJsonSlow = readJsonSlow;
|
|
46
|
+
exports.write = write;
|
|
47
|
+
exports.copy = copy;
|
|
48
|
+
exports.writeJson = writeJson;
|
|
49
|
+
exports.remove = remove;
|
|
50
|
+
exports.iterateDir = iterateDir;
|
|
51
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
exports.join = path.join;
|
|
54
|
+
exports.resolve = path.resolve;
|
|
55
|
+
exports.filename = path.basename(__filename);
|
|
56
|
+
function exist(path) {
|
|
57
|
+
return fs_extra_1.default.existsSync(path);
|
|
8
58
|
}
|
|
9
|
-
|
|
10
|
-
return exist(path) &&
|
|
59
|
+
function isDir(path) {
|
|
60
|
+
return exist(path) && fs_extra_1.default.lstatSync(path).isDirectory();
|
|
11
61
|
}
|
|
12
|
-
|
|
13
|
-
return exist(path) &&
|
|
62
|
+
function isFile(path) {
|
|
63
|
+
return exist(path) && fs_extra_1.default.lstatSync(path).isFile();
|
|
14
64
|
}
|
|
15
|
-
|
|
16
|
-
return
|
|
65
|
+
function read(path) {
|
|
66
|
+
return fs_extra_1.default.readFileSync(path, { encoding: 'utf8' });
|
|
17
67
|
}
|
|
18
|
-
|
|
19
|
-
return
|
|
68
|
+
function readdir(path) {
|
|
69
|
+
return fs_extra_1.default.readdirSync(path);
|
|
20
70
|
}
|
|
21
71
|
// you should require when possible(optimized in js)
|
|
22
|
-
|
|
23
|
-
return
|
|
72
|
+
function readJsonSlow(path) {
|
|
73
|
+
return fs_extra_1.default.readJSONSync(path);
|
|
24
74
|
}
|
|
25
|
-
|
|
75
|
+
function write(p, content) {
|
|
26
76
|
const dir = path.dirname(p);
|
|
27
77
|
if (!exist(dir)) {
|
|
28
|
-
|
|
78
|
+
fs_extra_1.default.mkdirSync(dir, { recursive: true });
|
|
29
79
|
}
|
|
30
|
-
return
|
|
80
|
+
return fs_extra_1.default.writeFileSync(p, content);
|
|
31
81
|
}
|
|
32
|
-
|
|
33
|
-
|
|
82
|
+
function copy(src, dest) {
|
|
83
|
+
fs_extra_1.default.copySync(src, dest);
|
|
34
84
|
}
|
|
35
|
-
|
|
85
|
+
function writeJson(path, json) {
|
|
36
86
|
return write(path, JSON.stringify(json, null, 2));
|
|
37
87
|
}
|
|
38
|
-
|
|
88
|
+
function remove(path) {
|
|
39
89
|
if (!exist(path)) {
|
|
40
90
|
return;
|
|
41
91
|
}
|
|
42
|
-
if (
|
|
43
|
-
return
|
|
92
|
+
if (fs_extra_1.default.lstatSync(path).isDirectory()) {
|
|
93
|
+
return fs_extra_1.default.rmSync(path, { force: true, recursive: true });
|
|
44
94
|
}
|
|
45
95
|
else {
|
|
46
|
-
return
|
|
96
|
+
return fs_extra_1.default.rmSync(path, { force: true });
|
|
47
97
|
}
|
|
48
98
|
}
|
|
49
|
-
|
|
99
|
+
async function iterateDir(path, fn) {
|
|
50
100
|
if (!isDir(path)) {
|
|
51
101
|
return;
|
|
52
102
|
}
|
|
53
|
-
for (const file of
|
|
103
|
+
for (const file of fs_extra_1.default.readdirSync(path)) {
|
|
54
104
|
await fn(file);
|
|
55
105
|
}
|
|
56
106
|
}
|
package/build/util/Logger.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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.logger = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
exports.logger = {
|
|
9
|
+
success: (...msg) => console.log(chalk_1.default.green(`✔ ${msg.join(', ')}`)),
|
|
10
|
+
error: (...msg) => console.log(chalk_1.default.red(`✖ ${msg.join(', ')}`)),
|
|
11
|
+
warn: (...msg) => console.log(chalk_1.default.yellow(`⚠ ${msg.join(', ')}`)),
|
|
12
|
+
info: (...msg) => console.log(chalk_1.default.cyan(`ℹ ${msg.join(', ')}`)),
|
|
13
|
+
title: (...msg) => console.log(chalk_1.default.bold.blue(`\n${msg.join(', ')}`)),
|
|
14
|
+
dim: (...msg) => console.log(chalk_1.default.dim(msg.join(', '))),
|
|
9
15
|
};
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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.OptionHolder = void 0;
|
|
7
|
+
const package_json_1 = __importDefault(require("../../package.json"));
|
|
8
|
+
const FileUtil_1 = require("./FileUtil");
|
|
4
9
|
/**
|
|
5
10
|
* CLI Comprehensive options
|
|
6
11
|
* Each values can be empty by command and timing.
|
|
7
12
|
*/
|
|
8
|
-
|
|
13
|
+
exports.OptionHolder = {
|
|
9
14
|
cli: {
|
|
10
|
-
version:
|
|
11
|
-
rootDir:
|
|
12
|
-
templateDir:
|
|
15
|
+
version: package_json_1.default.version,
|
|
16
|
+
rootDir: (0, FileUtil_1.resolve)(__dirname, '../..'),
|
|
17
|
+
templateDir: (0, FileUtil_1.resolve)(__dirname, '../../template'),
|
|
13
18
|
},
|
|
14
19
|
init: {},
|
|
15
20
|
bump: {},
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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.parseBinaryVersions = parseBinaryVersions;
|
|
7
|
+
exports.injectBinaryVersions = injectBinaryVersions;
|
|
8
|
+
const OptionHolder_1 = require("./OptionHolder");
|
|
9
|
+
const throwError_1 = require("./throwError");
|
|
10
|
+
const semver_1 = __importDefault(require("semver"));
|
|
11
|
+
const FileUtil_1 = require("./FileUtil");
|
|
12
|
+
async function parseBinaryVersions() {
|
|
13
|
+
const files = (0, FileUtil_1.readdir)(OptionHolder_1.OptionHolder.rootDir);
|
|
7
14
|
const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];
|
|
8
15
|
const jsonConfigFile = 'app.json';
|
|
9
16
|
for (const jsConfigFile of jsConfigFiles) {
|
|
@@ -16,48 +23,48 @@ export async function parseBinaryVersions() {
|
|
|
16
23
|
await parseFromJsonConfigFile(jsonConfigFile);
|
|
17
24
|
return;
|
|
18
25
|
}
|
|
19
|
-
throwError('expo config file not found');
|
|
26
|
+
(0, throwError_1.throwError)('expo config file not found');
|
|
20
27
|
async function parseFromJsConfigFile(filename) {
|
|
21
|
-
const filePath = resolve(OptionHolder.rootDir, filename);
|
|
22
|
-
const content = read(filePath);
|
|
28
|
+
const filePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, filename);
|
|
29
|
+
const content = (0, FileUtil_1.read)(filePath);
|
|
23
30
|
const VERSION_NAME = /const VERSION_NAME = '(.*?)';/.exec(content)?.[1];
|
|
24
31
|
const VERSION_CODE = /const VERSION_CODE = (.*?);/.exec(content)?.[1];
|
|
25
32
|
if (!VERSION_NAME) {
|
|
26
|
-
throwError('cannot parse version name');
|
|
33
|
+
(0, throwError_1.throwError)('cannot parse version name');
|
|
27
34
|
}
|
|
28
35
|
if (!VERSION_CODE) {
|
|
29
|
-
throwError('cannot parse version code');
|
|
36
|
+
(0, throwError_1.throwError)('cannot parse version code');
|
|
30
37
|
}
|
|
31
|
-
if (!
|
|
32
|
-
throwError('VERSION_NAME is not a valid semver format');
|
|
38
|
+
if (!semver_1.default.valid(VERSION_NAME)) {
|
|
39
|
+
(0, throwError_1.throwError)('VERSION_NAME is not a valid semver format');
|
|
33
40
|
}
|
|
34
|
-
OptionHolder.versionName = VERSION_NAME;
|
|
35
|
-
OptionHolder.versionCode = VERSION_CODE;
|
|
41
|
+
OptionHolder_1.OptionHolder.versionName = VERSION_NAME;
|
|
42
|
+
OptionHolder_1.OptionHolder.versionCode = VERSION_CODE;
|
|
36
43
|
}
|
|
37
44
|
async function parseFromJsonConfigFile(filename) {
|
|
38
|
-
const filePath = resolve(OptionHolder.rootDir, filename);
|
|
39
|
-
const json = readJsonSlow(filePath);
|
|
45
|
+
const filePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, filename);
|
|
46
|
+
const json = (0, FileUtil_1.readJsonSlow)(filePath);
|
|
40
47
|
const versionName = json.expo?.version + '';
|
|
41
48
|
const iosVersionCode = json.expo?.ios?.buildNumber + '';
|
|
42
49
|
const androidVersionCode = json.expo?.android?.versionCode + '';
|
|
43
50
|
if (!/\d+/.test(iosVersionCode)) {
|
|
44
|
-
throwError('app.json expo.ios.buildNumber is not an integer');
|
|
51
|
+
(0, throwError_1.throwError)('app.json expo.ios.buildNumber is not an integer');
|
|
45
52
|
}
|
|
46
53
|
if (!/\d+/.test(androidVersionCode)) {
|
|
47
|
-
throwError('app.json expo.android.versionCode is not an integer');
|
|
54
|
+
(0, throwError_1.throwError)('app.json expo.android.versionCode is not an integer');
|
|
48
55
|
}
|
|
49
56
|
if (iosVersionCode !== androidVersionCode) {
|
|
50
|
-
throwError('app.json expo.ios.buildNumber is not equal with expo.android.versionCode');
|
|
57
|
+
(0, throwError_1.throwError)('app.json expo.ios.buildNumber is not equal with expo.android.versionCode');
|
|
51
58
|
}
|
|
52
|
-
if (!
|
|
53
|
-
throwError('VERSION_NAME is not a valid semver format');
|
|
59
|
+
if (!semver_1.default.valid(versionName)) {
|
|
60
|
+
(0, throwError_1.throwError)('VERSION_NAME is not a valid semver format');
|
|
54
61
|
}
|
|
55
|
-
OptionHolder.versionName = versionName;
|
|
56
|
-
OptionHolder.versionCode = iosVersionCode;
|
|
62
|
+
OptionHolder_1.OptionHolder.versionName = versionName;
|
|
63
|
+
OptionHolder_1.OptionHolder.versionCode = iosVersionCode;
|
|
57
64
|
}
|
|
58
65
|
}
|
|
59
|
-
|
|
60
|
-
const files = readdir(OptionHolder.rootDir);
|
|
66
|
+
async function injectBinaryVersions({ versionCode, versionName, }) {
|
|
67
|
+
const files = (0, FileUtil_1.readdir)(OptionHolder_1.OptionHolder.rootDir);
|
|
61
68
|
const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];
|
|
62
69
|
const jsonConfigFile = 'app.json';
|
|
63
70
|
for (const jsConfigFile of jsConfigFiles) {
|
|
@@ -70,20 +77,20 @@ export async function injectBinaryVersions({ versionCode, versionName, }) {
|
|
|
70
77
|
await injectToJsonConfigFile(jsonConfigFile);
|
|
71
78
|
return;
|
|
72
79
|
}
|
|
73
|
-
throwError('expo config file not found');
|
|
80
|
+
(0, throwError_1.throwError)('expo config file not found');
|
|
74
81
|
async function injectToJsConfigFile(filename) {
|
|
75
|
-
const filePath = resolve(OptionHolder.rootDir, filename);
|
|
76
|
-
let content = read(filePath);
|
|
82
|
+
const filePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, filename);
|
|
83
|
+
let content = (0, FileUtil_1.read)(filePath);
|
|
77
84
|
content = content.replace(/const VERSION_NAME = '(.*?)';/, `const VERSION_NAME = '${versionName}';`);
|
|
78
85
|
content = content.replace(/const VERSION_CODE = (.*?);/, `const VERSION_CODE = ${versionCode};`);
|
|
79
|
-
write(filePath, content);
|
|
86
|
+
(0, FileUtil_1.write)(filePath, content);
|
|
80
87
|
}
|
|
81
88
|
async function injectToJsonConfigFile(filename) {
|
|
82
|
-
const filePath = resolve(OptionHolder.rootDir, filename);
|
|
83
|
-
const json = readJsonSlow(filePath);
|
|
89
|
+
const filePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, filename);
|
|
90
|
+
const json = (0, FileUtil_1.readJsonSlow)(filePath);
|
|
84
91
|
json.expo.version = versionName;
|
|
85
92
|
json.expo.ios.buildNumber = versionCode;
|
|
86
93
|
json.expo.android.versionCode = +versionCode;
|
|
87
|
-
writeJson(filePath, json);
|
|
94
|
+
(0, FileUtil_1.writeJson)(filePath, json);
|
|
88
95
|
}
|
|
89
96
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateElapsed = calculateElapsed;
|
|
4
|
+
const js_util_1 = require("@mj-studio/js-util");
|
|
5
|
+
function calculateElapsed(t) {
|
|
3
6
|
let seconds = Math.floor((Date.now() - t) / 1000);
|
|
4
7
|
const minutes = Math.floor(seconds / 60);
|
|
5
8
|
seconds = seconds % 60;
|
|
6
|
-
return `${minutes}:${padZero(seconds)}`;
|
|
9
|
+
return `${minutes}:${(0, js_util_1.padZero)(seconds)}`;
|
|
7
10
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hydrateKeyholderFileValues = hydrateKeyholderFileValues;
|
|
4
|
+
const OptionHolder_1 = require("./OptionHolder");
|
|
5
|
+
const FileUtil_1 = require("./FileUtil");
|
|
6
|
+
async function hydrateKeyholderFileValues() {
|
|
7
|
+
Object.assign(OptionHolder_1.OptionHolder.keyholderFileValueMap, (0, FileUtil_1.readJsonSlow)(OptionHolder_1.OptionHolder.keyholderFilePath));
|
|
5
8
|
}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.iterateAllFilesInGeneratedTemplate = iterateAllFilesInGeneratedTemplate;
|
|
4
|
+
const OptionHolder_1 = require("./OptionHolder");
|
|
5
|
+
const FileUtil_1 = require("./FileUtil");
|
|
6
|
+
async function iterateAllFilesInGeneratedTemplate(callback) {
|
|
7
|
+
for (const dir of OptionHolder_1.OptionHolder.templateDirNames) {
|
|
8
|
+
await go((0, FileUtil_1.join)(OptionHolder_1.OptionHolder.outDir, dir));
|
|
6
9
|
}
|
|
7
10
|
async function go(dirPath) {
|
|
8
|
-
const paths = readdir(dirPath).map((f) => join(dirPath, f));
|
|
11
|
+
const paths = (0, FileUtil_1.readdir)(dirPath).map((f) => (0, FileUtil_1.join)(dirPath, f));
|
|
9
12
|
for (const p of paths) {
|
|
10
|
-
if (isFile(p)) {
|
|
13
|
+
if ((0, FileUtil_1.isFile)(p)) {
|
|
11
14
|
await callback(p);
|
|
12
15
|
}
|
|
13
|
-
else if (isDir(p)) {
|
|
16
|
+
else if ((0, FileUtil_1.isDir)(p)) {
|
|
14
17
|
await go(p);
|
|
15
18
|
}
|
|
16
19
|
}
|
|
@@ -1,34 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareAndroid = prepareAndroid;
|
|
4
|
+
const zx_1 = require("zx");
|
|
5
|
+
const FileUtil_1 = require("../FileUtil");
|
|
6
|
+
const OptionHolder_1 = require("../OptionHolder");
|
|
7
|
+
const logger_1 = require("../logger");
|
|
8
|
+
async function prepareAndroid() {
|
|
9
|
+
const androidDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android');
|
|
10
|
+
const fastlaneSrcDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'fastlane-android');
|
|
11
|
+
const fastlaneDestDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android', 'fastlane');
|
|
12
|
+
await (0, zx_1.spinner)('Prebuild Android', () => (0, zx_1.$) `cd ${OptionHolder_1.OptionHolder.rootDir} && expo prebuild -p android --no-install`);
|
|
13
|
+
(0, FileUtil_1.remove)(fastlaneDestDir);
|
|
14
|
+
await (0, FileUtil_1.iterateDir)(fastlaneSrcDir, async (file) => {
|
|
15
|
+
const filePath = (0, FileUtil_1.resolve)(fastlaneSrcDir, file);
|
|
16
|
+
(0, FileUtil_1.remove)((0, FileUtil_1.resolve)(androidDir, file));
|
|
17
|
+
(0, FileUtil_1.copy)(filePath, (0, FileUtil_1.resolve)(androidDir, file));
|
|
15
18
|
});
|
|
16
|
-
logger.success('Inject Android Fastlane files');
|
|
19
|
+
logger_1.logger.success('Inject Android Fastlane files');
|
|
17
20
|
await replaceAndroidSigningConfig();
|
|
18
21
|
async function replaceAndroidSigningConfig() {
|
|
19
|
-
const buildGradlePath = resolve(androidDir, 'app', 'build.gradle');
|
|
20
|
-
const { android_keystore_store_password, android_keystore_key_alias, android_keystore_key_password, } = OptionHolder.keyholderFileValueMap;
|
|
21
|
-
const content = read(buildGradlePath).replace(/signingConfigs.*?{.*?debug.*?{.*?}.*?}/s, `
|
|
22
|
+
const buildGradlePath = (0, FileUtil_1.resolve)(androidDir, 'app', 'build.gradle');
|
|
23
|
+
const { android_keystore_store_password, android_keystore_key_alias, android_keystore_key_password, } = OptionHolder_1.OptionHolder.keyholderFileValueMap;
|
|
24
|
+
const content = (0, FileUtil_1.read)(buildGradlePath).replace(/signingConfigs.*?{.*?debug.*?{.*?}.*?}/s, `
|
|
22
25
|
signingConfigs {
|
|
23
26
|
debug {
|
|
24
|
-
storeFile file('${path.relative(buildGradlePath, resolve(OptionHolder.outDir, 'key', 'android_release_keystore.jks'))}')
|
|
27
|
+
storeFile file('${zx_1.path.relative(buildGradlePath, (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'key', 'android_release_keystore.jks'))}')
|
|
25
28
|
storePassword '${android_keystore_store_password}'
|
|
26
29
|
keyAlias '${android_keystore_key_alias}'
|
|
27
30
|
keyPassword '${android_keystore_key_password}'
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
33
|
`);
|
|
31
|
-
write(buildGradlePath, content);
|
|
32
|
-
logger.success('Replace Android Signing Config');
|
|
34
|
+
(0, FileUtil_1.write)(buildGradlePath, content);
|
|
35
|
+
logger_1.logger.success('Replace Android Signing Config');
|
|
33
36
|
}
|
|
34
37
|
}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareIos = prepareIos;
|
|
4
|
+
const zx_1 = require("zx");
|
|
5
|
+
const FileUtil_1 = require("../FileUtil");
|
|
6
|
+
const OptionHolder_1 = require("../OptionHolder");
|
|
7
|
+
const logger_1 = require("../logger");
|
|
8
|
+
async function prepareIos() {
|
|
9
|
+
const iosDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios');
|
|
10
|
+
const fastlaneSrcDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'fastlane-ios');
|
|
11
|
+
const fastlaneDestDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios', 'fastlane');
|
|
12
|
+
await (0, zx_1.spinner)('Prebuild iOS', () => (0, zx_1.$) `cd ${OptionHolder_1.OptionHolder.rootDir} && expo prebuild -p ios --no-install`);
|
|
13
|
+
(0, FileUtil_1.remove)(fastlaneDestDir);
|
|
14
|
+
await (0, FileUtil_1.iterateDir)(fastlaneSrcDir, async (file) => {
|
|
15
|
+
const filePath = (0, FileUtil_1.resolve)(fastlaneSrcDir, file);
|
|
16
|
+
(0, FileUtil_1.remove)((0, FileUtil_1.resolve)(iosDir, file));
|
|
17
|
+
(0, FileUtil_1.copy)(filePath, (0, FileUtil_1.resolve)(iosDir, file));
|
|
15
18
|
});
|
|
16
|
-
logger.success('Inject iOS Fastlane files');
|
|
19
|
+
logger_1.logger.success('Inject iOS Fastlane files');
|
|
17
20
|
}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.promptCommonInputs = promptCommonInputs;
|
|
4
|
+
const OptionHolder_1 = require("../OptionHolder");
|
|
5
|
+
const prompts_1 = require("@inquirer/prompts");
|
|
6
|
+
const EnvUtil_1 = require("../EnvUtil");
|
|
7
|
+
const FileUtil_1 = require("../FileUtil");
|
|
8
|
+
async function promptCommonInputs() {
|
|
9
|
+
OptionHolder_1.OptionHolder.rootDir = EnvUtil_1.isDev
|
|
10
|
+
? (0, FileUtil_1.resolve)('example')
|
|
11
|
+
: (0, FileUtil_1.resolve)(await (0, prompts_1.input)({
|
|
9
12
|
message: 'react native project root directory path',
|
|
10
|
-
default: isDev ? 'example' : '.',
|
|
13
|
+
default: EnvUtil_1.isDev ? 'example' : '.',
|
|
11
14
|
validate: (value) => {
|
|
12
|
-
const p = resolve(value, 'package.json');
|
|
13
|
-
if (!exist(p)) {
|
|
15
|
+
const p = (0, FileUtil_1.resolve)(value, 'package.json');
|
|
16
|
+
if (!(0, FileUtil_1.exist)(p)) {
|
|
14
17
|
return "package.json hasn\'t been detected. provider valid project root.";
|
|
15
18
|
}
|
|
16
19
|
return true;
|
|
17
20
|
},
|
|
18
21
|
}));
|
|
19
|
-
OptionHolder.outDir = resolve(OptionHolder.rootDir, 'expo-local-build');
|
|
20
|
-
OptionHolder.keyDir = resolve(OptionHolder.outDir, 'key');
|
|
21
|
-
OptionHolder.keyholderFilePath = resolve(OptionHolder.outDir, 'keyholder.json');
|
|
22
|
+
OptionHolder_1.OptionHolder.outDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'expo-local-build');
|
|
23
|
+
OptionHolder_1.OptionHolder.keyDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'key');
|
|
24
|
+
OptionHolder_1.OptionHolder.keyholderFilePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'keyholder.json');
|
|
22
25
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setup = setup;
|
|
4
|
+
const promptCommonInputs_1 = require("./promptCommonInputs");
|
|
5
|
+
const hydrateKeyholderFileValues_1 = require("../hydrateKeyholderFileValues");
|
|
6
|
+
const VersionUtil_1 = require("../VersionUtil");
|
|
7
|
+
async function setup() {
|
|
8
|
+
await (0, promptCommonInputs_1.promptCommonInputs)();
|
|
9
|
+
await (0, hydrateKeyholderFileValues_1.hydrateKeyholderFileValues)();
|
|
10
|
+
await (0, VersionUtil_1.parseBinaryVersions)();
|
|
8
11
|
}
|
package/build/util/throwError.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.throwError = throwError;
|
|
4
|
+
const logger_1 = require("./logger");
|
|
5
|
+
function throwError(message, e) {
|
|
3
6
|
if (e) {
|
|
4
|
-
logger.error(message, e);
|
|
7
|
+
logger_1.logger.error(message, e);
|
|
5
8
|
}
|
|
6
9
|
else {
|
|
7
|
-
logger.error(message);
|
|
10
|
+
logger_1.logger.error(message);
|
|
8
11
|
}
|
|
9
12
|
process.exit(1);
|
|
10
13
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-release-it",
|
|
3
3
|
"module": "src/index.ts",
|
|
4
|
-
"type": "
|
|
5
|
-
"version": "0.0.
|
|
4
|
+
"type": "commonjs",
|
|
5
|
+
"version": "0.0.10",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"workspaces": [
|
|
36
36
|
"example"
|
|
37
37
|
],
|
|
38
|
-
"bin": "./
|
|
38
|
+
"bin": "./bin/expo-release-it.cjs",
|
|
39
39
|
"files": [
|
|
40
40
|
"build",
|
|
41
41
|
"package.json",
|