@expo/build-tools 1.0.191 → 1.0.192

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.
@@ -8,9 +8,9 @@ const node_crypto_1 = require("node:crypto");
8
8
  const node_fs_1 = __importDefault(require("node:fs"));
9
9
  const node_os_1 = __importDefault(require("node:os"));
10
10
  const node_path_1 = __importDefault(require("node:path"));
11
+ const resolve_from_1 = __importDefault(require("resolve-from"));
11
12
  const eas_build_job_1 = require("@expo/eas-build-job");
12
13
  const steps_1 = require("@expo/steps");
13
- const repack_app_1 = require("@expo/repack-app");
14
14
  const fastlane_1 = require("../../common/fastlane");
15
15
  const manager_1 = __importDefault(require("../utils/ios/credentials/manager"));
16
16
  function createRepackBuildFunction() {
@@ -39,6 +39,12 @@ function createRepackBuildFunction() {
39
39
  allowedValueTypeName: steps_1.BuildStepInputValueTypeName.BOOLEAN,
40
40
  required: false,
41
41
  }),
42
+ steps_1.BuildStepInput.createProvider({
43
+ id: 'repack_version',
44
+ allowedValueTypeName: steps_1.BuildStepInputValueTypeName.STRING,
45
+ required: false,
46
+ defaultValue: 'latest',
47
+ }),
42
48
  ],
