@expo/build-tools 1.0.108 → 1.0.110
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/steps/easFunctions.js +2 -0
- package/dist/steps/easFunctions.js.map +1 -1
- package/dist/steps/functions/repack.d.ts +2 -0
- package/dist/steps/functions/repack.js +127 -0
- package/dist/steps/functions/repack.js.map +1 -0
- package/dist/utils/artifacts.js +5 -1
- package/dist/utils/artifacts.js.map +1 -1
- package/dist/utils/expoUpdatesCli.d.ts +1 -4
- package/dist/utils/expoUpdatesCli.js +1 -2
- package/dist/utils/expoUpdatesCli.js.map +1 -1
- package/dist/utils/resolveRuntimeVersionAsync.js +0 -1
- package/dist/utils/resolveRuntimeVersionAsync.js.map +1 -1
- package/package.json +3 -2
- package/resources/__eas/repack.yml +13 -0
|
@@ -24,6 +24,7 @@ const installPods_1 = require("./functions/installPods");
|
|
|
24
24
|
const sendSlackMessage_1 = require("./functions/sendSlackMessage");
|
|
25
25
|
const resolveBuildConfig_1 = require("./functions/resolveBuildConfig");
|
|
26
26
|
const calculateEASUpdateRuntimeVersion_1 = require("./functions/calculateEASUpdateRuntimeVersion");
|
|
27
|
+
const repack_1 = require("./functions/repack");
|
|
27
28
|
function getEasFunctions(ctx) {
|
|
28
29
|
const functions = [
|
|
29
30
|
(0, checkout_1.createCheckoutBuildFunction)(),
|
|
@@ -46,6 +47,7 @@ function getEasFunctions(ctx) {
|
|
|
46
47
|
(0, installPods_1.createInstallPodsBuildFunction)(),
|
|
47
48
|
(0, sendSlackMessage_1.createSendSlackMessageFunction)(),
|
|
48
49
|
(0, calculateEASUpdateRuntimeVersion_1.calculateEASUpdateRuntimeVersionFunction)(ctx),
|
|
50
|
+
(0, repack_1.createRepackBuildFunction)(),
|
|
49
51
|
];
|
|
50
52
|
if (ctx.hasBuildJob()) {
|
|
51
53
|
functions.push(...[
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easFunctions.js","sourceRoot":"","sources":["../../src/steps/easFunctions.ts"],"names":[],"mappings":";;;AAIA,+DAA+E;AAC/E,mDAAmE;AACnE,yDAAwE;AACxE,uEAAuF;AACvF,mDAAmE;AACnE,yFAAyG;AACzG,6FAAkG;AAClG,mFAAwF;AACxF,iFAAsF;AACtF,qDAA0D;AAC1D,qGAA0G;AAC1G,iFAAsF;AACtF,yEAA8E;AAC9E,yFAA8F;AAC9F,yDAA8D;AAC9D,2EAA2F;AAC3F,qEAAqF;AACrF,+DAA+E;AAC/E,uIAA0I;AAC1I,yDAAyE;AACzE,mEAA8E;AAC9E,uEAAuF;AACvF,mGAAwG;
|
|
1
|
+
{"version":3,"file":"easFunctions.js","sourceRoot":"","sources":["../../src/steps/easFunctions.ts"],"names":[],"mappings":";;;AAIA,+DAA+E;AAC/E,mDAAmE;AACnE,yDAAwE;AACxE,uEAAuF;AACvF,mDAAmE;AACnE,yFAAyG;AACzG,6FAAkG;AAClG,mFAAwF;AACxF,iFAAsF;AACtF,qDAA0D;AAC1D,qGAA0G;AAC1G,iFAAsF;AACtF,yEAA8E;AAC9E,yFAA8F;AAC9F,yDAA8D;AAC9D,2EAA2F;AAC3F,qEAAqF;AACrF,+DAA+E;AAC/E,uIAA0I;AAC1I,yDAAyE;AACzE,mEAA8E;AAC9E,uEAAuF;AACvF,mGAAwG;AACxG,+CAA+D;AAE/D,SAAgB,eAAe,CAAC,GAAuB;IACrD,MAAM,SAAS,GAAG;QAChB,IAAA,sCAA2B,GAAE;QAC7B,IAAA,kDAAiC,EAAC,GAAG,CAAC;QACtC,IAAA,2CAA6B,GAAE;QAC/B,IAAA,0DAAqC,GAAE;QACvC,IAAA,sCAA2B,GAAE;QAE7B,IAAA,qEAAqC,GAAE;QACvC,IAAA,2DAAgC,GAAE;QAClC,IAAA,yDAA+B,GAAE;QACjC,IAAA,6BAAiB,GAAE;QACnB,IAAA,6EAAyC,GAAE;QAC3C,IAAA,yDAA+B,GAAE;QACjC,IAAA,iDAA2B,GAAE;QAC7B,IAAA,iEAAmC,GAAE;QACrC,IAAA,iCAAmB,GAAE;QACrB,IAAA,8DAAuC,GAAE;QACzC,IAAA,wDAAoC,GAAE;QACtC,IAAA,kDAAiC,GAAE;QAEnC,IAAA,4CAA8B,GAAE;QAChC,IAAA,iDAA8B,GAAE;QAEhC,IAAA,2EAAwC,EAAC,GAAG,CAAC;QAE7C,IAAA,kCAAyB,GAAE;KAC5B,CAAC;IAEF,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CACZ,GAAG;YACD,IAAA,4EAA8C,EAAC,GAAG,CAAC;YACnD,IAAA,0DAAqC,EAAC,GAAG,CAAC;YAC1C,IAAA,6GAAwD,EAAC,GAAG,CAAC;SAC9D,CACF,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAxCD,0CAwCC","sourcesContent":["import { BuildFunction } from '@expo/steps';\n\nimport { CustomBuildContext } from '../customBuildContext';\n\nimport { createUploadArtifactBuildFunction } from './functions/uploadArtifact';\nimport { createCheckoutBuildFunction } from './functions/checkout';\nimport { createSetUpNpmrcBuildFunction } from './functions/useNpmToken';\nimport { createInstallNodeModulesBuildFunction } from './functions/installNodeModules';\nimport { createPrebuildBuildFunction } from './functions/prebuild';\nimport { createFindAndUploadBuildArtifactsBuildFunction } from './functions/findAndUploadBuildArtifacts';\nimport { configureEASUpdateIfInstalledFunction } from './functions/configureEASUpdateIfInstalled';\nimport { injectAndroidCredentialsFunction } from './functions/injectAndroidCredentials';\nimport { configureAndroidVersionFunction } from './functions/configureAndroidVersion';\nimport { runGradleFunction } from './functions/runGradle';\nimport { resolveAppleTeamIdFromCredentialsFunction } from './functions/resolveAppleTeamIdFromCredentials';\nimport { configureIosCredentialsFunction } from './functions/configureIosCredentials';\nimport { configureIosVersionFunction } from './functions/configureIosVersion';\nimport { generateGymfileFromTemplateFunction } from './functions/generateGymfileFromTemplate';\nimport { runFastlaneFunction } from './functions/runFastlane';\nimport { createStartAndroidEmulatorBuildFunction } from './functions/startAndroidEmulator';\nimport { createStartIosSimulatorBuildFunction } from './functions/startIosSimulator';\nimport { createInstallMaestroBuildFunction } from './functions/installMaestro';\nimport { createGetCredentialsForBuildTriggeredByGithubIntegration } from './functions/getCredentialsForBuildTriggeredByGitHubIntegration';\nimport { createInstallPodsBuildFunction } from './functions/installPods';\nimport { createSendSlackMessageFunction } from './functions/sendSlackMessage';\nimport { createResolveBuildConfigBuildFunction } from './functions/resolveBuildConfig';\nimport { calculateEASUpdateRuntimeVersionFunction } from './functions/calculateEASUpdateRuntimeVersion';\nimport { createRepackBuildFunction } from './functions/repack';\n\nexport function getEasFunctions(ctx: CustomBuildContext): BuildFunction[] {\n const functions = [\n createCheckoutBuildFunction(),\n createUploadArtifactBuildFunction(ctx),\n createSetUpNpmrcBuildFunction(),\n createInstallNodeModulesBuildFunction(),\n createPrebuildBuildFunction(),\n\n configureEASUpdateIfInstalledFunction(),\n injectAndroidCredentialsFunction(),\n configureAndroidVersionFunction(),\n runGradleFunction(),\n resolveAppleTeamIdFromCredentialsFunction(),\n configureIosCredentialsFunction(),\n configureIosVersionFunction(),\n generateGymfileFromTemplateFunction(),\n runFastlaneFunction(),\n createStartAndroidEmulatorBuildFunction(),\n createStartIosSimulatorBuildFunction(),\n createInstallMaestroBuildFunction(),\n\n createInstallPodsBuildFunction(),\n createSendSlackMessageFunction(),\n\n calculateEASUpdateRuntimeVersionFunction(ctx),\n\n createRepackBuildFunction(),\n ];\n\n if (ctx.hasBuildJob()) {\n functions.push(\n ...[\n createFindAndUploadBuildArtifactsBuildFunction(ctx),\n createResolveBuildConfigBuildFunction(ctx),\n createGetCredentialsForBuildTriggeredByGithubIntegration(ctx),\n ]\n );\n }\n\n return functions;\n}\n"]}
|
|
@@ -0,0 +1,127 @@
|
|
|
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.createRepackBuildFunction = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const util_1 = require("util");
|
|
9
|
+
const stream_1 = require("stream");
|
|
10
|
+
const os_1 = __importDefault(require("os"));
|
|
11
|
+
const assert_1 = __importDefault(require("assert"));
|
|
12
|
+
const steps_1 = require("@expo/steps");
|
|
13
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
14
|
+
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
15
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
16
|
+
const repack_app_1 = require("@expo/repack-app");
|
|
17
|
+
const uuid_1 = require("uuid");
|
|
18
|
+
const manager_1 = __importDefault(require("../utils/ios/credentials/manager"));
|
|
19
|
+
const pipeline = (0, util_1.promisify)(stream_1.Stream.pipeline);
|
|
20
|
+
function createRepackBuildFunction() {
|
|
21
|
+
return new steps_1.BuildFunction({
|
|
22
|
+
namespace: 'eas',
|
|
23
|
+
id: '__download_and_repack_golden_development_client_archive',
|
|
24
|
+
name: 'Download and repack golden development client archive',
|
|
25
|
+
outputProviders: [
|
|
26
|
+
steps_1.BuildStepOutput.createProvider({
|
|
27
|
+
id: 'repacked_archive_path',
|
|
28
|
+
required: true,
|
|
29
|
+
}),
|
|
30
|
+
],
|
|
31
|
+
fn: async (stepsCtx, { outputs, env }) => {
|
|
32
|
+
var _a, _b, _c, _d;
|
|
33
|
+
const tmpDir = path_1.default.join(os_1.default.tmpdir(), `eas-build-golden-dev-client-app-${(0, uuid_1.v4)()}`);
|
|
34
|
+
await fs_extra_1.default.mkdirs(tmpDir);
|
|
35
|
+
stepsCtx.logger.info(`Created temporary directory: ${tmpDir}`);
|
|
36
|
+
stepsCtx.logger.info('Downloading golden development client archive...');
|
|
37
|
+
const fileName = stepsCtx.global.staticContext.job.platform === eas_build_job_1.Platform.IOS
|
|
38
|
+
? stepsCtx.global.staticContext.job.simulator
|
|
39
|
+
? 'golden-dev-client-simulator-latest.ipa'
|
|
40
|
+
: 'golden-dev-client-device-latest.ipa'
|
|
41
|
+
: 'golden-dev-client-latest.apk';
|
|
42
|
+
const goldenArchiveUrl = (_a = env.__EAS_GOLDEN_DEV_CLIENT_URL) !== null && _a !== void 0 ? _a : `https://storage.googleapis.com/turtle-v2/onboarding/${fileName}`;
|
|
43
|
+
const goldenArchivePath = path_1.default.join(tmpDir, fileName);
|
|
44
|
+
try {
|
|
45
|
+
const response = await (0, node_fetch_1.default)(goldenArchiveUrl, {
|
|
46
|
+
timeout: 1 * 60 * 1000, // 1 minute
|
|
47
|
+
});
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
throw new Error(`[${response.status}] ${response.statusText}`);
|
|
50
|
+
}
|
|
51
|
+
await pipeline(response.body, fs_extra_1.default.createWriteStream(goldenArchivePath));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
throw new Error(`Failed to download golden development client archive: ${error.message}`);
|
|
55
|
+
}
|
|
56
|
+
stepsCtx.logger.info(`Downloaded golden development client archive to ${goldenArchivePath}`);
|
|
57
|
+
stepsCtx.logger.info('Repacking and resigning the app...');
|
|
58
|
+
const repackedArchivePath = path_1.default.join(tmpDir, stepsCtx.global.staticContext.job.platform === eas_build_job_1.Platform.IOS
|
|
59
|
+
? stepsCtx.global.staticContext.job.simulator
|
|
60
|
+
? 'target.zip'
|
|
61
|
+
: 'target.ipa'
|
|
62
|
+
: 'target.apk');
|
|
63
|
+
if (stepsCtx.global.staticContext.job.platform === eas_build_job_1.Platform.IOS) {
|
|
64
|
+
await (0, repack_app_1.repackAppIosAsync)({
|
|
65
|
+
platform: 'ios',
|
|
66
|
+
projectRoot: stepsCtx.workingDirectory,
|
|
67
|
+
sourceAppPath: goldenArchivePath,
|
|
68
|
+
outputPath: repackedArchivePath,
|
|
69
|
+
workingDirectory: tmpDir,
|
|
70
|
+
iosSigningOptions: stepsCtx.global.staticContext.job.simulator
|
|
71
|
+
? undefined
|
|
72
|
+
: await resolveIosSigningOptions({
|
|
73
|
+
logger: stepsCtx.logger,
|
|
74
|
+
buildCredentials: (_b = stepsCtx.global.staticContext.job.secrets) === null || _b === void 0 ? void 0 : _b.buildCredentials,
|
|
75
|
+
}),
|
|
76
|
+
logger: stepsCtx.logger,
|
|
77
|
+
skipWorkingDirCleanup: true,
|
|
78
|
+
verbose: env.__EAS_REPACK_VERBOSE !== undefined,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else if (stepsCtx.global.staticContext.job.platform === eas_build_job_1.Platform.ANDROID) {
|
|
82
|
+
let androidCredentials;
|
|
83
|
+
if ((_d = (_c = stepsCtx.global.staticContext.job.secrets) === null || _c === void 0 ? void 0 : _c.buildCredentials) === null || _d === void 0 ? void 0 : _d.keystore.dataBase64) {
|
|
84
|
+
const keyStorePath = path_1.default.join(tmpDir, `keystore-${(0, uuid_1.v4)()}`);
|
|
85
|
+
await fs_extra_1.default.writeFile(keyStorePath, Buffer.from(stepsCtx.global.staticContext.job.secrets.buildCredentials.keystore.dataBase64, 'base64'));
|
|
86
|
+
androidCredentials = {
|
|
87
|
+
keyStorePath,
|
|
88
|
+
keyStorePassword: stepsCtx.global.staticContext.job.secrets.buildCredentials.keystore.keystorePassword,
|
|
89
|
+
keyAlias: stepsCtx.global.staticContext.job.secrets.buildCredentials.keystore.keyAlias,
|
|
90
|
+
keyPassword: stepsCtx.global.staticContext.job.secrets.buildCredentials.keystore.keyPassword,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
await (0, repack_app_1.repackAppAndroidAsync)({
|
|
94
|
+
platform: 'android',
|
|
95
|
+
projectRoot: stepsCtx.workingDirectory,
|
|
96
|
+
sourceAppPath: goldenArchivePath,
|
|
97
|
+
outputPath: repackedArchivePath,
|
|
98
|
+
workingDirectory: tmpDir,
|
|
99
|
+
androidSigningOptions: androidCredentials,
|
|
100
|
+
logger: stepsCtx.logger,
|
|
101
|
+
skipWorkingDirCleanup: true,
|
|
102
|
+
verbose: env.__EAS_REPACK_VERBOSE !== undefined,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
throw new Error('Unsupported platform');
|
|
107
|
+
}
|
|
108
|
+
if (!(await fs_extra_1.default.exists(repackedArchivePath))) {
|
|
109
|
+
throw new Error(`Failed to repack the app. ${repackedArchivePath} does not exist`);
|
|
110
|
+
}
|
|
111
|
+
stepsCtx.logger.info(`Repacked and resigned the app to ${repackedArchivePath}`);
|
|
112
|
+
outputs.repacked_archive_path.set(repackedArchivePath);
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
exports.createRepackBuildFunction = createRepackBuildFunction;
|
|
117
|
+
async function resolveIosSigningOptions({ buildCredentials, logger, }) {
|
|
118
|
+
(0, assert_1.default)(buildCredentials, 'buildCredentials is required for repacking non-simulator iOS apps');
|
|
119
|
+
const credentialsManager = new manager_1.default(buildCredentials);
|
|
120
|
+
const credentials = await credentialsManager.prepare(logger);
|
|
121
|
+
return {
|
|
122
|
+
provisioningProfile: Object.values(credentials.targetProvisioningProfiles)[0].path,
|
|
123
|
+
keychainPath: credentials.keychainPath,
|
|
124
|
+
signingIdentity: credentials.applicationTargetProvisioningProfile.data.certificateCommonName,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=repack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repack.js","sourceRoot":"","sources":["../../../src/steps/functions/repack.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,+BAAiC;AACjC,mCAAgC;AAChC,4CAAoB;AACpB,oDAA4B;AAE5B,uCAA6D;AAC7D,wDAA0B;AAC1B,uDAA+C;AAC/C,4DAA+B;AAC/B,iDAA4E;AAC5E,+BAAoC;AAIpC,+EAAqE;AAErE,MAAM,QAAQ,GAAG,IAAA,gBAAS,EAAC,eAAM,CAAC,QAAQ,CAAC,CAAC;AAE5C,SAAgB,yBAAyB;IACvC,OAAO,IAAI,qBAAa,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,EAAE,EAAE,yDAAyD;QAC7D,IAAI,EAAE,uDAAuD;QAC7D,eAAe,EAAE;YACf,uBAAe,CAAC,cAAc,CAAC;gBAC7B,EAAE,EAAE,uBAAuB;gBAC3B,QAAQ,EAAE,IAAI;aACf,CAAC;SACH;QACD,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;;YACvC,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,mCAAmC,IAAA,SAAM,GAAE,EAAE,CAAC,CAAC;YACrF,MAAM,kBAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;YAE/D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YACzE,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,KAAK,wBAAQ,CAAC,GAAG;gBACzD,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS;oBAC3C,CAAC,CAAC,wCAAwC;oBAC1C,CAAC,CAAC,qCAAqC;gBACzC,CAAC,CAAC,8BAA8B,CAAC;YACrC,MAAM,gBAAgB,GACpB,MAAA,GAAG,CAAC,2BAA2B,mCAC/B,uDAAuD,QAAQ,EAAE,CAAC;YACpE,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,gBAAgB,EAAE;oBAC7C,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW;iBACpC,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBACjE,CAAC;gBACD,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAE,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,yDAAyD,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,iBAAiB,EAAE,CAAC,CAAC;YAE7F,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAC3D,MAAM,mBAAmB,GAAG,cAAI,CAAC,IAAI,CACnC,MAAM,EACN,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,KAAK,wBAAQ,CAAC,GAAG;gBACzD,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS;oBAC3C,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,YAAY;gBAChB,CAAC,CAAC,YAAY,CACjB,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,KAAK,wBAAQ,CAAC,GAAG,EAAE,CAAC;gBAChE,MAAM,IAAA,8BAAiB,EAAC;oBACtB,QAAQ,EAAE,KAAK;oBACf,WAAW,EAAE,QAAQ,CAAC,gBAAgB;oBACtC,aAAa,EAAE,iBAAiB;oBAChC,UAAU,EAAE,mBAAmB;oBAC/B,gBAAgB,EAAE,MAAM;oBACxB,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS;wBAC5D,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,MAAM,wBAAwB,CAAC;4BAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,gBAAgB,EAAE,MAAA,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,0CAAE,gBAAgB;yBAC9E,CAAC;oBACN,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,qBAAqB,EAAE,IAAI;oBAC3B,OAAO,EAAE,GAAG,CAAC,oBAAoB,KAAK,SAAS;iBAChD,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,KAAK,wBAAQ,CAAC,OAAO,EAAE,CAAC;gBAC3E,IAAI,kBAOS,CAAC;gBACd,IAAI,MAAA,MAAA,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,0CAAE,gBAAgB,0CAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACrF,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,IAAA,SAAM,GAAE,EAAE,CAAC,CAAC;oBAC/D,MAAM,kBAAE,CAAC,SAAS,CAChB,YAAY,EACZ,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAC9E,QAAQ,CACT,CACF,CAAC;oBACF,kBAAkB,GAAG;wBACnB,YAAY;wBACZ,gBAAgB,EACd,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB;wBACtF,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ;wBACtF,WAAW,EACT,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW;qBAClF,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAA,kCAAqB,EAAC;oBAC1B,QAAQ,EAAE,SAAS;oBACnB,WAAW,EAAE,QAAQ,CAAC,gBAAgB;oBACtC,aAAa,EAAE,iBAAiB;oBAChC,UAAU,EAAE,mBAAmB;oBAC/B,gBAAgB,EAAE,MAAM;oBACxB,qBAAqB,EAAE,kBAAkB;oBACzC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,qBAAqB,EAAE,IAAI;oBAC3B,OAAO,EAAE,GAAG,CAAC,oBAAoB,KAAK,SAAS;iBAChD,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,6BAA6B,mBAAmB,iBAAiB,CAAC,CAAC;YACrF,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,mBAAmB,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACzD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AArHD,8DAqHC;AAED,KAAK,UAAU,wBAAwB,CAAC,EACtC,gBAAgB,EAChB,MAAM,GAIP;IAKC,IAAA,gBAAM,EAAC,gBAAgB,EAAE,mEAAmE,CAAC,CAAC;IAE9F,MAAM,kBAAkB,GAAG,IAAI,iBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7D,OAAO;QACL,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QAClF,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,eAAe,EAAE,WAAW,CAAC,oCAAoC,CAAC,IAAI,CAAC,qBAAqB;KAC7F,CAAC;AACJ,CAAC","sourcesContent":["import path from 'path';\nimport { promisify } from 'util';\nimport { Stream } from 'stream';\nimport os from 'os';\nimport assert from 'assert';\n\nimport { BuildFunction, BuildStepOutput } from '@expo/steps';\nimport fs from 'fs-extra';\nimport { Platform } from '@expo/eas-build-job';\nimport fetch from 'node-fetch';\nimport { repackAppAndroidAsync, repackAppIosAsync } from '@expo/repack-app';\nimport { v4 as uuidv4 } from 'uuid';\nimport { BuildCredentials } from '@expo/eas-build-job/dist/ios';\nimport { bunyan } from '@expo/logger';\n\nimport IosCredentialsManager from '../utils/ios/credentials/manager';\n\nconst pipeline = promisify(Stream.pipeline);\n\nexport function createRepackBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: '__download_and_repack_golden_development_client_archive',\n name: 'Download and repack golden development client archive',\n outputProviders: [\n BuildStepOutput.createProvider({\n id: 'repacked_archive_path',\n required: true,\n }),\n ],\n fn: async (stepsCtx, { outputs, env }) => {\n const tmpDir = path.join(os.tmpdir(), `eas-build-golden-dev-client-app-${uuidv4()}`);\n await fs.mkdirs(tmpDir);\n stepsCtx.logger.info(`Created temporary directory: ${tmpDir}`);\n\n stepsCtx.logger.info('Downloading golden development client archive...');\n const fileName =\n stepsCtx.global.staticContext.job.platform === Platform.IOS\n ? stepsCtx.global.staticContext.job.simulator\n ? 'golden-dev-client-simulator-latest.ipa'\n : 'golden-dev-client-device-latest.ipa'\n : 'golden-dev-client-latest.apk';\n const goldenArchiveUrl =\n env.__EAS_GOLDEN_DEV_CLIENT_URL ??\n `https://storage.googleapis.com/turtle-v2/onboarding/${fileName}`;\n const goldenArchivePath = path.join(tmpDir, fileName);\n try {\n const response = await fetch(goldenArchiveUrl, {\n timeout: 1 * 60 * 1000, // 1 minute\n });\n if (!response.ok) {\n throw new Error(`[${response.status}] ${response.statusText}`);\n }\n await pipeline(response.body, fs.createWriteStream(goldenArchivePath));\n } catch (error: any) {\n throw new Error(`Failed to download golden development client archive: ${error.message}`);\n }\n stepsCtx.logger.info(`Downloaded golden development client archive to ${goldenArchivePath}`);\n\n stepsCtx.logger.info('Repacking and resigning the app...');\n const repackedArchivePath = path.join(\n tmpDir,\n stepsCtx.global.staticContext.job.platform === Platform.IOS\n ? stepsCtx.global.staticContext.job.simulator\n ? 'target.zip'\n : 'target.ipa'\n : 'target.apk'\n );\n if (stepsCtx.global.staticContext.job.platform === Platform.IOS) {\n await repackAppIosAsync({\n platform: 'ios',\n projectRoot: stepsCtx.workingDirectory,\n sourceAppPath: goldenArchivePath,\n outputPath: repackedArchivePath,\n workingDirectory: tmpDir,\n iosSigningOptions: stepsCtx.global.staticContext.job.simulator\n ? undefined\n : await resolveIosSigningOptions({\n logger: stepsCtx.logger,\n buildCredentials: stepsCtx.global.staticContext.job.secrets?.buildCredentials,\n }),\n logger: stepsCtx.logger,\n skipWorkingDirCleanup: true,\n verbose: env.__EAS_REPACK_VERBOSE !== undefined,\n });\n } else if (stepsCtx.global.staticContext.job.platform === Platform.ANDROID) {\n let androidCredentials:\n | {\n keyStorePath: string;\n keyStorePassword: string;\n keyAlias: string;\n keyPassword: string | undefined;\n }\n | undefined;\n if (stepsCtx.global.staticContext.job.secrets?.buildCredentials?.keystore.dataBase64) {\n const keyStorePath = path.join(tmpDir, `keystore-${uuidv4()}`);\n await fs.writeFile(\n keyStorePath,\n Buffer.from(\n stepsCtx.global.staticContext.job.secrets.buildCredentials.keystore.dataBase64,\n 'base64'\n )\n );\n androidCredentials = {\n keyStorePath,\n keyStorePassword:\n stepsCtx.global.staticContext.job.secrets.buildCredentials.keystore.keystorePassword,\n keyAlias: stepsCtx.global.staticContext.job.secrets.buildCredentials.keystore.keyAlias,\n keyPassword:\n stepsCtx.global.staticContext.job.secrets.buildCredentials.keystore.keyPassword,\n };\n }\n\n await repackAppAndroidAsync({\n platform: 'android',\n projectRoot: stepsCtx.workingDirectory,\n sourceAppPath: goldenArchivePath,\n outputPath: repackedArchivePath,\n workingDirectory: tmpDir,\n androidSigningOptions: androidCredentials,\n logger: stepsCtx.logger,\n skipWorkingDirCleanup: true,\n verbose: env.__EAS_REPACK_VERBOSE !== undefined,\n });\n } else {\n throw new Error('Unsupported platform');\n }\n\n if (!(await fs.exists(repackedArchivePath))) {\n throw new Error(`Failed to repack the app. ${repackedArchivePath} does not exist`);\n }\n\n stepsCtx.logger.info(`Repacked and resigned the app to ${repackedArchivePath}`);\n outputs.repacked_archive_path.set(repackedArchivePath);\n },\n });\n}\n\nasync function resolveIosSigningOptions({\n buildCredentials,\n logger,\n}: {\n buildCredentials: BuildCredentials | undefined;\n logger: bunyan;\n}): Promise<{\n provisioningProfile: string;\n keychainPath: string;\n signingIdentity: string;\n}> {\n assert(buildCredentials, 'buildCredentials is required for repacking non-simulator iOS apps');\n\n const credentialsManager = new IosCredentialsManager(buildCredentials);\n const credentials = await credentialsManager.prepare(logger);\n\n return {\n provisioningProfile: Object.values(credentials.targetProvisioningProfiles)[0].path,\n keychainPath: credentials.keychainPath,\n signingIdentity: credentials.applicationTargetProvisioningProfile.data.certificateCommonName,\n };\n}\n"]}
|
package/dist/utils/artifacts.js
CHANGED
|
@@ -12,7 +12,11 @@ class FindArtifactsError extends Error {
|
|
|
12
12
|
}
|
|
13
13
|
exports.FindArtifactsError = FindArtifactsError;
|
|
14
14
|
async function findArtifacts({ rootDir, patternOrPath, logger, }) {
|
|
15
|
-
const files =
|
|
15
|
+
const files = path_1.default.isAbsolute(patternOrPath)
|
|
16
|
+
? (await fs_extra_1.default.pathExists(patternOrPath))
|
|
17
|
+
? [patternOrPath]
|
|
18
|
+
: []
|
|
19
|
+
: await (0, fast_glob_1.default)(patternOrPath, { cwd: rootDir, onlyFiles: false });
|
|
16
20
|
if (files.length === 0) {
|
|
17
21
|
if (fast_glob_1.default.isDynamicPattern(patternOrPath)) {
|
|
18
22
|
throw new FindArtifactsError(`There are no files matching pattern "${patternOrPath}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/utils/artifacts.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,wDAA0B;AAC1B,0DAA2B;AAE3B,uDAAyE;AAIzE,MAAa,kBAAmB,SAAQ,KAAK;CAAG;AAAhD,gDAAgD;AAEzC,KAAK,UAAU,aAAa,CAAC,EAClC,OAAO,EACP,aAAa,EACb,MAAM,GAMP;IACC,MAAM,KAAK,GAAG,MAAM,IAAA,mBAAE,EAAC,aAAa,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/utils/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport fg from 'fast-glob';\nimport { bunyan } from '@expo/logger';\nimport { ManagedArtifactType, Job, BuildJob } from '@expo/eas-build-job';\n\nimport { BuildContext } from '../context';\n\nexport class FindArtifactsError extends Error {}\n\nexport async function findArtifacts({\n rootDir,\n patternOrPath,\n logger,\n}: {\n rootDir: string;\n patternOrPath: string;\n /** If provided, will log error suggesting possible files to upload. */\n logger: bunyan | null;\n}): Promise<string[]> {\n const files = path.isAbsolute(patternOrPath)\n ? (await fs.pathExists(patternOrPath))\n ? [patternOrPath]\n : []\n : await fg(patternOrPath, { cwd: rootDir, onlyFiles: false });\n if (files.length === 0) {\n if (fg.isDynamicPattern(patternOrPath)) {\n throw new FindArtifactsError(`There are no files matching pattern \"${patternOrPath}\"`);\n } else {\n if (logger) {\n await logMissingFileError(path.join(rootDir, patternOrPath), logger);\n }\n throw new FindArtifactsError(`No such file or directory ${patternOrPath}`);\n }\n }\n\n return files.map((filePath) => {\n // User may provide an absolute path as input in which case\n // fg will return an absolute path.\n if (path.isAbsolute(filePath)) {\n return filePath;\n }\n\n // User may also provide a relative path in which case\n // fg will return a path relative to rootDir.\n return path.join(rootDir, filePath);\n });\n}\n\nasync function logMissingFileError(artifactPath: string, buildLogger: bunyan): Promise<void> {\n let currentPath = artifactPath;\n while (!(await fs.pathExists(currentPath))) {\n currentPath = path.resolve(currentPath, '..');\n }\n if (currentPath === path.resolve(currentPath, '..')) {\n buildLogger.error(`There is no such file or directory \"${artifactPath}\".`);\n return;\n }\n const dirContent = await fs.readdir(currentPath);\n if (dirContent.length === 0) {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" is empty.`\n );\n } else {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" contains [${dirContent.join(\n ', '\n )}].`\n );\n }\n}\n\nexport async function maybeFindAndUploadBuildArtifacts(\n ctx: BuildContext<BuildJob>,\n { logger }: { logger: bunyan }\n): Promise<void> {\n if (!ctx.job.buildArtifactPaths || ctx.job.buildArtifactPaths.length === 0) {\n return;\n }\n try {\n const buildArtifacts = (\n await Promise.all(\n ctx.job.buildArtifactPaths.map((path) =>\n findArtifacts({\n rootDir: ctx.getReactNativeProjectDirectory(),\n patternOrPath: path,\n logger,\n })\n )\n )\n ).flat();\n logger.info(`Build artifacts: ${buildArtifacts.join(', ')}`);\n logger.info('Uploading build artifacts...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.BUILD_ARTIFACTS,\n paths: buildArtifacts,\n },\n logger,\n });\n } catch (err: any) {\n logger.error({ err }, 'Failed to upload build artifacts');\n }\n}\n\nexport async function uploadApplicationArchive(\n ctx: BuildContext<Job>,\n {\n logger,\n patternOrPath,\n rootDir,\n }: {\n logger: bunyan;\n patternOrPath: string;\n rootDir: string;\n }\n): Promise<void> {\n const applicationArchives = await findArtifacts({ rootDir, patternOrPath, logger });\n logger.info(`Application archives: ${applicationArchives.join(', ')}`);\n logger.info('Uploading application archive...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.APPLICATION_ARCHIVE,\n paths: applicationArchives,\n },\n logger,\n });\n}\n"]}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="bunyan" />
|
|
2
|
-
import { bunyan } from '@expo/logger';
|
|
3
1
|
import { BuildStepEnv } from '@expo/steps';
|
|
4
2
|
export declare class ExpoUpdatesCLIModuleNotFoundError extends Error {
|
|
5
3
|
}
|
|
@@ -7,7 +5,6 @@ export declare class ExpoUpdatesCLIInvalidCommandError extends Error {
|
|
|
7
5
|
}
|
|
8
6
|
export declare class ExpoUpdatesCLICommandFailedError extends Error {
|
|
9
7
|
}
|
|
10
|
-
export declare function expoUpdatesCommandAsync(projectDir: string, args: string[], {
|
|
11
|
-
logger: bunyan;
|
|
8
|
+
export declare function expoUpdatesCommandAsync(projectDir: string, args: string[], { env }: {
|
|
12
9
|
env: BuildStepEnv;
|
|
13
10
|
}): Promise<string>;
|
|
@@ -38,7 +38,7 @@ exports.ExpoUpdatesCLIInvalidCommandError = ExpoUpdatesCLIInvalidCommandError;
|
|
|
38
38
|
class ExpoUpdatesCLICommandFailedError extends Error {
|
|
39
39
|
}
|
|
40
40
|
exports.ExpoUpdatesCLICommandFailedError = ExpoUpdatesCLICommandFailedError;
|
|
41
|
-
async function expoUpdatesCommandAsync(projectDir, args, {
|
|
41
|
+
async function expoUpdatesCommandAsync(projectDir, args, { env }) {
|
|
42
42
|
var _a;
|
|
43
43
|
let expoUpdatesCli;
|
|
44
44
|
try {
|
|
@@ -55,7 +55,6 @@ async function expoUpdatesCommandAsync(projectDir, args, { logger, env }) {
|
|
|
55
55
|
const spawnResult = await (0, turtle_spawn_1.default)(expoUpdatesCli, args, {
|
|
56
56
|
stdio: 'pipe',
|
|
57
57
|
cwd: projectDir,
|
|
58
|
-
logger,
|
|
59
58
|
env,
|
|
60
59
|
});
|
|
61
60
|
return spawnResult.stdout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expoUpdatesCli.js","sourceRoot":"","sources":["../../src/utils/expoUpdatesCli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAAwE;AACxE,sEAA4C;
|
|
1
|
+
{"version":3,"file":"expoUpdatesCli.js","sourceRoot":"","sources":["../../src/utils/expoUpdatesCli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAAwE;AACxE,sEAA4C;AAG5C,MAAa,iCAAkC,SAAQ,KAAK;CAAG;AAA/D,8EAA+D;AAC/D,MAAa,iCAAkC,SAAQ,KAAK;CAAG;AAA/D,8EAA+D;AAC/D,MAAa,gCAAiC,SAAQ,KAAK;CAAG;AAA9D,4EAA8D;AAEvD,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,IAAc,EACd,EAAE,GAAG,EAAyB;;IAE9B,IAAI,cAAc,CAAC;IACnB,IAAI,CAAC;QACH,cAAc;YACZ,MAAA,IAAA,qBAAiB,EAAC,UAAU,EAAE,sBAAsB,CAAC,mCACrD,IAAA,sBAAW,EAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAClC,MAAM,IAAI,iCAAiC,CACzC,uIAAuI,CACxI,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAA,sBAAU,EAAC,cAAc,EAAE,IAAI,EAAE;YACzD,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,UAAU;YACf,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7C,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,iCAAiC,CACzC,4BAA4B,IAAI,6CAA6C,CAC9E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,gCAAgC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAtCD,0DAsCC","sourcesContent":["import resolveFrom, { silent as silentResolveFrom } from 'resolve-from';\nimport spawnAsync from '@expo/turtle-spawn';\nimport { BuildStepEnv } from '@expo/steps';\n\nexport class ExpoUpdatesCLIModuleNotFoundError extends Error {}\nexport class ExpoUpdatesCLIInvalidCommandError extends Error {}\nexport class ExpoUpdatesCLICommandFailedError extends Error {}\n\nexport async function expoUpdatesCommandAsync(\n projectDir: string,\n args: string[],\n { env }: { env: BuildStepEnv }\n): Promise<string> {\n let expoUpdatesCli;\n try {\n expoUpdatesCli =\n silentResolveFrom(projectDir, 'expo-updates/bin/cli') ??\n resolveFrom(projectDir, 'expo-updates/bin/cli.js');\n } catch (e: any) {\n if (e.code === 'MODULE_NOT_FOUND') {\n throw new ExpoUpdatesCLIModuleNotFoundError(\n `The \\`expo-updates\\` package was not found. Follow the installation directions at https://docs.expo.dev/bare/installing-expo-modules/`\n );\n }\n throw e;\n }\n\n try {\n const spawnResult = await spawnAsync(expoUpdatesCli, args, {\n stdio: 'pipe',\n cwd: projectDir,\n env,\n });\n return spawnResult.stdout;\n } catch (e: any) {\n if (e.stderr && typeof e.stderr === 'string') {\n if (e.stderr.includes('Invalid command')) {\n throw new ExpoUpdatesCLIInvalidCommandError(\n `The command specified by ${args} was not valid in the \\`expo-updates\\` CLI.`\n );\n } else {\n throw new ExpoUpdatesCLICommandFailedError(e.stderr);\n }\n }\n throw e;\n }\n}\n"]}
|
|
@@ -16,7 +16,6 @@ async function resolveRuntimeVersionAsync({ exp, platform, workflow, projectDir,
|
|
|
16
16
|
logger.debug('Using expo-updates runtimeversion:resolve CLI for runtime version resolution');
|
|
17
17
|
const extraArgs = logger.debug() ? ['--debug'] : [];
|
|
18
18
|
const resolvedRuntimeVersionJSONResult = await (0, expoUpdatesCli_1.expoUpdatesCommandAsync)(projectDir, ['runtimeversion:resolve', '--platform', platform, '--workflow', workflow, ...extraArgs], {
|
|
19
|
-
logger,
|
|
20
19
|
env,
|
|
21
20
|
});
|
|
22
21
|
const runtimeVersionResult = JSON.parse(resolvedRuntimeVersionJSONResult);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveRuntimeVersionAsync.js","sourceRoot":"","sources":["../../src/utils/resolveRuntimeVersionAsync.ts"],"names":[],"mappings":";;;AACA,yDAA+C;AAK/C,qDAA8F;AAC9F,+CAAyF;AAElF,KAAK,UAAU,0BAA0B,CAAC,EAC/C,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,MAAM,EACN,yBAAyB,EACzB,GAAG,GASJ;;IACC,IAAI,CAAC,IAAA,sEAAwD,EAAC,yBAAyB,CAAC,EAAE,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAChF,+FAA+F;QAC/F,qEAAqE;QACrE,OAAO,MAAM,wBAAO,CAAC,8BAA8B,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAE7F,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpD,MAAM,gCAAgC,GAAG,MAAM,IAAA,wCAAuB,EACpE,UAAU,EACV,CAAC,wBAAwB,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,EACxF;YACE,
|
|
1
|
+
{"version":3,"file":"resolveRuntimeVersionAsync.js","sourceRoot":"","sources":["../../src/utils/resolveRuntimeVersionAsync.ts"],"names":[],"mappings":";;;AACA,yDAA+C;AAK/C,qDAA8F;AAC9F,+CAAyF;AAElF,KAAK,UAAU,0BAA0B,CAAC,EAC/C,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,MAAM,EACN,yBAAyB,EACzB,GAAG,GASJ;;IACC,IAAI,CAAC,IAAA,sEAAwD,EAAC,yBAAyB,CAAC,EAAE,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAChF,+FAA+F;QAC/F,qEAAqE;QACrE,OAAO,MAAM,wBAAO,CAAC,8BAA8B,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAE7F,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpD,MAAM,gCAAgC,GAAG,MAAM,IAAA,wCAAuB,EACpE,UAAU,EACV,CAAC,wBAAwB,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,EACxF;YACE,GAAG;SACJ,CACF,CAAC;QACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAE1E,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAE/C,OAAO,MAAA,oBAAoB,CAAC,cAAc,mCAAI,IAAI,CAAC;IACrD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,uFAAuF;QACvF,IAAI,CAAC,YAAY,kDAAiC,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,CACV,uFAAuF,CAAC,CAAC,OAAO,EAAE,CACnG,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AApDD,gEAoDC","sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport { Updates } from '@expo/config-plugins';\nimport { bunyan } from '@expo/logger';\nimport { Workflow } from '@expo/eas-build-job';\nimport { BuildStepEnv } from '@expo/steps';\n\nimport { ExpoUpdatesCLIModuleNotFoundError, expoUpdatesCommandAsync } from './expoUpdatesCli';\nimport { isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported } from './expoUpdates';\n\nexport async function resolveRuntimeVersionAsync({\n exp,\n platform,\n workflow,\n projectDir,\n logger,\n expoUpdatesPackageVersion,\n env,\n}: {\n exp: ExpoConfig;\n platform: 'ios' | 'android';\n workflow: Workflow;\n projectDir: string;\n logger: bunyan;\n expoUpdatesPackageVersion: string;\n env: BuildStepEnv;\n}): Promise<string | null> {\n if (!isModernExpoUpdatesCLIWithRuntimeVersionCommandSupported(expoUpdatesPackageVersion)) {\n logger.debug('Using expo-updates config plugin for runtime version resolution');\n // fall back to the previous behavior (using the @expo/config-plugins eas-cli dependency rather\n // than the versioned @expo/config-plugins dependency in the project)\n return await Updates.getRuntimeVersionNullableAsync(projectDir, exp, platform);\n }\n\n try {\n logger.debug('Using expo-updates runtimeversion:resolve CLI for runtime version resolution');\n\n const extraArgs = logger.debug() ? ['--debug'] : [];\n\n const resolvedRuntimeVersionJSONResult = await expoUpdatesCommandAsync(\n projectDir,\n ['runtimeversion:resolve', '--platform', platform, '--workflow', workflow, ...extraArgs],\n {\n env,\n }\n );\n const runtimeVersionResult = JSON.parse(resolvedRuntimeVersionJSONResult);\n\n logger.debug('runtimeversion:resolve output:');\n logger.debug(resolvedRuntimeVersionJSONResult);\n\n return runtimeVersionResult.runtimeVersion ?? null;\n } catch (e: any) {\n // if expo-updates is not installed, there's no need for a runtime version in the build\n if (e instanceof ExpoUpdatesCLIModuleNotFoundError) {\n logger.error(\n `Error when resolving runtime version using expo-updates runtimeversion:resolve CLI: ${e.message}`\n );\n return null;\n }\n throw e;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/build-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.110",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"@expo/logger": "1.0.57",
|
|
31
31
|
"@expo/package-manager": "1.1.2",
|
|
32
32
|
"@expo/plist": "^0.0.20",
|
|
33
|
+
"@expo/repack-app": "0.0.5",
|
|
33
34
|
"@expo/steps": "1.0.108",
|
|
34
35
|
"@expo/template-file": "1.0.57",
|
|
35
36
|
"@expo/turtle-spawn": "1.0.57",
|
|
@@ -70,5 +71,5 @@
|
|
|
70
71
|
"node": "20.11.0",
|
|
71
72
|
"yarn": "1.22.21"
|
|
72
73
|
},
|
|
73
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "e1bfcde6d4e84fd511ac33f895d2571a479c8091"
|
|
74
75
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
build:
|
|
2
|
+
name: Resign development client
|
|
3
|
+
steps:
|
|
4
|
+
- eas/checkout
|
|
5
|
+
- eas/install_node_modules
|
|
6
|
+
- eas/__download_and_repack_golden_development_client_archive:
|
|
7
|
+
id: download_and_repack_golden_development_client_archive
|
|
8
|
+
- eas/upload_artifact:
|
|
9
|
+
name: Upload build artifact
|
|
10
|
+
inputs:
|
|
11
|
+
type: application-archive
|
|
12
|
+
path: ${ steps.download_and_repack_golden_development_client_archive.repacked_archive_path }
|
|
13
|
+
|