@expo/build-tools 1.0.123 → 1.0.125

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.
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.installNodeModules = exports.createInstallNodeModulesBuildFunction = void 0;
7
+ const path_1 = __importDefault(require("path"));
7
8
  const steps_1 = require("@expo/steps");
8
9
  const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
9
10
  const packageManager_1 = require("../../utils/packageManager");
@@ -21,8 +22,12 @@ function createInstallNodeModulesBuildFunction() {
21
22
  exports.createInstallNodeModulesBuildFunction = createInstallNodeModulesBuildFunction;
22
23
  async function installNodeModules(stepCtx, env) {
23
24
  const { logger } = stepCtx;
24
- const packageManager = (0, packageManager_1.resolvePackageManager)(stepCtx.global.projectTargetDirectory);
25
+ const packageManager = (0, packageManager_1.resolvePackageManager)(stepCtx.workingDirectory);
25
26
  const packagerRunDir = (0, packageManager_1.findPackagerRootDir)(stepCtx.workingDirectory);
27
+ if (packagerRunDir !== stepCtx.workingDirectory) {
28
+ const relativeReactNativeProjectDirectory = path_1.default.relative(stepCtx.global.projectTargetDirectory, stepCtx.workingDirectory);
29
+ logger.info(`We detected that '${relativeReactNativeProjectDirectory}' is a ${packageManager} workspace`);
30
+ }
26
31
  let args = ['install'];
27
32
  if (packageManager === packageManager_1.PackageManager.PNPM) {
28
33
  args = ['install', '--no-frozen-lockfile'];
@@ -1 +1 @@
1
- {"version":3,"file":"installNodeModules.js","sourceRoot":"","sources":["../../../src/steps/functions/installNodeModules.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA0D;AAE1D,sEAAuC;AAEvC,+DAIoC;AACpC,iDAAmD;AAEnD,SAAgB,qCAAqC;IACnD,OAAO,IAAI,qBAAa,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,sBAAsB;QAC5B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;YAC7B,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AATD,sFASC;AAEM,KAAK,UAAU,kBAAkB,CACtC,OAAyB,EACzB,GAAiB;IAEjB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,cAAc,GAAG,IAAA,sCAAqB,EAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACpF,MAAM,cAAc,GAAG,IAAA,oCAAmB,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrE,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,IAAI,cAAc,KAAK,+BAAc,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,cAAc,KAAK,+BAAc,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAY,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,YAAY,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,cAAc,YAAY,CAAC,CAAC;IAC5F,MAAM,IAAA,sBAAK,EAAC,cAAc,EAAE,IAAI,EAAE;QAChC,GAAG,EAAE,cAAc;QACnB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAtBD,gDAsBC","sourcesContent":["import { BuildFunction, BuildStepEnv } from '@expo/steps';\nimport { BuildStepContext } from '@expo/steps/dist_esm/BuildStepContext';\nimport spawn from '@expo/turtle-spawn';\n\nimport {\n findPackagerRootDir,\n PackageManager,\n resolvePackageManager,\n} from '../../utils/packageManager';\nimport { isUsingYarn2 } from '../../utils/project';\n\nexport function createInstallNodeModulesBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'install_node_modules',\n name: 'Install node modules',\n fn: async (stepCtx, { env }) => {\n await installNodeModules(stepCtx, env);\n },\n });\n}\n\nexport async function installNodeModules(\n stepCtx: BuildStepContext,\n env: BuildStepEnv\n): Promise<void> {\n const { logger } = stepCtx;\n const packageManager = resolvePackageManager(stepCtx.global.projectTargetDirectory);\n const packagerRunDir = findPackagerRootDir(stepCtx.workingDirectory);\n let args = ['install'];\n if (packageManager === PackageManager.PNPM) {\n args = ['install', '--no-frozen-lockfile'];\n } else if (packageManager === PackageManager.YARN) {\n const isYarn2 = await isUsingYarn2(stepCtx.workingDirectory);\n if (isYarn2) {\n args = ['install', '--no-immutable', '--inline-builds'];\n }\n }\n logger.info(`Running \"${packageManager} ${args.join(' ')}\" in ${packagerRunDir} directory`);\n await spawn(packageManager, args, {\n cwd: packagerRunDir,\n logger: stepCtx.logger,\n env,\n });\n}\n"]}
1
+ {"version":3,"file":"installNodeModules.js","sourceRoot":"","sources":["../../../src/steps/functions/installNodeModules.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,uCAA0D;AAE1D,sEAAuC;AAEvC,+DAIoC;AACpC,iDAAmD;AAEnD,SAAgB,qCAAqC;IACnD,OAAO,IAAI,qBAAa,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,sBAAsB;QAC5B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;YAC7B,MAAM,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AATD,sFASC;AAEM,KAAK,UAAU,kBAAkB,CACtC,OAAyB,EACzB,GAAiB;IAEjB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,cAAc,GAAG,IAAA,sCAAqB,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvE,MAAM,cAAc,GAAG,IAAA,oCAAmB,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAErE,IAAI,cAAc,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,mCAAmC,GAAG,cAAI,CAAC,QAAQ,CACvD,OAAO,CAAC,MAAM,CAAC,sBAAsB,EACrC,OAAO,CAAC,gBAAgB,CACzB,CAAC;QACF,MAAM,CAAC,IAAI,CACT,qBAAqB,mCAAmC,UAAU,cAAc,YAAY,CAC7F,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,IAAI,cAAc,KAAK,+BAAc,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,cAAc,KAAK,+BAAc,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAY,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,YAAY,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,cAAc,YAAY,CAAC,CAAC;IAC5F,MAAM,IAAA,sBAAK,EAAC,cAAc,EAAE,IAAI,EAAE;QAChC,GAAG,EAAE,cAAc;QACnB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG;KACJ,CAAC,CAAC;AACL,CAAC;AAjCD,gDAiCC","sourcesContent":["import path from 'path';\n\nimport { BuildFunction, BuildStepEnv } from '@expo/steps';\nimport { BuildStepContext } from '@expo/steps/dist_esm/BuildStepContext';\nimport spawn from '@expo/turtle-spawn';\n\nimport {\n findPackagerRootDir,\n PackageManager,\n resolvePackageManager,\n} from '../../utils/packageManager';\nimport { isUsingYarn2 } from '../../utils/project';\n\nexport function createInstallNodeModulesBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'install_node_modules',\n name: 'Install node modules',\n fn: async (stepCtx, { env }) => {\n await installNodeModules(stepCtx, env);\n },\n });\n}\n\nexport async function installNodeModules(\n stepCtx: BuildStepContext,\n env: BuildStepEnv\n): Promise<void> {\n const { logger } = stepCtx;\n const packageManager = resolvePackageManager(stepCtx.workingDirectory);\n const packagerRunDir = findPackagerRootDir(stepCtx.workingDirectory);\n\n if (packagerRunDir !== stepCtx.workingDirectory) {\n const relativeReactNativeProjectDirectory = path.relative(\n stepCtx.global.projectTargetDirectory,\n stepCtx.workingDirectory\n );\n logger.info(\n `We detected that '${relativeReactNativeProjectDirectory}' is a ${packageManager} workspace`\n );\n }\n\n let args = ['install'];\n if (packageManager === PackageManager.PNPM) {\n args = ['install', '--no-frozen-lockfile'];\n } else if (packageManager === PackageManager.YARN) {\n const isYarn2 = await isUsingYarn2(stepCtx.workingDirectory);\n if (isYarn2) {\n args = ['install', '--no-immutable', '--inline-builds'];\n }\n }\n logger.info(`Running \"${packageManager} ${args.join(' ')}\" in ${packagerRunDir} directory`);\n await spawn(packageManager, args, {\n cwd: packagerRunDir,\n logger: stepCtx.logger,\n env,\n });\n}\n"]}
@@ -30,7 +30,7 @@ function createPrebuildBuildFunction() {
30
30
  fn: async (stepCtx, { inputs, env }) => {
31
31
  const { logger } = stepCtx;
32
32
  const appleTeamId = inputs.apple_team_id.value;
33
- const packageManager = (0, packageManager_1.resolvePackageManager)(stepCtx.global.projectTargetDirectory);
33
+ const packageManager = (0, packageManager_1.resolvePackageManager)(stepCtx.workingDirectory);
34
34
  (0, assert_1.default)(stepCtx.global.staticContext.job, 'Job is not defined');
35
35
  const job = stepCtx.global.staticContext.job;
36
36
  (0, assert_1.default)(job.platform, 'Prebuild command is not supported in generic jobs.');
@@ -1 +1 @@
1
- {"version":3,"file":"prebuild.js","sourceRoot":"","sources":["../../../src/steps/functions/prebuild.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\n\nimport { Platform } from '@expo/config';\nimport { BuildJob } from '@expo/eas-build-job';\nimport { BuildFunction, BuildStepInput, BuildStepInputValueTypeName } from '@expo/steps';\nimport spawn from '@expo/turtle-spawn';\n\nimport { PackageManager, resolvePackageManager } from '../../utils/packageManager';\n\nimport { installNodeModules } from './installNodeModules';\n\ntype PrebuildOptions = {\n clean?: boolean;\n};\n\nexport function createPrebuildBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'prebuild',\n name: 'Prebuild',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'clean',\n defaultValue: false,\n allowedValueTypeName: BuildStepInputValueTypeName.BOOLEAN,\n required: true,\n }),\n BuildStepInput.createProvider({\n id: 'apple_team_id',\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n required: false,\n }),\n ],\n fn: async (stepCtx, { inputs, env }) => {\n const { logger } = stepCtx;\n const appleTeamId = inputs.apple_team_id.value as string | undefined;\n const packageManager = resolvePackageManager(stepCtx.global.projectTargetDirectory);\n\n assert(stepCtx.global.staticContext.job, 'Job is not defined');\n const job = stepCtx.global.staticContext.job;\n assert(job.platform, 'Prebuild command is not supported in generic jobs.');\n const prebuildCommandArgs = getPrebuildCommandArgs(job, {\n clean: inputs.clean.value as boolean,\n });\n const argsWithExpo = ['expo', ...prebuildCommandArgs];\n const options = {\n cwd: stepCtx.workingDirectory,\n logger,\n env: {\n EXPO_IMAGE_UTILS_NO_SHARP: '1',\n ...env,\n ...(appleTeamId ? { APPLE_TEAM_ID: appleTeamId } : {}),\n },\n };\n if (packageManager === PackageManager.NPM) {\n await spawn('npx', argsWithExpo, options);\n } else if (packageManager === PackageManager.YARN) {\n await spawn('yarn', argsWithExpo, options);\n } else if (packageManager === PackageManager.PNPM) {\n await spawn('pnpm', argsWithExpo, options);\n } else if (packageManager === PackageManager.BUN) {\n await spawn('bun', argsWithExpo, options);\n } else {\n throw new Error(`Unsupported package manager: ${packageManager}`);\n }\n await installNodeModules(stepCtx, env);\n },\n });\n}\n\nfunction getPrebuildCommandArgs(job: BuildJob, { clean }: PrebuildOptions): string[] {\n if (job.experimental?.prebuildCommand) {\n return sanitizeUserDefinedPrebuildCommand(job.experimental.prebuildCommand, job.platform, {\n clean,\n });\n }\n return ['prebuild', '--no-install', '--platform', job.platform, ...(clean ? ['--clean'] : [])];\n}\n\n// TODO: deprecate prebuildCommand in eas.json\nfunction sanitizeUserDefinedPrebuildCommand(\n userDefinedPrebuildCommand: string,\n platform: Platform,\n { clean }: PrebuildOptions\n): string[] {\n let prebuildCommand = userDefinedPrebuildCommand;\n if (!prebuildCommand.match(/(?:--platform| -p)/)) {\n prebuildCommand = `${prebuildCommand} --platform ${platform}`;\n }\n if (clean) {\n prebuildCommand = `${prebuildCommand} --clean`;\n }\n const npxCommandPrefix = 'npx ';\n const expoCommandPrefix = 'expo ';\n const expoCliCommandPrefix = 'expo-cli ';\n if (prebuildCommand.startsWith(npxCommandPrefix)) {\n prebuildCommand = prebuildCommand.substring(npxCommandPrefix.length).trim();\n }\n if (prebuildCommand.startsWith(expoCommandPrefix)) {\n prebuildCommand = prebuildCommand.substring(expoCommandPrefix.length).trim();\n }\n if (prebuildCommand.startsWith(expoCliCommandPrefix)) {\n prebuildCommand = prebuildCommand.substring(expoCliCommandPrefix.length).trim();\n }\n return prebuildCommand.split(' ');\n}\n"]}
1
+ {"version":3,"file":"prebuild.js","sourceRoot":"","sources":["../../../src/steps/functions/prebuild.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\n\nimport { Platform } from '@expo/config';\nimport { BuildJob } from '@expo/eas-build-job';\nimport { BuildFunction, BuildStepInput, BuildStepInputValueTypeName } from '@expo/steps';\nimport spawn from '@expo/turtle-spawn';\n\nimport { PackageManager, resolvePackageManager } from '../../utils/packageManager';\n\nimport { installNodeModules } from './installNodeModules';\n\ntype PrebuildOptions = {\n clean?: boolean;\n};\n\nexport function createPrebuildBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'prebuild',\n name: 'Prebuild',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'clean',\n defaultValue: false,\n allowedValueTypeName: BuildStepInputValueTypeName.BOOLEAN,\n required: true,\n }),\n BuildStepInput.createProvider({\n id: 'apple_team_id',\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n required: false,\n }),\n ],\n fn: async (stepCtx, { inputs, env }) => {\n const { logger } = stepCtx;\n const appleTeamId = inputs.apple_team_id.value as string | undefined;\n const packageManager = resolvePackageManager(stepCtx.workingDirectory);\n\n assert(stepCtx.global.staticContext.job, 'Job is not defined');\n const job = stepCtx.global.staticContext.job;\n assert(job.platform, 'Prebuild command is not supported in generic jobs.');\n const prebuildCommandArgs = getPrebuildCommandArgs(job, {\n clean: inputs.clean.value as boolean,\n });\n const argsWithExpo = ['expo', ...prebuildCommandArgs];\n const options = {\n cwd: stepCtx.workingDirectory,\n logger,\n env: {\n EXPO_IMAGE_UTILS_NO_SHARP: '1',\n ...env,\n ...(appleTeamId ? { APPLE_TEAM_ID: appleTeamId } : {}),\n },\n };\n if (packageManager === PackageManager.NPM) {\n await spawn('npx', argsWithExpo, options);\n } else if (packageManager === PackageManager.YARN) {\n await spawn('yarn', argsWithExpo, options);\n } else if (packageManager === PackageManager.PNPM) {\n await spawn('pnpm', argsWithExpo, options);\n } else if (packageManager === PackageManager.BUN) {\n await spawn('bun', argsWithExpo, options);\n } else {\n throw new Error(`Unsupported package manager: ${packageManager}`);\n }\n await installNodeModules(stepCtx, env);\n },\n });\n}\n\nfunction getPrebuildCommandArgs(job: BuildJob, { clean }: PrebuildOptions): string[] {\n if (job.experimental?.prebuildCommand) {\n return sanitizeUserDefinedPrebuildCommand(job.experimental.prebuildCommand, job.platform, {\n clean,\n });\n }\n return ['prebuild', '--no-install', '--platform', job.platform, ...(clean ? ['--clean'] : [])];\n}\n\n// TODO: deprecate prebuildCommand in eas.json\nfunction sanitizeUserDefinedPrebuildCommand(\n userDefinedPrebuildCommand: string,\n platform: Platform,\n { clean }: PrebuildOptions\n): string[] {\n let prebuildCommand = userDefinedPrebuildCommand;\n if (!prebuildCommand.match(/(?:--platform| -p)/)) {\n prebuildCommand = `${prebuildCommand} --platform ${platform}`;\n }\n if (clean) {\n prebuildCommand = `${prebuildCommand} --clean`;\n }\n const npxCommandPrefix = 'npx ';\n const expoCommandPrefix = 'expo ';\n const expoCliCommandPrefix = 'expo-cli ';\n if (prebuildCommand.startsWith(npxCommandPrefix)) {\n prebuildCommand = prebuildCommand.substring(npxCommandPrefix.length).trim();\n }\n if (prebuildCommand.startsWith(expoCommandPrefix)) {\n prebuildCommand = prebuildCommand.substring(expoCommandPrefix.length).trim();\n }\n if (prebuildCommand.startsWith(expoCliCommandPrefix)) {\n prebuildCommand = prebuildCommand.substring(expoCliCommandPrefix.length).trim();\n }\n return prebuildCommand.split(' ');\n}\n"]}
@@ -18,4 +18,3 @@ export declare function uploadApplicationArchive(ctx: BuildContext<Job>, { logge
18
18
  patternOrPath: string;
19
19
  rootDir: string;
20
20
  }): Promise<void>;
21
- export declare function formatBytes(bytes: number): string;
@@ -3,11 +3,12 @@ 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.formatBytes = exports.uploadApplicationArchive = exports.maybeFindAndUploadBuildArtifacts = exports.findArtifacts = exports.FindArtifactsError = void 0;
6
+ exports.uploadApplicationArchive = exports.maybeFindAndUploadBuildArtifacts = exports.findArtifacts = exports.FindArtifactsError = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const fs_extra_1 = __importDefault(require("fs-extra"));
9
9
  const fast_glob_1 = __importDefault(require("fast-glob"));
10
10
  const eas_build_job_1 = require("@expo/eas-build-job");
11
+ const promise_limit_1 = __importDefault(require("promise-limit"));
11
12
  class FindArtifactsError extends Error {
12
13
  }
13
14
  exports.FindArtifactsError = FindArtifactsError;
@@ -69,8 +70,9 @@ async function maybeFindAndUploadBuildArtifacts(ctx, { logger }) {
69
70
  })))).flat();
70
71
  const artifactsSizes = await getArtifactsSizes(buildArtifacts);
71
72
  logger.info(`Build artifacts:`);
72
- for (const [path, size] of Object.entries(artifactsSizes)) {
73
- logger.info(` - ${path} (${formatBytes(size)})`);
73
+ for (const artifactPath of buildArtifacts) {
74
+ const maybeSize = artifactsSizes[artifactPath];
75
+ logger.info(` - ${artifactPath}${maybeSize ? ` (${formatBytes(maybeSize)})` : ''}`);
74
76
  }
75
77
  logger.info('Uploading build artifacts...');
76
78
  await ctx.uploadArtifact({
@@ -90,8 +92,9 @@ async function uploadApplicationArchive(ctx, { logger, patternOrPath, rootDir, }
90
92
  const applicationArchives = await findArtifacts({ rootDir, patternOrPath, logger });
91
93
  const artifactsSizes = await getArtifactsSizes(applicationArchives);
92
94
  logger.info(`Application archives:`);
93
- for (const [path, size] of Object.entries(artifactsSizes)) {
94
- logger.info(` - ${path} (${formatBytes(size)})`);
95
+ for (const artifactPath of applicationArchives) {
96
+ const maybeSize = artifactsSizes[artifactPath];
97
+ logger.info(` - ${artifactPath}${maybeSize ? ` (${formatBytes(maybeSize)})` : ''}`);
95
98
  }
96
99
  logger.info('Uploading application archive...');
97
100
  await ctx.uploadArtifact({
@@ -106,11 +109,30 @@ exports.uploadApplicationArchive = uploadApplicationArchive;
106
109
  async function getArtifactsSizes(artifacts) {
107
110
  const artifactsSizes = {};
108
111
  await Promise.all(artifacts.map(async (artifact) => {
109
- const { size } = await fs_extra_1.default.stat(artifact);
110
- artifactsSizes[artifact] = size;
112
+ artifactsSizes[artifact] = await getArtifactSize(artifact);
111
113
  }));
112
114
  return artifactsSizes;
113
115
  }
116
+ async function getArtifactSize(artifact) {
117
+ try {
118
+ const stat = await fs_extra_1.default.stat(artifact);
119
+ if (!stat.isDirectory()) {
120
+ return stat.size;
121
+ }
122
+ else {
123
+ const files = await (0, fast_glob_1.default)('**/*', { cwd: artifact, onlyFiles: true });
124
+ if (files.length > 100000) {
125
+ return undefined;
126
+ }
127
+ const getFileSizePromiseLimit = (0, promise_limit_1.default)(100);
128
+ const sizes = await Promise.all(files.map((file) => getFileSizePromiseLimit(async () => (await fs_extra_1.default.stat(path_1.default.join(artifact, file))).size)));
129
+ return sizes.reduce((acc, size) => acc + size, 0);
130
+ }
131
+ }
132
+ catch {
133
+ return undefined;
134
+ }
135
+ }
114
136
  // same as in
115
137
  // https://github.com/expo/eas-cli/blob/f0e3b648a1634266e7d723bd49a84866ab9b5801/packages/eas-cli/src/utils/files.ts#L33-L60
116
138
  function formatBytes(bytes) {
@@ -141,5 +163,4 @@ function formatBytes(bytes) {
141
163
  }
142
164
  return `${Math.floor(bytes / 1024)} GB`;
143
165
  }
144
- exports.formatBytes = formatBytes;
145
166
  //# sourceMappingURL=artifacts.js.map
@@ -1 +1 @@
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 const artifactsSizes = await getArtifactsSizes(buildArtifacts);\n logger.info(`Build artifacts:`);\n for (const [path, size] of Object.entries(artifactsSizes)) {\n logger.info(` - ${path} (${formatBytes(size)})`);\n }\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 const artifactsSizes = await getArtifactsSizes(applicationArchives);\n logger.info(`Application archives:`);\n for (const [path, size] of Object.entries(artifactsSizes)) {\n logger.info(` - ${path} (${formatBytes(size)})`);\n }\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\nasync function getArtifactsSizes(artifacts: string[]): Promise<Record<string, number>> {\n const artifactsSizes: Record<string, number> = {};\n await Promise.all(\n artifacts.map(async (artifact) => {\n const { size } = await fs.stat(artifact);\n artifactsSizes[artifact] = size;\n })\n );\n return artifactsSizes;\n}\n\n// same as in\n// https://github.com/expo/eas-cli/blob/f0e3b648a1634266e7d723bd49a84866ab9b5801/packages/eas-cli/src/utils/files.ts#L33-L60\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) {\n return `0`;\n }\n let multiplier = 1;\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes)} B`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} KB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / 1024)} KB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} MB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / multiplier)} MB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} GB`;\n }\n return `${Math.floor(bytes / 1024)} GB`;\n}\n"]}
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';\nimport promiseLimit from 'promise-limit';\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 const artifactsSizes = await getArtifactsSizes(buildArtifacts);\n logger.info(`Build artifacts:`);\n for (const artifactPath of buildArtifacts) {\n const maybeSize = artifactsSizes[artifactPath];\n logger.info(` - ${artifactPath}${maybeSize ? ` (${formatBytes(maybeSize)})` : ''}`);\n }\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 const artifactsSizes = await getArtifactsSizes(applicationArchives);\n logger.info(`Application archives:`);\n for (const artifactPath of applicationArchives) {\n const maybeSize = artifactsSizes[artifactPath];\n logger.info(` - ${artifactPath}${maybeSize ? ` (${formatBytes(maybeSize)})` : ''}`);\n }\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\nasync function getArtifactsSizes(artifacts: string[]): Promise<Record<string, number | undefined>> {\n const artifactsSizes: Record<string, number | undefined> = {};\n await Promise.all(\n artifacts.map(async (artifact) => {\n artifactsSizes[artifact] = await getArtifactSize(artifact);\n })\n );\n return artifactsSizes;\n}\n\nasync function getArtifactSize(artifact: string): Promise<number | undefined> {\n try {\n const stat = await fs.stat(artifact);\n if (!stat.isDirectory()) {\n return stat.size;\n } else {\n const files = await fg('**/*', { cwd: artifact, onlyFiles: true });\n\n if (files.length > 100_000) {\n return undefined;\n }\n\n const getFileSizePromiseLimit = promiseLimit<number>(100);\n const sizes = await Promise.all(\n files.map((file) =>\n getFileSizePromiseLimit(async () => (await fs.stat(path.join(artifact, file))).size)\n )\n );\n return sizes.reduce((acc, size) => acc + size, 0);\n }\n } catch {\n return undefined;\n }\n}\n\n// same as in\n// https://github.com/expo/eas-cli/blob/f0e3b648a1634266e7d723bd49a84866ab9b5801/packages/eas-cli/src/utils/files.ts#L33-L60\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) {\n return `0`;\n }\n let multiplier = 1;\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes)} B`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} KB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / 1024)} KB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} MB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / multiplier)} MB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} GB`;\n }\n return `${Math.floor(bytes / 1024)} GB`;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/build-tools",
3
- "version": "1.0.123",
3
+ "version": "1.0.125",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -43,6 +43,7 @@
43
43
  "node-forge": "^1.3.1",
44
44
  "nullthrows": "^1.1.1",
45
45
  "plist": "^3.1.0",
46
+ "promise-limit": "^2.7.0",
46
47
  "resolve-from": "^5.0.0",
47
48
  "semver": "^7.6.2"
48
49
  },
@@ -68,5 +69,5 @@
68
69
  "node": "20.14.0",
69
70
  "yarn": "1.22.21"
70
71
  },
71
- "gitHead": "ffc2bd9a0e59895c8fda59d31bee550d41d1cd70"
72
+ "gitHead": "950e22e8a85c69230a10541a0b25ac770c0ac2a7"
72
73
  }