@expo/build-tools 0.1.116 → 0.1.119
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/dist/android/expoUpdates.d.ts +0 -1
- package/dist/android/expoUpdates.js +1 -16
- package/dist/android/expoUpdates.js.map +1 -1
- package/dist/context.d.ts +3 -3
- package/dist/context.js.map +1 -1
- package/dist/ios/credentials/keychain.d.ts +1 -2
- package/dist/ios/credentials/keychain.js +4 -4
- package/dist/ios/credentials/keychain.js.map +1 -1
- package/dist/ios/fastlane.d.ts +7 -0
- package/dist/ios/fastlane.js +13 -4
- package/dist/ios/fastlane.js.map +1 -1
- package/dist/utils/project.js +27 -0
- package/dist/utils/project.js.map +1 -1
- package/package.json +5 -6
|
@@ -9,4 +9,3 @@ export declare function androidSetChannelNativelyAsync(ctx: BuildContext<Job>):
|
|
|
9
9
|
export declare function androidSetClassicReleaseChannelNativelyAsync(ctx: BuildContext<Job>): Promise<void>;
|
|
10
10
|
export declare function androidGetNativelyDefinedClassicReleaseChannelAsync(ctx: BuildContext<Job>): Promise<string | null>;
|
|
11
11
|
export declare function androidGetNativelyDefinedRuntimeVersionAsync(ctx: BuildContext<Job>): Promise<string | null>;
|
|
12
|
-
export declare function unescapeAndroidString(value: string): string;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.androidGetNativelyDefinedRuntimeVersionAsync = exports.androidGetNativelyDefinedClassicReleaseChannelAsync = exports.androidSetClassicReleaseChannelNativelyAsync = exports.androidSetChannelNativelyAsync = exports.AndroidMetadataName = void 0;
|
|
7
7
|
const assert_1 = __importDefault(require("assert"));
|
|
8
8
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
9
|
const config_plugins_1 = require("@expo/config-plugins");
|
|
@@ -28,7 +28,6 @@ async function androidSetChannelNativelyAsync(ctx) {
|
|
|
28
28
|
}
|
|
29
29
|
exports.androidSetChannelNativelyAsync = androidSetChannelNativelyAsync;
|
|
30
30
|
async function androidSetClassicReleaseChannelNativelyAsync(ctx) {
|
|
31
|
-
var _a, _b;
|
|
32
31
|
const { releaseChannel } = ctx.job;
|
|
33
32
|
(0, assert_1.default)(releaseChannel, 'releaseChannel must be defined');
|
|
34
33
|
const escapedReleaseChannel = config_plugins_1.XML.escapeAndroidString(releaseChannel);
|
|
@@ -41,15 +40,6 @@ async function androidSetClassicReleaseChannelNativelyAsync(ctx) {
|
|
|
41
40
|
const stringResourceObject = await config_plugins_1.AndroidConfig.Resources.readResourcesXMLAsync({
|
|
42
41
|
path: stringResourcePath,
|
|
43
42
|
});
|
|
44
|
-
// TODO move this to expo-cli
|
|
45
|
-
if (Array.isArray((_a = stringResourceObject === null || stringResourceObject === void 0 ? void 0 : stringResourceObject.resources) === null || _a === void 0 ? void 0 : _a.string)) {
|
|
46
|
-
for (const string of (_b = stringResourceObject === null || stringResourceObject === void 0 ? void 0 : stringResourceObject.resources) === null || _b === void 0 ? void 0 : _b.string) {
|
|
47
|
-
if (string.$.translatable === 'false') {
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
string._ = unescapeAndroidString(string._);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
43
|
const resourceName = 'release_channel';
|
|
54
44
|
const releaseChannelResourceItem = config_plugins_1.AndroidConfig.Resources.buildResourceItem({
|
|
55
45
|
name: resourceName,
|
|
@@ -81,9 +71,4 @@ async function androidGetNativelyDefinedRuntimeVersionAsync(ctx) {
|
|
|
81
71
|
return config_plugins_1.AndroidConfig.Manifest.getMainApplicationMetaDataValue(androidManifest, AndroidMetadataName.RUNTIME_VERSION);
|
|
82
72
|
}
|
|
83
73
|
exports.androidGetNativelyDefinedRuntimeVersionAsync = androidGetNativelyDefinedRuntimeVersionAsync;
|
|
84
|
-
// TODO move this to expo-cli
|
|
85
|
-
function unescapeAndroidString(value) {
|
|
86
|
-
return value.replace(/\\(.)/g, '$1');
|
|
87
|
-
}
|
|
88
|
-
exports.unescapeAndroidString = unescapeAndroidString;
|
|
89
74
|
//# sourceMappingURL=expoUpdates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expoUpdates.js","sourceRoot":"","sources":["../../src/android/expoUpdates.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAE5B,wDAA0B;AAC1B,yDAA0D;AAK1D,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,mIAA4G,CAAA;IAC5G,oFAA6D,CAAA;IAC7D,oFAA6D,CAAA;AAC/D,CAAC,EAJW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAI9B;AAEM,KAAK,UAAU,8BAA8B,CAAC,GAAsB;;IACzE,IAAA,gBAAM,EAAC,MAAA,GAAG,CAAC,GAAG,CAAC,OAAO,0CAAE,OAAO,EAAE,iCAAiC,CAAC,CAAC;IAEpE,MAAM,YAAY,GAAG,MAAM,8BAAa,CAAC,KAAK,CAAC,uBAAuB,CACpE,GAAG,CAAC,2BAA2B,CAChC,CAAC;IAEF,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,qCAAqC,YAAY,EAAE,CAAC,CAAC;KACtE;IAED,MAAM,eAAe,GAAG,MAAM,8BAAa,CAAC,QAAQ,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,8BAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAClF,MAAM,gCAAgC,GAAG,8BAAa,CAAC,QAAQ,CAAC,+BAA+B,CAC7F,eAAe,EACf,mBAAmB,CAAC,yCAAyC,CAC9D,CAAC;IACF,8BAAa,CAAC,QAAQ,CAAC,gCAAgC,CACrD,OAAO,EACP,mBAAmB,CAAC,yCAAyC,EAC7D,IAAI,CAAC,SAAS,iCACT,IAAI,CAAC,KAAK,CAAC,gCAAgC,aAAhC,gCAAgC,cAAhC,gCAAgC,GAAI,IAAI,CAAC,KACvD,mBAAmB,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAC5C,EACF,OAAO,CACR,CAAC;IACF,MAAM,8BAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;AACxF,CAAC;AA3BD,wEA2BC;AAEM,KAAK,UAAU,4CAA4C,CAChE,GAAsB
|
|
1
|
+
{"version":3,"file":"expoUpdates.js","sourceRoot":"","sources":["../../src/android/expoUpdates.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\n\nimport fs from 'fs-extra';\nimport { AndroidConfig, XML } from '@expo/config-plugins';\nimport { Job } from '@expo/eas-build-job';\n\nimport { BuildContext } from '../context';\n\nexport enum AndroidMetadataName {\n UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY = 'expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY',\n RELEASE_CHANNEL = 'expo.modules.updates.EXPO_RELEASE_CHANNEL',\n RUNTIME_VERSION = 'expo.modules.updates.EXPO_RUNTIME_VERSION',\n}\n\nexport async function androidSetChannelNativelyAsync(ctx: BuildContext<Job>): Promise<void> {\n assert(ctx.job.updates?.channel, 'updates.channel must be defined');\n\n const manifestPath = await AndroidConfig.Paths.getAndroidManifestAsync(\n ctx.reactNativeProjectDirectory\n );\n\n if (!(await fs.pathExists(manifestPath))) {\n throw new Error(`Couldn't find Android manifest at ${manifestPath}`);\n }\n\n const androidManifest = await AndroidConfig.Manifest.readAndroidManifestAsync(manifestPath);\n const mainApp = AndroidConfig.Manifest.getMainApplicationOrThrow(androidManifest);\n const stringifiedUpdatesRequestHeaders = AndroidConfig.Manifest.getMainApplicationMetaDataValue(\n androidManifest,\n AndroidMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY\n );\n AndroidConfig.Manifest.addMetaDataItemToMainApplication(\n mainApp,\n AndroidMetadataName.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY,\n JSON.stringify({\n ...JSON.parse(stringifiedUpdatesRequestHeaders ?? '{}'),\n 'expo-channel-name': ctx.job.updates.channel,\n }),\n 'value'\n );\n await AndroidConfig.Manifest.writeAndroidManifestAsync(manifestPath, androidManifest);\n}\n\nexport async function androidSetClassicReleaseChannelNativelyAsync(\n ctx: BuildContext<Job>\n): Promise<void> {\n const { releaseChannel } = ctx.job;\n assert(releaseChannel, 'releaseChannel must be defined');\n const escapedReleaseChannel = XML.escapeAndroidString(releaseChannel);\n\n const manifestPath = await AndroidConfig.Paths.getAndroidManifestAsync(\n ctx.reactNativeProjectDirectory\n );\n if (!(await fs.pathExists(manifestPath))) {\n throw new Error(`Couldn't find Android manifest at ${manifestPath}`);\n }\n\n // Store the release channel in a string resource to ensure it is interpreted as a string\n const stringResourcePath = await AndroidConfig.Strings.getProjectStringsXMLPathAsync(\n ctx.reactNativeProjectDirectory\n );\n const stringResourceObject = await AndroidConfig.Resources.readResourcesXMLAsync({\n path: stringResourcePath,\n });\n\n const resourceName = 'release_channel';\n const releaseChannelResourceItem = AndroidConfig.Resources.buildResourceItem({\n name: resourceName,\n value: escapedReleaseChannel,\n });\n const newStringResourceObject = AndroidConfig.Strings.setStringItem(\n [releaseChannelResourceItem],\n stringResourceObject\n );\n await XML.writeXMLAsync({ path: stringResourcePath, xml: newStringResourceObject });\n\n const androidManifest = await AndroidConfig.Manifest.readAndroidManifestAsync(manifestPath);\n const mainApp = AndroidConfig.Manifest.getMainApplicationOrThrow(androidManifest);\n AndroidConfig.Manifest.addMetaDataItemToMainApplication(\n mainApp,\n AndroidMetadataName.RELEASE_CHANNEL,\n `@string/${resourceName}`,\n 'value'\n );\n await AndroidConfig.Manifest.writeAndroidManifestAsync(manifestPath, androidManifest);\n}\n\nexport async function androidGetNativelyDefinedClassicReleaseChannelAsync(\n ctx: BuildContext<Job>\n): Promise<string | null> {\n const manifestPath = await AndroidConfig.Paths.getAndroidManifestAsync(\n ctx.reactNativeProjectDirectory\n );\n if (!(await fs.pathExists(manifestPath))) {\n return null;\n }\n\n const androidManifest = await AndroidConfig.Manifest.readAndroidManifestAsync(manifestPath);\n return AndroidConfig.Manifest.getMainApplicationMetaDataValue(\n androidManifest,\n AndroidMetadataName.RELEASE_CHANNEL\n );\n}\n\nexport async function androidGetNativelyDefinedRuntimeVersionAsync(\n ctx: BuildContext<Job>\n): Promise<string | null> {\n const manifestPath = await AndroidConfig.Paths.getAndroidManifestAsync(\n ctx.reactNativeProjectDirectory\n );\n if (!(await fs.pathExists(manifestPath))) {\n return null;\n }\n\n const androidManifest = await AndroidConfig.Manifest.readAndroidManifestAsync(manifestPath);\n return AndroidConfig.Manifest.getMainApplicationMetaDataValue(\n androidManifest,\n AndroidMetadataName.RUNTIME_VERSION\n );\n}\n"]}
|
package/dist/context.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BuildPhase, Job, Env, Metadata } from '@expo/eas-build-job';
|
|
2
2
|
import { ExpoConfig } from '@expo/config';
|
|
3
3
|
import { bunyan } from '@expo/logger';
|
|
4
|
-
import { SpawnOptions } from '@expo/turtle-spawn';
|
|
4
|
+
import { SpawnPromise, SpawnOptions, SpawnResult } from '@expo/turtle-spawn';
|
|
5
5
|
import { PackageManager } from './utils/packageManager';
|
|
6
6
|
export interface CacheManager {
|
|
7
7
|
saveCache(ctx: BuildContext<Job>): Promise<void>;
|
|
@@ -17,7 +17,7 @@ export interface BuildContextOptions {
|
|
|
17
17
|
logBuffer: LogBuffer;
|
|
18
18
|
env: Env;
|
|
19
19
|
cacheManager?: CacheManager;
|
|
20
|
-
runExpoCliCommand: (args: string, options: SpawnOptions) =>
|
|
20
|
+
runExpoCliCommand: (args: string, options: SpawnOptions) => SpawnPromise<SpawnResult>;
|
|
21
21
|
reportError?: (msg: string, err?: Error) => void;
|
|
22
22
|
skipNativeBuild?: boolean;
|
|
23
23
|
metadata?: Metadata;
|
|
@@ -31,7 +31,7 @@ export declare class BuildContext<TJob extends Job> {
|
|
|
31
31
|
readonly logBuffer: LogBuffer;
|
|
32
32
|
readonly env: Env;
|
|
33
33
|
readonly cacheManager?: CacheManager;
|
|
34
|
-
readonly runExpoCliCommand: (args: string, options: SpawnOptions) =>
|
|
34
|
+
readonly runExpoCliCommand: (args: string, options: SpawnOptions) => SpawnPromise<SpawnResult>;
|
|
35
35
|
readonly reportError?: (msg: string, err?: Error) => void;
|
|
36
36
|
readonly metadata?: Metadata;
|
|
37
37
|
readonly skipNativeBuild?: boolean;
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,uDAAwF;AAKxF,2DAA+E;AAC/E,6DAA0D;AAC1D,iDAAkD;AAwBlD,MAAa,oBAAqB,SAAQ,KAAK;CAAG;AAAlD,oDAAkD;AAElD,MAAa,YAAY;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,uDAAwF;AAKxF,2DAA+E;AAC/E,6DAA0D;AAC1D,iDAAkD;AAwBlD,MAAa,oBAAqB,SAAQ,KAAK;CAAG;AAAlD,oDAAkD;AAElD,MAAa,YAAY;IAkBvB,YAA4B,GAAS,EAAE,OAA4B;;QAAvC,QAAG,GAAH,GAAG,CAAM;QACnC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QAC/C,IAAI,CAAC,GAAG,iDACH,OAAO,CAAC,GAAG,GACX,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,kBAAkB,0CAAE,GAAG,GAC5B,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,0CAAE,kBAAkB,CACpC,CAAC;IACJ,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,IAAW,2BAA2B;QACpC,OAAO,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACvE,CAAC;IACD,IAAW,cAAc;QACvB,OAAO,IAAA,sCAAqB,EAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjE,CAAC;IACD,IAAW,SAAS;QAClB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAA,yBAAa,EAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;SAC9F;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,UAAsB,EACtB,KAAuB,EACvB,EAAE,cAAc,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,GAAG,EAAE;QAErD,IAAI;YACF,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC/D,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,SAAuC,CAAC;YAC5C,IAAI,GAAG,YAAY,sBAAM,CAAC,SAAS,EAAE;gBACnC,SAAS,GAAG,GAAG,CAAC;aACjB;iBAAM;gBACL,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;oBAC7E,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,UAAU;iBAClB,CAAC,CAAC;gBACH,IAAI,aAAa,EAAE;oBACjB,aAAa,CAAC,UAAU,GAAG,GAAG,CAAC;oBAC/B,SAAS,GAAG,aAAa,CAAC;iBAC3B;aACF;YACD,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;iBAAM;gBACL,2FAA2F;gBAC3F,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;aAChC;YACD,IAAI,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,GAAG,CAAC;SACxB;IACH,CAAC;IAEO,aAAa,CAAC,UAAsB,EAAE,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,EAAE;QAC3E,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;gBAClC,OAAO;aACR;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,MAAM,EAAE,yBAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAClD,cAAc,IAAI,CAAC,UAAU,EAAE,CAChC,CAAC;gBACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;aAClC;SACF;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,yBAAS,CAAC,WAAW,EAAE,EAAE,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;SACxF;IACH,CAAC;IAEO,oBAAoB,CAAC,EAC3B,MAAM,EACN,YAAY,GAAG,KAAK,GAIrB;QACC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;SACR;QACD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,yBAAS,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,cAAc,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;SAC5F;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;CACF;AAzHD,oCAyHC","sourcesContent":["import path from 'path';\n\nimport { BuildPhase, Job, LogMarker, Env, errors, Metadata } from '@expo/eas-build-job';\nimport { ExpoConfig } from '@expo/config';\nimport { bunyan } from '@expo/logger';\nimport { SpawnPromise, SpawnOptions, SpawnResult } from '@expo/turtle-spawn';\n\nimport { PackageManager, resolvePackageManager } from './utils/packageManager';\nimport { detectUserError } from './utils/detectUserError';\nimport { readAppConfig } from './utils/appConfig';\n\nexport interface CacheManager {\n saveCache(ctx: BuildContext<Job>): Promise<void>;\n restoreCache(ctx: BuildContext<Job>): Promise<void>;\n}\n\nexport interface LogBuffer {\n getLogs(): string[];\n getPhaseLogs(buildPhase: string): string[];\n}\n\nexport interface BuildContextOptions {\n workingdir: string;\n logger: bunyan;\n logBuffer: LogBuffer;\n env: Env;\n cacheManager?: CacheManager;\n runExpoCliCommand: (args: string, options: SpawnOptions) => SpawnPromise<SpawnResult>;\n reportError?: (msg: string, err?: Error) => void;\n skipNativeBuild?: boolean;\n metadata?: Metadata;\n}\n\nexport class SkipNativeBuildError extends Error {}\n\nexport class BuildContext<TJob extends Job> {\n public readonly workingdir: string;\n public logger: bunyan;\n public readonly logBuffer: LogBuffer;\n public readonly env: Env;\n public readonly cacheManager?: CacheManager;\n public readonly runExpoCliCommand: (\n args: string,\n options: SpawnOptions\n ) => SpawnPromise<SpawnResult>;\n public readonly reportError?: (msg: string, err?: Error) => void;\n public readonly metadata?: Metadata;\n public readonly skipNativeBuild?: boolean;\n\n private readonly defaultLogger: bunyan;\n private buildPhase?: BuildPhase;\n private _appConfig?: ExpoConfig;\n\n constructor(public readonly job: TJob, options: BuildContextOptions) {\n this.workingdir = options.workingdir;\n this.defaultLogger = options.logger;\n this.logger = this.defaultLogger;\n this.logBuffer = options.logBuffer;\n this.cacheManager = options.cacheManager;\n this.runExpoCliCommand = options.runExpoCliCommand;\n this.reportError = options.reportError;\n this.metadata = options.metadata;\n this.skipNativeBuild = options.skipNativeBuild;\n this.env = {\n ...options.env,\n ...job?.builderEnvironment?.env,\n ...job?.secrets?.environmentSecrets,\n };\n }\n\n public get buildDirectory(): string {\n return path.join(this.workingdir, 'build');\n }\n public get reactNativeProjectDirectory(): string {\n return path.join(this.buildDirectory, this.job.projectRootDirectory);\n }\n public get packageManager(): PackageManager {\n return resolvePackageManager(this.reactNativeProjectDirectory);\n }\n public get appConfig(): ExpoConfig {\n if (!this._appConfig) {\n this._appConfig = readAppConfig(this.reactNativeProjectDirectory, this.env, this.logger).exp;\n }\n return this._appConfig;\n }\n\n public async runBuildPhase<T>(\n buildPhase: BuildPhase,\n phase: () => Promise<T>,\n { doNotMarkStart = false, doNotMarkEnd = false } = {}\n ): Promise<T> {\n try {\n this.setBuildPhase(buildPhase, { doNotMarkStart });\n const result = await phase();\n this.endCurrentBuildPhase({ result: 'success', doNotMarkEnd });\n return result;\n } catch (err: any) {\n let userError: errors.UserError | undefined;\n if (err instanceof errors.UserError) {\n userError = err;\n } else {\n const detectedError = detectUserError(this.logBuffer.getPhaseLogs(buildPhase), {\n job: this.job,\n phase: buildPhase,\n });\n if (detectedError) {\n detectedError.innerError = err;\n userError = detectedError;\n }\n }\n if (userError) {\n this.logger.error(`Error: ${userError.message}`);\n } else {\n // leaving message empty, website will display err.stack which already includes err.message\n this.logger.error({ err }, '');\n }\n this.endCurrentBuildPhase({ result: 'failed' });\n throw userError ?? err;\n }\n }\n\n private setBuildPhase(buildPhase: BuildPhase, { doNotMarkStart = false } = {}): void {\n if (this.buildPhase) {\n if (this.buildPhase === buildPhase) {\n return;\n } else {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result: 'unknown' },\n `End phase: ${this.buildPhase}`\n );\n this.logger = this.defaultLogger;\n }\n }\n this.buildPhase = buildPhase;\n this.logger = this.defaultLogger.child({ phase: buildPhase });\n if (!doNotMarkStart) {\n this.logger.info({ marker: LogMarker.START_PHASE }, `Start phase: ${this.buildPhase}`);\n }\n }\n\n private endCurrentBuildPhase({\n result,\n doNotMarkEnd = false,\n }: {\n result: 'success' | 'failed';\n doNotMarkEnd?: boolean;\n }): void {\n if (!this.buildPhase) {\n return;\n }\n if (!doNotMarkEnd) {\n this.logger.info({ marker: LogMarker.END_PHASE, result }, `End phase: ${this.buildPhase}`);\n }\n this.logger = this.defaultLogger;\n this.buildPhase = undefined;\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Ios } from '@expo/eas-build-job';
|
|
2
2
|
import { BuildContext } from '../../context';
|
|
3
|
-
|
|
3
|
+
export default class Keychain<TJob extends Ios.Job> {
|
|
4
4
|
private readonly ctx;
|
|
5
5
|
private readonly keychainPath;
|
|
6
6
|
private readonly keychainPassword;
|
|
@@ -18,4 +18,3 @@ declare class Keychain<TJob extends Ios.Job> {
|
|
|
18
18
|
cleanUpKeychains(): Promise<void>;
|
|
19
19
|
private findIdentitiesByTeamId;
|
|
20
20
|
}
|
|
21
|
-
export default Keychain;
|
|
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const os_1 = __importDefault(require("os"));
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const fastlane_1 = __importDefault(require("@expo/fastlane"));
|
|
9
8
|
const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
|
|
10
9
|
const uuid_1 = require("uuid");
|
|
10
|
+
const fastlane_1 = require("../fastlane");
|
|
11
11
|
class Keychain {
|
|
12
12
|
constructor(ctx) {
|
|
13
13
|
this.ctx = ctx;
|
|
@@ -24,7 +24,7 @@ class Keychain {
|
|
|
24
24
|
}
|
|
25
25
|
async create() {
|
|
26
26
|
this.ctx.logger.debug(`Creating keychain - ${this.keychainPath}`);
|
|
27
|
-
await (0, fastlane_1.
|
|
27
|
+
await (0, fastlane_1.runFastlane)([
|
|
28
28
|
'run',
|
|
29
29
|
'create_keychain',
|
|
30
30
|
`path:${this.keychainPath}`,
|
|
@@ -39,7 +39,7 @@ class Keychain {
|
|
|
39
39
|
throw new Error('You must create a keychain first.');
|
|
40
40
|
}
|
|
41
41
|
this.ctx.logger.debug(`Importing certificate ${certPath} into keychain ${this.keychainPath}`);
|
|
42
|
-
await (0, fastlane_1.
|
|
42
|
+
await (0, fastlane_1.runFastlane)([
|
|
43
43
|
'run',
|
|
44
44
|
'import_certificate',
|
|
45
45
|
`certificate_path:${certPath}`,
|
|
@@ -66,7 +66,7 @@ class Keychain {
|
|
|
66
66
|
const keychainToDeletePath = keychainPath !== null && keychainPath !== void 0 ? keychainPath : this.keychainPath;
|
|
67
67
|
this.ctx.logger.info(`Destroying keychain - ${keychainToDeletePath}`);
|
|
68
68
|
try {
|
|
69
|
-
await (0, fastlane_1.
|
|
69
|
+
await (0, fastlane_1.runFastlane)(['run', 'delete_keychain', `keychain_path:${keychainToDeletePath}`]);
|
|
70
70
|
this.destroyed = true;
|
|
71
71
|
}
|
|
72
72
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../src/ios/credentials/keychain.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../src/ios/credentials/keychain.ts"],"names":[],"mappings":"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","sourcesContent":["import os from 'os';\nimport path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport spawn from '@expo/turtle-spawn';\nimport { v4 as uuid } from 'uuid';\n\nimport { BuildContext } from '../../context';\nimport { runFastlane } from '../fastlane';\n\nexport default class Keychain<TJob extends Ios.Job> {\n private readonly keychainPath: string;\n private readonly keychainPassword: string;\n private created = false;\n private destroyed = false;\n\n constructor(private readonly ctx: BuildContext<TJob>) {\n this.keychainPath = path.join(os.tmpdir(), `turtle-v2-${uuid()}.keychain`);\n this.keychainPassword = uuid();\n }\n\n get data(): { path: string; password: string } {\n return {\n path: this.keychainPath,\n password: this.keychainPassword,\n };\n }\n\n public async create(): Promise<void> {\n this.ctx.logger.debug(`Creating keychain - ${this.keychainPath}`);\n await runFastlane([\n 'run',\n 'create_keychain',\n `path:${this.keychainPath}`,\n `password:${this.keychainPassword}`,\n 'unlock:true',\n 'timeout:360000',\n ]);\n this.created = true;\n }\n\n public async importCertificate(certPath: string, certPassword: string): Promise<void> {\n if (!this.created) {\n throw new Error('You must create a keychain first.');\n }\n\n this.ctx.logger.debug(`Importing certificate ${certPath} into keychain ${this.keychainPath}`);\n await runFastlane([\n 'run',\n 'import_certificate',\n `certificate_path:${certPath}`,\n `certificate_password:${certPassword}`,\n `keychain_path:${this.keychainPath}`,\n `keychain_password:${this.keychainPassword}`,\n ]);\n }\n\n public async ensureCertificateImported(teamId: string, fingerprint: string): Promise<void> {\n const identities = await this.findIdentitiesByTeamId(teamId);\n if (!identities.includes(fingerprint)) {\n throw new Error(\n `Distribution certificate with fingerprint ${fingerprint} hasn't been imported successfully`\n );\n }\n }\n\n public async destroy(keychainPath?: string): Promise<void> {\n if (!keychainPath && !this.created) {\n this.ctx.logger.warn(\"There is nothing to destroy, a keychain hasn't been created yet.\");\n return;\n }\n if (this.destroyed) {\n this.ctx.logger.warn('The keychain has been already destroyed');\n return;\n }\n const keychainToDeletePath = keychainPath ?? this.keychainPath;\n this.ctx.logger.info(`Destroying keychain - ${keychainToDeletePath}`);\n try {\n await runFastlane(['run', 'delete_keychain', `keychain_path:${keychainToDeletePath}`]);\n this.destroyed = true;\n } catch (err) {\n this.ctx.logger.error({ err }, 'Failed to delete the keychain\\n');\n throw err;\n }\n }\n\n public async cleanUpKeychains(): Promise<void> {\n const { stdout } = await spawn('security', ['list-keychains'], { stdio: 'pipe' });\n const keychainList = (/\"(.*)\"/g.exec(stdout) ?? ([] as string[])).map((i) =>\n i.slice(1, i.length - 1)\n );\n const turtleKeychainList = keychainList.filter((keychain) =>\n /turtle-v2-[\\w-]+\\.keychain$/.exec(keychain)\n );\n for (const turtleKeychainPath of turtleKeychainList) {\n await this.destroy(turtleKeychainPath);\n }\n }\n\n private async findIdentitiesByTeamId(teamId: string): Promise<string> {\n const { output } = await spawn(\n 'security',\n ['find-identity', '-v', '-s', `(${teamId})`, this.keychainPath],\n {\n stdio: 'pipe',\n }\n );\n return output.join('');\n }\n}\n"]}
|
package/dist/ios/fastlane.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Ios } from '@expo/eas-build-job';
|
|
2
|
+
import { bunyan } from '@expo/logger';
|
|
3
|
+
import { SpawnResult } from '@expo/turtle-spawn';
|
|
2
4
|
import { BuildContext } from '../context';
|
|
3
5
|
import { Credentials } from './credentials/manager';
|
|
4
6
|
export declare function runFastlaneGym<TJob extends Ios.Job>(ctx: BuildContext<TJob>, { scheme, buildConfiguration, credentials, entitlements, }: {
|
|
@@ -7,3 +9,8 @@ export declare function runFastlaneGym<TJob extends Ios.Job>(ctx: BuildContext<T
|
|
|
7
9
|
credentials: Credentials | null;
|
|
8
10
|
entitlements: object | null;
|
|
9
11
|
}): Promise<void>;
|
|
12
|
+
export declare function runFastlane(fastlaneArgs: string[], { logger, env, cwd, }?: {
|
|
13
|
+
logger?: bunyan;
|
|
14
|
+
env?: Record<string, string>;
|
|
15
|
+
cwd?: string;
|
|
16
|
+
}): Promise<SpawnResult>;
|
package/dist/ios/fastlane.js
CHANGED
|
@@ -3,9 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.runFastlaneGym = void 0;
|
|
6
|
+
exports.runFastlane = exports.runFastlaneGym = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const
|
|
8
|
+
const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
|
|
9
9
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
10
10
|
const nullthrows_1 = __importDefault(require("nullthrows"));
|
|
11
11
|
const context_1 = require("../context");
|
|
@@ -26,10 +26,10 @@ async function runFastlaneGym(ctx, { scheme, buildConfiguration, credentials, en
|
|
|
26
26
|
const buildLogger = new xcpretty_1.XcodeBuildLogger(ctx.logger, ctx.reactNativeProjectDirectory);
|
|
27
27
|
void buildLogger.watchLogFiles(logsDirectory);
|
|
28
28
|
try {
|
|
29
|
-
await (
|
|
29
|
+
await runFastlane(['gym'], {
|
|
30
30
|
cwd: path_1.default.join(ctx.reactNativeProjectDirectory, 'ios'),
|
|
31
31
|
logger: ctx.logger,
|
|
32
|
-
|
|
32
|
+
env: ctx.env,
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
finally {
|
|
@@ -37,6 +37,15 @@ async function runFastlaneGym(ctx, { scheme, buildConfiguration, credentials, en
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
exports.runFastlaneGym = runFastlaneGym;
|
|
40
|
+
async function runFastlane(fastlaneArgs, { logger, env, cwd, } = {}) {
|
|
41
|
+
const fastlaneEnvVars = Object.assign({ FASTLANE_DISABLE_COLORS: '1', FASTLANE_SKIP_UPDATE_CHECK: '1', SKIP_SLOW_FASTLANE_WARNING: 'true', FASTLANE_HIDE_TIMESTAMP: 'true', LC_ALL: 'en_US.UTF-8' }, (env !== null && env !== void 0 ? env : process.env));
|
|
42
|
+
return await (0, turtle_spawn_1.default)('fastlane', fastlaneArgs, {
|
|
43
|
+
env: fastlaneEnvVars,
|
|
44
|
+
logger,
|
|
45
|
+
cwd,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
exports.runFastlane = runFastlane;
|
|
40
49
|
async function ensureGymfileExists(ctx, { scheme, buildConfiguration, credentials, logsDirectory, entitlements, }) {
|
|
41
50
|
const gymfilePath = path_1.default.join(ctx.reactNativeProjectDirectory, 'ios/Gymfile');
|
|
42
51
|
if (await fs_extra_1.default.pathExists(gymfilePath)) {
|
package/dist/ios/fastlane.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../src/ios/fastlane.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;
|
|
1
|
+
{"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../src/ios/fastlane.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport spawn, { SpawnResult } from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport nullthrows from 'nullthrows';\n\nimport { BuildContext, SkipNativeBuildError } from '../context';\n\nimport { createGymfileForArchiveBuild, createGymfileForSimulatorBuild } from './gymfile';\nimport { Credentials } from './credentials/manager';\nimport { XcodeBuildLogger } from './xcpretty';\n\nexport async function runFastlaneGym<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n {\n scheme,\n buildConfiguration,\n credentials,\n entitlements,\n }: {\n scheme: string;\n buildConfiguration?: string;\n credentials: Credentials | null;\n entitlements: object | null;\n }\n): Promise<void> {\n const logsDirectory = path.join(ctx.workingdir, 'logs');\n await ensureGymfileExists(ctx, {\n scheme,\n buildConfiguration,\n credentials,\n logsDirectory,\n entitlements,\n });\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping fastlane build');\n }\n const buildLogger = new XcodeBuildLogger(ctx.logger, ctx.reactNativeProjectDirectory);\n void buildLogger.watchLogFiles(logsDirectory);\n try {\n await runFastlane(['gym'], {\n cwd: path.join(ctx.reactNativeProjectDirectory, 'ios'),\n logger: ctx.logger,\n env: ctx.env,\n });\n } finally {\n await buildLogger.flush();\n }\n}\n\nexport async function runFastlane(\n fastlaneArgs: string[],\n {\n logger,\n env,\n cwd,\n }: {\n logger?: bunyan;\n env?: Record<string, string>;\n cwd?: string;\n } = {}\n): Promise<SpawnResult> {\n const fastlaneEnvVars = {\n FASTLANE_DISABLE_COLORS: '1',\n FASTLANE_SKIP_UPDATE_CHECK: '1',\n SKIP_SLOW_FASTLANE_WARNING: 'true',\n FASTLANE_HIDE_TIMESTAMP: 'true',\n LC_ALL: 'en_US.UTF-8',\n ...(env ?? process.env),\n };\n return await spawn('fastlane', fastlaneArgs, {\n env: fastlaneEnvVars,\n logger,\n cwd,\n });\n}\n\nasync function ensureGymfileExists<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n {\n scheme,\n buildConfiguration,\n credentials,\n logsDirectory,\n entitlements,\n }: {\n scheme: string;\n buildConfiguration?: string;\n credentials: Credentials | null;\n logsDirectory: string;\n entitlements: object | null;\n }\n): Promise<void> {\n const gymfilePath = path.join(ctx.reactNativeProjectDirectory, 'ios/Gymfile');\n\n if (await fs.pathExists(gymfilePath)) {\n ctx.logger.info('Gymfile already exists');\n return;\n }\n\n ctx.logger.info('Creating Gymfile');\n if (ctx.job.simulator) {\n await createGymfileForSimulatorBuild({\n outputFile: gymfilePath,\n scheme,\n buildConfiguration: buildConfiguration ?? 'release',\n derivedDataPath: './build',\n clean: false,\n logsDirectory,\n });\n } else {\n await createGymfileForArchiveBuild({\n outputFile: gymfilePath,\n credentials: nullthrows(credentials, 'credentials must exist for non-simulator builds'),\n scheme,\n buildConfiguration,\n outputDirectory: './build',\n clean: false,\n logsDirectory,\n entitlements: entitlements ?? undefined,\n });\n }\n ctx.logger.info('Gymfile created');\n}\n"]}
|
package/dist/utils/project.js
CHANGED
|
@@ -12,6 +12,7 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
|
12
12
|
const hooks_1 = require("./hooks");
|
|
13
13
|
const npmrc_1 = require("./npmrc");
|
|
14
14
|
const packageManager_1 = require("./packageManager");
|
|
15
|
+
const MAX_EXPO_DOCTOR_TIMEOUT_MS = 20 * 1000;
|
|
15
16
|
async function setup(ctx) {
|
|
16
17
|
await ctx.runBuildPhase(eas_build_job_1.BuildPhase.PREPARE_PROJECT, async () => {
|
|
17
18
|
await downloadAndUnpackProject(ctx);
|
|
@@ -40,6 +41,32 @@ async function setup(ctx) {
|
|
|
40
41
|
ctx.logger.info('Using app configuration:');
|
|
41
42
|
ctx.logger.info(JSON.stringify(appConfig, null, 2));
|
|
42
43
|
});
|
|
44
|
+
await ctx.runBuildPhase(eas_build_job_1.BuildPhase.RUN_EXPO_DOCTOR, async () => {
|
|
45
|
+
const spawnOptions = {
|
|
46
|
+
cwd: ctx.reactNativeProjectDirectory,
|
|
47
|
+
logger: ctx.logger,
|
|
48
|
+
env: ctx.env,
|
|
49
|
+
};
|
|
50
|
+
ctx.logger.info('Running "expo doctor"');
|
|
51
|
+
let timeout;
|
|
52
|
+
try {
|
|
53
|
+
const promise = ctx.runExpoCliCommand('doctor', spawnOptions);
|
|
54
|
+
timeout = setTimeout(() => {
|
|
55
|
+
var _a;
|
|
56
|
+
promise.child.kill();
|
|
57
|
+
(_a = ctx === null || ctx === void 0 ? void 0 : ctx.reportError) === null || _a === void 0 ? void 0 : _a.call(ctx, `"expo doctor" timed out`);
|
|
58
|
+
}, MAX_EXPO_DOCTOR_TIMEOUT_MS);
|
|
59
|
+
await promise;
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
ctx.logger.error({ err }, 'Command "expo doctor" failed.');
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
if (timeout) {
|
|
66
|
+
clearTimeout(timeout);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
43
70
|
}
|
|
44
71
|
exports.setup = setup;
|
|
45
72
|
async function downloadAndUnpackProject(ctx) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,kEAA4C;AAC5C,uDAAyE;AACzE,sEAAuC;AACvC,wDAA0B;AAI1B,mCAAiD;AACjD,mCAAsD;AACtD,qDAAwE;
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport downloadFile from '@expo/downloader';\nimport { ArchiveSourceType, BuildPhase, Job } from '@expo/eas-build-job';\nimport spawn from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\n\nimport { BuildContext } from '../context';\n\nimport { Hook, runHookIfPresent } from './hooks';\nimport { createNpmrcIfNotExistsAsync } from './npmrc';\nimport { findPackagerRootDir, readPackageJson } from './packageManager';\n\nconst MAX_EXPO_DOCTOR_TIMEOUT_MS = 20 * 1000;\n\nexport async function setup<TJob extends Job>(ctx: BuildContext<TJob>): Promise<void> {\n await ctx.runBuildPhase(BuildPhase.PREPARE_PROJECT, async () => {\n await downloadAndUnpackProject(ctx);\n if (ctx.env.NPM_TOKEN) {\n await createNpmrcIfNotExistsAsync(ctx);\n }\n });\n\n await ctx.runBuildPhase(BuildPhase.PRE_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_INSTALL);\n });\n\n await ctx.runBuildPhase(BuildPhase.INSTALL_DEPENDENCIES, async () => {\n await installDependencies(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.READ_PACKAGE_JSON, async () => {\n try {\n const packageJsonContents = await readPackageJson(ctx.reactNativeProjectDirectory);\n ctx.logger.info('Using package.json:');\n ctx.logger.info(JSON.stringify(packageJsonContents, null, 2));\n } catch (err: any) {\n ctx.logger.warn(`Failed to parse or read package.json: ${err.message}`);\n }\n });\n\n await ctx.runBuildPhase(BuildPhase.READ_APP_CONFIG, async () => {\n const appConfig = ctx.appConfig;\n ctx.logger.info('Using app configuration:');\n ctx.logger.info(JSON.stringify(appConfig, null, 2));\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_EXPO_DOCTOR, async () => {\n const spawnOptions = {\n cwd: ctx.reactNativeProjectDirectory,\n logger: ctx.logger,\n env: ctx.env,\n };\n ctx.logger.info('Running \"expo doctor\"');\n let timeout: NodeJS.Timeout | undefined;\n try {\n const promise = ctx.runExpoCliCommand('doctor', spawnOptions);\n timeout = setTimeout(() => {\n promise.child.kill();\n ctx?.reportError?.(`\"expo doctor\" timed out`);\n }, MAX_EXPO_DOCTOR_TIMEOUT_MS);\n await promise;\n } catch (err) {\n ctx.logger.error({ err }, 'Command \"expo doctor\" failed.');\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n });\n}\n\nasync function downloadAndUnpackProject<TJob extends Job>(ctx: BuildContext<TJob>): Promise<void> {\n const projectTarball = path.join(ctx.workingdir, 'project.tar.gz');\n if (ctx.job.projectArchive.type === ArchiveSourceType.S3) {\n throw new Error('ArchiveSourceType.S3 should be resolved earlier to url');\n } else if (ctx.job.projectArchive.type === ArchiveSourceType.PATH) {\n await fs.copy(ctx.job.projectArchive.path, projectTarball); // used in eas-build-cli\n } else if (ctx.job.projectArchive.type === ArchiveSourceType.URL) {\n try {\n await downloadFile(ctx.job.projectArchive.url, projectTarball, { retry: 3 });\n } catch (err: any) {\n ctx?.reportError?.('Failed to download project archive', err);\n throw err;\n }\n }\n\n await spawn(\n 'tar',\n ['--strip-components', '1', '-zxf', 'project.tar.gz', '-C', ctx.buildDirectory],\n {\n cwd: ctx.workingdir,\n logger: ctx.logger,\n }\n );\n}\n\nasync function installDependencies<TJob extends Job>(ctx: BuildContext<TJob>): Promise<void> {\n const packagerRunDir = findPackagerRootDir(ctx.reactNativeProjectDirectory);\n if (packagerRunDir !== ctx.reactNativeProjectDirectory) {\n const relativeReactNativeProjectDirectory = path.relative(\n ctx.buildDirectory,\n ctx.reactNativeProjectDirectory\n );\n ctx.logger.info(`We detected that '${relativeReactNativeProjectDirectory}' is a workspace`);\n }\n\n const relativePackagerRunDir = path.relative(ctx.buildDirectory, packagerRunDir);\n ctx.logger.info(\n `Running ${ctx.packageManager} in ${\n relativePackagerRunDir\n ? `directory '${relativePackagerRunDir}'`\n : 'the root dir of your repository'\n } `\n );\n await spawn(ctx.packageManager, ['install'], {\n cwd: packagerRunDir,\n logger: ctx.logger,\n env: ctx.env,\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/build-tools",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.119",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -19,16 +19,15 @@
|
|
|
19
19
|
"bugs": "https://github.com/expo/eas-build/issues",
|
|
20
20
|
"license": "BUSL-1.1",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@expo/config": "6.0.
|
|
23
|
-
"@expo/config-plugins": "4.0
|
|
22
|
+
"@expo/config": "6.0.19",
|
|
23
|
+
"@expo/config-plugins": "4.1.0",
|
|
24
24
|
"@expo/downloader": "0.0.19",
|
|
25
|
-
"@expo/eas-build-job": "0.2.
|
|
26
|
-
"@expo/fastlane": "0.0.27",
|
|
25
|
+
"@expo/eas-build-job": "0.2.69",
|
|
27
26
|
"@expo/logger": "0.0.22",
|
|
28
27
|
"@expo/package-manager": "^0.0.47",
|
|
29
28
|
"@expo/plist": "^0.0.11",
|
|
30
29
|
"@expo/template-file": "0.1.21",
|
|
31
|
-
"@expo/turtle-spawn": "0.0.
|
|
30
|
+
"@expo/turtle-spawn": "0.0.23",
|
|
32
31
|
"@expo/xcpretty": "^4.1.1",
|
|
33
32
|
"fast-glob": "^3.2.5",
|
|
34
33
|
"find-yarn-workspace-root": "^2.0.0",
|