@expo/build-tools 0.1.174 → 0.1.176

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.
@@ -6,9 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.restoreCredentials = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const nullthrows_1 = __importDefault(require("nullthrows"));
9
10
  const uuid_1 = require("uuid");
10
11
  async function restoreCredentials(ctx) {
11
- const { buildCredentials } = ctx.job.secrets;
12
+ const { buildCredentials } = (0, nullthrows_1.default)(ctx.job.secrets, 'Secrets must be defined for non-custom builds');
12
13
  if (!buildCredentials) {
13
14
  // TODO: sentry (should be detected earlier)
14
15
  throw new Error('secrets are missing in the job object');
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/android/credentials.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAGxB,wDAA0B;AAC1B,+BAAoC;AAIpC,KAAK,UAAU,kBAAkB,CAAC,GAA8B;IAC9D,MAAM,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,CAAC,gBAAgB,EAAE;QACrB,4CAA4C;QAC5C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC1D;IACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,IAAA,SAAM,GAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,kBAAE,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9F,MAAM,eAAe,GAAG;QACtB,OAAO,EAAE;YACP,QAAQ,EAAE;gBACR,YAAY;gBACZ,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB;gBAC5D,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,QAAQ;gBAC5C,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,WAAW;aACnD;SACF;KACF,CAAC;IACF,MAAM,kBAAE,CAAC,SAAS,CAChB,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,EACjD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAChC,CAAC;AACJ,CAAC;AAEQ,gDAAkB","sourcesContent":["import path from 'path';\n\nimport { Android } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildContext } from '../context';\n\nasync function restoreCredentials(ctx: BuildContext<Android.Job>): Promise<void> {\n const { buildCredentials } = ctx.job.secrets;\n if (!buildCredentials) {\n // TODO: sentry (should be detected earlier)\n throw new Error('secrets are missing in the job object');\n }\n ctx.logger.info(\"Writing secrets to the project's directory\");\n const keystorePath = path.join(ctx.buildDirectory, `keystore-${uuidv4()}`);\n await fs.writeFile(keystorePath, Buffer.from(buildCredentials.keystore.dataBase64, 'base64'));\n const credentialsJson = {\n android: {\n keystore: {\n keystorePath,\n keystorePassword: buildCredentials.keystore.keystorePassword,\n keyAlias: buildCredentials.keystore.keyAlias,\n keyPassword: buildCredentials.keystore.keyPassword,\n },\n },\n };\n await fs.writeFile(\n path.join(ctx.buildDirectory, 'credentials.json'),\n JSON.stringify(credentialsJson)\n );\n}\n\nexport { restoreCredentials };\n"]}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/android/credentials.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAGxB,wDAA0B;AAC1B,4DAAoC;AACpC,+BAAoC;AAIpC,KAAK,UAAU,kBAAkB,CAAC,GAA8B;IAC9D,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAA,oBAAU,EACrC,GAAG,CAAC,GAAG,CAAC,OAAO,EACf,+CAA+C,CAChD,CAAC;IACF,IAAI,CAAC,gBAAgB,EAAE;QACrB,4CAA4C;QAC5C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC1D;IACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,IAAA,SAAM,GAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,kBAAE,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9F,MAAM,eAAe,GAAG;QACtB,OAAO,EAAE;YACP,QAAQ,EAAE;gBACR,YAAY;gBACZ,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB;gBAC5D,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,QAAQ;gBAC5C,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,WAAW;aACnD;SACF;KACF,CAAC;IACF,MAAM,kBAAE,CAAC,SAAS,CAChB,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,EACjD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAChC,CAAC;AACJ,CAAC;AAEQ,gDAAkB","sourcesContent":["import path from 'path';\n\nimport { Android } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport nullthrows from 'nullthrows';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BuildContext } from '../context';\n\nasync function restoreCredentials(ctx: BuildContext<Android.Job>): Promise<void> {\n const { buildCredentials } = nullthrows(\n ctx.job.secrets,\n 'Secrets must be defined for non-custom builds'\n );\n if (!buildCredentials) {\n // TODO: sentry (should be detected earlier)\n throw new Error('secrets are missing in the job object');\n }\n ctx.logger.info(\"Writing secrets to the project's directory\");\n const keystorePath = path.join(ctx.buildDirectory, `keystore-${uuidv4()}`);\n await fs.writeFile(keystorePath, Buffer.from(buildCredentials.keystore.dataBase64, 'base64'));\n const credentialsJson = {\n android: {\n keystore: {\n keystorePath,\n keystorePassword: buildCredentials.keystore.keystorePassword,\n keyAlias: buildCredentials.keystore.keyAlias,\n keyPassword: buildCredentials.keystore.keyPassword,\n },\n },\n };\n await fs.writeFile(\n path.join(ctx.buildDirectory, 'credentials.json'),\n JSON.stringify(credentialsJson)\n );\n}\n\nexport { restoreCredentials };\n"]}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  const eas_build_job_1 = require("@expo/eas-build-job");
7
+ const nullthrows_1 = __importDefault(require("nullthrows"));
4
8
  const context_1 = require("../context");
5
9
  const expoUpdates_1 = require("../utils/expoUpdates");
6
10
  const gradle_1 = require("../android/gradle");
@@ -11,8 +15,20 @@ const gradleConfig_1 = require("../android/gradleConfig");
11
15
  const setup_1 = require("../common/setup");
12
16
  const prebuild_1 = require("../common/prebuild");
13
17
  const common_1 = require("./common");
18
+ const custom_1 = require("./custom");
14
19
  async function androidBuilder(ctx) {
15
- return await (0, common_1.runBuilderWithHooksAsync)(ctx, buildAsync);
20
+ if (ctx.job.mode === eas_build_job_1.BuildMode.BUILD) {
21
+ return await (0, common_1.runBuilderWithHooksAsync)(ctx, buildAsync);
22
+ }
23
+ else if (ctx.job.mode === eas_build_job_1.BuildMode.RESIGN) {
24
+ throw new Error('Not implemented');
25
+ }
26
+ else if (ctx.job.mode === eas_build_job_1.BuildMode.CUSTOM) {
27
+ return await (0, custom_1.runCustomBuildAsync)(ctx);
28
+ }
29
+ else {
30
+ throw new Error('Not implemented');
31
+ }
16
32
  }
17
33
  exports.default = androidBuilder;
18
34
  async function buildAsync(ctx) {
@@ -38,7 +54,7 @@ async function buildAsync(ctx) {
38
54
  await ctx.runBuildPhase(eas_build_job_1.BuildPhase.POST_INSTALL_HOOK, async () => {
39
55
  await (0, hooks_1.runHookIfPresent)(ctx, hooks_1.Hook.POST_INSTALL);
40
56
  });
41
- if (ctx.job.secrets.buildCredentials) {
57
+ if ((0, nullthrows_1.default)(ctx.job.secrets, 'Secrets must be defined for non-custom builds').buildCredentials) {
42
58
  await ctx.runBuildPhase(eas_build_job_1.BuildPhase.PREPARE_CREDENTIALS, async () => {
43
59
  await (0, credentials_1.restoreCredentials)(ctx);
44
60
  await (0, gradleConfig_1.configureBuildGradle)(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"android.js","sourceRoot":"","sources":["../../src/builders/android.ts"],"names":[],"mappings":"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","sourcesContent":["import { Android, BuildPhase, Workflow } from '@expo/eas-build-job';\n\nimport { Artifacts, ArtifactType, BuildContext, SkipNativeBuildError } from '../context';\nimport { configureExpoUpdatesIfInstalledAsync } from '../utils/expoUpdates';\nimport { runGradleCommand, ensureLFLineEndingsInGradlewScript } from '../android/gradle';\nimport { findArtifacts } from '../utils/artifacts';\nimport { Hook, runHookIfPresent } from '../utils/hooks';\nimport { restoreCredentials } from '../android/credentials';\nimport { configureBuildGradle } from '../android/gradleConfig';\nimport { setupAsync } from '../common/setup';\nimport { prebuildAsync } from '../common/prebuild';\n\nimport { runBuilderWithHooksAsync } from './common';\n\nexport default async function androidBuilder(ctx: BuildContext<Android.Job>): Promise<Artifacts> {\n return await runBuilderWithHooksAsync(ctx, buildAsync);\n}\n\nasync function buildAsync(ctx: BuildContext<Android.Job>): Promise<void> {\n await setupAsync(ctx);\n const hasNativeCode = ctx.job.type === Workflow.GENERIC;\n\n if (hasNativeCode) {\n await ctx.runBuildPhase(BuildPhase.FIX_GRADLEW, async () => {\n await ensureLFLineEndingsInGradlewScript(ctx);\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.PREBUILD, async () => {\n if (hasNativeCode) {\n ctx.markBuildPhaseSkipped();\n ctx.logger.info(\n 'Skipped running \"expo prebuild\" because the \"android\" directory already exists. Learn more about the build process: https://docs.expo.dev/build-reference/android-builds/'\n );\n return;\n }\n await prebuildAsync(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.RESTORE_CACHE, async () => {\n await ctx.cacheManager?.restoreCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.POST_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.POST_INSTALL);\n });\n\n if (ctx.job.secrets.buildCredentials) {\n await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n await restoreCredentials(ctx);\n await configureBuildGradle(ctx);\n });\n }\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_EXPO_UPDATES, async () => {\n await configureExpoUpdatesIfInstalledAsync(ctx);\n });\n\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping Gradle build');\n }\n await ctx.runBuildPhase(BuildPhase.RUN_GRADLEW, async () => {\n const gradleCommand = resolveGradleCommand(ctx.job);\n await runGradleCommand(ctx, gradleCommand);\n });\n\n await ctx.runBuildPhase(BuildPhase.PRE_UPLOAD_ARTIFACTS_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_UPLOAD_ARTIFACTS);\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n await ctx.cacheManager?.saveCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n const applicationArchives = await findArtifacts(\n ctx.reactNativeProjectDirectory,\n ctx.job.applicationArchivePath ?? 'android/app/build/outputs/**/*.{apk,aab}',\n ctx.logger\n );\n ctx.logger.info(`Application archives: ${applicationArchives.join(', ')}`);\n await ctx.uploadArtifacts(ArtifactType.APPLICATION_ARCHIVE, applicationArchives, ctx.logger);\n });\n}\n\nfunction resolveGradleCommand(job: Android.Job): string {\n if (job.gradleCommand) {\n return job.gradleCommand;\n } else if (job.developmentClient) {\n return ':app:assembleDebug';\n } else if (!job.buildType) {\n return ':app:bundleRelease';\n } else if (job.buildType === Android.BuildType.APK) {\n return ':app:assembleRelease';\n } else {\n return ':app:bundleRelease';\n }\n}\n"]}
1
+ {"version":3,"file":"android.js","sourceRoot":"","sources":["../../src/builders/android.ts"],"names":[],"mappings":"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","sourcesContent":["import { Android, BuildMode, BuildPhase, Workflow } from '@expo/eas-build-job';\nimport nullthrows from 'nullthrows';\n\nimport { Artifacts, ArtifactType, BuildContext, SkipNativeBuildError } from '../context';\nimport { configureExpoUpdatesIfInstalledAsync } from '../utils/expoUpdates';\nimport { runGradleCommand, ensureLFLineEndingsInGradlewScript } from '../android/gradle';\nimport { findArtifacts } from '../utils/artifacts';\nimport { Hook, runHookIfPresent } from '../utils/hooks';\nimport { restoreCredentials } from '../android/credentials';\nimport { configureBuildGradle } from '../android/gradleConfig';\nimport { setupAsync } from '../common/setup';\nimport { prebuildAsync } from '../common/prebuild';\n\nimport { runBuilderWithHooksAsync } from './common';\nimport { runCustomBuildAsync } from './custom';\n\nexport default async function androidBuilder(ctx: BuildContext<Android.Job>): Promise<Artifacts> {\n if (ctx.job.mode === BuildMode.BUILD) {\n return await runBuilderWithHooksAsync(ctx, buildAsync);\n } else if (ctx.job.mode === BuildMode.RESIGN) {\n throw new Error('Not implemented');\n } else if (ctx.job.mode === BuildMode.CUSTOM) {\n return await runCustomBuildAsync(ctx);\n } else {\n throw new Error('Not implemented');\n }\n}\n\nasync function buildAsync(ctx: BuildContext<Android.Job>): Promise<void> {\n await setupAsync(ctx);\n const hasNativeCode = ctx.job.type === Workflow.GENERIC;\n\n if (hasNativeCode) {\n await ctx.runBuildPhase(BuildPhase.FIX_GRADLEW, async () => {\n await ensureLFLineEndingsInGradlewScript(ctx);\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.PREBUILD, async () => {\n if (hasNativeCode) {\n ctx.markBuildPhaseSkipped();\n ctx.logger.info(\n 'Skipped running \"expo prebuild\" because the \"android\" directory already exists. Learn more about the build process: https://docs.expo.dev/build-reference/android-builds/'\n );\n return;\n }\n await prebuildAsync(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.RESTORE_CACHE, async () => {\n await ctx.cacheManager?.restoreCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.POST_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.POST_INSTALL);\n });\n\n if (\n nullthrows(ctx.job.secrets, 'Secrets must be defined for non-custom builds').buildCredentials\n ) {\n await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n await restoreCredentials(ctx);\n await configureBuildGradle(ctx);\n });\n }\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_EXPO_UPDATES, async () => {\n await configureExpoUpdatesIfInstalledAsync(ctx);\n });\n\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping Gradle build');\n }\n await ctx.runBuildPhase(BuildPhase.RUN_GRADLEW, async () => {\n const gradleCommand = resolveGradleCommand(ctx.job);\n await runGradleCommand(ctx, gradleCommand);\n });\n\n await ctx.runBuildPhase(BuildPhase.PRE_UPLOAD_ARTIFACTS_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_UPLOAD_ARTIFACTS);\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n await ctx.cacheManager?.saveCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n const applicationArchives = await findArtifacts(\n ctx.reactNativeProjectDirectory,\n ctx.job.applicationArchivePath ?? 'android/app/build/outputs/**/*.{apk,aab}',\n ctx.logger\n );\n ctx.logger.info(`Application archives: ${applicationArchives.join(', ')}`);\n await ctx.uploadArtifacts(ArtifactType.APPLICATION_ARCHIVE, applicationArchives, ctx.logger);\n });\n}\n\nfunction resolveGradleCommand(job: Android.Job): string {\n if (job.gradleCommand) {\n return job.gradleCommand;\n } else if (job.developmentClient) {\n return ':app:assembleDebug';\n } else if (!job.buildType) {\n return ':app:bundleRelease';\n } else if (job.buildType === Android.BuildType.APK) {\n return ':app:assembleRelease';\n } else {\n return ':app:bundleRelease';\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { Job } from '@expo/eas-build-job';
2
+ import { Artifacts, BuildContext } from '../context';
3
+ export declare function runCustomBuildAsync<T extends Job>(ctx: BuildContext<T>): Promise<Artifacts>;
@@ -0,0 +1,25 @@
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.runCustomBuildAsync = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const eas_build_job_1 = require("@expo/eas-build-job");
9
+ const steps_1 = require("@expo/steps");
10
+ const nullthrows_1 = __importDefault(require("nullthrows"));
11
+ const projectSources_1 = require("../common/projectSources");
12
+ async function runCustomBuildAsync(ctx) {
13
+ var _a;
14
+ await (0, projectSources_1.prepareProjectSourcesAsync)(ctx);
15
+ const relativeConfigPath = (0, nullthrows_1.default)((_a = ctx.job.customBuildConfig) === null || _a === void 0 ? void 0 : _a.path, 'Custom build config must be defined for custom builds');
16
+ const configPath = path_1.default.join(ctx.reactNativeProjectDirectory, relativeConfigPath);
17
+ const buildStepContext = new steps_1.BuildStepContext(ctx.env.EAS_BUILD_ID, ctx.logger.child({ phase: eas_build_job_1.BuildPhase.CUSTOM }), false, ctx.reactNativeProjectDirectory);
18
+ const parser = new steps_1.BuildConfigParser(buildStepContext, { configPath });
19
+ const workflow = await parser.parseAsync();
20
+ await workflow.executeAsync(ctx.env);
21
+ // TOOD: return application archive and build artifacts
22
+ return {};
23
+ }
24
+ exports.runCustomBuildAsync = runCustomBuildAsync;
25
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/builders/custom.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,uDAAsD;AACtD,uCAAkE;AAClE,4DAAoC;AAGpC,6DAAsE;AAE/D,KAAK,UAAU,mBAAmB,CAAgB,GAAoB;;IAC3E,MAAM,IAAA,2CAA0B,EAAC,GAAG,CAAC,CAAC;IAEtC,MAAM,kBAAkB,GAAG,IAAA,oBAAU,EACnC,MAAA,GAAG,CAAC,GAAG,CAAC,iBAAiB,0CAAE,IAAI,EAC/B,uDAAuD,CACxD,CAAC;IACF,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,kBAAkB,CAAC,CAAC;IAElF,MAAM,gBAAgB,GAAG,IAAI,wBAAgB,CAC3C,GAAG,CAAC,GAAG,CAAC,YAAY,EACpB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,0BAAU,CAAC,MAAM,EAAE,CAAC,EAC9C,KAAK,EACL,GAAG,CAAC,2BAA2B,CAChC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,yBAAiB,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAErC,uDAAuD;IACvD,OAAO,EAAE,CAAC;AACZ,CAAC;AArBD,kDAqBC","sourcesContent":["import path from 'path';\n\nimport { BuildPhase, Job } from '@expo/eas-build-job';\nimport { BuildConfigParser, BuildStepContext } from '@expo/steps';\nimport nullthrows from 'nullthrows';\n\nimport { Artifacts, BuildContext } from '../context';\nimport { prepareProjectSourcesAsync } from '../common/projectSources';\n\nexport async function runCustomBuildAsync<T extends Job>(ctx: BuildContext<T>): Promise<Artifacts> {\n await prepareProjectSourcesAsync(ctx);\n\n const relativeConfigPath = nullthrows(\n ctx.job.customBuildConfig?.path,\n 'Custom build config must be defined for custom builds'\n );\n const configPath = path.join(ctx.reactNativeProjectDirectory, relativeConfigPath);\n\n const buildStepContext = new BuildStepContext(\n ctx.env.EAS_BUILD_ID,\n ctx.logger.child({ phase: BuildPhase.CUSTOM }),\n false,\n ctx.reactNativeProjectDirectory\n );\n const parser = new BuildConfigParser(buildStepContext, { configPath });\n const workflow = await parser.parseAsync();\n await workflow.executeAsync(ctx.env);\n\n // TOOD: return application archive and build artifacts\n return {};\n}\n"]}
@@ -21,13 +21,20 @@ const resolve_1 = require("../ios/resolve");
21
21
  const setup_1 = require("../common/setup");
22
22
  const prebuild_1 = require("../common/prebuild");
23
23
  const common_1 = require("./common");
24
+ const custom_1 = require("./custom");
24
25
  async function iosBuilder(ctx) {
25
26
  if (ctx.job.mode === eas_build_job_1.BuildMode.BUILD) {
26
27
  return await (0, common_1.runBuilderWithHooksAsync)(ctx, buildAsync);
27
28
  }
28
- else {
29
+ else if (ctx.job.mode === eas_build_job_1.BuildMode.RESIGN) {
29
30
  return await resignAsync(ctx);
30
31
  }
32
+ else if (ctx.job.mode === eas_build_job_1.BuildMode.CUSTOM) {
33
+ return await (0, custom_1.runCustomBuildAsync)(ctx);
34
+ }
35
+ else {
36
+ throw new Error('Not implemented');
37
+ }
31
38
  }
32
39
  exports.default = iosBuilder;
33
40
  async function buildAsync(ctx) {
@@ -1 +1 @@
1
- {"version":3,"file":"ios.js","sourceRoot":"","sources":["../../src/builders/ios.ts"],"names":[],"mappings":"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","sourcesContent":["import plist from '@expo/plist';\nimport { IOSConfig } from '@expo/config-plugins';\nimport { BuildMode, BuildPhase, Ios, Workflow } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport nullthrows from 'nullthrows';\n\nimport { Artifacts, ArtifactType, BuildContext } from '../context';\nimport { configureExpoUpdatesIfInstalledAsync } from '../utils/expoUpdates';\nimport { findArtifacts } from '../utils/artifacts';\nimport { Hook, runHookIfPresent } from '../utils/hooks';\nimport { configureXcodeProject } from '../ios/configure';\nimport CredentialsManager from '../ios/credentials/manager';\nimport { runFastlaneGym, runFastlaneResign } from '../ios/fastlane';\nimport { installPods } from '../ios/pod';\nimport { downloadApplicationArchiveAsync } from '../ios/resign';\nimport { resolveArtifactPath, resolveBuildConfiguration, resolveScheme } from '../ios/resolve';\nimport { setupAsync } from '../common/setup';\nimport { prebuildAsync } from '../common/prebuild';\n\nimport { runBuilderWithHooksAsync } from './common';\n\nexport default async function iosBuilder(ctx: BuildContext<Ios.Job>): Promise<Artifacts> {\n if (ctx.job.mode === BuildMode.BUILD) {\n return await runBuilderWithHooksAsync(ctx, buildAsync);\n } else {\n return await resignAsync(ctx);\n }\n}\n\nasync function buildAsync(ctx: BuildContext<Ios.Job>): Promise<void> {\n await setupAsync(ctx);\n const hasNativeCode = ctx.job.type === Workflow.GENERIC;\n\n const credentialsManager = new CredentialsManager(ctx);\n try {\n const credentials = await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n return await credentialsManager.prepare();\n });\n\n await ctx.runBuildPhase(BuildPhase.PREBUILD, async () => {\n if (hasNativeCode) {\n ctx.markBuildPhaseSkipped();\n ctx.logger.info(\n 'Skipped running \"expo prebuild\" because the \"ios\" directory already exists. Learn more about the build process: https://docs.expo.dev/build-reference/ios-builds/'\n );\n return;\n }\n const extraEnvs: Record<string, string> = credentials?.teamId\n ? { APPLE_TEAM_ID: credentials.teamId }\n : {};\n await prebuildAsync(ctx, { extraEnvs });\n });\n\n await ctx.runBuildPhase(BuildPhase.RESTORE_CACHE, async () => {\n await ctx.cacheManager?.restoreCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.INSTALL_PODS, async () => {\n await installPods(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.POST_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.POST_INSTALL);\n });\n\n const buildConfiguration = resolveBuildConfiguration(ctx);\n if (credentials) {\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_XCODE_PROJECT, async () => {\n await configureXcodeProject(ctx, { credentials, buildConfiguration });\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_EXPO_UPDATES, async () => {\n await configureExpoUpdatesIfInstalledAsync(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_FASTLANE, async () => {\n const scheme = resolveScheme(ctx);\n const entitlements = await readEntitlementsAsync(ctx, { scheme, buildConfiguration });\n await runFastlaneGym(ctx, {\n credentials,\n scheme,\n buildConfiguration,\n entitlements,\n });\n });\n } finally {\n await ctx.runBuildPhase(BuildPhase.CLEAN_UP_CREDENTIALS, async () => {\n await credentialsManager.cleanUp();\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.PRE_UPLOAD_ARTIFACTS_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_UPLOAD_ARTIFACTS);\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n await ctx.cacheManager?.saveCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n const applicationArchives = await findArtifacts(\n ctx.reactNativeProjectDirectory,\n resolveArtifactPath(ctx),\n ctx.logger\n );\n ctx.logger.info(`Application archives: ${applicationArchives.join(', ')}`);\n await ctx.uploadArtifacts(ArtifactType.APPLICATION_ARCHIVE, applicationArchives, ctx.logger);\n });\n}\n\nasync function readEntitlementsAsync(\n ctx: BuildContext<Ios.Job>,\n { scheme, buildConfiguration }: { scheme: string; buildConfiguration: string }\n): Promise<object | null> {\n try {\n const applicationTargetName =\n await IOSConfig.BuildScheme.getApplicationTargetNameForSchemeAsync(\n ctx.reactNativeProjectDirectory,\n scheme\n );\n const entitlementsPath = IOSConfig.Entitlements.getEntitlementsPath(\n ctx.reactNativeProjectDirectory,\n {\n buildConfiguration,\n targetName: applicationTargetName,\n }\n );\n if (!entitlementsPath) {\n return null;\n }\n const entitlementsRaw = await fs.readFile(entitlementsPath, 'utf8');\n return plist.parse(entitlementsRaw);\n } catch (err) {\n ctx.logger.warn({ err }, 'Failed to read entitlements');\n ctx.markBuildPhaseHasWarnings();\n return null;\n }\n}\n\nasync function resignAsync(ctx: BuildContext<Ios.Job>): Promise<Artifacts> {\n const applicationArchivePath = await ctx.runBuildPhase(\n BuildPhase.DOWNLOAD_APPLICATION_ARCHIVE,\n async () => {\n return await downloadApplicationArchiveAsync(ctx);\n }\n );\n\n const credentialsManager = new CredentialsManager(ctx);\n try {\n const credentials = await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n return await credentialsManager.prepare();\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_FASTLANE, async () => {\n await runFastlaneResign(ctx, {\n credentials: nullthrows(credentials),\n ipaPath: applicationArchivePath,\n });\n });\n } finally {\n await ctx.runBuildPhase(BuildPhase.CLEAN_UP_CREDENTIALS, async () => {\n await credentialsManager.cleanUp();\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n ctx.logger.info(`Application archive: ${applicationArchivePath}`);\n await ctx.uploadArtifacts(\n ArtifactType.APPLICATION_ARCHIVE,\n [applicationArchivePath],\n ctx.logger\n );\n });\n\n if (!ctx.artifacts.APPLICATION_ARCHIVE) {\n throw new Error('Builder must upload application archive');\n }\n return ctx.artifacts;\n}\n"]}
1
+ {"version":3,"file":"ios.js","sourceRoot":"","sources":["../../src/builders/ios.ts"],"names":[],"mappings":"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","sourcesContent":["import plist from '@expo/plist';\nimport { IOSConfig } from '@expo/config-plugins';\nimport { BuildMode, BuildPhase, Ios, Workflow } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport nullthrows from 'nullthrows';\n\nimport { Artifacts, ArtifactType, BuildContext } from '../context';\nimport { configureExpoUpdatesIfInstalledAsync } from '../utils/expoUpdates';\nimport { findArtifacts } from '../utils/artifacts';\nimport { Hook, runHookIfPresent } from '../utils/hooks';\nimport { configureXcodeProject } from '../ios/configure';\nimport CredentialsManager from '../ios/credentials/manager';\nimport { runFastlaneGym, runFastlaneResign } from '../ios/fastlane';\nimport { installPods } from '../ios/pod';\nimport { downloadApplicationArchiveAsync } from '../ios/resign';\nimport { resolveArtifactPath, resolveBuildConfiguration, resolveScheme } from '../ios/resolve';\nimport { setupAsync } from '../common/setup';\nimport { prebuildAsync } from '../common/prebuild';\n\nimport { runBuilderWithHooksAsync } from './common';\nimport { runCustomBuildAsync } from './custom';\n\nexport default async function iosBuilder(ctx: BuildContext<Ios.Job>): Promise<Artifacts> {\n if (ctx.job.mode === BuildMode.BUILD) {\n return await runBuilderWithHooksAsync(ctx, buildAsync);\n } else if (ctx.job.mode === BuildMode.RESIGN) {\n return await resignAsync(ctx);\n } else if (ctx.job.mode === BuildMode.CUSTOM) {\n return await runCustomBuildAsync(ctx);\n } else {\n throw new Error('Not implemented');\n }\n}\n\nasync function buildAsync(ctx: BuildContext<Ios.Job>): Promise<void> {\n await setupAsync(ctx);\n const hasNativeCode = ctx.job.type === Workflow.GENERIC;\n\n const credentialsManager = new CredentialsManager(ctx);\n try {\n const credentials = await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n return await credentialsManager.prepare();\n });\n\n await ctx.runBuildPhase(BuildPhase.PREBUILD, async () => {\n if (hasNativeCode) {\n ctx.markBuildPhaseSkipped();\n ctx.logger.info(\n 'Skipped running \"expo prebuild\" because the \"ios\" directory already exists. Learn more about the build process: https://docs.expo.dev/build-reference/ios-builds/'\n );\n return;\n }\n const extraEnvs: Record<string, string> = credentials?.teamId\n ? { APPLE_TEAM_ID: credentials.teamId }\n : {};\n await prebuildAsync(ctx, { extraEnvs });\n });\n\n await ctx.runBuildPhase(BuildPhase.RESTORE_CACHE, async () => {\n await ctx.cacheManager?.restoreCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.INSTALL_PODS, async () => {\n await installPods(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.POST_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.POST_INSTALL);\n });\n\n const buildConfiguration = resolveBuildConfiguration(ctx);\n if (credentials) {\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_XCODE_PROJECT, async () => {\n await configureXcodeProject(ctx, { credentials, buildConfiguration });\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_EXPO_UPDATES, async () => {\n await configureExpoUpdatesIfInstalledAsync(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_FASTLANE, async () => {\n const scheme = resolveScheme(ctx);\n const entitlements = await readEntitlementsAsync(ctx, { scheme, buildConfiguration });\n await runFastlaneGym(ctx, {\n credentials,\n scheme,\n buildConfiguration,\n entitlements,\n });\n });\n } finally {\n await ctx.runBuildPhase(BuildPhase.CLEAN_UP_CREDENTIALS, async () => {\n await credentialsManager.cleanUp();\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.PRE_UPLOAD_ARTIFACTS_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_UPLOAD_ARTIFACTS);\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n await ctx.cacheManager?.saveCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n const applicationArchives = await findArtifacts(\n ctx.reactNativeProjectDirectory,\n resolveArtifactPath(ctx),\n ctx.logger\n );\n ctx.logger.info(`Application archives: ${applicationArchives.join(', ')}`);\n await ctx.uploadArtifacts(ArtifactType.APPLICATION_ARCHIVE, applicationArchives, ctx.logger);\n });\n}\n\nasync function readEntitlementsAsync(\n ctx: BuildContext<Ios.Job>,\n { scheme, buildConfiguration }: { scheme: string; buildConfiguration: string }\n): Promise<object | null> {\n try {\n const applicationTargetName =\n await IOSConfig.BuildScheme.getApplicationTargetNameForSchemeAsync(\n ctx.reactNativeProjectDirectory,\n scheme\n );\n const entitlementsPath = IOSConfig.Entitlements.getEntitlementsPath(\n ctx.reactNativeProjectDirectory,\n {\n buildConfiguration,\n targetName: applicationTargetName,\n }\n );\n if (!entitlementsPath) {\n return null;\n }\n const entitlementsRaw = await fs.readFile(entitlementsPath, 'utf8');\n return plist.parse(entitlementsRaw);\n } catch (err) {\n ctx.logger.warn({ err }, 'Failed to read entitlements');\n ctx.markBuildPhaseHasWarnings();\n return null;\n }\n}\n\nasync function resignAsync(ctx: BuildContext<Ios.Job>): Promise<Artifacts> {\n const applicationArchivePath = await ctx.runBuildPhase(\n BuildPhase.DOWNLOAD_APPLICATION_ARCHIVE,\n async () => {\n return await downloadApplicationArchiveAsync(ctx);\n }\n );\n\n const credentialsManager = new CredentialsManager(ctx);\n try {\n const credentials = await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n return await credentialsManager.prepare();\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_FASTLANE, async () => {\n await runFastlaneResign(ctx, {\n credentials: nullthrows(credentials),\n ipaPath: applicationArchivePath,\n });\n });\n } finally {\n await ctx.runBuildPhase(BuildPhase.CLEAN_UP_CREDENTIALS, async () => {\n await credentialsManager.cleanUp();\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n ctx.logger.info(`Application archive: ${applicationArchivePath}`);\n await ctx.uploadArtifacts(\n ArtifactType.APPLICATION_ARCHIVE,\n [applicationArchivePath],\n ctx.logger\n );\n });\n\n if (!ctx.artifacts.APPLICATION_ARCHIVE) {\n throw new Error('Builder must upload application archive');\n }\n return ctx.artifacts;\n}\n"]}
@@ -9,6 +9,7 @@ const eas_build_job_1 = require("@expo/eas-build-job");
9
9
  const logger_1 = require("@expo/logger");
10
10
  const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
11
11
  const joi_1 = __importDefault(require("joi"));
12
+ const nullthrows_1 = __importDefault(require("nullthrows"));
12
13
  const EAS_CLI_STAGING_NPM_TAG = 'latest-eas-build-staging';
13
14
  const EAS_CLI_PRODUCTION_NPM_TAG = 'latest-eas-build';
14
15
  const EasBuildInternalResultSchema = joi_1.default.object({
@@ -21,7 +22,12 @@ async function runEasBuildInternalAsync(ctx) {
21
22
  (0, assert_1.default)(buildProfile, 'build profile is missing in a build from git-based integration.');
22
23
  const result = await (0, turtle_spawn_1.default)(cmd, [...args, 'build:internal', '--platform', ctx.job.platform, '--profile', buildProfile], {
23
24
  cwd: ctx.reactNativeProjectDirectory,
24
- env: { ...ctx.env, EXPO_TOKEN: ctx.job.secrets.robotAccessToken, ...extraEnv },
25
+ env: {
26
+ ...ctx.env,
27
+ EXPO_TOKEN: (0, nullthrows_1.default)(ctx.job.secrets, 'Secrets must be defined for non-custom builds')
28
+ .robotAccessToken,
29
+ ...extraEnv,
30
+ },
25
31
  logger: ctx.logger,
26
32
  mode: logger_1.PipeMode.STDERR_ONLY_AS_STDOUT,
27
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"easBuildInternal.js","sourceRoot":"","sources":["../../src/common/easBuildInternal.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\n\nimport { Env, Job, Metadata, sanitizeJob, sanitizeMetadata } from '@expo/eas-build-job';\nimport { PipeMode } from '@expo/logger';\nimport spawn from '@expo/turtle-spawn';\nimport Joi from 'joi';\n\nimport { BuildContext } from '../context';\n\nconst EAS_CLI_STAGING_NPM_TAG = 'latest-eas-build-staging';\nconst EAS_CLI_PRODUCTION_NPM_TAG = 'latest-eas-build';\n\nconst EasBuildInternalResultSchema = Joi.object<{ job: object; metadata: object }>({\n job: Joi.object().unknown(),\n metadata: Joi.object().unknown(),\n});\n\nexport async function runEasBuildInternalAsync<TJob extends Job>(\n ctx: BuildContext<TJob>\n): Promise<void> {\n const { cmd, args, extraEnv } = resolveEasCommandPrefixAndEnv();\n const { buildProfile } = ctx.job;\n assert(buildProfile, 'build profile is missing in a build from git-based integration.');\n const result = await spawn(\n cmd,\n [...args, 'build:internal', '--platform', ctx.job.platform, '--profile', buildProfile],\n {\n cwd: ctx.reactNativeProjectDirectory,\n env: { ...ctx.env, EXPO_TOKEN: ctx.job.secrets.robotAccessToken, ...extraEnv },\n logger: ctx.logger,\n mode: PipeMode.STDERR_ONLY_AS_STDOUT,\n }\n );\n const stdout = result.stdout.toString();\n const parsed = JSON.parse(stdout);\n const { job, metadata } = validateEasBuildInternalResult(ctx, parsed);\n ctx.updateJobInformation(job, metadata);\n}\n\nexport async function configureEnvFromBuildProfileAsync<TJob extends Job>(\n ctx: BuildContext<TJob>\n): Promise<void> {\n const { cmd, args, extraEnv } = resolveEasCommandPrefixAndEnv();\n const { buildProfile } = ctx.job;\n assert(buildProfile, 'build profile is missing in a build from git-based integration.');\n let spawnResult;\n try {\n spawnResult = await spawn(\n cmd,\n [\n ...args,\n 'config',\n '--platform',\n ctx.job.platform,\n '--profile',\n buildProfile,\n '--non-interactive',\n '--json',\n '--eas-json-only',\n ],\n {\n cwd: ctx.reactNativeProjectDirectory,\n env: { ...ctx.env, ...extraEnv },\n }\n );\n } catch (err: any) {\n ctx.logger.error(`Failed to the read build profile ${buildProfile} from eas.json.`);\n ctx.logger.error(err.stderr?.toString());\n throw Error(`Failed to read the build profile ${buildProfile} from eas.json.`);\n }\n const stdout = spawnResult.stdout.toString();\n const parsed = JSON.parse(stdout);\n const env = validateEnvs(parsed);\n ctx.updateEnv(env);\n}\n\nfunction resolveEasCommandPrefixAndEnv(): { cmd: string; args: string[]; extraEnv: Env } {\n if (process.env.ENVIRONMENT === 'development') {\n return {\n cmd: process.env.EAS_BUILD_INTERNAL_EXECUTABLE ?? `eas`,\n args: [],\n extraEnv: { EXPO_LOCAL: '1' },\n };\n } else if (process.env.ENVIRONMENT === 'staging') {\n return {\n cmd: 'npx',\n args: ['--yes', `eas-cli@${EAS_CLI_STAGING_NPM_TAG}`],\n extraEnv: { EXPO_STAGING: '1' },\n };\n } else {\n return { cmd: 'npx', args: ['--yes', `eas-cli@${EAS_CLI_PRODUCTION_NPM_TAG}`], extraEnv: {} };\n }\n}\n\nfunction validateEasBuildInternalResult<TJob extends Job>(\n ctx: BuildContext<TJob>,\n result: any\n): { job: TJob; metadata: Metadata } {\n const { value, error } = EasBuildInternalResultSchema.validate(result, {\n stripUnknown: true,\n convert: true,\n abortEarly: false,\n });\n if (error) {\n throw error;\n }\n const job = sanitizeJob(value.job) as TJob;\n assert(job.platform === ctx.job.platform, 'eas-cli returned a job for a wrong platform');\n const metadata = sanitizeMetadata(value.metadata);\n return { job, metadata };\n}\n\nfunction validateEnvs(result: any): Env {\n const { value, error } = Joi.object({\n env: Joi.object().pattern(Joi.string(), Joi.string()),\n }).validate(result.env, {\n stripUnknown: true,\n convert: true,\n abortEarly: false,\n });\n if (error) {\n throw error;\n }\n return value?.env;\n}\n"]}
1
+ {"version":3,"file":"easBuildInternal.js","sourceRoot":"","sources":["../../src/common/easBuildInternal.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\n\nimport { Env, Job, Metadata, sanitizeJob, sanitizeMetadata } from '@expo/eas-build-job';\nimport { PipeMode } from '@expo/logger';\nimport spawn from '@expo/turtle-spawn';\nimport Joi from 'joi';\nimport nullthrows from 'nullthrows';\n\nimport { BuildContext } from '../context';\n\nconst EAS_CLI_STAGING_NPM_TAG = 'latest-eas-build-staging';\nconst EAS_CLI_PRODUCTION_NPM_TAG = 'latest-eas-build';\n\nconst EasBuildInternalResultSchema = Joi.object<{ job: object; metadata: object }>({\n job: Joi.object().unknown(),\n metadata: Joi.object().unknown(),\n});\n\nexport async function runEasBuildInternalAsync<TJob extends Job>(\n ctx: BuildContext<TJob>\n): Promise<void> {\n const { cmd, args, extraEnv } = resolveEasCommandPrefixAndEnv();\n const { buildProfile } = ctx.job;\n assert(buildProfile, 'build profile is missing in a build from git-based integration.');\n const result = await spawn(\n cmd,\n [...args, 'build:internal', '--platform', ctx.job.platform, '--profile', buildProfile],\n {\n cwd: ctx.reactNativeProjectDirectory,\n env: {\n ...ctx.env,\n EXPO_TOKEN: nullthrows(ctx.job.secrets, 'Secrets must be defined for non-custom builds')\n .robotAccessToken,\n ...extraEnv,\n },\n logger: ctx.logger,\n mode: PipeMode.STDERR_ONLY_AS_STDOUT,\n }\n );\n const stdout = result.stdout.toString();\n const parsed = JSON.parse(stdout);\n const { job, metadata } = validateEasBuildInternalResult(ctx, parsed);\n ctx.updateJobInformation(job, metadata);\n}\n\nexport async function configureEnvFromBuildProfileAsync<TJob extends Job>(\n ctx: BuildContext<TJob>\n): Promise<void> {\n const { cmd, args, extraEnv } = resolveEasCommandPrefixAndEnv();\n const { buildProfile } = ctx.job;\n assert(buildProfile, 'build profile is missing in a build from git-based integration.');\n let spawnResult;\n try {\n spawnResult = await spawn(\n cmd,\n [\n ...args,\n 'config',\n '--platform',\n ctx.job.platform,\n '--profile',\n buildProfile,\n '--non-interactive',\n '--json',\n '--eas-json-only',\n ],\n {\n cwd: ctx.reactNativeProjectDirectory,\n env: { ...ctx.env, ...extraEnv },\n }\n );\n } catch (err: any) {\n ctx.logger.error(`Failed to the read build profile ${buildProfile} from eas.json.`);\n ctx.logger.error(err.stderr?.toString());\n throw Error(`Failed to read the build profile ${buildProfile} from eas.json.`);\n }\n const stdout = spawnResult.stdout.toString();\n const parsed = JSON.parse(stdout);\n const env = validateEnvs(parsed);\n ctx.updateEnv(env);\n}\n\nfunction resolveEasCommandPrefixAndEnv(): { cmd: string; args: string[]; extraEnv: Env } {\n if (process.env.ENVIRONMENT === 'development') {\n return {\n cmd: process.env.EAS_BUILD_INTERNAL_EXECUTABLE ?? `eas`,\n args: [],\n extraEnv: { EXPO_LOCAL: '1' },\n };\n } else if (process.env.ENVIRONMENT === 'staging') {\n return {\n cmd: 'npx',\n args: ['--yes', `eas-cli@${EAS_CLI_STAGING_NPM_TAG}`],\n extraEnv: { EXPO_STAGING: '1' },\n };\n } else {\n return { cmd: 'npx', args: ['--yes', `eas-cli@${EAS_CLI_PRODUCTION_NPM_TAG}`], extraEnv: {} };\n }\n}\n\nfunction validateEasBuildInternalResult<TJob extends Job>(\n ctx: BuildContext<TJob>,\n result: any\n): { job: TJob; metadata: Metadata } {\n const { value, error } = EasBuildInternalResultSchema.validate(result, {\n stripUnknown: true,\n convert: true,\n abortEarly: false,\n });\n if (error) {\n throw error;\n }\n const job = sanitizeJob(value.job) as TJob;\n assert(job.platform === ctx.job.platform, 'eas-cli returned a job for a wrong platform');\n const metadata = sanitizeMetadata(value.metadata);\n return { job, metadata };\n}\n\nfunction validateEnvs(result: any): Env {\n const { value, error } = Joi.object({\n env: Joi.object().pattern(Joi.string(), Joi.string()),\n }).validate(result.env, {\n stripUnknown: true,\n convert: true,\n abortEarly: false,\n });\n if (error) {\n throw error;\n }\n return value?.env;\n}\n"]}
@@ -31,6 +31,7 @@ const os_1 = __importDefault(require("os"));
31
31
  const path_1 = __importDefault(require("path"));
32
32
  const fs_extra_1 = __importDefault(require("fs-extra"));
33
33
  const lodash_1 = require("lodash");
34
+ const nullthrows_1 = __importDefault(require("nullthrows"));
34
35
  const uuid_1 = require("uuid");
35
36
  const distributionCertificateUtils = __importStar(require("./distributionCertificate"));
36
37
  const keychain_1 = __importDefault(require("./keychain"));
@@ -45,7 +46,7 @@ class IosCredentialsManager {
45
46
  if (this.ctx.job.simulator) {
46
47
  return null;
47
48
  }
48
- const { buildCredentials } = this.ctx.job.secrets;
49
+ const { buildCredentials } = (0, nullthrows_1.default)(this.ctx.job.secrets, 'Secrets must be defined for non-custom builds');
49
50
  if (!buildCredentials) {
50
51
  throw new Error('credentials are required for an iOS build');
51
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/ios/credentials/manager.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport os from 'os';\nimport path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport { orderBy } from 'lodash';\nimport { v4 as uuid } from 'uuid';\n\nimport { BuildContext } from '../../context';\n\nimport * as distributionCertificateUtils from './distributionCertificate';\nimport Keychain from './keychain';\nimport ProvisioningProfile, {\n DistributionType,\n ProvisioningProfileData,\n} from './provisioningProfile';\n\nexport interface Credentials {\n applicationTargetProvisioningProfile: ProvisioningProfile<Ios.Job>;\n keychainPath: string;\n targetProvisioningProfiles: TargetProvisioningProfiles;\n distributionType: DistributionType;\n teamId: string;\n}\n\nexport type TargetProvisioningProfiles = Record<string, ProvisioningProfileData>;\n\nexport default class IosCredentialsManager<TJob extends Ios.Job> {\n private keychain?: Keychain<TJob>;\n private readonly provisioningProfiles: ProvisioningProfile<TJob>[] = [];\n private cleanedUp = false;\n\n constructor(private readonly ctx: BuildContext<TJob>) {}\n\n public async prepare(): Promise<Credentials | null> {\n if (this.ctx.job.simulator) {\n return null;\n }\n\n const { buildCredentials } = this.ctx.job.secrets;\n if (!buildCredentials) {\n throw new Error('credentials are required for an iOS build');\n }\n\n this.ctx.logger.info('Preparing credentials');\n\n this.ctx.logger.info('Creating keychain');\n this.keychain = new Keychain(this.ctx);\n await this.keychain.create();\n\n const targets = Object.keys(buildCredentials);\n const targetProvisioningProfiles: TargetProvisioningProfiles = {};\n for (const target of targets) {\n const provisioningProfile = await this.prepareTargetCredentials(\n target,\n buildCredentials[target]\n );\n this.provisioningProfiles.push(provisioningProfile);\n targetProvisioningProfiles[target] = provisioningProfile.data;\n }\n\n const applicationTargetProvisioningProfile = this.getApplicationTargetProvisioningProfile();\n\n // TODO: ensure that all dist types and team ids in the array are the same\n const { distributionType, teamId } = applicationTargetProvisioningProfile.data;\n\n return {\n applicationTargetProvisioningProfile,\n keychainPath: this.keychain.data.path,\n targetProvisioningProfiles,\n distributionType,\n teamId,\n };\n }\n\n public async cleanUp(): Promise<void> {\n if (this.cleanedUp || (!this.keychain && this.provisioningProfiles.length === 0)) {\n return;\n }\n\n if (this.keychain) {\n await this.keychain.destroy();\n }\n if (this.provisioningProfiles) {\n for (const provisioningProfile of this.provisioningProfiles) {\n await provisioningProfile.destroy();\n }\n }\n this.cleanedUp = true;\n }\n\n private async prepareTargetCredentials(\n target: string,\n targetCredentials: Ios.TargetCredentials\n ): Promise<ProvisioningProfile<TJob>> {\n try {\n assert(this.keychain, 'Keychain should be initialized');\n\n this.ctx.logger.info(`Preparing credentials for target '${target}'`);\n const distCertPath = path.join(os.tmpdir(), `${uuid()}.p12`);\n\n this.ctx.logger.info('Getting distribution certificate fingerprint and common name');\n const certificateFingerprint = distributionCertificateUtils.getFingerprint(\n targetCredentials.distributionCertificate\n );\n const certificateCommonName = distributionCertificateUtils.getCommonName(\n targetCredentials.distributionCertificate\n );\n this.ctx.logger.info(\n `Fingerprint = \"${certificateFingerprint}\", common name = ${certificateCommonName}`\n );\n\n this.ctx.logger.info(`Writing distribution certificate to ${distCertPath}`);\n await fs.writeFile(\n distCertPath,\n Buffer.from(targetCredentials.distributionCertificate.dataBase64, 'base64')\n );\n\n this.ctx.logger.info('Importing distribution certificate into the keychain');\n await this.keychain.importCertificate(\n distCertPath,\n targetCredentials.distributionCertificate.password\n );\n\n this.ctx.logger.info('Initializing provisioning profile');\n const provisioningProfile = new ProvisioningProfile(\n this.ctx,\n Buffer.from(targetCredentials.provisioningProfileBase64, 'base64'),\n this.keychain.data.path,\n target,\n certificateCommonName\n );\n await provisioningProfile.init();\n\n this.ctx.logger.info(\n 'Validating whether distribution certificate has been imported successfully'\n );\n await this.keychain.ensureCertificateImported(\n provisioningProfile.data.teamId,\n certificateFingerprint\n );\n\n this.ctx.logger.info(\n 'Verifying whether the distribution certificate and provisioning profile match'\n );\n provisioningProfile.verifyCertificate(certificateFingerprint);\n\n return provisioningProfile;\n } catch (err) {\n await this.cleanUp();\n throw err;\n }\n }\n\n private getApplicationTargetProvisioningProfile(): ProvisioningProfile<TJob> {\n // sorting works because bundle ids share common prefix\n const sorted = orderBy(this.provisioningProfiles, 'data.bundleIdentifier', 'asc');\n return sorted[0];\n }\n}\n"]}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/ios/credentials/manager.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport os from 'os';\nimport path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport { orderBy } from 'lodash';\nimport nullthrows from 'nullthrows';\nimport { v4 as uuid } from 'uuid';\n\nimport { BuildContext } from '../../context';\n\nimport * as distributionCertificateUtils from './distributionCertificate';\nimport Keychain from './keychain';\nimport ProvisioningProfile, {\n DistributionType,\n ProvisioningProfileData,\n} from './provisioningProfile';\n\nexport interface Credentials {\n applicationTargetProvisioningProfile: ProvisioningProfile<Ios.Job>;\n keychainPath: string;\n targetProvisioningProfiles: TargetProvisioningProfiles;\n distributionType: DistributionType;\n teamId: string;\n}\n\nexport type TargetProvisioningProfiles = Record<string, ProvisioningProfileData>;\n\nexport default class IosCredentialsManager<TJob extends Ios.Job> {\n private keychain?: Keychain<TJob>;\n private readonly provisioningProfiles: ProvisioningProfile<TJob>[] = [];\n private cleanedUp = false;\n\n constructor(private readonly ctx: BuildContext<TJob>) {}\n\n public async prepare(): Promise<Credentials | null> {\n if (this.ctx.job.simulator) {\n return null;\n }\n\n const { buildCredentials } = nullthrows(\n this.ctx.job.secrets,\n 'Secrets must be defined for non-custom builds'\n );\n if (!buildCredentials) {\n throw new Error('credentials are required for an iOS build');\n }\n\n this.ctx.logger.info('Preparing credentials');\n\n this.ctx.logger.info('Creating keychain');\n this.keychain = new Keychain(this.ctx);\n await this.keychain.create();\n\n const targets = Object.keys(buildCredentials);\n const targetProvisioningProfiles: TargetProvisioningProfiles = {};\n for (const target of targets) {\n const provisioningProfile = await this.prepareTargetCredentials(\n target,\n buildCredentials[target]\n );\n this.provisioningProfiles.push(provisioningProfile);\n targetProvisioningProfiles[target] = provisioningProfile.data;\n }\n\n const applicationTargetProvisioningProfile = this.getApplicationTargetProvisioningProfile();\n\n // TODO: ensure that all dist types and team ids in the array are the same\n const { distributionType, teamId } = applicationTargetProvisioningProfile.data;\n\n return {\n applicationTargetProvisioningProfile,\n keychainPath: this.keychain.data.path,\n targetProvisioningProfiles,\n distributionType,\n teamId,\n };\n }\n\n public async cleanUp(): Promise<void> {\n if (this.cleanedUp || (!this.keychain && this.provisioningProfiles.length === 0)) {\n return;\n }\n\n if (this.keychain) {\n await this.keychain.destroy();\n }\n if (this.provisioningProfiles) {\n for (const provisioningProfile of this.provisioningProfiles) {\n await provisioningProfile.destroy();\n }\n }\n this.cleanedUp = true;\n }\n\n private async prepareTargetCredentials(\n target: string,\n targetCredentials: Ios.TargetCredentials\n ): Promise<ProvisioningProfile<TJob>> {\n try {\n assert(this.keychain, 'Keychain should be initialized');\n\n this.ctx.logger.info(`Preparing credentials for target '${target}'`);\n const distCertPath = path.join(os.tmpdir(), `${uuid()}.p12`);\n\n this.ctx.logger.info('Getting distribution certificate fingerprint and common name');\n const certificateFingerprint = distributionCertificateUtils.getFingerprint(\n targetCredentials.distributionCertificate\n );\n const certificateCommonName = distributionCertificateUtils.getCommonName(\n targetCredentials.distributionCertificate\n );\n this.ctx.logger.info(\n `Fingerprint = \"${certificateFingerprint}\", common name = ${certificateCommonName}`\n );\n\n this.ctx.logger.info(`Writing distribution certificate to ${distCertPath}`);\n await fs.writeFile(\n distCertPath,\n Buffer.from(targetCredentials.distributionCertificate.dataBase64, 'base64')\n );\n\n this.ctx.logger.info('Importing distribution certificate into the keychain');\n await this.keychain.importCertificate(\n distCertPath,\n targetCredentials.distributionCertificate.password\n );\n\n this.ctx.logger.info('Initializing provisioning profile');\n const provisioningProfile = new ProvisioningProfile(\n this.ctx,\n Buffer.from(targetCredentials.provisioningProfileBase64, 'base64'),\n this.keychain.data.path,\n target,\n certificateCommonName\n );\n await provisioningProfile.init();\n\n this.ctx.logger.info(\n 'Validating whether distribution certificate has been imported successfully'\n );\n await this.keychain.ensureCertificateImported(\n provisioningProfile.data.teamId,\n certificateFingerprint\n );\n\n this.ctx.logger.info(\n 'Verifying whether the distribution certificate and provisioning profile match'\n );\n provisioningProfile.verifyCertificate(certificateFingerprint);\n\n return provisioningProfile;\n } catch (err) {\n await this.cleanUp();\n throw err;\n }\n }\n\n private getApplicationTargetProvisioningProfile(): ProvisioningProfile<TJob> {\n // sorting works because bundle ids share common prefix\n const sorted = orderBy(this.provisioningProfiles, 'data.bundleIdentifier', 'asc');\n return sorted[0];\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/build-tools",
3
- "version": "0.1.174",
3
+ "version": "0.1.176",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -23,10 +23,11 @@
23
23
  "@expo/config": "^7.0.3",
24
24
  "@expo/config-plugins": "^5.0.4",
25
25
  "@expo/downloader": "0.0.23",
26
- "@expo/eas-build-job": "0.2.105",
26
+ "@expo/eas-build-job": "0.2.106",
27
27
  "@expo/logger": "0.0.27",
28
28
  "@expo/package-manager": "^0.0.57",
29
29
  "@expo/plist": "^0.0.20",
30
+ "@expo/steps": "0.0.3",
30
31
  "@expo/template-file": "0.1.25",
31
32
  "@expo/turtle-spawn": "0.0.28",
32
33
  "@expo/xcpretty": "^4.2.2",