43
49
  outputProviders: [
44
50
  steps_1.BuildStepOutput.createProvider({
@@ -66,10 +72,13 @@ function createRepackBuildFunction() {
66
72
  sourcemapOutput: undefined,
67
73
  }
68
74
  : undefined;
75
+ stepsCtx.logger.info(`Using repack tool version: ${inputs.repack_version.value}`);
76
+ const repackApp = await installAndImportRepackAsync(inputs.repack_version.value);
77
+ const { repackAppIosAsync, repackAppAndroidAsync } = repackApp;
69
78
  stepsCtx.logger.info('Repacking the app...');
70
79
  switch (platform) {
71
80
  case eas_build_job_1.Platform.IOS:
72
- await (0, repack_app_1.repackAppIosAsync)({
81
+ await repackAppIosAsync({
73
82
  platform: 'ios',
74
83
  projectRoot,
75
84
  sourceAppPath,
@@ -96,7 +105,7 @@ function createRepackBuildFunction() {
96
105
  tmpDir,
97
106
  });
98
107
  try {
99
- await (0, repack_app_1.repackAppAndroidAsync)({
108
+ await repackAppAndroidAsync({
100
109
  platform: 'android',
101
110
  projectRoot,
102
111
  sourceAppPath,
@@ -125,15 +134,35 @@ function createRepackBuildFunction() {
125
134
  });
126
135
  }
127
136
  exports.createRepackBuildFunction = createRepackBuildFunction;
137
+ /**
138
+ * Install `@expo/repack-app` in a sandbox directory and import it.
139
+ */
140
+ async function installAndImportRepackAsync(version = 'latest') {
141
+ const sandbox = await node_fs_1.default.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), `repack-package-root-`));
142
+ await (0, steps_1.spawnAsync)('yarn', ['add', `@expo/repack-app@${version}`], {
143
+ stdio: 'inherit',
144
+ cwd: sandbox,
145
+ });
146
+ return require((0, resolve_from_1.default)(sandbox, '@expo/repack-app'));
147
+ }
128
148
  /**
129
149
  * Creates `@expo/steps` based spawnAsync for repack.
130
150
  */
131
151
  function createSpawnAsyncStepAdapter({ verbose, logger, }) {
132
152
  return function repackSpawnAsync(command, args, options) {
133
- return (0, steps_1.spawnAsync)(command, args, {
153
+ const promise = (0, steps_1.spawnAsync)(command, args, {
134
154
  ...options,
135
155
  ...(verbose ? { logger, stdio: 'pipe' } : { logger: undefined }),
136
156
  });
157
+ const child = promise.child;
158
+ const wrappedPromise = promise.catch((error) => {
159
+ logger.error(`Error while running command: ${command} ${args.join(' ')}`);
160
+ logger.error(`stdout: ${error.stdout}`);
161
+ logger.error(`stderr: ${error.stderr}`);
162
+ throw error;
163
+ });
164
+ wrappedPromise.child = child;
165
+ return wrappedPromise;
137
166
  };
138
167
  }
139
168
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"repack.js","sourceRoot":"","sources":["../../../src/steps/functions/repack.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AACzC,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAE7B,uDAAiF;AAEjF,uCAMqB;AACrB,iDAS0B;AAE1B,oDAA4D;AAC5D,+EAAqE;AAErE,SAAgB,yBAAyB;IACvC,OAAO,IAAI,qBAAa,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,YAAY;QAClB,cAAc,EAAE;YACd,sBAAc,CAAC,cAAc,CAAC;gBAC5B,EAAE,EAAE,iBAAiB;gBACrB,oBAAoB,EAAE,mCAA2B,CAAC,MAAM;gBACxD,QAAQ,EAAE,IAAI;aACf,CAAC;YACF,sBAAc,CAAC,cAAc,CAAC;gBAC5B,EAAE,EAAE,UAAU;gBACd,QAAQ,EAAE,KAAK;gBACf,oBAAoB,EAAE,mCAA2B,CAAC,MAAM;aACzD,CAAC;YACF,sBAAc,CAAC,cAAc,CAAC;gBAC5B,EAAE,EAAE,aAAa;gBACjB,oBAAoB,EAAE,mCAA2B,CAAC,MAAM;gBACxD,QAAQ,EAAE,KAAK;aAChB,CAAC;YACF,sBAAc,CAAC,cAAc,CAAC;gBAC5B,EAAE,EAAE,qBAAqB;gBACzB,oBAAoB,EAAE,mCAA2B,CAAC,OAAO;gBACzD,QAAQ,EAAE,KAAK;aAChB,CAAC;SACH;QACD,eAAe,EAAE;YACf,uBAAe,CAAC,cAAc,CAAC;gBAC7B,EAAE,EAAE,aAAa;gBACjB,QAAQ,EAAE,IAAI;aACf,CAAC;SACH;QACD,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;;YAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC;YAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC;YAE3D,MAAM,QAAQ,GACZ,MAAC,MAAM,CAAC,QAAQ,CAAC,KAAkB,mCAAI,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;YACpF,IAAI,CAAC,CAAC,wBAAQ,CAAC,OAAO,EAAE,wBAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,uBAAuB,wBAAQ,CAAC,OAAO,SAAS,wBAAQ,CAAC,GAAG,GAAG,CACjG,CAAC;YACJ,CAAC;YAED,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAE3F,MAAM,MAAM,GAAG,MAAM,iBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;YAC5E,MAAM,gBAAgB,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;YAChE,MAAM,iBAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC1C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,gBAAgB,EAAE,CAAC,CAAC;YAEjF,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,KAAe,CAAC;YAC7D,MAAM,UAAU,GACd,MAAC,MAAM,CAAC,WAAW,CAAC,KAAgB,mCACpC,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,IAAA,wBAAU,GAAE,GAAG,mBAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC9E,MAAM,kBAAkB,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK;gBACzD,CAAC,CAAC;oBACE,eAAe,EAAE,SAAS;iBAC3B;gBACH,CAAC,CAAC,SAAS,CAAC;YAEd,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC7C,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,wBAAQ,CAAC,GAAG;oBACf,MAAM,IAAA,8BAAiB,EAAC;wBACtB,QAAQ,EAAE,KAAK;wBACf,WAAW;wBACX,aAAa;wBACb,UAAU;wBACV,gBAAgB;wBAChB,kBAAkB;wBAClB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;4BACrD,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG;4BACtC,MAAM,EAAE,QAAQ,CAAC,MAAM;yBACxB,CAAC;wBACF,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,UAAU,EAAE,gBAAgB;wBAC5B,OAAO;wBACP,GAAG,EAAE;4BACH,GAAG,8BAAmB;4BACtB,GAAG,GAAG;yBACP;qBACF,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,wBAAQ,CAAC,OAAO;oBACnB,CAAC;wBACC,MAAM,qBAAqB,GAAG,MAAM,iCAAiC,CAAC;4BACpE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG;4BACtC,MAAM;yBACP,CAAC,CAAC;wBAEH,IAAI,CAAC;4BACH,MAAM,IAAA,kCAAqB,EAAC;gCAC1B,QAAQ,EAAE,SAAS;gCACnB,WAAW;gCACX,aAAa;gCACb,UAAU;gCACV,gBAAgB;gCAChB,kBAAkB;gCAClB,qBAAqB;gCACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;gCACvB,UAAU,EAAE,gBAAgB;gCAC5B,OAAO;gCACP,GAAG;6BACJ,CAAC,CAAC;wBACL,CAAC;gCAAS,CAAC;4BACT,MAAM,YAAY,GAAG,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,YAAY,CAAC;4BACzD,IAAI,YAAY,EAAE,CAAC;gCACjB,MAAM,iBAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;4BACtD,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,MAAM;YACV,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAxHD,8DAwHC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,EACnC,OAAO,EACP,MAAM,GAIP;IACC,OAAO,SAAS,gBAAgB,CAC9B,OAAe,EACf,IAAc,EACd,OAA6B;QAE7B,OAAO,IAAA,kBAAU,EAAC,OAAO,EAAE,IAAI,EAAE;YAC/B,GAAG,OAAO;YACV,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SACjE,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iCAAiC,CAAC,EACtD,GAAG,EACH,MAAM,GAIP;;IACC,MAAM,UAAU,GAAG,GAAkB,CAAC;IACtC,MAAM,gBAAgB,GAAG,MAAA,UAAU,CAAC,OAAO,0CAAE,gBAAgB,CAAC;IAC9D,IAAI,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,QAAQ,CAAC,UAAU,KAAI,IAAI,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,YAAY,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,IAAA,wBAAU,GAAE,EAAE,CAAC,CAAC;IACnE,MAAM,iBAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,YAAY,EACZ,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAC5D,CAAC;IAEF,MAAM,gBAAgB,GAAG,QAAQ,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAC9E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACpD,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,WAAW;QACvD,CAAC,CAAC,QAAQ,gBAAgB,CAAC,QAAQ,CAAC,WAAW,EAAE;QACjD,CAAC,CAAC,SAAS,CAAC;IACd,OAAO;QACL,YAAY;QACZ,gBAAgB;QAChB,QAAQ;QACR,WAAW;KACZ,CAAC;AACJ,CAAC;AA7BD,8EA6BC;AAED;;GAEG;AACI,KAAK,UAAU,6BAA6B,CAAC,EAClD,GAAG,EACH,MAAM,GAIP;;IACC,MAAM,MAAM,GAAG,GAAc,CAAC;IAC9B,MAAM,gBAAgB,GAAG,MAAA,MAAM,CAAC,OAAO,0CAAE,gBAAgB,CAAC;IAC1D,IAAI,MAAM,CAAC,SAAS,IAAI,gBAAgB,IAAI,IAAI,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,kBAAkB,GAAG,IAAI,iBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7D,MAAM,mBAAmB,GAA2B,EAAE,CAAC;IACvD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC5E,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/D,CAAC;IACD,OAAO;QACL,mBAAmB;QACnB,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,eAAe,EAAE,WAAW,CAAC,oCAAoC,CAAC,IAAI,CAAC,qBAAqB;KAC7F,CAAC;AACJ,CAAC;AAxBD,sEAwBC","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { Platform, type Android, type Ios, type Job } from '@expo/eas-build-job';\nimport { type bunyan } from '@expo/logger';\nimport {\n BuildFunction,\n BuildStepInput,\n BuildStepInputValueTypeName,\n BuildStepOutput,\n spawnAsync,\n} from '@expo/steps';\nimport {\n repackAppAndroidAsync,\n repackAppIosAsync,\n type AndroidSigningOptions,\n type IosSigningOptions,\n type SpawnProcessAsync,\n type SpawnProcessOptions,\n type SpawnProcessPromise,\n type SpawnProcessResult,\n} from '@expo/repack-app';\n\nimport { COMMON_FASTLANE_ENV } from '../../common/fastlane';\nimport IosCredentialsManager from '../utils/ios/credentials/manager';\n\nexport function createRepackBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'repack',\n name: 'Repack app',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'source_app_path',\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n required: true,\n }),\n BuildStepInput.createProvider({\n id: 'platform',\n required: false,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n BuildStepInput.createProvider({\n id: 'output_path',\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n required: false,\n }),\n BuildStepInput.createProvider({\n id: 'embed_bundle_assets',\n allowedValueTypeName: BuildStepInputValueTypeName.BOOLEAN,\n required: false,\n }),\n ],\n outputProviders: [\n BuildStepOutput.createProvider({\n id: 'output_path',\n required: true,\n }),\n ],\n fn: async (stepsCtx, { inputs, outputs, env }) => {\n const projectRoot = stepsCtx.workingDirectory;\n const verbose = stepsCtx.global.env['EAS_VERBOSE'] === '1';\n\n const platform =\n (inputs.platform.value as Platform) ?? stepsCtx.global.staticContext.job.platform;\n if (![Platform.ANDROID, Platform.IOS].includes(platform)) {\n throw new Error(\n `Unsupported platform: ${platform}. Platform must be \"${Platform.ANDROID}\" or \"${Platform.IOS}\"`\n );\n }\n\n const repackSpawnAsync = createSpawnAsyncStepAdapter({ verbose, logger: stepsCtx.logger });\n\n const tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), `repack-`));\n const workingDirectory = path.join(tmpDir, 'working-directory');\n await fs.promises.mkdir(workingDirectory);\n stepsCtx.logger.info(`Created temporary working directory: ${workingDirectory}`);\n\n const sourceAppPath = inputs.source_app_path.value as string;\n const outputPath =\n (inputs.output_path.value as string) ??\n path.join(tmpDir, `repacked-${randomUUID()}${path.extname(sourceAppPath)}`);\n const exportEmbedOptions = inputs.embed_bundle_assets.value\n ? {\n sourcemapOutput: undefined,\n }\n : undefined;\n\n stepsCtx.logger.info('Repacking the app...');\n switch (platform) {\n case Platform.IOS:\n await repackAppIosAsync({\n platform: 'ios',\n projectRoot,\n sourceAppPath,\n outputPath,\n workingDirectory,\n exportEmbedOptions,\n iosSigningOptions: await resolveIosSigningOptionsAsync({\n job: stepsCtx.global.staticContext.job,\n logger: stepsCtx.logger,\n }),\n logger: stepsCtx.logger,\n spawnAsync: repackSpawnAsync,\n verbose,\n env: {\n ...COMMON_FASTLANE_ENV,\n ...env,\n },\n });\n break;\n case Platform.ANDROID:\n {\n const androidSigningOptions = await resolveAndroidSigningOptionsAsync({\n job: stepsCtx.global.staticContext.job,\n tmpDir,\n });\n\n try {\n await repackAppAndroidAsync({\n platform: 'android',\n projectRoot,\n sourceAppPath,\n outputPath,\n workingDirectory,\n exportEmbedOptions,\n androidSigningOptions,\n logger: stepsCtx.logger,\n spawnAsync: repackSpawnAsync,\n verbose,\n env,\n });\n } finally {\n const keyStorePath = androidSigningOptions?.keyStorePath;\n if (keyStorePath) {\n await fs.promises.rm(keyStorePath, { force: true });\n }\n }\n }\n break;\n }\n\n stepsCtx.logger.info(`Repacked the app to ${outputPath}`);\n outputs.output_path.set(outputPath);\n },\n });\n}\n\n/**\n * Creates `@expo/steps` based spawnAsync for repack.\n */\nfunction createSpawnAsyncStepAdapter({\n verbose,\n logger,\n}: {\n verbose: boolean;\n logger: bunyan;\n}): SpawnProcessAsync {\n return function repackSpawnAsync(\n command: string,\n args: string[],\n options?: SpawnProcessOptions\n ): SpawnProcessPromise<SpawnProcessResult> {\n return spawnAsync(command, args, {\n ...options,\n ...(verbose ? { logger, stdio: 'pipe' } : { logger: undefined }),\n });\n };\n}\n\n/**\n * Resolves Android signing options from the job secrets.\n */\nexport async function resolveAndroidSigningOptionsAsync({\n job,\n tmpDir,\n}: {\n job: Job;\n tmpDir: string;\n}): Promise<AndroidSigningOptions | undefined> {\n const androidJob = job as Android.Job;\n const buildCredentials = androidJob.secrets?.buildCredentials;\n if (buildCredentials?.keystore.dataBase64 == null) {\n return undefined;\n }\n const keyStorePath = path.join(tmpDir, `keystore-${randomUUID()}`);\n await fs.promises.writeFile(\n keyStorePath,\n Buffer.from(buildCredentials.keystore.dataBase64, 'base64')\n );\n\n const keyStorePassword = `pass:${buildCredentials.keystore.keystorePassword}`;\n const keyAlias = buildCredentials.keystore.keyAlias;\n const keyPassword = buildCredentials.keystore.keyPassword\n ? `pass:${buildCredentials.keystore.keyPassword}`\n : undefined;\n return {\n keyStorePath,\n keyStorePassword,\n keyAlias,\n keyPassword,\n };\n}\n\n/**\n * Resolves iOS signing options from the job secrets.\n */\nexport async function resolveIosSigningOptionsAsync({\n job,\n logger,\n}: {\n job: Job;\n logger: bunyan;\n}): Promise<IosSigningOptions | undefined> {\n const iosJob = job as Ios.Job;\n const buildCredentials = iosJob.secrets?.buildCredentials;\n if (iosJob.simulator || buildCredentials == null) {\n return undefined;\n }\n const credentialsManager = new IosCredentialsManager(buildCredentials);\n const credentials = await credentialsManager.prepare(logger);\n\n const provisioningProfile: Record<string, string> = {};\n for (const profile of Object.values(credentials.targetProvisioningProfiles)) {\n provisioningProfile[profile.bundleIdentifier] = profile.path;\n }\n return {\n provisioningProfile,\n keychainPath: credentials.keychainPath,\n signingIdentity: credentials.applicationTargetProvisioningProfile.data.certificateCommonName,\n };\n}\n"]}
1
+ {"version":3,"file":"repack.js","sourceRoot":"","sources":["../../../src/steps/functions/repack.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport resolveFrom from 'resolve-from';\nimport { Platform, type Android, type Ios, type Job } from '@expo/eas-build-job';\nimport { type bunyan } from '@expo/logger';\nimport {\n BuildFunction,\n BuildStepInput,\n BuildStepInputValueTypeName,\n BuildStepOutput,\n spawnAsync,\n} from '@expo/steps';\nimport {\n type AndroidSigningOptions,\n type IosSigningOptions,\n type SpawnProcessAsync,\n type SpawnProcessOptions,\n type SpawnProcessPromise,\n type SpawnProcessResult,\n} from '@expo/repack-app';\n\nimport { COMMON_FASTLANE_ENV } from '../../common/fastlane';\nimport IosCredentialsManager from '../utils/ios/credentials/manager';\n\nexport function createRepackBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'repack',\n name: 'Repack app',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'source_app_path',\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n required: true,\n }),\n BuildStepInput.createProvider({\n id: 'platform',\n required: false,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n BuildStepInput.createProvider({\n id: 'output_path',\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n required: false,\n }),\n BuildStepInput.createProvider({\n id: 'embed_bundle_assets',\n allowedValueTypeName: BuildStepInputValueTypeName.BOOLEAN,\n required: false,\n }),\n BuildStepInput.createProvider({\n id: 'repack_version',\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n required: false,\n defaultValue: 'latest',\n }),\n ],\n outputProviders: [\n BuildStepOutput.createProvider({\n id: 'output_path',\n required: true,\n }),\n ],\n fn: async (stepsCtx, { inputs, outputs, env }) => {\n const projectRoot = stepsCtx.workingDirectory;\n const verbose = stepsCtx.global.env['EAS_VERBOSE'] === '1';\n\n const platform =\n (inputs.platform.value as Platform) ?? stepsCtx.global.staticContext.job.platform;\n if (![Platform.ANDROID, Platform.IOS].includes(platform)) {\n throw new Error(\n `Unsupported platform: ${platform}. Platform must be \"${Platform.ANDROID}\" or \"${Platform.IOS}\"`\n );\n }\n\n const repackSpawnAsync = createSpawnAsyncStepAdapter({ verbose, logger: stepsCtx.logger });\n\n const tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), `repack-`));\n const workingDirectory = path.join(tmpDir, 'working-directory');\n await fs.promises.mkdir(workingDirectory);\n stepsCtx.logger.info(`Created temporary working directory: ${workingDirectory}`);\n\n const sourceAppPath = inputs.source_app_path.value as string;\n const outputPath =\n (inputs.output_path.value as string) ??\n path.join(tmpDir, `repacked-${randomUUID()}${path.extname(sourceAppPath)}`);\n const exportEmbedOptions = inputs.embed_bundle_assets.value\n ? {\n sourcemapOutput: undefined,\n }\n : undefined;\n\n stepsCtx.logger.info(`Using repack tool version: ${inputs.repack_version.value}`);\n const repackApp = await installAndImportRepackAsync(inputs.repack_version.value as string);\n const { repackAppIosAsync, repackAppAndroidAsync } = repackApp;\n\n stepsCtx.logger.info('Repacking the app...');\n switch (platform) {\n case Platform.IOS:\n await repackAppIosAsync({\n platform: 'ios',\n projectRoot,\n sourceAppPath,\n outputPath,\n workingDirectory,\n exportEmbedOptions,\n iosSigningOptions: await resolveIosSigningOptionsAsync({\n job: stepsCtx.global.staticContext.job,\n logger: stepsCtx.logger,\n }),\n logger: stepsCtx.logger,\n spawnAsync: repackSpawnAsync,\n verbose,\n env: {\n ...COMMON_FASTLANE_ENV,\n ...env,\n },\n });\n break;\n case Platform.ANDROID:\n {\n const androidSigningOptions = await resolveAndroidSigningOptionsAsync({\n job: stepsCtx.global.staticContext.job,\n tmpDir,\n });\n\n try {\n await repackAppAndroidAsync({\n platform: 'android',\n projectRoot,\n sourceAppPath,\n outputPath,\n workingDirectory,\n exportEmbedOptions,\n androidSigningOptions,\n logger: stepsCtx.logger,\n spawnAsync: repackSpawnAsync,\n verbose,\n env,\n });\n } finally {\n const keyStorePath = androidSigningOptions?.keyStorePath;\n if (keyStorePath) {\n await fs.promises.rm(keyStorePath, { force: true });\n }\n }\n }\n break;\n }\n\n stepsCtx.logger.info(`Repacked the app to ${outputPath}`);\n outputs.output_path.set(outputPath);\n },\n });\n}\n\n/**\n * Install `@expo/repack-app` in a sandbox directory and import it.\n */\nasync function installAndImportRepackAsync(\n version: string = 'latest'\n): Promise<typeof import('@expo/repack-app')> {\n const sandbox = await fs.promises.mkdtemp(path.join(os.tmpdir(), `repack-package-root-`));\n await spawnAsync('yarn', ['add', `@expo/repack-app@${version}`], {\n stdio: 'inherit',\n cwd: sandbox,\n });\n return require(resolveFrom(sandbox, '@expo/repack-app'));\n}\n\n/**\n * Creates `@expo/steps` based spawnAsync for repack.\n */\nfunction createSpawnAsyncStepAdapter({\n verbose,\n logger,\n}: {\n verbose: boolean;\n logger: bunyan;\n}): SpawnProcessAsync {\n return function repackSpawnAsync(\n command: string,\n args: string[],\n options?: SpawnProcessOptions\n ): SpawnProcessPromise<SpawnProcessResult> {\n const promise = spawnAsync(command, args, {\n ...options,\n ...(verbose ? { logger, stdio: 'pipe' } : { logger: undefined }),\n });\n const child = promise.child;\n const wrappedPromise = promise.catch((error) => {\n logger.error(`Error while running command: ${command} ${args.join(' ')}`);\n logger.error(`stdout: ${error.stdout}`);\n logger.error(`stderr: ${error.stderr}`);\n throw error;\n }) as SpawnProcessPromise<SpawnProcessResult>;\n wrappedPromise.child = child;\n return wrappedPromise;\n };\n}\n\n/**\n * Resolves Android signing options from the job secrets.\n */\nexport async function resolveAndroidSigningOptionsAsync({\n job,\n tmpDir,\n}: {\n job: Job;\n tmpDir: string;\n}): Promise<AndroidSigningOptions | undefined> {\n const androidJob = job as Android.Job;\n const buildCredentials = androidJob.secrets?.buildCredentials;\n if (buildCredentials?.keystore.dataBase64 == null) {\n return undefined;\n }\n const keyStorePath = path.join(tmpDir, `keystore-${randomUUID()}`);\n await fs.promises.writeFile(\n keyStorePath,\n Buffer.from(buildCredentials.keystore.dataBase64, 'base64')\n );\n\n const keyStorePassword = `pass:${buildCredentials.keystore.keystorePassword}`;\n const keyAlias = buildCredentials.keystore.keyAlias;\n const keyPassword = buildCredentials.keystore.keyPassword\n ? `pass:${buildCredentials.keystore.keyPassword}`\n : undefined;\n return {\n keyStorePath,\n keyStorePassword,\n keyAlias,\n keyPassword,\n };\n}\n\n/**\n * Resolves iOS signing options from the job secrets.\n */\nexport async function resolveIosSigningOptionsAsync({\n job,\n logger,\n}: {\n job: Job;\n logger: bunyan;\n}): Promise<IosSigningOptions | undefined> {\n const iosJob = job as Ios.Job;\n const buildCredentials = iosJob.secrets?.buildCredentials;\n if (iosJob.simulator || buildCredentials == null) {\n return undefined;\n }\n const credentialsManager = new IosCredentialsManager(buildCredentials);\n const credentials = await credentialsManager.prepare(logger);\n\n const provisioningProfile: Record<string, string> = {};\n for (const profile of Object.values(credentials.targetProvisioningProfiles)) {\n provisioningProfile[profile.bundleIdentifier] = profile.path;\n }\n return {\n provisioningProfile,\n keychainPath: credentials.keychainPath,\n signingIdentity: credentials.applicationTargetProvisioningProfile.data.certificateCommonName,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/build-tools",
3
- "version": "1.0.191",
3
+ "version": "1.0.192",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -30,7 +30,6 @@
30
30
  "@expo/logger": "1.0.117",
31
31
  "@expo/package-manager": "1.7.0",
32
32
  "@expo/plist": "^0.2.0",
33
- "@expo/repack-app": "~0.2.5",
34
33
  "@expo/results": "^1.0.0",
35
34
  "@expo/steps": "1.0.190",
36
35
  "@expo/template-file": "1.0.117",
@@ -53,6 +52,7 @@
53
52
  "tar": "^7.4.3"
54
53
  },
55
54
  "devDependencies": {
55
+ "@expo/repack-app": "~0.2.5",
56
56
  "@types/fs-extra": "^11.0.4",
57
57
  "@types/jest": "^29.5.12",
58
58
  "@types/lodash": "^4.17.4",
@@ -76,5 +76,5 @@
76
76
  "node": "20.14.0",
77
77
  "yarn": "1.22.21"
78
78
  },
79
- "gitHead": "a8fc64740038bd248deb126b36e70a45841c255f"
79
+ "gitHead": "899937571f8d895d27f8ac960ff756a28271862a"
80
80
  }