expo-release-it 0.1.1 → 0.1.2
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/build/command/build.js +119 -95
- package/build/command/build.js.map +1 -1
- package/build/command/bump.js +33 -27
- package/build/command/bump.js.map +1 -1
- package/build/command/init.js +75 -63
- package/build/command/init.js.map +1 -1
- package/build/command/pull.d.ts +5 -0
- package/build/command/pull.js +525 -0
- package/build/command/pull.js.map +1 -0
- package/build/command/submit.js +102 -85
- package/build/command/submit.js.map +1 -1
- package/build/command/upload.js +117 -105
- package/build/command/upload.js.map +1 -1
- package/build/index.js +328 -240
- package/build/index.js.map +1 -1
- package/build/util/FastlaneOption.js +9 -14
- package/build/util/FastlaneOption.js.map +1 -1
- package/build/util/FileUtil.d.ts +2 -1
- package/build/util/FileUtil.js +4 -0
- package/build/util/FileUtil.js.map +1 -1
- package/build/util/OptionHolder.d.ts +1 -2
- package/build/util/OptionHolder.js +7 -8
- package/build/util/OptionHolder.js.map +1 -1
- package/build/util/generateAppStoreConnectApiKeyFile.d.ts +3 -0
- package/build/util/{setup/promptCommonInputs.js → generateAppStoreConnectApiKeyFile.js} +36 -20
- package/build/util/generateAppStoreConnectApiKeyFile.js.map +1 -0
- package/build/util/injectTemplatePlaceHolders.js +8 -11
- package/build/util/injectTemplatePlaceHolders.js.map +1 -1
- package/build/util/input/InqueryInputs.js +7 -8
- package/build/util/input/InqueryInputs.js.map +1 -1
- package/build/util/iterateAllFiles.js.map +1 -1
- package/build/util/logger.d.ts +1 -0
- package/build/util/logger.js +1 -0
- package/build/util/logger.js.map +1 -1
- package/build/util/{VersionUtil.js → setup/VersionUtil.js} +9 -9
- package/build/util/setup/VersionUtil.js.map +1 -0
- package/build/util/setup/execShellScript.d.ts +19 -0
- package/build/util/setup/execShellScript.js +19 -0
- package/build/util/setup/execShellScript.js.map +1 -0
- package/build/util/{hydrateKeyholderFileValues.js → setup/hydrateKeyholderFileValues.js} +14 -10
- package/build/util/setup/hydrateKeyholderFileValues.js.map +1 -0
- package/build/util/setup/prepareAndroid.js +64 -37
- package/build/util/setup/prepareAndroid.js.map +1 -1
- package/build/util/setup/prepareIos.js +63 -35
- package/build/util/setup/prepareIos.js.map +1 -1
- package/build/util/setup/setup.d.ts +2 -1
- package/build/util/setup/setup.js +30 -25
- package/build/util/setup/setup.js.map +1 -1
- package/build/util/spinner.d.ts +3 -0
- package/build/util/spinner.js +14 -0
- package/build/util/spinner.js.map +1 -0
- package/build/util/throwError.js +1 -0
- package/build/util/throwError.js.map +1 -1
- package/package.json +5 -5
- package/template/android/Gemfile +1 -1
- package/template/android/fastlane/Fastfile +2 -2
- package/template/ios/Gemfile +2 -1
- package/template/ios/fastlane/Fastfile +20 -3
- package/build/util/VersionUtil.js.map +0 -1
- package/build/util/hydrateKeyholderFileValues.js.map +0 -1
- package/build/util/setup/promptCommonInputs.d.ts +0 -3
- package/build/util/setup/promptCommonInputs.js.map +0 -1
- package/template/ios/fastlane/Matchfile +0 -5
- /package/build/util/{VersionUtil.d.ts → setup/VersionUtil.d.ts} +0 -0
- /package/build/util/{hydrateKeyholderFileValues.d.ts → setup/hydrateKeyholderFileValues.d.ts} +0 -0
package/build/command/bump.js
CHANGED
|
@@ -3,11 +3,11 @@ var package_default = {
|
|
|
3
3
|
name: "expo-release-it",
|
|
4
4
|
module: "src/index.ts",
|
|
5
5
|
type: "module",
|
|
6
|
-
version: "0.1.
|
|
6
|
+
version: "0.1.1",
|
|
7
7
|
license: "MIT",
|
|
8
8
|
scripts: {
|
|
9
9
|
build: "tsup",
|
|
10
|
-
dev: "
|
|
10
|
+
dev: "yarn run build && NODE_ENV=development node bin/expo-release-it.mjs",
|
|
11
11
|
release: "yarn build && release-it",
|
|
12
12
|
android: "expo run:android",
|
|
13
13
|
ios: "expo run:ios",
|
|
@@ -18,15 +18,15 @@ var package_default = {
|
|
|
18
18
|
"@mj-studio/js-util": "^1.1.20",
|
|
19
19
|
chalk: "^5.4.1",
|
|
20
20
|
commander: "^13.1.0",
|
|
21
|
+
execa: "^9.5.2",
|
|
21
22
|
"fs-extra": "^11.3.0",
|
|
23
|
+
ora: "^8.2.0",
|
|
22
24
|
react: "18.3.1",
|
|
23
25
|
"react-native": "0.76.9",
|
|
24
26
|
semver: "^7.7.1",
|
|
25
|
-
url: "^0.11.4"
|
|
26
|
-
zx: "^8.5.3"
|
|
27
|
+
url: "^0.11.4"
|
|
27
28
|
},
|
|
28
29
|
devDependencies: {
|
|
29
|
-
"@types/bun": "latest",
|
|
30
30
|
"@types/fs-extra": "^11.0.4",
|
|
31
31
|
"@types/semver": "^7.7.0",
|
|
32
32
|
prettier: "3.5.3",
|
|
@@ -86,20 +86,20 @@ var OptionHolder = {
|
|
|
86
86
|
input: {},
|
|
87
87
|
keyholderMap: {},
|
|
88
88
|
templateDirNames: ["key"],
|
|
89
|
-
iosBundleIdentifier: "",
|
|
90
|
-
androidPackageName: "",
|
|
91
89
|
projectDir: "",
|
|
92
90
|
outputOfInitDir: "",
|
|
93
91
|
keyDir: "",
|
|
94
92
|
keyholderFilePath: "",
|
|
95
93
|
versionName: "",
|
|
96
|
-
versionCode: ""
|
|
94
|
+
versionCode: "",
|
|
95
|
+
tempDir: ""
|
|
97
96
|
};
|
|
98
97
|
|
|
99
98
|
// src/util/logger.ts
|
|
100
99
|
import chalk from "chalk";
|
|
101
100
|
var logger = {
|
|
102
101
|
success: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")}`)),
|
|
102
|
+
done: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")} - Done`)),
|
|
103
103
|
error: (...msg) => console.log(chalk.red(`\u2716 ${msg.join(", ")}`)),
|
|
104
104
|
warn: (...msg) => console.log(chalk.yellow(`\u26A0 ${msg.join(", ")}`)),
|
|
105
105
|
info: (...msg) => console.log(chalk.cyan(`\u2139 ${msg.join(", ")}`)),
|
|
@@ -118,7 +118,7 @@ function throwError(message, e) {
|
|
|
118
118
|
process.exit(1);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
// src/util/VersionUtil.ts
|
|
121
|
+
// src/util/setup/VersionUtil.ts
|
|
122
122
|
import semver from "semver";
|
|
123
123
|
async function parseBinaryVersions() {
|
|
124
124
|
const files = readdir(OptionHolder.projectDir);
|
|
@@ -218,32 +218,39 @@ async function injectBinaryVersions({
|
|
|
218
218
|
// src/command/bump.ts
|
|
219
219
|
import semver2 from "semver";
|
|
220
220
|
|
|
221
|
+
// src/util/setup/hydrateKeyholderFileValues.ts
|
|
222
|
+
async function hydrateKeyholderFileValues() {
|
|
223
|
+
if (exist(OptionHolder.keyholderFilePath)) {
|
|
224
|
+
Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
221
228
|
// src/util/EnvUtil.ts
|
|
222
229
|
var isDev = process.env.NODE_ENV === "development";
|
|
223
230
|
var isWin = process.platform.startsWith("win");
|
|
224
231
|
|
|
225
|
-
// src/
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
232
|
+
// src/util/setup/setup.ts
|
|
233
|
+
async function setup() {
|
|
234
|
+
await setupBasicOptions();
|
|
235
|
+
await hydrateKeyholderFileValues();
|
|
236
|
+
await parseBinaryVersions();
|
|
237
|
+
}
|
|
238
|
+
async function setupBasicOptions() {
|
|
230
239
|
OptionHolder.projectDir = isDev ? resolve2("example") : resolve2(".");
|
|
231
240
|
OptionHolder.outputOfInitDir = resolve2(OptionHolder.projectDir, "expo-release-it");
|
|
232
241
|
OptionHolder.keyDir = resolve2(OptionHolder.outputOfInitDir, "key");
|
|
233
242
|
OptionHolder.keyholderFilePath = resolve2(OptionHolder.outputOfInitDir, "keyholder.json");
|
|
243
|
+
OptionHolder.tempDir = resolve2(OptionHolder.outputOfInitDir, ".temp");
|
|
234
244
|
}
|
|
235
245
|
|
|
236
|
-
// src/util/
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
await hydrateKeyholderFileValues();
|
|
245
|
-
await parseBinaryVersions();
|
|
246
|
-
}
|
|
246
|
+
// src/util/setup/execShellScript.ts
|
|
247
|
+
import { execa } from "execa";
|
|
248
|
+
var exe = execa({
|
|
249
|
+
stdin: "pipe",
|
|
250
|
+
stdout: "inherit",
|
|
251
|
+
stderr: "inherit",
|
|
252
|
+
shell: false
|
|
253
|
+
});
|
|
247
254
|
|
|
248
255
|
// src/command/bump.ts
|
|
249
256
|
async function bump({ options }) {
|
|
@@ -258,11 +265,10 @@ async function bump({ options }) {
|
|
|
258
265
|
logger.success("Binary versions have been bumped in expo config file");
|
|
259
266
|
}
|
|
260
267
|
async function preCheck() {
|
|
261
|
-
if (isDev) return;
|
|
262
268
|
try {
|
|
263
269
|
let hasChange = false;
|
|
264
270
|
try {
|
|
265
|
-
await
|
|
271
|
+
await exe("git", ["diff", "--quiet", "HEAD"]);
|
|
266
272
|
} catch (_) {
|
|
267
273
|
hasChange = true;
|
|
268
274
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../package.json","../../src/util/FileUtil.ts","../../src/util/OptionHolder.ts","../../src/util/logger.ts","../../src/util/throwError.ts","../../src/util/VersionUtil.ts","../../src/command/bump.ts","../../src/util/EnvUtil.ts","../../src/util/setup/promptCommonInputs.ts","../../src/util/hydrateKeyholderFileValues.ts","../../src/util/setup/setup.ts"],"sourcesContent":["{\n \"name\": \"expo-release-it\",\n \"module\": \"src/index.ts\",\n \"type\": \"module\",\n \"version\": \"0.1.0\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"bun run build && NODE_ENV=development node bin/expo-release-it.mjs\",\n \"release\": \"yarn build && release-it\",\n \"android\": \"expo run:android\",\n \"ios\": \"expo run:ios\",\n \"t\": \"tsc --noEmit -p .\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@mj-studio/js-util\": \"^1.1.20\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"fs-extra\": \"^11.3.0\",\n \"react\": \"18.3.1\",\n \"react-native\": \"0.76.9\",\n \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\",\n \"zx\": \"^8.5.3\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/semver\": \"^7.7.0\",\n \"prettier\": \"3.5.3\",\n \"release-it\": \"^19.0.1\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"workspaces\": [\n \"example\"\n ],\n \"bin\": \"./bin/expo-release-it.mjs\",\n \"files\": [\n \"build\",\n \"package.json\",\n \"bin\",\n \"template\"\n ],\n \"packageManager\": \"yarn@4.9.1\"\n}\n","import fs from 'fs-extra';\nimport * as path from 'path';\n\nexport const join = path.join;\nexport const resolve = path.resolve;\n\nexport function exist(path: string) {\n return fs.existsSync(path);\n}\n\nexport function isDir(path: string) {\n return exist(path) && fs.lstatSync(path).isDirectory();\n}\n\nexport function relativePath(from: string, to: string) {\n return path.relative(from, to);\n}\n\nexport function isFile(path: string) {\n return exist(path) && fs.lstatSync(path).isFile();\n}\n\nexport function read(path: string) {\n return fs.readFileSync(path, { encoding: 'utf8' });\n}\n\nexport function readdir(path: string) {\n return fs.readdirSync(path);\n}\n\n// you should require when possible(optimized in js)\nexport function readJsonSlow(path: string) {\n return fs.readJSONSync(path);\n}\n\nexport function write(p: string, content: string) {\n const dir = path.dirname(p);\n if (!exist(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return fs.writeFileSync(p, content);\n}\nexport function copy(src: string, dest: string, options?: fs.CopyOptionsSync) {\n fs.copySync(src, dest, options);\n}\n\nexport function writeJson(path: string, json: any) {\n return write(path, JSON.stringify(json, null, 2));\n}\n\nexport function remove(path: string) {\n if (!exist(path)) {\n return;\n }\n\n if (fs.lstatSync(path).isDirectory()) {\n return fs.rmSync(path, { force: true, recursive: true });\n } else {\n return fs.rmSync(path, { force: true });\n }\n}\n\nexport async function iterateDir(path: string, fn: (file: string) => Promise<void> | void) {\n if (!isDir(path)) {\n return;\n }\n\n for (const file of fs.readdirSync(path)) {\n await fn(file);\n }\n}\n","import pkgJson from '../../package.json';\nimport { resolve } from './FileUtil';\nimport { fileURLToPath } from 'url';\n\n/**\n * CLI Comprehensive options\n * Each values can be empty by command and timing.\n */\nexport const OptionHolder: {\n // cli specific options\n cli: {\n // cli version\n version: string;\n // cli project root directory\n rootDir: string;\n // cli template source directory\n templateDir: string;\n };\n input: {\n platform: 'android' | 'ios';\n uploadMetadata: boolean;\n androidOutput: 'apk' | 'aab';\n pod: boolean;\n };\n keyholderMap: {\n ios_app_identifier: string;\n ios_developer_team_id: string;\n ios_match_git_url: string;\n ios_app_store_connect_api_key_id: string;\n ios_app_store_connect_api_key_issuer_id: string;\n ios_xcode_project_target: string;\n ios_match_password: string;\n\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n android_package_name: string;\n };\n iosBundleIdentifier: string;\n androidPackageName: string;\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n outputOfInitDir: string;\n keyDir: string;\n keyholderFilePath: string;\n versionName: string;\n versionCode: string;\n} = {\n cli: {\n version: pkgJson.version,\n rootDir: resolve(fileURLToPath(import.meta.url), '../..'),\n templateDir: resolve(fileURLToPath(import.meta.url), '../../template'),\n },\n input: {} as any,\n keyholderMap: {} as any,\n templateDirNames: ['key'],\n iosBundleIdentifier: '',\n androidPackageName: '',\n projectDir: '',\n outputOfInitDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n};\n","import chalk from 'chalk';\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')}`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${msg.join(', ')}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${msg.join(', ')}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${msg.join(', ')}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${msg.join(', ')}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(msg.join(', '))),\n};\n","import { logger } from './logger';\n\nexport function throwError(message: string, e?: any): never {\n if (e) {\n logger.error(message, e);\n } else {\n logger.error(message);\n }\n process.exit(1);\n}\n","import { OptionHolder } from './OptionHolder';\nimport { throwError } from './throwError';\nimport semver from 'semver';\nimport { readdir, read, readJsonSlow, write, writeJson, resolve } from './FileUtil';\n\nexport async function parseBinaryVersions() {\n const files = readdir(OptionHolder.projectDir);\n\n const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];\n const jsonConfigFile = 'app.json';\n\n for (const jsConfigFile of jsConfigFiles) {\n if (files.includes(jsConfigFile)) {\n await parseFromJsConfigFile(jsConfigFile);\n return;\n }\n }\n\n if (files.includes(jsonConfigFile)) {\n await parseFromJsonConfigFile(jsonConfigFile);\n return;\n }\n\n throwError('expo config file not found');\n\n async function parseFromJsConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const content = read(filePath);\n\n const VERSION_NAME = /const VERSION_NAME = '(.*?)';/.exec(content)?.[1];\n const VERSION_CODE = /const VERSION_CODE = (.*?);/.exec(content)?.[1];\n\n if (!VERSION_NAME) {\n throwError('cannot parse version name');\n }\n if (!VERSION_CODE) {\n throwError('cannot parse version code');\n }\n\n if (!semver.valid(VERSION_NAME)) {\n throwError('VERSION_NAME is not a valid semver format');\n }\n\n OptionHolder.versionName = VERSION_NAME;\n OptionHolder.versionCode = VERSION_CODE;\n }\n\n async function parseFromJsonConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const json = readJsonSlow(filePath);\n\n const versionName = json.expo?.version + '';\n const iosVersionCode = json.expo?.ios?.buildNumber + '';\n const androidVersionCode = json.expo?.android?.versionCode + '';\n\n if (!/\\d+/.test(iosVersionCode)) {\n throwError('app.json expo.ios.buildNumber is not an integer');\n }\n\n if (!/\\d+/.test(androidVersionCode)) {\n throwError('app.json expo.android.versionCode is not an integer');\n }\n\n if (iosVersionCode !== androidVersionCode) {\n throwError('app.json expo.ios.buildNumber is not equal with expo.android.versionCode');\n }\n\n if (!semver.valid(versionName)) {\n throwError('VERSION_NAME is not a valid semver format');\n }\n\n OptionHolder.versionName = versionName;\n OptionHolder.versionCode = iosVersionCode;\n }\n}\n\nexport async function injectBinaryVersions({\n versionCode,\n versionName,\n}: {\n versionName: string;\n versionCode: string;\n}) {\n const files = readdir(OptionHolder.projectDir);\n\n const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];\n const jsonConfigFile = 'app.json';\n\n for (const jsConfigFile of jsConfigFiles) {\n if (files.includes(jsConfigFile)) {\n await injectToJsConfigFile(jsConfigFile);\n return;\n }\n }\n\n if (files.includes(jsonConfigFile)) {\n await injectToJsonConfigFile(jsonConfigFile);\n return;\n }\n\n throwError('expo config file not found');\n\n async function injectToJsConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n let content = read(filePath);\n\n content = content.replace(\n /const VERSION_NAME = '(.*?)';/,\n `const VERSION_NAME = '${versionName}';`,\n );\n content = content.replace(\n /const VERSION_CODE = (.*?);/,\n `const VERSION_CODE = ${versionCode};`,\n );\n\n write(filePath, content);\n }\n\n async function injectToJsonConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const json = readJsonSlow(filePath);\n\n json.expo.version = versionName;\n json.expo.ios.buildNumber = versionCode;\n json.expo.android.versionCode = +versionCode;\n\n writeJson(filePath, json);\n }\n}\n","import { injectBinaryVersions } from '../util/VersionUtil';\nimport { throwError } from '../util/throwError';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport semver from 'semver';\nimport { isDev } from '../util/EnvUtil';\nimport { $ } from 'zx';\nimport { setup } from '../util/setup/setup';\n\nexport async function bump({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n await preCheck();\n await setup();\n\n logger.info(`current version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);\n const nextVersionName = semver.inc(OptionHolder.versionName, 'patch')!;\n const nextVersionCode = Number(OptionHolder.versionCode) + 1 + '';\n logger.info(`next version: ${nextVersionName}(${nextVersionCode})`);\n\n await injectBinaryVersions({ versionName: nextVersionName, versionCode: nextVersionCode });\n logger.success('Binary versions have been bumped in expo config file');\n}\n\nasync function preCheck() {\n if (isDev) return;\n try {\n let hasChange = false;\n try {\n await $`git diff --quiet HEAD`;\n } catch (_) {\n hasChange = true;\n }\n if (hasChange) {\n throwError('Workspace is not clean. Before bump version, you should commit all changes.');\n }\n } catch (e) {\n throwError('Precheck Failed', e);\n }\n}\n","export const isDev = process.env.NODE_ENV === 'development';\nexport const isWin = process.platform.startsWith('win');\n","import { OptionHolder } from '../OptionHolder';\nimport { isDev } from '../EnvUtil';\nimport { resolve } from '../FileUtil';\n\nexport async function promptCommonInputs() {\n OptionHolder.projectDir = isDev ? resolve('example') : resolve('.');\n\n OptionHolder.outputOfInitDir = resolve(OptionHolder.projectDir, 'expo-release-it');\n OptionHolder.keyDir = resolve(OptionHolder.outputOfInitDir, 'key');\n OptionHolder.keyholderFilePath = resolve(OptionHolder.outputOfInitDir, 'keyholder.json');\n}\n","import { OptionHolder } from './OptionHolder';\nimport { readJsonSlow } from './FileUtil';\n\nexport async function hydrateKeyholderFileValues() {\n Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));\n}\n","import { promptCommonInputs } from './promptCommonInputs';\nimport { hydrateKeyholderFileValues } from '../hydrateKeyholderFileValues';\nimport { parseBinaryVersions } from '../VersionUtil';\n\nexport async function setup() {\n await promptCommonInputs();\n await hydrateKeyholderFileValues();\n await parseBinaryVersions();\n}\n"],"mappings":"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","names":["resolve","path","path","path","resolve","resolve","semver","resolve","semver"]}
|
|
1
|
+
{"version":3,"sources":["../../package.json","../../src/util/FileUtil.ts","../../src/util/OptionHolder.ts","../../src/util/logger.ts","../../src/util/throwError.ts","../../src/util/setup/VersionUtil.ts","../../src/command/bump.ts","../../src/util/setup/hydrateKeyholderFileValues.ts","../../src/util/EnvUtil.ts","../../src/util/setup/setup.ts","../../src/util/setup/execShellScript.ts"],"sourcesContent":["{\n \"name\": \"expo-release-it\",\n \"module\": \"src/index.ts\",\n \"type\": \"module\",\n \"version\": \"0.1.1\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"yarn run build && NODE_ENV=development node bin/expo-release-it.mjs\",\n \"release\": \"yarn build && release-it\",\n \"android\": \"expo run:android\",\n \"ios\": \"expo run:ios\",\n \"t\": \"tsc --noEmit -p .\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@mj-studio/js-util\": \"^1.1.20\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"execa\": \"^9.5.2\",\n \"fs-extra\": \"^11.3.0\",\n \"ora\": \"^8.2.0\",\n \"react\": \"18.3.1\",\n \"react-native\": \"0.76.9\",\n \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/semver\": \"^7.7.0\",\n \"prettier\": \"3.5.3\",\n \"release-it\": \"^19.0.1\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"workspaces\": [\n \"example\"\n ],\n \"bin\": \"./bin/expo-release-it.mjs\",\n \"files\": [\n \"build\",\n \"package.json\",\n \"bin\",\n \"template\"\n ],\n \"packageManager\": \"yarn@4.9.1\"\n}\n","import fs from 'fs-extra';\nimport * as path from 'path';\n\nexport const join = path.join;\nexport const resolve = path.resolve;\n\nexport function exist(path: string) {\n return fs.existsSync(path);\n}\n\nexport function isDir(path: string) {\n return exist(path) && fs.lstatSync(path).isDirectory();\n}\n\nexport function relativePath(from: string, to: string) {\n return path.relative(from, to);\n}\n\nexport function isFile(path: string) {\n return exist(path) && fs.lstatSync(path).isFile();\n}\n\nexport function read(path: string) {\n return fs.readFileSync(path, { encoding: 'utf8' });\n}\n\nexport function readdir(path: string) {\n return fs.readdirSync(path);\n}\n\n// you should require when possible(optimized in js)\nexport function readJsonSlow(path: string) {\n return fs.readJSONSync(path);\n}\n\nexport function write(p: string, content: string) {\n const dir = path.dirname(p);\n if (!exist(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return fs.writeFileSync(p, content);\n}\nexport function copy(src: string, dest: string, options?: fs.CopyOptionsSync) {\n fs.copySync(src, dest, options);\n}\nexport function move(src: string, dest: string, options?: fs.MoveOptions) {\n fs.moveSync(src, dest, options);\n}\n\nexport function writeJson(path: string, json: any) {\n return write(path, JSON.stringify(json, null, 2));\n}\n\nexport function remove(path: string) {\n if (!exist(path)) {\n return;\n }\n\n if (fs.lstatSync(path).isDirectory()) {\n return fs.rmSync(path, { force: true, recursive: true });\n } else {\n return fs.rmSync(path, { force: true });\n }\n}\n\nexport async function iterateDir(path: string, fn: (file: string) => Promise<void> | void) {\n if (!isDir(path)) {\n return;\n }\n\n for (const file of fs.readdirSync(path)) {\n await fn(file);\n }\n}\n","import pkgJson from '../../package.json';\nimport { resolve } from './FileUtil';\nimport { fileURLToPath } from 'url';\n\n/**\n * CLI Comprehensive options\n * Each values can be empty by command and timing.\n */\nexport const OptionHolder: {\n // cli specific options\n cli: {\n // cli version\n version: string;\n // cli project root directory\n rootDir: string;\n // cli template source directory\n templateDir: string;\n };\n input: {\n platform: 'android' | 'ios';\n uploadMetadata: boolean;\n androidOutput: 'apk' | 'aab';\n pod: boolean;\n };\n keyholderMap: {\n ios_app_identifier: string;\n ios_developer_team_id: string;\n ios_match_git_url: string;\n ios_app_store_connect_api_key_id: string;\n ios_app_store_connect_api_key_issuer_id: string;\n ios_xcode_project_target: string;\n ios_match_password: string;\n\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n android_package_name: string;\n };\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n outputOfInitDir: string;\n keyDir: string;\n keyholderFilePath: string;\n tempDir: string;\n versionName: string;\n versionCode: string;\n} = {\n cli: {\n version: pkgJson.version,\n rootDir: resolve(fileURLToPath(import.meta.url), '../..'),\n templateDir: resolve(fileURLToPath(import.meta.url), '../../template'),\n },\n input: {} as any,\n keyholderMap: {} as any,\n templateDirNames: ['key'],\n projectDir: '',\n outputOfInitDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n tempDir: '',\n};\n","import chalk from 'chalk';\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')}`)),\n done: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')} - Done`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${msg.join(', ')}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${msg.join(', ')}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${msg.join(', ')}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${msg.join(', ')}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(msg.join(', '))),\n};\n","import { logger } from './logger';\n\nexport function throwError(message: string, e?: any): never {\n if (e) {\n logger.error(message, e);\n } else {\n logger.error(message);\n }\n process.exit(1);\n}\n","import { OptionHolder } from '../OptionHolder';\nimport { throwError } from '../throwError';\nimport semver from 'semver';\nimport { readdir, read, readJsonSlow, write, writeJson, resolve } from '../FileUtil';\n\nexport async function parseBinaryVersions() {\n const files = readdir(OptionHolder.projectDir);\n\n const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];\n const jsonConfigFile = 'app.json';\n\n for (const jsConfigFile of jsConfigFiles) {\n if (files.includes(jsConfigFile)) {\n await parseFromJsConfigFile(jsConfigFile);\n return;\n }\n }\n\n if (files.includes(jsonConfigFile)) {\n await parseFromJsonConfigFile(jsonConfigFile);\n return;\n }\n\n throwError('expo config file not found');\n\n async function parseFromJsConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const content = read(filePath);\n\n const VERSION_NAME = /const VERSION_NAME = '(.*?)';/.exec(content)?.[1];\n const VERSION_CODE = /const VERSION_CODE = (.*?);/.exec(content)?.[1];\n\n if (!VERSION_NAME) {\n throwError('cannot parse version name');\n }\n if (!VERSION_CODE) {\n throwError('cannot parse version code');\n }\n\n if (!semver.valid(VERSION_NAME)) {\n throwError('VERSION_NAME is not a valid semver format');\n }\n\n OptionHolder.versionName = VERSION_NAME;\n OptionHolder.versionCode = VERSION_CODE;\n }\n\n async function parseFromJsonConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const json = readJsonSlow(filePath);\n\n const versionName = json.expo?.version + '';\n const iosVersionCode = json.expo?.ios?.buildNumber + '';\n const androidVersionCode = json.expo?.android?.versionCode + '';\n\n if (!/\\d+/.test(iosVersionCode)) {\n throwError('app.json expo.ios.buildNumber is not an integer');\n }\n\n if (!/\\d+/.test(androidVersionCode)) {\n throwError('app.json expo.android.versionCode is not an integer');\n }\n\n if (iosVersionCode !== androidVersionCode) {\n throwError('app.json expo.ios.buildNumber is not equal with expo.android.versionCode');\n }\n\n if (!semver.valid(versionName)) {\n throwError('VERSION_NAME is not a valid semver format');\n }\n\n OptionHolder.versionName = versionName;\n OptionHolder.versionCode = iosVersionCode;\n }\n}\n\nexport async function injectBinaryVersions({\n versionCode,\n versionName,\n}: {\n versionName: string;\n versionCode: string;\n}) {\n const files = readdir(OptionHolder.projectDir);\n\n const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];\n const jsonConfigFile = 'app.json';\n\n for (const jsConfigFile of jsConfigFiles) {\n if (files.includes(jsConfigFile)) {\n await injectToJsConfigFile(jsConfigFile);\n return;\n }\n }\n\n if (files.includes(jsonConfigFile)) {\n await injectToJsonConfigFile(jsonConfigFile);\n return;\n }\n\n throwError('expo config file not found');\n\n async function injectToJsConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n let content = read(filePath);\n\n content = content.replace(\n /const VERSION_NAME = '(.*?)';/,\n `const VERSION_NAME = '${versionName}';`,\n );\n content = content.replace(\n /const VERSION_CODE = (.*?);/,\n `const VERSION_CODE = ${versionCode};`,\n );\n\n write(filePath, content);\n }\n\n async function injectToJsonConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const json = readJsonSlow(filePath);\n\n json.expo.version = versionName;\n json.expo.ios.buildNumber = versionCode;\n json.expo.android.versionCode = +versionCode;\n\n writeJson(filePath, json);\n }\n}\n","import { injectBinaryVersions } from '../util/setup/VersionUtil';\nimport { throwError } from '../util/throwError';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport semver from 'semver';\nimport { setup } from '../util/setup/setup';\nimport { exe } from '../util/setup/execShellScript';\n\nexport async function bump({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n await preCheck();\n await setup();\n\n logger.info(`current version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);\n const nextVersionName = semver.inc(OptionHolder.versionName, 'patch')!;\n const nextVersionCode = Number(OptionHolder.versionCode) + 1 + '';\n logger.info(`next version: ${nextVersionName}(${nextVersionCode})`);\n\n await injectBinaryVersions({ versionName: nextVersionName, versionCode: nextVersionCode });\n logger.success('Binary versions have been bumped in expo config file');\n}\n\nasync function preCheck() {\n try {\n let hasChange = false;\n try {\n await exe('git', ['diff', '--quiet', 'HEAD']);\n } catch (_) {\n hasChange = true;\n }\n if (hasChange) {\n throwError('Workspace is not clean. Before bump version, you should commit all changes.');\n }\n } catch (e) {\n throwError('Precheck Failed', e);\n }\n}\n","import { OptionHolder } from '../OptionHolder';\nimport { readJsonSlow, exist } from '../FileUtil';\n\nexport async function hydrateKeyholderFileValues() {\n if (exist(OptionHolder.keyholderFilePath)) {\n Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));\n }\n}\n","export const isDev = process.env.NODE_ENV === 'development';\nexport const isWin = process.platform.startsWith('win');\n","import { hydrateKeyholderFileValues } from './hydrateKeyholderFileValues';\nimport { parseBinaryVersions } from './VersionUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport { isDev } from '../EnvUtil';\nimport { resolve } from '../FileUtil';\n\nexport async function setup() {\n await setupBasicOptions();\n await hydrateKeyholderFileValues();\n await parseBinaryVersions();\n}\n\nexport async function setupBasicOptions() {\n OptionHolder.projectDir = isDev ? resolve('example') : resolve('.');\n OptionHolder.outputOfInitDir = resolve(OptionHolder.projectDir, 'expo-release-it');\n OptionHolder.keyDir = resolve(OptionHolder.outputOfInitDir, 'key');\n OptionHolder.keyholderFilePath = resolve(OptionHolder.outputOfInitDir, 'keyholder.json');\n OptionHolder.tempDir = resolve(OptionHolder.outputOfInitDir, '.temp');\n}\n","import { execa, type Options } from 'execa';\n\nexport const exe = execa({\n stdin: 'pipe',\n stdout: 'inherit',\n stderr: 'inherit',\n shell: false,\n});\n\nexport const yesShell = <OptionsType extends Options>(\n command: string,\n args: string[] = [],\n options: OptionsType,\n) => {\n const subProcess = exe(command, args, { ...options, stdin: 'pipe' });\n subProcess.stdin?.write('y\\n');\n subProcess.stdin?.end();\n return subProcess;\n};\n"],"mappings":"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","names":["resolve","path","path","path","resolve","resolve","semver","resolve","semver"]}
|
package/build/command/init.js
CHANGED
|
@@ -3,11 +3,11 @@ var package_default = {
|
|
|
3
3
|
name: "expo-release-it",
|
|
4
4
|
module: "src/index.ts",
|
|
5
5
|
type: "module",
|
|
6
|
-
version: "0.1.
|
|
6
|
+
version: "0.1.1",
|
|
7
7
|
license: "MIT",
|
|
8
8
|
scripts: {
|
|
9
9
|
build: "tsup",
|
|
10
|
-
dev: "
|
|
10
|
+
dev: "yarn run build && NODE_ENV=development node bin/expo-release-it.mjs",
|
|
11
11
|
release: "yarn build && release-it",
|
|
12
12
|
android: "expo run:android",
|
|
13
13
|
ios: "expo run:ios",
|
|
@@ -18,15 +18,15 @@ var package_default = {
|
|
|
18
18
|
"@mj-studio/js-util": "^1.1.20",
|
|
19
19
|
chalk: "^5.4.1",
|
|
20
20
|
commander: "^13.1.0",
|
|
21
|
+
execa: "^9.5.2",
|
|
21
22
|
"fs-extra": "^11.3.0",
|
|
23
|
+
ora: "^8.2.0",
|
|
22
24
|
react: "18.3.1",
|
|
23
25
|
"react-native": "0.76.9",
|
|
24
26
|
semver: "^7.7.1",
|
|
25
|
-
url: "^0.11.4"
|
|
26
|
-
zx: "^8.5.3"
|
|
27
|
+
url: "^0.11.4"
|
|
27
28
|
},
|
|
28
29
|
devDependencies: {
|
|
29
|
-
"@types/bun": "latest",
|
|
30
30
|
"@types/fs-extra": "^11.0.4",
|
|
31
31
|
"@types/semver": "^7.7.0",
|
|
32
32
|
prettier: "3.5.3",
|
|
@@ -90,20 +90,20 @@ var OptionHolder = {
|
|
|
90
90
|
input: {},
|
|
91
91
|
keyholderMap: {},
|
|
92
92
|
templateDirNames: ["key"],
|
|
93
|
-
iosBundleIdentifier: "",
|
|
94
|
-
androidPackageName: "",
|
|
95
93
|
projectDir: "",
|
|
96
94
|
outputOfInitDir: "",
|
|
97
95
|
keyDir: "",
|
|
98
96
|
keyholderFilePath: "",
|
|
99
97
|
versionName: "",
|
|
100
|
-
versionCode: ""
|
|
98
|
+
versionCode: "",
|
|
99
|
+
tempDir: ""
|
|
101
100
|
};
|
|
102
101
|
|
|
103
102
|
// src/util/logger.ts
|
|
104
103
|
import chalk from "chalk";
|
|
105
104
|
var logger = {
|
|
106
105
|
success: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")}`)),
|
|
106
|
+
done: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")} - Done`)),
|
|
107
107
|
error: (...msg) => console.log(chalk.red(`\u2716 ${msg.join(", ")}`)),
|
|
108
108
|
warn: (...msg) => console.log(chalk.yellow(`\u26A0 ${msg.join(", ")}`)),
|
|
109
109
|
info: (...msg) => console.log(chalk.cyan(`\u2139 ${msg.join(", ")}`)),
|
|
@@ -116,9 +116,45 @@ ${msg.join(", ")}`)),
|
|
|
116
116
|
import chalk3 from "chalk";
|
|
117
117
|
import { input } from "@inquirer/prompts";
|
|
118
118
|
|
|
119
|
-
// src/util/
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
// src/util/input/InqueryInputs.ts
|
|
120
|
+
import { select } from "@inquirer/prompts";
|
|
121
|
+
import { is } from "@mj-studio/js-util";
|
|
122
|
+
import chalk2 from "chalk";
|
|
123
|
+
function constructInquirerFormattedMessage({
|
|
124
|
+
example,
|
|
125
|
+
explanation,
|
|
126
|
+
referUrl,
|
|
127
|
+
name
|
|
128
|
+
}) {
|
|
129
|
+
let ret = `${chalk2.bold(name)}`;
|
|
130
|
+
if (explanation) {
|
|
131
|
+
ret += `
|
|
132
|
+
|
|
133
|
+
${chalk2.italic.blue(explanation)}`;
|
|
134
|
+
}
|
|
135
|
+
if (example) {
|
|
136
|
+
ret += `
|
|
137
|
+
${chalk2.italic(`${chalk2.greenBright("example :")} ${example}`)}`;
|
|
138
|
+
}
|
|
139
|
+
if (referUrl) {
|
|
140
|
+
ret += `
|
|
141
|
+
${chalk2.italic(`${chalk2.greenBright("references :")} ${chalk2.underline.blue(referUrl)}`)}`;
|
|
142
|
+
}
|
|
143
|
+
if (explanation) {
|
|
144
|
+
ret += "\n";
|
|
145
|
+
if (example || referUrl) {
|
|
146
|
+
ret += "\n";
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return ret;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// src/util/setup/hydrateKeyholderFileValues.ts
|
|
153
|
+
async function hydrateKeyholderFileValues() {
|
|
154
|
+
if (exist(OptionHolder.keyholderFilePath)) {
|
|
155
|
+
Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
122
158
|
|
|
123
159
|
// src/util/throwError.ts
|
|
124
160
|
function throwError(message, e) {
|
|
@@ -130,7 +166,7 @@ function throwError(message, e) {
|
|
|
130
166
|
process.exit(1);
|
|
131
167
|
}
|
|
132
168
|
|
|
133
|
-
// src/util/VersionUtil.ts
|
|
169
|
+
// src/util/setup/VersionUtil.ts
|
|
134
170
|
import semver from "semver";
|
|
135
171
|
async function parseBinaryVersions() {
|
|
136
172
|
const files = readdir(OptionHolder.projectDir);
|
|
@@ -187,53 +223,29 @@ async function parseBinaryVersions() {
|
|
|
187
223
|
}
|
|
188
224
|
}
|
|
189
225
|
|
|
190
|
-
// src/util/
|
|
191
|
-
|
|
226
|
+
// src/util/EnvUtil.ts
|
|
227
|
+
var isDev = process.env.NODE_ENV === "development";
|
|
228
|
+
var isWin = process.platform.startsWith("win");
|
|
229
|
+
|
|
230
|
+
// src/util/setup/setup.ts
|
|
231
|
+
async function setup() {
|
|
232
|
+
await setupBasicOptions();
|
|
233
|
+
await hydrateKeyholderFileValues();
|
|
234
|
+
await parseBinaryVersions();
|
|
235
|
+
}
|
|
236
|
+
async function setupBasicOptions() {
|
|
192
237
|
OptionHolder.projectDir = isDev ? resolve2("example") : resolve2(".");
|
|
193
238
|
OptionHolder.outputOfInitDir = resolve2(OptionHolder.projectDir, "expo-release-it");
|
|
194
239
|
OptionHolder.keyDir = resolve2(OptionHolder.outputOfInitDir, "key");
|
|
195
240
|
OptionHolder.keyholderFilePath = resolve2(OptionHolder.outputOfInitDir, "keyholder.json");
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
// src/util/input/InqueryInputs.ts
|
|
199
|
-
import { select } from "@inquirer/prompts";
|
|
200
|
-
import { is } from "@mj-studio/js-util";
|
|
201
|
-
import chalk2 from "chalk";
|
|
202
|
-
function constructInquirerFormattedMessage({
|
|
203
|
-
example,
|
|
204
|
-
explanation,
|
|
205
|
-
referUrl,
|
|
206
|
-
name
|
|
207
|
-
}) {
|
|
208
|
-
let ret = `${chalk2.bold(name)}`;
|
|
209
|
-
if (explanation) {
|
|
210
|
-
ret += `
|
|
211
|
-
|
|
212
|
-
${chalk2.italic.blue(explanation)}`;
|
|
213
|
-
}
|
|
214
|
-
if (example) {
|
|
215
|
-
ret += `
|
|
216
|
-
${chalk2.italic(`${chalk2.greenBright("example :")} ${example}`)}`;
|
|
217
|
-
}
|
|
218
|
-
if (referUrl) {
|
|
219
|
-
ret += `
|
|
220
|
-
${chalk2.italic(`${chalk2.greenBright("references :")} ${chalk2.underline.blue(referUrl)}`)}`;
|
|
221
|
-
}
|
|
222
|
-
if (explanation) {
|
|
223
|
-
ret += "\n";
|
|
224
|
-
if (example || referUrl) {
|
|
225
|
-
ret += "\n";
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return ret;
|
|
241
|
+
OptionHolder.tempDir = resolve2(OptionHolder.outputOfInitDir, ".temp");
|
|
229
242
|
}
|
|
230
243
|
|
|
231
244
|
// src/command/init.ts
|
|
232
245
|
async function init({ options }) {
|
|
233
246
|
Object.assign(OptionHolder.input, options);
|
|
234
247
|
logger.info(`${chalk3.inverse("expo-release-it")} Initialization Get Started`);
|
|
235
|
-
await
|
|
236
|
-
await parseBinaryVersions();
|
|
248
|
+
await setup();
|
|
237
249
|
await promptInputs();
|
|
238
250
|
await copyTemplates();
|
|
239
251
|
logger.success(
|
|
@@ -241,7 +253,7 @@ async function init({ options }) {
|
|
|
241
253
|
);
|
|
242
254
|
}
|
|
243
255
|
async function promptInputs() {
|
|
244
|
-
OptionHolder.
|
|
256
|
+
OptionHolder.keyholderMap.ios_app_identifier = await input({
|
|
245
257
|
message: constructInquirerFormattedMessage({
|
|
246
258
|
name: "iOS Bundle Identifier",
|
|
247
259
|
explanation: `The bundle identifier for your iOS standalone app. You make it up, but it needs to be unique on the App Store.
|
|
@@ -250,17 +262,17 @@ This means 'CFBundleIdentifier' in info.plist and 'ios.bundleIdentifier' in expo
|
|
|
250
262
|
referUrl: "https://docs.expo.dev/versions/latest/config/app/#bundleidentifier"
|
|
251
263
|
}),
|
|
252
264
|
required: true,
|
|
253
|
-
default:
|
|
265
|
+
default: OptionHolder.keyholderMap.ios_app_identifier
|
|
254
266
|
});
|
|
255
267
|
OptionHolder.keyholderMap.ios_developer_team_id = await input({
|
|
256
268
|
message: constructInquirerFormattedMessage({
|
|
257
|
-
name: "IOS
|
|
269
|
+
name: "IOS Developer Team Id",
|
|
258
270
|
explanation: `A unique alphanumeric string that identifies your Apple Developer Team`,
|
|
259
271
|
example: "8A51ABC4H7",
|
|
260
272
|
referUrl: "https://developer.apple.com/account"
|
|
261
273
|
}),
|
|
262
274
|
required: true,
|
|
263
|
-
default:
|
|
275
|
+
default: OptionHolder.keyholderMap.ios_developer_team_id
|
|
264
276
|
});
|
|
265
277
|
OptionHolder.keyholderMap.ios_match_git_url = await input({
|
|
266
278
|
message: constructInquirerFormattedMessage({
|
|
@@ -270,7 +282,7 @@ This means 'CFBundleIdentifier' in info.plist and 'ios.bundleIdentifier' in expo
|
|
|
270
282
|
referUrl: "https://docs.fastlane.tools/actions/match/"
|
|
271
283
|
}),
|
|
272
284
|
required: true,
|
|
273
|
-
default:
|
|
285
|
+
default: OptionHolder.keyholderMap.ios_match_git_url
|
|
274
286
|
});
|
|
275
287
|
OptionHolder.keyholderMap.ios_match_password = await input({
|
|
276
288
|
message: constructInquirerFormattedMessage({
|
|
@@ -280,7 +292,7 @@ This means 'CFBundleIdentifier' in info.plist and 'ios.bundleIdentifier' in expo
|
|
|
280
292
|
referUrl: "https://docs.fastlane.tools/actions/match/"
|
|
281
293
|
}),
|
|
282
294
|
required: true,
|
|
283
|
-
default:
|
|
295
|
+
default: OptionHolder.keyholderMap.ios_match_password
|
|
284
296
|
});
|
|
285
297
|
OptionHolder.keyholderMap.ios_app_store_connect_api_key_id = await input({
|
|
286
298
|
message: constructInquirerFormattedMessage({
|
|
@@ -291,7 +303,7 @@ App Store Connect API Key can be issued in ${chalk3.underline.blue("https://apps
|
|
|
291
303
|
referUrl: "https://appstoreconnect.apple.com/access/integrations/api"
|
|
292
304
|
}),
|
|
293
305
|
required: true,
|
|
294
|
-
default:
|
|
306
|
+
default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_id
|
|
295
307
|
});
|
|
296
308
|
OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id = await input({
|
|
297
309
|
message: constructInquirerFormattedMessage({
|
|
@@ -302,7 +314,7 @@ App Store Connect API Key can be issued in ${chalk3.underline.blue("https://apps
|
|
|
302
314
|
referUrl: "https://appstoreconnect.apple.com/access/integrations/api"
|
|
303
315
|
}),
|
|
304
316
|
required: true,
|
|
305
|
-
default:
|
|
317
|
+
default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id
|
|
306
318
|
});
|
|
307
319
|
OptionHolder.keyholderMap.ios_xcode_project_target = await input({
|
|
308
320
|
message: constructInquirerFormattedMessage({
|
|
@@ -312,9 +324,9 @@ Usually, this is equivalent to {{name}}.xcodeproj in your ios directory`,
|
|
|
312
324
|
example: "app"
|
|
313
325
|
}),
|
|
314
326
|
required: true,
|
|
315
|
-
default: "app"
|
|
327
|
+
default: OptionHolder.keyholderMap.ios_xcode_project_target || "app"
|
|
316
328
|
});
|
|
317
|
-
OptionHolder.
|
|
329
|
+
OptionHolder.keyholderMap.android_package_name = await input({
|
|
318
330
|
message: constructInquirerFormattedMessage({
|
|
319
331
|
name: "Android Package Name",
|
|
320
332
|
explanation: `The package name for your Android standalone app. You make it up, but it needs to be unique on the Play Store.`,
|
|
@@ -322,7 +334,7 @@ Usually, this is equivalent to {{name}}.xcodeproj in your ios directory`,
|
|
|
322
334
|
referUrl: "https://docs.expo.dev/versions/latest/config/app/#package"
|
|
323
335
|
}),
|
|
324
336
|
required: true,
|
|
325
|
-
default:
|
|
337
|
+
default: OptionHolder.keyholderMap.android_package_name
|
|
326
338
|
});
|
|
327
339
|
OptionHolder.keyholderMap.android_keystore_store_password = await input({
|
|
328
340
|
message: constructInquirerFormattedMessage({
|
|
@@ -333,7 +345,7 @@ Or, you can do same thing with CLI: ${chalk3.underline.blue("https://gist.github
|
|
|
333
345
|
referUrl: "https://developer.android.com/studio/publish/app-signing.html#generate-key"
|
|
334
346
|
}),
|
|
335
347
|
required: true,
|
|
336
|
-
default:
|
|
348
|
+
default: OptionHolder.keyholderMap.android_keystore_store_password
|
|
337
349
|
});
|
|
338
350
|
OptionHolder.keyholderMap.android_keystore_key_alias = await input({
|
|
339
351
|
message: constructInquirerFormattedMessage({
|
|
@@ -344,7 +356,7 @@ Or, you can do same thing with CLI: ${chalk3.underline.blue("https://gist.github
|
|
|
344
356
|
referUrl: "https://developer.android.com/studio/publish/app-signing.html#generate-key"
|
|
345
357
|
}),
|
|
346
358
|
required: true,
|
|
347
|
-
default:
|
|
359
|
+
default: OptionHolder.keyholderMap.android_keystore_key_alias
|
|
348
360
|
});
|
|
349
361
|
OptionHolder.keyholderMap.android_keystore_key_password = await input({
|
|
350
362
|
message: constructInquirerFormattedMessage({
|
|
@@ -355,7 +367,7 @@ Or, you can do same thing with CLI: ${chalk3.underline.blue("https://gist.github
|
|
|
355
367
|
referUrl: "https://developer.android.com/studio/publish/app-signing.html#generate-key"
|
|
356
368
|
}),
|
|
357
369
|
required: true,
|
|
358
|
-
default:
|
|
370
|
+
default: OptionHolder.keyholderMap.android_keystore_key_password
|
|
359
371
|
});
|
|
360
372
|
writeJson(OptionHolder.keyholderFilePath, OptionHolder.keyholderMap);
|
|
361
373
|
}
|