@expo/build-tools 1.0.184 → 1.0.185

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.
@@ -0,0 +1,7 @@
1
+ export declare const COMMON_FASTLANE_ENV: {
2
+ FASTLANE_DISABLE_COLORS: string;
3
+ FASTLANE_SKIP_UPDATE_CHECK: string;
4
+ SKIP_SLOW_FASTLANE_WARNING: string;
5
+ FASTLANE_HIDE_TIMESTAMP: string;
6
+ LC_ALL: string;
7
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COMMON_FASTLANE_ENV = void 0;
4
+ exports.COMMON_FASTLANE_ENV = {
5
+ FASTLANE_DISABLE_COLORS: '1',
6
+ FASTLANE_SKIP_UPDATE_CHECK: '1',
7
+ SKIP_SLOW_FASTLANE_WARNING: 'true',
8
+ FASTLANE_HIDE_TIMESTAMP: 'true',
9
+ LC_ALL: 'en_US.UTF-8',
10
+ };
11
+ //# sourceMappingURL=fastlane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../src/common/fastlane.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG;IACjC,uBAAuB,EAAE,GAAG;IAC5B,0BAA0B,EAAE,GAAG;IAC/B,0BAA0B,EAAE,MAAM;IAClC,uBAAuB,EAAE,MAAM;IAC/B,MAAM,EAAE,aAAa;CACtB,CAAC","sourcesContent":["export const COMMON_FASTLANE_ENV = {\n FASTLANE_DISABLE_COLORS: '1',\n FASTLANE_SKIP_UPDATE_CHECK: '1',\n SKIP_SLOW_FASTLANE_WARNING: 'true',\n FASTLANE_HIDE_TIMESTAMP: 'true',\n LC_ALL: 'en_US.UTF-8',\n};\n"]}
@@ -44,13 +44,14 @@ async function prepareProjectSourcesAsync(ctx, destinationDirectory = ctx.buildD
44
44
  }
45
45
  exports.prepareProjectSourcesAsync = prepareProjectSourcesAsync;
46
46
  async function fetchRepositoryUrlAsync(ctx) {
47
+ var _a;
47
48
  const taskId = (0, nullthrows_1.default)(ctx.env.EAS_BUILD_ID, 'EAS_BUILD_ID is not set');
48
49
  const expoApiServerURL = (0, nullthrows_1.default)(ctx.env.__API_SERVER_URL, '__API_SERVER_URL is not set');
49
- const expoToken = (0, nullthrows_1.default)(ctx.env.EXPO_TOKEN, 'EXPO_TOKEN is not set');
50
+ const robotAccessToken = (0, nullthrows_1.default)((_a = ctx.job.secrets) === null || _a === void 0 ? void 0 : _a.robotAccessToken, 'robot access token is not set');
50
51
  const response = await (0, turtleFetch_1.turtleFetch)(new URL(`/v2/github/fetch-github-repository-url`, expoApiServerURL).toString(), 'POST', {
51
52
  json: { taskId },
52
53
  headers: {
53
- Authorization: `Bearer ${expoToken}`,
54
+ Authorization: `Bearer ${robotAccessToken}`,
54
55
  },
55
56
  timeout: 20000,
56
57
  retries: 3,
@@ -1 +1 @@
1
- {"version":3,"file":"projectSources.js","sourceRoot":"","sources":["../../src/common/projectSources.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,sEAAuC;AACvC,wDAA0B;AAC1B,uDAA6D;AAE7D,kEAA4C;AAC5C,6BAAwB;AACxB,2CAA4C;AAC5C,4DAAoC;AAGpC,sDAAmD;AAEnD,+BAAoD;AAE7C,KAAK,UAAU,0BAA0B,CAC9C,GAAuB,EACvB,oBAAoB,GAAG,GAAG,CAAC,cAAc;IAEzC,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,iCAAiB,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;SAAM,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,iCAAiB,CAAC,IAAI,EAAE,CAAC;QAClE,MAAM,iCAAiC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,4BAA4B;IAC/H,CAAC;SAAM,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,iCAAiB,CAAC,GAAG,EAAE,CAAC;QACjE,MAAM,sCAAsC,CAC1C,GAAG,EACH,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAC1B,oBAAoB,CACrB,CAAC;IACJ,CAAC;SAAM,IAAI,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,iCAAiB,CAAC,GAAG,EAAE,CAAC;QACjE,IAAI,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC;QACzD,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D,EAAE,GAAG,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,IAAA,iCAA2B,EAAC;YAChC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa,EAAE;gBACb,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc;gBACzB,aAAa;aACd;YACD,oBAAoB;SACrB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AA/BD,gEA+BC;AAED,KAAK,UAAU,uBAAuB,CAAC,GAAsB;IAC3D,MAAM,MAAM,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAAC;IAC7F,MAAM,SAAS,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAW,EAChC,IAAI,GAAG,CAAC,wCAAwC,EAAE,gBAAgB,CAAC,CAAC,QAAQ,EAAE,EAC9E,MAAM,EACN;QACE,IAAI,EAAE,EAAE,MAAM,EAAE;QAChB,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,SAAS,EAAE;SACrC;QACD,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CACF,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAW,EAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,MAAM,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,IAAA,qBAAW,EAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,CAAC,MAAM,MAAM,UAAU,CAAC,MAAM,EAAE,CAChF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAC;SACjB,MAAM,CAAC;QACN,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;YACb,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;SAChC,CAAC;KACH,CAAC;SACD,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,MAAM,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5C,CAAC;AAEM,KAAK,UAAU,sCAAsC,CAC1D,GAAuB,EACvB,iBAAyB,EACzB,oBAA4B;;IAE5B,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,IAAA,oBAAY,EAAC,iBAAiB,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAA,GAAG,CAAC,WAAW,oDAAG,oCAAoC,EAAE,GAAG,EAAE;YAC3D,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE;SAC1C,CAAC,CAAC;QACH,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,gBAAgB,CAAC;QACrB,WAAW,EAAE,oBAAoB;QACjC,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CAAC;AACL,CAAC;AApBD,wFAoBC;AAED,KAAK,UAAU,iCAAiC,CAC9C,GAAuB,EACvB,kBAA0B,EAC1B,oBAA4B;IAE5B,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IACnE,MAAM,kBAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAElD,MAAM,gBAAgB,CAAC;QACrB,WAAW,EAAE,oBAAoB;QACjC,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,EAC9B,MAAM,EACN,MAAM,EACN,WAAW,GAKZ;IACC,MAAM,IAAA,sBAAK,EAAC,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QACjF,MAAM;KACP,CAAC,CAAC;AACL,CAAC","sourcesContent":["import path from 'path';\n\nimport spawn from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport { ArchiveSourceType, Job } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport downloadFile from '@expo/downloader';\nimport { z } from 'zod';\nimport { asyncResult } from '@expo/results';\nimport nullthrows from 'nullthrows';\n\nimport { BuildContext } from '../context';\nimport { turtleFetch } from '../utils/turtleFetch';\n\nimport { shallowCloneRepositoryAsync } from './git';\n\nexport async function prepareProjectSourcesAsync<TJob extends Job>(\n ctx: BuildContext<TJob>,\n destinationDirectory = ctx.buildDirectory\n): Promise<void> {\n if (ctx.job.projectArchive.type === ArchiveSourceType.GCS) {\n throw new Error('GCS project sources should be resolved earlier to url');\n } else if (ctx.job.projectArchive.type === ArchiveSourceType.PATH) {\n await prepareProjectSourcesLocallyAsync(ctx, ctx.job.projectArchive.path, destinationDirectory); // used in eas build --local\n } else if (ctx.job.projectArchive.type === ArchiveSourceType.URL) {\n await downloadAndUnpackProjectFromTarGzAsync(\n ctx,\n ctx.job.projectArchive.url,\n destinationDirectory\n );\n } else if (ctx.job.projectArchive.type === ArchiveSourceType.GIT) {\n let repositoryUrl = ctx.job.projectArchive.repositoryUrl;\n try {\n repositoryUrl = await fetchRepositoryUrlAsync(ctx);\n } catch (err) {\n ctx.logger.error('Failed to refresh clone URL, falling back to the original one', err);\n }\n\n await shallowCloneRepositoryAsync({\n logger: ctx.logger,\n archiveSource: {\n ...ctx.job.projectArchive,\n repositoryUrl,\n },\n destinationDirectory,\n });\n }\n}\n\nasync function fetchRepositoryUrlAsync(ctx: BuildContext<Job>): Promise<string> {\n const taskId = nullthrows(ctx.env.EAS_BUILD_ID, 'EAS_BUILD_ID is not set');\n const expoApiServerURL = nullthrows(ctx.env.__API_SERVER_URL, '__API_SERVER_URL is not set');\n const expoToken = nullthrows(ctx.env.EXPO_TOKEN, 'EXPO_TOKEN is not set');\n\n const response = await turtleFetch(\n new URL(`/v2/github/fetch-github-repository-url`, expoApiServerURL).toString(),\n 'POST',\n {\n json: { taskId },\n headers: {\n Authorization: `Bearer ${expoToken}`,\n },\n timeout: 20000,\n retries: 3,\n logger: ctx.logger,\n }\n );\n\n if (!response.ok) {\n const textResult = await asyncResult(response.text());\n throw new Error(`Unexpected response from server (${response.status}): ${textResult.value}`);\n }\n\n const jsonResult = await asyncResult(response.json());\n if (!jsonResult.ok) {\n throw new Error(\n `Expected JSON response from server (${response.status}): ${jsonResult.reason}`\n );\n }\n\n const dataResult = z\n .object({\n data: z.object({\n repositoryUrl: z.string().url(),\n }),\n })\n .safeParse(jsonResult.value);\n if (!dataResult.success) {\n throw new Error(`Unexpected response from server (${response.status}): ${dataResult.error}`);\n }\n\n return dataResult.data.data.repositoryUrl;\n}\n\nexport async function downloadAndUnpackProjectFromTarGzAsync<TJob extends Job>(\n ctx: BuildContext<TJob>,\n projectArchiveUrl: string,\n destinationDirectory: string\n): Promise<void> {\n const projectTarball = path.join(ctx.workingdir, 'project.tar.gz');\n try {\n await downloadFile(projectArchiveUrl, projectTarball, { retry: 3 });\n } catch (err: any) {\n ctx.reportError?.('Failed to download project archive', err, {\n extras: { buildId: ctx.env.EAS_BUILD_ID },\n });\n throw err;\n }\n\n await unpackTarGzAsync({\n destination: destinationDirectory,\n source: projectTarball,\n logger: ctx.logger,\n });\n}\n\nasync function prepareProjectSourcesLocallyAsync<TJob extends Job>(\n ctx: BuildContext<TJob>,\n projectArchivePath: string,\n destinationDirectory: string\n): Promise<void> {\n const projectTarball = path.join(ctx.workingdir, 'project.tar.gz');\n await fs.copy(projectArchivePath, projectTarball);\n\n await unpackTarGzAsync({\n destination: destinationDirectory,\n source: projectTarball,\n logger: ctx.logger,\n });\n}\n\nasync function unpackTarGzAsync({\n logger,\n source,\n destination,\n}: {\n logger: bunyan;\n source: string;\n destination: string;\n}): Promise<void> {\n await spawn('tar', ['-C', destination, '--strip-components', '1', '-zxf', source], {\n logger,\n });\n}\n"]}
1
+ {"version":3,"file":"projectSources.js","sourceRoot":"","sources":["../../src/common/projectSources.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport spawn from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport { ArchiveSourceType, Job } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport downloadFile from '@expo/downloader';\nimport { z } from 'zod';\nimport { asyncResult } from '@expo/results';\nimport nullthrows from 'nullthrows';\n\nimport { BuildContext } from '../context';\nimport { turtleFetch } from '../utils/turtleFetch';\n\nimport { shallowCloneRepositoryAsync } from './git';\n\nexport async function prepareProjectSourcesAsync<TJob extends Job>(\n ctx: BuildContext<TJob>,\n destinationDirectory = ctx.buildDirectory\n): Promise<void> {\n if (ctx.job.projectArchive.type === ArchiveSourceType.GCS) {\n throw new Error('GCS project sources should be resolved earlier to url');\n } else if (ctx.job.projectArchive.type === ArchiveSourceType.PATH) {\n await prepareProjectSourcesLocallyAsync(ctx, ctx.job.projectArchive.path, destinationDirectory); // used in eas build --local\n } else if (ctx.job.projectArchive.type === ArchiveSourceType.URL) {\n await downloadAndUnpackProjectFromTarGzAsync(\n ctx,\n ctx.job.projectArchive.url,\n destinationDirectory\n );\n } else if (ctx.job.projectArchive.type === ArchiveSourceType.GIT) {\n let repositoryUrl = ctx.job.projectArchive.repositoryUrl;\n try {\n repositoryUrl = await fetchRepositoryUrlAsync(ctx);\n } catch (err) {\n ctx.logger.error('Failed to refresh clone URL, falling back to the original one', err);\n }\n\n await shallowCloneRepositoryAsync({\n logger: ctx.logger,\n archiveSource: {\n ...ctx.job.projectArchive,\n repositoryUrl,\n },\n destinationDirectory,\n });\n }\n}\n\nasync function fetchRepositoryUrlAsync(ctx: BuildContext<Job>): Promise<string> {\n const taskId = nullthrows(ctx.env.EAS_BUILD_ID, 'EAS_BUILD_ID is not set');\n const expoApiServerURL = nullthrows(ctx.env.__API_SERVER_URL, '__API_SERVER_URL is not set');\n const robotAccessToken = nullthrows(\n ctx.job.secrets?.robotAccessToken,\n 'robot access token is not set'\n );\n\n const response = await turtleFetch(\n new URL(`/v2/github/fetch-github-repository-url`, expoApiServerURL).toString(),\n 'POST',\n {\n json: { taskId },\n headers: {\n Authorization: `Bearer ${robotAccessToken}`,\n },\n timeout: 20000,\n retries: 3,\n logger: ctx.logger,\n }\n );\n\n if (!response.ok) {\n const textResult = await asyncResult(response.text());\n throw new Error(`Unexpected response from server (${response.status}): ${textResult.value}`);\n }\n\n const jsonResult = await asyncResult(response.json());\n if (!jsonResult.ok) {\n throw new Error(\n `Expected JSON response from server (${response.status}): ${jsonResult.reason}`\n );\n }\n\n const dataResult = z\n .object({\n data: z.object({\n repositoryUrl: z.string().url(),\n }),\n })\n .safeParse(jsonResult.value);\n if (!dataResult.success) {\n throw new Error(`Unexpected response from server (${response.status}): ${dataResult.error}`);\n }\n\n return dataResult.data.data.repositoryUrl;\n}\n\nexport async function downloadAndUnpackProjectFromTarGzAsync<TJob extends Job>(\n ctx: BuildContext<TJob>,\n projectArchiveUrl: string,\n destinationDirectory: string\n): Promise<void> {\n const projectTarball = path.join(ctx.workingdir, 'project.tar.gz');\n try {\n await downloadFile(projectArchiveUrl, projectTarball, { retry: 3 });\n } catch (err: any) {\n ctx.reportError?.('Failed to download project archive', err, {\n extras: { buildId: ctx.env.EAS_BUILD_ID },\n });\n throw err;\n }\n\n await unpackTarGzAsync({\n destination: destinationDirectory,\n source: projectTarball,\n logger: ctx.logger,\n });\n}\n\nasync function prepareProjectSourcesLocallyAsync<TJob extends Job>(\n ctx: BuildContext<TJob>,\n projectArchivePath: string,\n destinationDirectory: string\n): Promise<void> {\n const projectTarball = path.join(ctx.workingdir, 'project.tar.gz');\n await fs.copy(projectArchivePath, projectTarball);\n\n await unpackTarGzAsync({\n destination: destinationDirectory,\n source: projectTarball,\n logger: ctx.logger,\n });\n}\n\nasync function unpackTarGzAsync({\n logger,\n source,\n destination,\n}: {\n logger: bunyan;\n source: string;\n destination: string;\n}): Promise<void> {\n await spawn('tar', ['-C', destination, '--strip-components', '1', '-zxf', source], {\n logger,\n });\n}\n"]}
package/dist/context.js CHANGED
@@ -28,31 +28,7 @@ class BuildContext {
28
28
  this.cacheManager = options.cacheManager;
29
29
  this._uploadArtifact = options.uploadArtifact;
30
30
  this.reportError = options.reportError;
31
- const shouldApplyRepackOverrides = job.platform && job.mode === common_1.BuildMode.REPACK;
32
- this._job = {
33
- ...job,
34
- ...(shouldApplyRepackOverrides
35
- ? {
36
- steps: [
37
- { uses: 'eas/checkout' },
38
- { uses: 'eas/install_node_modules' },
39
- { uses: 'eas/resolve_build_config' },
40
- {
41
- uses: 'eas/__download_and_repack_golden_development_client_archive',
42
- id: 'download_and_repack_golden_development_client_archive',
43
- },
44
- {
45
- uses: 'eas/upload_artifact',
46
- name: 'Upload build artifact',
47
- with: {
48
- type: 'application-archive',
49
- path: '${ steps.download_and_repack_golden_development_client_archive.repacked_archive_path }',
50
- },
51
- },
52
- ],
53
- }
54
- : null),
55
- };
31
+ this._job = job;
56
32
  this._metadata = options.metadata;
57
33
  this.skipNativeBuild = options.skipNativeBuild;
58
34
  this.reportBuildPhaseStats = options.reportBuildPhaseStats;
@@ -161,21 +137,23 @@ class BuildContext {
161
137
  : this.buildExecutablesDirectory;
162
138
  }
163
139
  updateJobInformation(job, metadata) {
164
- var _a, _b, _c, _d, _e, _f, _g;
140
+ var _a, _b, _c, _d, _e, _f, _g, _h;
165
141
  if (this._job.triggeredBy !== common_1.BuildTrigger.GIT_BASED_INTEGRATION) {
166
142
  throw new Error('Updating job information is only allowed when build was triggered by a git-based integration.');
167
143
  }
168
144
  this._job = {
145
+ ...this._job,
169
146
  ...job,
147
+ workflowInterpolationContext: (_a = job.workflowInterpolationContext) !== null && _a !== void 0 ? _a : this.job.workflowInterpolationContext,
170
148
  triggeredBy: this._job.triggeredBy,
171
149
  secrets: {
172
150
  ...this.job.secrets,
173
151
  ...job.secrets,
174
- robotAccessToken: (_b = (_a = job.secrets) === null || _a === void 0 ? void 0 : _a.robotAccessToken) !== null && _b !== void 0 ? _b : (_c = this.job.secrets) === null || _c === void 0 ? void 0 : _c.robotAccessToken,
152
+ robotAccessToken: (_c = (_b = job.secrets) === null || _b === void 0 ? void 0 : _b.robotAccessToken) !== null && _c !== void 0 ? _c : (_d = this.job.secrets) === null || _d === void 0 ? void 0 : _d.robotAccessToken,
175
153
  environmentSecrets: [
176
154
  // Latter secrets override former ones.
177
- ...((_e = (_d = this.job.secrets) === null || _d === void 0 ? void 0 : _d.environmentSecrets) !== null && _e !== void 0 ? _e : []),
178
- ...((_g = (_f = job.secrets) === null || _f === void 0 ? void 0 : _f.environmentSecrets) !== null && _g !== void 0 ? _g : []),
155
+ ...((_f = (_e = this.job.secrets) === null || _e === void 0 ? void 0 : _e.environmentSecrets) !== null && _f !== void 0 ? _f : []),
156
+ ...((_h = (_g = job.secrets) === null || _g === void 0 ? void 0 : _g.environmentSecrets) !== null && _h !== void 0 ? _h : []),
179
157
  ],
180
158
  },
181
159
  ...(this._job.platform ? { expoBuildUrl: this._job.expoBuildUrl } : null),
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport {\n ManagedArtifactType,\n BuildPhase,\n BuildPhaseResult,\n BuildPhaseStats,\n Job,\n LogMarker,\n Env,\n errors,\n Metadata,\n EnvironmentSecretType,\n GenericArtifactType,\n isGenericArtifact,\n} from '@expo/eas-build-job';\nimport { ExpoConfig } from '@expo/config';\nimport { bunyan } from '@expo/logger';\nimport { BuildMode, BuildTrigger } from '@expo/eas-build-job/dist/common';\n\nimport { PackageManager, resolvePackageManager } from './utils/packageManager';\nimport { resolveBuildPhaseErrorAsync } from './buildErrors/detectError';\nimport { readAppConfig } from './utils/appConfig';\nimport { createTemporaryEnvironmentSecretFile } from './utils/environmentSecrets';\n\nexport type Artifacts = Partial<Record<ManagedArtifactType, string>>;\n\nexport interface CacheManager {\n saveCache(ctx: BuildContext<Job>): Promise<void>;\n restoreCache(ctx: BuildContext<Job>): Promise<void>;\n}\n\nexport interface LogBuffer {\n getLogs(): string[];\n getPhaseLogs(buildPhase: string): string[];\n}\n\nexport type ArtifactToUpload =\n | {\n type: ManagedArtifactType;\n paths: string[];\n }\n | {\n type: GenericArtifactType;\n key: string;\n paths: string[];\n };\n\nexport interface BuildContextOptions {\n workingdir: string;\n logger: bunyan;\n logBuffer: LogBuffer;\n env: Env;\n cacheManager?: CacheManager;\n uploadArtifact: (spec: { artifact: ArtifactToUpload; logger: bunyan }) => Promise<string | null>;\n reportError?: (\n msg: string,\n err?: Error,\n options?: { tags?: Record<string, string>; extras?: Record<string, string> }\n ) => void;\n reportBuildPhaseStats?: (stats: BuildPhaseStats) => void;\n skipNativeBuild?: boolean;\n metadata?: Metadata;\n}\n\nexport class SkipNativeBuildError extends Error {}\n\nexport class BuildContext<TJob extends Job = Job> {\n public readonly workingdir: string;\n public logger: bunyan;\n public readonly logBuffer: LogBuffer;\n public readonly cacheManager?: CacheManager;\n public readonly reportError?: (\n msg: string,\n err?: Error,\n options?: { tags?: Record<string, string>; extras?: Record<string, string> }\n ) => void;\n public readonly skipNativeBuild?: boolean;\n public artifacts: Artifacts = {};\n\n private _env: Env;\n private _job: TJob;\n private _metadata?: Metadata;\n private readonly defaultLogger: bunyan;\n private readonly _uploadArtifact: BuildContextOptions['uploadArtifact'];\n private buildPhase?: BuildPhase;\n private buildPhaseSkipped = false;\n private buildPhaseHasWarnings = false;\n private _appConfig?: ExpoConfig;\n private readonly reportBuildPhaseStats?: (stats: BuildPhaseStats) => void;\n\n constructor(job: TJob, options: BuildContextOptions) {\n this.workingdir = options.workingdir;\n this.defaultLogger = options.logger;\n this.logger = this.defaultLogger;\n this.logBuffer = options.logBuffer;\n this.cacheManager = options.cacheManager;\n this._uploadArtifact = options.uploadArtifact;\n this.reportError = options.reportError;\n\n const shouldApplyRepackOverrides = job.platform && job.mode === BuildMode.REPACK;\n this._job = {\n ...job,\n ...(shouldApplyRepackOverrides\n ? {\n steps: [\n { uses: 'eas/checkout' },\n { uses: 'eas/install_node_modules' },\n { uses: 'eas/resolve_build_config' },\n {\n uses: 'eas/__download_and_repack_golden_development_client_archive',\n id: 'download_and_repack_golden_development_client_archive',\n },\n {\n uses: 'eas/upload_artifact',\n name: 'Upload build artifact',\n with: {\n type: 'application-archive',\n path: '${ steps.download_and_repack_golden_development_client_archive.repacked_archive_path }',\n },\n },\n ],\n }\n : null),\n };\n this._metadata = options.metadata;\n this.skipNativeBuild = options.skipNativeBuild;\n this.reportBuildPhaseStats = options.reportBuildPhaseStats;\n\n const environmentSecrets = this.getEnvironmentSecrets(job);\n this._env = {\n ...options.env,\n ...job?.builderEnvironment?.env,\n ...environmentSecrets,\n __EAS_BUILD_ENVS_DIR: this.buildEnvsDirectory,\n };\n this._env.PATH = this._env.PATH\n ? [this.buildExecutablesDirectory, this._env.PATH].join(':')\n : this.buildExecutablesDirectory;\n }\n\n public get job(): TJob {\n return this._job;\n }\n public get metadata(): Metadata | undefined {\n return this._metadata;\n }\n public get env(): Env {\n return this._env;\n }\n public get buildDirectory(): string {\n return path.join(this.workingdir, 'build');\n }\n public get buildLogsDirectory(): string {\n return path.join(this.workingdir, 'logs');\n }\n /**\n * Directory used to store executables used during regular (non-custom) builds.\n */\n public get buildExecutablesDirectory(): string {\n return path.join(this.workingdir, 'bin');\n }\n /**\n * Directory used to store env variables registered in the current build step.\n * All values stored here will be available in the next build phase as env variables.\n */\n public get buildEnvsDirectory(): string {\n return path.join(this.workingdir, 'env');\n }\n public get environmentSecretsDirectory(): string {\n return path.join(this.workingdir, 'environment-secrets');\n }\n public get packageManager(): PackageManager {\n return resolvePackageManager(this.getReactNativeProjectDirectory());\n }\n public get appConfig(): ExpoConfig {\n if (!this._appConfig) {\n this._appConfig = readAppConfig({\n projectDir: this.getReactNativeProjectDirectory(),\n env: this.env,\n logger: this.logger,\n sdkVersion: this.metadata?.sdkVersion,\n }).exp;\n }\n return this._appConfig;\n }\n\n public async runBuildPhase<T>(\n buildPhase: BuildPhase,\n phase: () => Promise<T>,\n {\n doNotMarkStart = false,\n doNotMarkEnd = false,\n }: {\n doNotMarkStart?: boolean;\n doNotMarkEnd?: boolean;\n } = {}\n ): Promise<T> {\n let startTimestamp = Date.now();\n try {\n this.setBuildPhase(buildPhase, { doNotMarkStart });\n startTimestamp = Date.now();\n const result = await phase();\n const durationMs = Date.now() - startTimestamp;\n const buildPhaseResult: BuildPhaseResult = this.buildPhaseSkipped\n ? BuildPhaseResult.SKIPPED\n : this.buildPhaseHasWarnings\n ? BuildPhaseResult.WARNING\n : BuildPhaseResult.SUCCESS;\n await this.endCurrentBuildPhaseAsync({ result: buildPhaseResult, doNotMarkEnd, durationMs });\n return result;\n } catch (err: any) {\n const durationMs = Date.now() - startTimestamp;\n const resolvedError = await this.handleBuildPhaseErrorAsync(err, buildPhase);\n await this.endCurrentBuildPhaseAsync({ result: BuildPhaseResult.FAIL, durationMs });\n throw resolvedError;\n }\n }\n\n public markBuildPhaseSkipped(): void {\n this.buildPhaseSkipped = true;\n }\n\n public markBuildPhaseHasWarnings(): void {\n this.buildPhaseHasWarnings = true;\n }\n\n public async uploadArtifact({\n artifact,\n logger,\n }: {\n artifact: ArtifactToUpload;\n logger: bunyan;\n }): Promise<void> {\n const bucketKey = await this._uploadArtifact({ artifact, logger });\n if (bucketKey && !isGenericArtifact(artifact)) {\n this.artifacts[artifact.type] = bucketKey;\n }\n }\n\n public updateEnv(env: Env): void {\n if (this._job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating environment variables is only allowed when build was triggered by a git-based integration.'\n );\n }\n this._env = {\n ...env,\n ...this._env,\n __EAS_BUILD_ENVS_DIR: this.buildEnvsDirectory,\n };\n this._env.PATH = this._env.PATH\n ? [this.buildExecutablesDirectory, this._env.PATH].join(':')\n : this.buildExecutablesDirectory;\n }\n\n public updateJobInformation(job: TJob, metadata: Metadata): void {\n if (this._job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating job information is only allowed when build was triggered by a git-based integration.'\n );\n }\n this._job = {\n ...job,\n triggeredBy: this._job.triggeredBy,\n secrets: {\n ...this.job.secrets,\n ...job.secrets,\n robotAccessToken: job.secrets?.robotAccessToken ?? this.job.secrets?.robotAccessToken,\n environmentSecrets: [\n // Latter secrets override former ones.\n ...(this.job.secrets?.environmentSecrets ?? []),\n ...(job.secrets?.environmentSecrets ?? []),\n ],\n },\n ...(this._job.platform ? { expoBuildUrl: this._job.expoBuildUrl } : null),\n };\n this._metadata = metadata;\n }\n\n private async handleBuildPhaseErrorAsync(\n err: any,\n buildPhase: BuildPhase\n ): Promise<errors.BuildError> {\n const buildError = await resolveBuildPhaseErrorAsync(\n err,\n this.logBuffer.getPhaseLogs(buildPhase),\n {\n job: this.job,\n phase: buildPhase,\n env: this.env,\n },\n this.buildLogsDirectory\n );\n if (buildError.errorCode === errors.ErrorCode.UNKNOWN_ERROR) {\n // leaving message empty, website will display err.stack which already includes err.message\n this.logger.error({ err }, '');\n } else {\n this.logger.error(`Error: ${buildError.userFacingMessage}`);\n }\n return buildError;\n }\n\n public getReactNativeProjectDirectory(baseDirectory = this.buildDirectory): string {\n if (!this.job.platform) {\n return path.join(\n baseDirectory,\n // NOTE: We may want to add projectRootDirectory to generic jobs in the future.\n this.job.builderEnvironment.env.__EXPO_RELATIVE_BASE_DIRECTORY || '.'\n );\n }\n\n return path.join(baseDirectory, this.job.projectRootDirectory ?? '.');\n }\n\n private setBuildPhase(buildPhase: BuildPhase, { doNotMarkStart = false } = {}): void {\n if (this.buildPhase) {\n if (this.buildPhase === buildPhase) {\n return;\n } else {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result: BuildPhaseResult.UNKNOWN },\n `End phase: ${this.buildPhase}`\n );\n this.logger = this.defaultLogger;\n }\n }\n this.buildPhase = buildPhase;\n this.logger = this.defaultLogger.child({ phase: buildPhase });\n if (!doNotMarkStart) {\n this.logger.info({ marker: LogMarker.START_PHASE }, `Start phase: ${this.buildPhase}`);\n }\n }\n\n private async endCurrentBuildPhaseAsync({\n result,\n doNotMarkEnd = false,\n durationMs,\n }: {\n result: BuildPhaseResult;\n doNotMarkEnd?: boolean;\n durationMs: number;\n }): Promise<void> {\n if (!this.buildPhase) {\n return;\n }\n await this.collectAndUpdateEnvVariablesAsync();\n\n this.reportBuildPhaseStats?.({ buildPhase: this.buildPhase, result, durationMs });\n\n if (!doNotMarkEnd) {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result, durationMs },\n `End phase: ${this.buildPhase}`\n );\n }\n this.logger = this.defaultLogger;\n this.buildPhase = undefined;\n this.buildPhaseSkipped = false;\n this.buildPhaseHasWarnings = false;\n }\n\n private async collectAndUpdateEnvVariablesAsync(): Promise<void> {\n const filenames = await fs.readdir(this.buildEnvsDirectory);\n\n const entries = await Promise.all(\n filenames.map(async (basename) => {\n const rawContents = await fs.readFile(\n path.join(this.buildEnvsDirectory, basename),\n 'utf-8'\n );\n return [basename, rawContents];\n })\n );\n await Promise.all(\n filenames.map(async (basename) => {\n await fs.remove(path.join(this.buildEnvsDirectory, basename));\n })\n );\n this._env = {\n ...this._env,\n ...Object.fromEntries(entries),\n };\n }\n\n private getEnvironmentSecrets(job: TJob): Record<string, string> {\n if (!job?.secrets?.environmentSecrets) {\n return {};\n }\n\n const environmentSecrets: Record<string, string> = {};\n for (const { name, type, value } of job.secrets.environmentSecrets) {\n if (type === EnvironmentSecretType.STRING) {\n environmentSecrets[name] = value;\n } else {\n environmentSecrets[name] = createTemporaryEnvironmentSecretFile(\n this.environmentSecretsDirectory,\n value\n );\n }\n }\n return environmentSecrets;\n }\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport {\n ManagedArtifactType,\n BuildPhase,\n BuildPhaseResult,\n BuildPhaseStats,\n Job,\n LogMarker,\n Env,\n errors,\n Metadata,\n EnvironmentSecretType,\n GenericArtifactType,\n isGenericArtifact,\n} from '@expo/eas-build-job';\nimport { ExpoConfig } from '@expo/config';\nimport { bunyan } from '@expo/logger';\nimport { BuildTrigger } from '@expo/eas-build-job/dist/common';\n\nimport { PackageManager, resolvePackageManager } from './utils/packageManager';\nimport { resolveBuildPhaseErrorAsync } from './buildErrors/detectError';\nimport { readAppConfig } from './utils/appConfig';\nimport { createTemporaryEnvironmentSecretFile } from './utils/environmentSecrets';\n\nexport type Artifacts = Partial<Record<ManagedArtifactType, string>>;\n\nexport interface CacheManager {\n saveCache(ctx: BuildContext<Job>): Promise<void>;\n restoreCache(ctx: BuildContext<Job>): Promise<void>;\n}\n\nexport interface LogBuffer {\n getLogs(): string[];\n getPhaseLogs(buildPhase: string): string[];\n}\n\nexport type ArtifactToUpload =\n | {\n type: ManagedArtifactType;\n paths: string[];\n }\n | {\n type: GenericArtifactType;\n key: string;\n paths: string[];\n };\n\nexport interface BuildContextOptions {\n workingdir: string;\n logger: bunyan;\n logBuffer: LogBuffer;\n env: Env;\n cacheManager?: CacheManager;\n uploadArtifact: (spec: { artifact: ArtifactToUpload; logger: bunyan }) => Promise<string | null>;\n reportError?: (\n msg: string,\n err?: Error,\n options?: { tags?: Record<string, string>; extras?: Record<string, string> }\n ) => void;\n reportBuildPhaseStats?: (stats: BuildPhaseStats) => void;\n skipNativeBuild?: boolean;\n metadata?: Metadata;\n}\n\nexport class SkipNativeBuildError extends Error {}\n\nexport class BuildContext<TJob extends Job = Job> {\n public readonly workingdir: string;\n public logger: bunyan;\n public readonly logBuffer: LogBuffer;\n public readonly cacheManager?: CacheManager;\n public readonly reportError?: (\n msg: string,\n err?: Error,\n options?: { tags?: Record<string, string>; extras?: Record<string, string> }\n ) => void;\n public readonly skipNativeBuild?: boolean;\n public artifacts: Artifacts = {};\n\n private _env: Env;\n private _job: TJob;\n private _metadata?: Metadata;\n private readonly defaultLogger: bunyan;\n private readonly _uploadArtifact: BuildContextOptions['uploadArtifact'];\n private buildPhase?: BuildPhase;\n private buildPhaseSkipped = false;\n private buildPhaseHasWarnings = false;\n private _appConfig?: ExpoConfig;\n private readonly reportBuildPhaseStats?: (stats: BuildPhaseStats) => void;\n\n constructor(job: TJob, options: BuildContextOptions) {\n this.workingdir = options.workingdir;\n this.defaultLogger = options.logger;\n this.logger = this.defaultLogger;\n this.logBuffer = options.logBuffer;\n this.cacheManager = options.cacheManager;\n this._uploadArtifact = options.uploadArtifact;\n this.reportError = options.reportError;\n\n this._job = job;\n this._metadata = options.metadata;\n this.skipNativeBuild = options.skipNativeBuild;\n this.reportBuildPhaseStats = options.reportBuildPhaseStats;\n\n const environmentSecrets = this.getEnvironmentSecrets(job);\n this._env = {\n ...options.env,\n ...job?.builderEnvironment?.env,\n ...environmentSecrets,\n __EAS_BUILD_ENVS_DIR: this.buildEnvsDirectory,\n };\n this._env.PATH = this._env.PATH\n ? [this.buildExecutablesDirectory, this._env.PATH].join(':')\n : this.buildExecutablesDirectory;\n }\n\n public get job(): TJob {\n return this._job;\n }\n public get metadata(): Metadata | undefined {\n return this._metadata;\n }\n public get env(): Env {\n return this._env;\n }\n public get buildDirectory(): string {\n return path.join(this.workingdir, 'build');\n }\n public get buildLogsDirectory(): string {\n return path.join(this.workingdir, 'logs');\n }\n /**\n * Directory used to store executables used during regular (non-custom) builds.\n */\n public get buildExecutablesDirectory(): string {\n return path.join(this.workingdir, 'bin');\n }\n /**\n * Directory used to store env variables registered in the current build step.\n * All values stored here will be available in the next build phase as env variables.\n */\n public get buildEnvsDirectory(): string {\n return path.join(this.workingdir, 'env');\n }\n public get environmentSecretsDirectory(): string {\n return path.join(this.workingdir, 'environment-secrets');\n }\n public get packageManager(): PackageManager {\n return resolvePackageManager(this.getReactNativeProjectDirectory());\n }\n public get appConfig(): ExpoConfig {\n if (!this._appConfig) {\n this._appConfig = readAppConfig({\n projectDir: this.getReactNativeProjectDirectory(),\n env: this.env,\n logger: this.logger,\n sdkVersion: this.metadata?.sdkVersion,\n }).exp;\n }\n return this._appConfig;\n }\n\n public async runBuildPhase<T>(\n buildPhase: BuildPhase,\n phase: () => Promise<T>,\n {\n doNotMarkStart = false,\n doNotMarkEnd = false,\n }: {\n doNotMarkStart?: boolean;\n doNotMarkEnd?: boolean;\n } = {}\n ): Promise<T> {\n let startTimestamp = Date.now();\n try {\n this.setBuildPhase(buildPhase, { doNotMarkStart });\n startTimestamp = Date.now();\n const result = await phase();\n const durationMs = Date.now() - startTimestamp;\n const buildPhaseResult: BuildPhaseResult = this.buildPhaseSkipped\n ? BuildPhaseResult.SKIPPED\n : this.buildPhaseHasWarnings\n ? BuildPhaseResult.WARNING\n : BuildPhaseResult.SUCCESS;\n await this.endCurrentBuildPhaseAsync({ result: buildPhaseResult, doNotMarkEnd, durationMs });\n return result;\n } catch (err: any) {\n const durationMs = Date.now() - startTimestamp;\n const resolvedError = await this.handleBuildPhaseErrorAsync(err, buildPhase);\n await this.endCurrentBuildPhaseAsync({ result: BuildPhaseResult.FAIL, durationMs });\n throw resolvedError;\n }\n }\n\n public markBuildPhaseSkipped(): void {\n this.buildPhaseSkipped = true;\n }\n\n public markBuildPhaseHasWarnings(): void {\n this.buildPhaseHasWarnings = true;\n }\n\n public async uploadArtifact({\n artifact,\n logger,\n }: {\n artifact: ArtifactToUpload;\n logger: bunyan;\n }): Promise<void> {\n const bucketKey = await this._uploadArtifact({ artifact, logger });\n if (bucketKey && !isGenericArtifact(artifact)) {\n this.artifacts[artifact.type] = bucketKey;\n }\n }\n\n public updateEnv(env: Env): void {\n if (this._job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating environment variables is only allowed when build was triggered by a git-based integration.'\n );\n }\n this._env = {\n ...env,\n ...this._env,\n __EAS_BUILD_ENVS_DIR: this.buildEnvsDirectory,\n };\n this._env.PATH = this._env.PATH\n ? [this.buildExecutablesDirectory, this._env.PATH].join(':')\n : this.buildExecutablesDirectory;\n }\n\n public updateJobInformation(job: TJob, metadata: Metadata): void {\n if (this._job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating job information is only allowed when build was triggered by a git-based integration.'\n );\n }\n this._job = {\n ...this._job,\n ...job,\n workflowInterpolationContext:\n job.workflowInterpolationContext ?? this.job.workflowInterpolationContext,\n triggeredBy: this._job.triggeredBy,\n secrets: {\n ...this.job.secrets,\n ...job.secrets,\n robotAccessToken: job.secrets?.robotAccessToken ?? this.job.secrets?.robotAccessToken,\n environmentSecrets: [\n // Latter secrets override former ones.\n ...(this.job.secrets?.environmentSecrets ?? []),\n ...(job.secrets?.environmentSecrets ?? []),\n ],\n },\n ...(this._job.platform ? { expoBuildUrl: this._job.expoBuildUrl } : null),\n };\n this._metadata = metadata;\n }\n\n private async handleBuildPhaseErrorAsync(\n err: any,\n buildPhase: BuildPhase\n ): Promise<errors.BuildError> {\n const buildError = await resolveBuildPhaseErrorAsync(\n err,\n this.logBuffer.getPhaseLogs(buildPhase),\n {\n job: this.job,\n phase: buildPhase,\n env: this.env,\n },\n this.buildLogsDirectory\n );\n if (buildError.errorCode === errors.ErrorCode.UNKNOWN_ERROR) {\n // leaving message empty, website will display err.stack which already includes err.message\n this.logger.error({ err }, '');\n } else {\n this.logger.error(`Error: ${buildError.userFacingMessage}`);\n }\n return buildError;\n }\n\n public getReactNativeProjectDirectory(baseDirectory = this.buildDirectory): string {\n if (!this.job.platform) {\n return path.join(\n baseDirectory,\n // NOTE: We may want to add projectRootDirectory to generic jobs in the future.\n this.job.builderEnvironment.env.__EXPO_RELATIVE_BASE_DIRECTORY || '.'\n );\n }\n\n return path.join(baseDirectory, this.job.projectRootDirectory ?? '.');\n }\n\n private setBuildPhase(buildPhase: BuildPhase, { doNotMarkStart = false } = {}): void {\n if (this.buildPhase) {\n if (this.buildPhase === buildPhase) {\n return;\n } else {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result: BuildPhaseResult.UNKNOWN },\n `End phase: ${this.buildPhase}`\n );\n this.logger = this.defaultLogger;\n }\n }\n this.buildPhase = buildPhase;\n this.logger = this.defaultLogger.child({ phase: buildPhase });\n if (!doNotMarkStart) {\n this.logger.info({ marker: LogMarker.START_PHASE }, `Start phase: ${this.buildPhase}`);\n }\n }\n\n private async endCurrentBuildPhaseAsync({\n result,\n doNotMarkEnd = false,\n durationMs,\n }: {\n result: BuildPhaseResult;\n doNotMarkEnd?: boolean;\n durationMs: number;\n }): Promise<void> {\n if (!this.buildPhase) {\n return;\n }\n await this.collectAndUpdateEnvVariablesAsync();\n\n this.reportBuildPhaseStats?.({ buildPhase: this.buildPhase, result, durationMs });\n\n if (!doNotMarkEnd) {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result, durationMs },\n `End phase: ${this.buildPhase}`\n );\n }\n this.logger = this.defaultLogger;\n this.buildPhase = undefined;\n this.buildPhaseSkipped = false;\n this.buildPhaseHasWarnings = false;\n }\n\n private async collectAndUpdateEnvVariablesAsync(): Promise<void> {\n const filenames = await fs.readdir(this.buildEnvsDirectory);\n\n const entries = await Promise.all(\n filenames.map(async (basename) => {\n const rawContents = await fs.readFile(\n path.join(this.buildEnvsDirectory, basename),\n 'utf-8'\n );\n return [basename, rawContents];\n })\n );\n await Promise.all(\n filenames.map(async (basename) => {\n await fs.remove(path.join(this.buildEnvsDirectory, basename));\n })\n );\n this._env = {\n ...this._env,\n ...Object.fromEntries(entries),\n };\n }\n\n private getEnvironmentSecrets(job: TJob): Record<string, string> {\n if (!job?.secrets?.environmentSecrets) {\n return {};\n }\n\n const environmentSecrets: Record<string, string> = {};\n for (const { name, type, value } of job.secrets.environmentSecrets) {\n if (type === EnvironmentSecretType.STRING) {\n environmentSecrets[name] = value;\n } else {\n environmentSecrets[name] = createTemporaryEnvironmentSecretFile(\n this.environmentSecretsDirectory,\n value\n );\n }\n }\n return environmentSecrets;\n }\n}\n"]}
@@ -51,28 +51,29 @@ class CustomBuildContext {
51
51
  expoApiServerURL: this.env.__API_SERVER_URL,
52
52
  job: this.job,
53
53
  metadata: (_a = this.metadata) !== null && _a !== void 0 ? _a : null,
54
- env: this.env,
55
54
  };
56
55
  }
57
56
  updateEnv(env) {
58
57
  this._env = env;
59
58
  }
60
59
  updateJobInformation(job, metadata) {
61
- var _a, _b, _c, _d, _e, _f, _g;
60
+ var _a, _b, _c, _d, _e, _f, _g, _h;
62
61
  if (this.job.triggeredBy !== eas_build_job_1.BuildTrigger.GIT_BASED_INTEGRATION) {
63
62
  throw new Error('Updating job information is only allowed when build was triggered by a git-based integration.');
64
63
  }
65
64
  this.job = {
65
+ ...this.job,
66
66
  ...job,
67
+ workflowInterpolationContext: (_a = job.workflowInterpolationContext) !== null && _a !== void 0 ? _a : this.job.workflowInterpolationContext,
67
68
  triggeredBy: this.job.triggeredBy,
68
69
  secrets: {
69
70
  ...this.job.secrets,
70
71
  ...job.secrets,
71
- robotAccessToken: (_b = (_a = job.secrets) === null || _a === void 0 ? void 0 : _a.robotAccessToken) !== null && _b !== void 0 ? _b : (_c = this.job.secrets) === null || _c === void 0 ? void 0 : _c.robotAccessToken,
72
+ robotAccessToken: (_c = (_b = job.secrets) === null || _b === void 0 ? void 0 : _b.robotAccessToken) !== null && _c !== void 0 ? _c : (_d = this.job.secrets) === null || _d === void 0 ? void 0 : _d.robotAccessToken,
72
73
  environmentSecrets: [
73
74
  // Latter secrets override former ones.
74
- ...((_e = (_d = this.job.secrets) === null || _d === void 0 ? void 0 : _d.environmentSecrets) !== null && _e !== void 0 ? _e : []),
75
- ...((_g = (_f = job.secrets) === null || _f === void 0 ? void 0 : _f.environmentSecrets) !== null && _g !== void 0 ? _g : []),
75
+ ...((_f = (_e = this.job.secrets) === null || _e === void 0 ? void 0 : _e.environmentSecrets) !== null && _f !== void 0 ? _f : []),
76
+ ...((_h = (_g = job.secrets) === null || _g === void 0 ? void 0 : _g.environmentSecrets) !== null && _h !== void 0 ? _h : []),
76
77
  ],
77
78
  },
78
79
  ...(this.job.platform ? { expoBuildUrl: this.job.expoBuildUrl } : null),
@@ -1 +1 @@
1
- {"version":3,"file":"customBuildContext.js","sourceRoot":"","sources":["../src/customBuildContext.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AAExB,uDAS6B;AAE7B,uCAAiF;AAIjF,MAAM,8BAA8B,GAA2C;IAC7E,CAAC,wBAAQ,CAAC,OAAO,CAAC,EAAE,4BAAoB,CAAC,KAAK;IAC9C,CAAC,wBAAQ,CAAC,GAAG,CAAC,EAAE,4BAAoB,CAAC,MAAM;CAC5C,CAAC;AAMF,MAAa,kBAAkB;IA4B7B,YAAY,QAA4B;QACtC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAElC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,0BAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,sBAAsB,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;QACvF,IAAI,CAAC,sBAAsB,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,8BAA8B,EAAE,CAAC;QACzE,IAAI,CAAC,kBAAkB,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG;YAChB,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC;SACjE,CAAC;IACJ,CAAC;IAEM,WAAW;QAChB,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,IAAW,eAAe;QACxB,qCAAqC;QACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAA,gBAAM,EACJ,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAC7D,oDAAoD,OAAO,CAAC,QAAQ,EAAE,CACvE,CAAC;YACF,OAAO;gBACL,KAAK,EAAE,4BAAoB,CAAC,KAAK;gBACjC,MAAM,EAAE,4BAAoB,CAAC,MAAM;aACpC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,iEAAiE;IAC1D,aAAa;;QAClB,OAAO;YACL,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B;YACxC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB;YAC3C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,MAAA,IAAI,CAAC,QAAQ,mCAAI,IAAI;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC;IACJ,CAAC;IAEM,SAAS,CAAC,GAAQ;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAEM,oBAAoB,CAAC,GAAS,EAAE,QAAkB;;QACvD,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,4BAAY,CAAC,qBAAqB,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,GAAG;YACT,GAAG,GAAG;YACN,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW;YACjC,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO;gBACnB,GAAG,GAAG,CAAC,OAAO;gBACd,gBAAgB,EAAE,MAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,gBAAgB,mCAAI,MAAA,IAAI,CAAC,GAAG,CAAC,OAAO,0CAAE,gBAAgB;gBACrF,kBAAkB,EAAE;oBAClB,uCAAuC;oBACvC,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,GAAG,CAAC,OAAO,0CAAE,kBAAkB,mCAAI,EAAE,CAAC;oBAC/C,GAAG,CAAC,MAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,kBAAkB,mCAAI,EAAE,CAAC;iBAC3C;aACF;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACxE,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAzGD,gDAyGC","sourcesContent":["import assert from 'assert';\nimport path from 'path';\n\nimport {\n BuildJob,\n BuildPhase,\n BuildTrigger,\n Env,\n Job,\n Metadata,\n Platform,\n StaticJobInterpolationContext,\n} from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport { ExternalBuildContextProvider, BuildRuntimePlatform } from '@expo/steps';\n\nimport { ArtifactToUpload, BuildContext } from './context';\n\nconst platformToBuildRuntimePlatform: Record<Platform, BuildRuntimePlatform> = {\n [Platform.ANDROID]: BuildRuntimePlatform.LINUX,\n [Platform.IOS]: BuildRuntimePlatform.DARWIN,\n};\n\nexport interface BuilderRuntimeApi {\n uploadArtifact: (spec: { artifact: ArtifactToUpload; logger: bunyan }) => Promise<void>;\n}\n\nexport class CustomBuildContext<TJob extends Job = Job> implements ExternalBuildContextProvider {\n /*\n * Directory that contains project sources before eas/checkout.\n */\n public readonly projectSourceDirectory: string;\n\n /*\n * Directory where build is executed. eas/checkout will copy sources here.\n */\n public readonly projectTargetDirectory: string;\n\n /*\n * Directory where all build steps will be executed unless configured otherwise.\n */\n public readonly defaultWorkingDirectory: string;\n\n /*\n * Directory where build logs will be stored unless configure otherwise.\n */\n public readonly buildLogsDirectory: string;\n\n public readonly logger: bunyan;\n public readonly runtimeApi: BuilderRuntimeApi;\n public job: TJob;\n public metadata?: Metadata;\n\n private _env: Env;\n\n constructor(buildCtx: BuildContext<TJob>) {\n this._env = buildCtx.env;\n this.job = buildCtx.job;\n this.metadata = buildCtx.metadata;\n\n this.logger = buildCtx.logger.child({ phase: BuildPhase.CUSTOM });\n this.projectSourceDirectory = path.join(buildCtx.workingdir, 'temporary-custom-build');\n this.projectTargetDirectory = path.join(buildCtx.workingdir, 'build');\n this.defaultWorkingDirectory = buildCtx.getReactNativeProjectDirectory();\n this.buildLogsDirectory = path.join(buildCtx.workingdir, 'logs');\n this.runtimeApi = {\n uploadArtifact: (...args) => buildCtx['uploadArtifact'](...args),\n };\n }\n\n public hasBuildJob(): this is CustomBuildContext<BuildJob> {\n return Boolean(this.job.platform);\n }\n\n public get runtimePlatform(): BuildRuntimePlatform {\n // Generic jobs are not per-platform.\n if (!this.job.platform) {\n assert(\n process.platform === 'linux' || process.platform === 'darwin',\n `Invalid platform, expected linux or darwin, got: ${process.platform}`\n );\n return {\n linux: BuildRuntimePlatform.LINUX,\n darwin: BuildRuntimePlatform.DARWIN,\n }[process.platform];\n }\n\n return platformToBuildRuntimePlatform[this.job.platform];\n }\n\n public get env(): Env {\n return this._env;\n }\n\n // We omit steps, because CustomBuildContext does not have steps.\n public staticContext(): Omit<StaticJobInterpolationContext, 'steps'> {\n return {\n ...this.job.workflowInterpolationContext,\n expoApiServerURL: this.env.__API_SERVER_URL,\n job: this.job,\n metadata: this.metadata ?? null,\n env: this.env,\n };\n }\n\n public updateEnv(env: Env): void {\n this._env = env;\n }\n\n public updateJobInformation(job: TJob, metadata: Metadata): void {\n if (this.job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating job information is only allowed when build was triggered by a git-based integration.'\n );\n }\n this.job = {\n ...job,\n triggeredBy: this.job.triggeredBy,\n secrets: {\n ...this.job.secrets,\n ...job.secrets,\n robotAccessToken: job.secrets?.robotAccessToken ?? this.job.secrets?.robotAccessToken,\n environmentSecrets: [\n // Latter secrets override former ones.\n ...(this.job.secrets?.environmentSecrets ?? []),\n ...(job.secrets?.environmentSecrets ?? []),\n ],\n },\n ...(this.job.platform ? { expoBuildUrl: this.job.expoBuildUrl } : null),\n };\n this.metadata = metadata;\n }\n}\n"]}
1
+ {"version":3,"file":"customBuildContext.js","sourceRoot":"","sources":["../src/customBuildContext.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport path from 'path';\n\nimport {\n BuildJob,\n BuildPhase,\n BuildTrigger,\n Env,\n Job,\n Metadata,\n Platform,\n StaticJobInterpolationContext,\n} from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport { ExternalBuildContextProvider, BuildRuntimePlatform } from '@expo/steps';\n\nimport { ArtifactToUpload, BuildContext } from './context';\n\nconst platformToBuildRuntimePlatform: Record<Platform, BuildRuntimePlatform> = {\n [Platform.ANDROID]: BuildRuntimePlatform.LINUX,\n [Platform.IOS]: BuildRuntimePlatform.DARWIN,\n};\n\nexport interface BuilderRuntimeApi {\n uploadArtifact: (spec: { artifact: ArtifactToUpload; logger: bunyan }) => Promise<void>;\n}\n\nexport class CustomBuildContext<TJob extends Job = Job> implements ExternalBuildContextProvider {\n /*\n * Directory that contains project sources before eas/checkout.\n */\n public readonly projectSourceDirectory: string;\n\n /*\n * Directory where build is executed. eas/checkout will copy sources here.\n */\n public readonly projectTargetDirectory: string;\n\n /*\n * Directory where all build steps will be executed unless configured otherwise.\n */\n public readonly defaultWorkingDirectory: string;\n\n /*\n * Directory where build logs will be stored unless configure otherwise.\n */\n public readonly buildLogsDirectory: string;\n\n public readonly logger: bunyan;\n public readonly runtimeApi: BuilderRuntimeApi;\n public job: TJob;\n public metadata?: Metadata;\n\n private _env: Env;\n\n constructor(buildCtx: BuildContext<TJob>) {\n this._env = buildCtx.env;\n this.job = buildCtx.job;\n this.metadata = buildCtx.metadata;\n\n this.logger = buildCtx.logger.child({ phase: BuildPhase.CUSTOM });\n this.projectSourceDirectory = path.join(buildCtx.workingdir, 'temporary-custom-build');\n this.projectTargetDirectory = path.join(buildCtx.workingdir, 'build');\n this.defaultWorkingDirectory = buildCtx.getReactNativeProjectDirectory();\n this.buildLogsDirectory = path.join(buildCtx.workingdir, 'logs');\n this.runtimeApi = {\n uploadArtifact: (...args) => buildCtx['uploadArtifact'](...args),\n };\n }\n\n public hasBuildJob(): this is CustomBuildContext<BuildJob> {\n return Boolean(this.job.platform);\n }\n\n public get runtimePlatform(): BuildRuntimePlatform {\n // Generic jobs are not per-platform.\n if (!this.job.platform) {\n assert(\n process.platform === 'linux' || process.platform === 'darwin',\n `Invalid platform, expected linux or darwin, got: ${process.platform}`\n );\n return {\n linux: BuildRuntimePlatform.LINUX,\n darwin: BuildRuntimePlatform.DARWIN,\n }[process.platform];\n }\n\n return platformToBuildRuntimePlatform[this.job.platform];\n }\n\n public get env(): Env {\n return this._env;\n }\n\n // We omit steps, because CustomBuildContext does not have steps.\n public staticContext(): Omit<StaticJobInterpolationContext, 'steps'> {\n return {\n ...this.job.workflowInterpolationContext,\n expoApiServerURL: this.env.__API_SERVER_URL,\n job: this.job,\n metadata: this.metadata ?? null,\n };\n }\n\n public updateEnv(env: Env): void {\n this._env = env;\n }\n\n public updateJobInformation(job: TJob, metadata: Metadata): void {\n if (this.job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating job information is only allowed when build was triggered by a git-based integration.'\n );\n }\n this.job = {\n ...this.job,\n ...job,\n workflowInterpolationContext:\n job.workflowInterpolationContext ?? this.job.workflowInterpolationContext,\n triggeredBy: this.job.triggeredBy,\n secrets: {\n ...this.job.secrets,\n ...job.secrets,\n robotAccessToken: job.secrets?.robotAccessToken ?? this.job.secrets?.robotAccessToken,\n environmentSecrets: [\n // Latter secrets override former ones.\n ...(this.job.secrets?.environmentSecrets ?? []),\n ...(job.secrets?.environmentSecrets ?? []),\n ],\n },\n ...(this.job.platform ? { expoBuildUrl: this.job.expoBuildUrl } : null),\n };\n this.metadata = metadata;\n }\n}\n"]}
@@ -9,6 +9,7 @@ const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
9
9
  const fs_extra_1 = __importDefault(require("fs-extra"));
10
10
  const nullthrows_1 = __importDefault(require("nullthrows"));
11
11
  const context_1 = require("../context");
12
+ const fastlane_1 = require("../common/fastlane");
12
13
  const gymfile_1 = require("./gymfile");
13
14
  const xcpretty_1 = require("./xcpretty");
14
15
  const tvos_1 = require("./tvos");
@@ -58,16 +59,11 @@ async function runFastlaneResign(ctx, { credentials, ipaPath }) {
58
59
  }
59
60
  exports.runFastlaneResign = runFastlaneResign;
60
61
  async function runFastlane(fastlaneArgs, { logger, env, cwd, } = {}) {
61
- const fastlaneEnvVars = {
62
- FASTLANE_DISABLE_COLORS: '1',
63
- FASTLANE_SKIP_UPDATE_CHECK: '1',
64
- SKIP_SLOW_FASTLANE_WARNING: 'true',
65
- FASTLANE_HIDE_TIMESTAMP: 'true',
66
- LC_ALL: 'en_US.UTF-8',
67
- ...(env !== null && env !== void 0 ? env : process.env),
68
- };
69
62
  return await (0, turtle_spawn_1.default)('fastlane', fastlaneArgs, {
70
- env: fastlaneEnvVars,
63
+ env: {
64
+ ...fastlane_1.COMMON_FASTLANE_ENV,
65
+ ...(env !== null && env !== void 0 ? env : process.env),
66
+ },
71
67
  logger,
72
68
  cwd,
73
69
  });
@@ -1 +1 @@
1
- {"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../src/ios/fastlane.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport { Env, Ios } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport spawn, { SpawnResult } from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport nullthrows from 'nullthrows';\n\nimport { BuildContext, SkipNativeBuildError } from '../context';\n\nimport { createGymfileForArchiveBuild, createGymfileForSimulatorBuild } from './gymfile';\nimport { Credentials } from './credentials/manager';\nimport { XcodeBuildLogger } from './xcpretty';\nimport { isTVOS } from './tvos';\nimport { createFastfileForResigningBuild } from './fastfile';\n\nexport async function runFastlaneGym<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n {\n scheme,\n buildConfiguration,\n credentials,\n entitlements,\n extraEnv,\n }: {\n scheme: string;\n buildConfiguration?: string;\n credentials: Credentials | null;\n entitlements: object | null;\n extraEnv?: Env;\n }\n): Promise<void> {\n await ensureGymfileExists(ctx, {\n scheme,\n buildConfiguration,\n credentials,\n logsDirectory: ctx.buildLogsDirectory,\n entitlements,\n });\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping fastlane build');\n }\n const buildLogger = new XcodeBuildLogger(ctx.logger, ctx.getReactNativeProjectDirectory());\n void buildLogger.watchLogFiles(ctx.buildLogsDirectory);\n try {\n await runFastlane(['gym'], {\n cwd: path.join(ctx.getReactNativeProjectDirectory(), 'ios'),\n logger: ctx.logger,\n env: { ...ctx.env, ...extraEnv },\n });\n } finally {\n await buildLogger.flush();\n }\n}\n\nexport async function runFastlaneResign<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n { credentials, ipaPath }: { credentials: Credentials; ipaPath: string }\n): Promise<void> {\n const { certificateCommonName } = credentials.applicationTargetProvisioningProfile.data;\n\n const fastlaneDirPath = path.join(ctx.buildDirectory, 'fastlane');\n await fs.ensureDir(fastlaneDirPath);\n const fastfilePath = path.join(fastlaneDirPath, 'Fastfile');\n await createFastfileForResigningBuild({\n outputFile: fastfilePath,\n ipaPath,\n keychainPath: credentials.keychainPath,\n signingIdentity: certificateCommonName,\n targetProvisioningProfiles: credentials.targetProvisioningProfiles,\n });\n\n await runFastlane(['do_resign'], {\n cwd: ctx.buildDirectory,\n logger: ctx.logger,\n env: ctx.env,\n });\n}\n\nexport async function runFastlane(\n fastlaneArgs: string[],\n {\n logger,\n env,\n cwd,\n }: {\n logger?: bunyan;\n env?: Record<string, string>;\n cwd?: string;\n } = {}\n): Promise<SpawnResult> {\n const fastlaneEnvVars = {\n FASTLANE_DISABLE_COLORS: '1',\n FASTLANE_SKIP_UPDATE_CHECK: '1',\n SKIP_SLOW_FASTLANE_WARNING: 'true',\n FASTLANE_HIDE_TIMESTAMP: 'true',\n LC_ALL: 'en_US.UTF-8',\n ...(env ?? process.env),\n };\n return await spawn('fastlane', fastlaneArgs, {\n env: fastlaneEnvVars,\n logger,\n cwd,\n });\n}\n\nasync function ensureGymfileExists<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n {\n scheme,\n buildConfiguration,\n credentials,\n logsDirectory,\n entitlements,\n }: {\n scheme: string;\n buildConfiguration?: string;\n credentials: Credentials | null;\n logsDirectory: string;\n entitlements: object | null;\n }\n): Promise<void> {\n const gymfilePath = path.join(ctx.getReactNativeProjectDirectory(), 'ios/Gymfile');\n\n if (await fs.pathExists(gymfilePath)) {\n ctx.logger.info('Gymfile already exists');\n return;\n }\n\n ctx.logger.info('Creating Gymfile');\n if (ctx.job.simulator) {\n const isTV = await isTVOS(ctx);\n const simulatorDestination = `generic/platform=${isTV ? 'tvOS' : 'iOS'} Simulator`;\n\n await createGymfileForSimulatorBuild({\n outputFile: gymfilePath,\n scheme,\n buildConfiguration: buildConfiguration ?? 'release',\n derivedDataPath: './build',\n clean: false,\n logsDirectory,\n simulatorDestination,\n });\n } else {\n await createGymfileForArchiveBuild({\n outputFile: gymfilePath,\n credentials: nullthrows(credentials, 'credentials must exist for non-simulator builds'),\n scheme,\n buildConfiguration,\n outputDirectory: './build',\n clean: false,\n logsDirectory,\n entitlements: entitlements ?? undefined,\n });\n }\n\n ctx.logger.info('Gymfile created');\n}\n"]}
1
+ {"version":3,"file":"fastlane.js","sourceRoot":"","sources":["../../src/ios/fastlane.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport { Env, Ios } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport spawn, { SpawnResult } from '@expo/turtle-spawn';\nimport fs from 'fs-extra';\nimport nullthrows from 'nullthrows';\n\nimport { BuildContext, SkipNativeBuildError } from '../context';\nimport { COMMON_FASTLANE_ENV } from '../common/fastlane';\n\nimport { createGymfileForArchiveBuild, createGymfileForSimulatorBuild } from './gymfile';\nimport { Credentials } from './credentials/manager';\nimport { XcodeBuildLogger } from './xcpretty';\nimport { isTVOS } from './tvos';\nimport { createFastfileForResigningBuild } from './fastfile';\n\nexport async function runFastlaneGym<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n {\n scheme,\n buildConfiguration,\n credentials,\n entitlements,\n extraEnv,\n }: {\n scheme: string;\n buildConfiguration?: string;\n credentials: Credentials | null;\n entitlements: object | null;\n extraEnv?: Env;\n }\n): Promise<void> {\n await ensureGymfileExists(ctx, {\n scheme,\n buildConfiguration,\n credentials,\n logsDirectory: ctx.buildLogsDirectory,\n entitlements,\n });\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping fastlane build');\n }\n const buildLogger = new XcodeBuildLogger(ctx.logger, ctx.getReactNativeProjectDirectory());\n void buildLogger.watchLogFiles(ctx.buildLogsDirectory);\n try {\n await runFastlane(['gym'], {\n cwd: path.join(ctx.getReactNativeProjectDirectory(), 'ios'),\n logger: ctx.logger,\n env: { ...ctx.env, ...extraEnv },\n });\n } finally {\n await buildLogger.flush();\n }\n}\n\nexport async function runFastlaneResign<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n { credentials, ipaPath }: { credentials: Credentials; ipaPath: string }\n): Promise<void> {\n const { certificateCommonName } = credentials.applicationTargetProvisioningProfile.data;\n\n const fastlaneDirPath = path.join(ctx.buildDirectory, 'fastlane');\n await fs.ensureDir(fastlaneDirPath);\n const fastfilePath = path.join(fastlaneDirPath, 'Fastfile');\n await createFastfileForResigningBuild({\n outputFile: fastfilePath,\n ipaPath,\n keychainPath: credentials.keychainPath,\n signingIdentity: certificateCommonName,\n targetProvisioningProfiles: credentials.targetProvisioningProfiles,\n });\n\n await runFastlane(['do_resign'], {\n cwd: ctx.buildDirectory,\n logger: ctx.logger,\n env: ctx.env,\n });\n}\n\nexport async function runFastlane(\n fastlaneArgs: string[],\n {\n logger,\n env,\n cwd,\n }: {\n logger?: bunyan;\n env?: Record<string, string>;\n cwd?: string;\n } = {}\n): Promise<SpawnResult> {\n return await spawn('fastlane', fastlaneArgs, {\n env: {\n ...COMMON_FASTLANE_ENV,\n ...(env ?? process.env),\n },\n logger,\n cwd,\n });\n}\n\nasync function ensureGymfileExists<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n {\n scheme,\n buildConfiguration,\n credentials,\n logsDirectory,\n entitlements,\n }: {\n scheme: string;\n buildConfiguration?: string;\n credentials: Credentials | null;\n logsDirectory: string;\n entitlements: object | null;\n }\n): Promise<void> {\n const gymfilePath = path.join(ctx.getReactNativeProjectDirectory(), 'ios/Gymfile');\n\n if (await fs.pathExists(gymfilePath)) {\n ctx.logger.info('Gymfile already exists');\n return;\n }\n\n ctx.logger.info('Creating Gymfile');\n if (ctx.job.simulator) {\n const isTV = await isTVOS(ctx);\n const simulatorDestination = `generic/platform=${isTV ? 'tvOS' : 'iOS'} Simulator`;\n\n await createGymfileForSimulatorBuild({\n outputFile: gymfilePath,\n scheme,\n buildConfiguration: buildConfiguration ?? 'release',\n derivedDataPath: './build',\n clean: false,\n logsDirectory,\n simulatorDestination,\n });\n } else {\n await createGymfileForArchiveBuild({\n outputFile: gymfilePath,\n credentials: nullthrows(credentials, 'credentials must exist for non-simulator builds'),\n scheme,\n buildConfiguration,\n outputDirectory: './build',\n clean: false,\n logsDirectory,\n entitlements: entitlements ?? undefined,\n });\n }\n\n ctx.logger.info('Gymfile created');\n}\n"]}
package/dist/ios/pod.js CHANGED
@@ -9,8 +9,9 @@ const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
9
9
  async function installPods(ctx, { infoCallbackFn }) {
10
10
  const iosDir = path_1.default.join(ctx.getReactNativeProjectDirectory(), 'ios');
11
11
  const verboseFlag = ctx.env['EAS_VERBOSE'] === '1' ? ['--verbose'] : [];
12
+ const cocoapodsDeploymentFlag = ctx.env['POD_INSTALL_DEPLOYMENT'] === '1' ? ['--deployment'] : [];
12
13
  return {
13
- spawnPromise: (0, turtle_spawn_1.default)('pod', ['install', ...verboseFlag], {
14
+ spawnPromise: (0, turtle_spawn_1.default)('pod', ['install', ...verboseFlag, ...cocoapodsDeploymentFlag], {
14
15
  cwd: iosDir,
15
16
  logger: ctx.logger,
16
17
  env: {
@@ -1 +1 @@
1
- {"version":3,"file":"pod.js","sourceRoot":"","sources":["../../src/ios/pod.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAGxB,sEAAoF;AAI7E,KAAK,UAAU,WAAW,CAC/B,GAAuB,EACvB,EAAE,cAAc,EAAgB;IAEhC,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,KAAK,CAAC,CAAC;IAEtE,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExE,OAAO;QACL,YAAY,EAAE,IAAA,sBAAK,EAAC,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,EAAE;YACtD,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE;gBACH,GAAG,GAAG,CAAC,GAAG;gBACV,IAAI,EAAE,aAAa;gBACnB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B;oBACvC,CAAC,CAAC,EAAE,wBAAwB,EAAE,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE;oBACrE,CAAC,CAAC,EAAE,CAAC;aACR;YACD,eAAe,EAAE,CAAC,IAAa,EAAE,EAAE;gBACjC,IACE,CAAC,IAAI;oBACL,2EAA2E,CAAC,IAAI,CAAC,IAAI,CAAC,EACtF,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,cAAc;SACf,CAAC;KACH,CAAC;AACJ,CAAC;AAhCD,kCAgCC","sourcesContent":["import path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport spawn, { SpawnOptions, SpawnPromise, SpawnResult } from '@expo/turtle-spawn';\n\nimport { BuildContext } from '../context';\n\nexport async function installPods<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n { infoCallbackFn }: SpawnOptions\n): Promise<{ spawnPromise: SpawnPromise<SpawnResult> }> {\n const iosDir = path.join(ctx.getReactNativeProjectDirectory(), 'ios');\n\n const verboseFlag = ctx.env['EAS_VERBOSE'] === '1' ? ['--verbose'] : [];\n\n return {\n spawnPromise: spawn('pod', ['install', ...verboseFlag], {\n cwd: iosDir,\n logger: ctx.logger,\n env: {\n ...ctx.env,\n LANG: 'en_US.UTF-8',\n ...(ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL\n ? { NEXUS_COCOAPODS_REPO_URL: ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL }\n : {}),\n },\n lineTransformer: (line?: string) => {\n if (\n !line ||\n /\\[!\\] '[\\w-]+' uses the unencrypted 'http' protocol to transfer the Pod\\./.exec(line)\n ) {\n return null;\n } else {\n return line;\n }\n },\n infoCallbackFn,\n }),\n };\n}\n"]}
1
+ {"version":3,"file":"pod.js","sourceRoot":"","sources":["../../src/ios/pod.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAGxB,sEAAoF;AAI7E,KAAK,UAAU,WAAW,CAC/B,GAAuB,EACvB,EAAE,cAAc,EAAgB;IAEhC,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,KAAK,CAAC,CAAC;IAEtE,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,uBAAuB,GAAG,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAElG,OAAO;QACL,YAAY,EAAE,IAAA,sBAAK,EAAC,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,WAAW,EAAE,GAAG,uBAAuB,CAAC,EAAE;YAClF,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE;gBACH,GAAG,GAAG,CAAC,GAAG;gBACV,IAAI,EAAE,aAAa;gBACnB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B;oBACvC,CAAC,CAAC,EAAE,wBAAwB,EAAE,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE;oBACrE,CAAC,CAAC,EAAE,CAAC;aACR;YACD,eAAe,EAAE,CAAC,IAAa,EAAE,EAAE;gBACjC,IACE,CAAC,IAAI;oBACL,2EAA2E,CAAC,IAAI,CAAC,IAAI,CAAC,EACtF,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,cAAc;SACf,CAAC;KACH,CAAC;AACJ,CAAC;AAjCD,kCAiCC","sourcesContent":["import path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport spawn, { SpawnOptions, SpawnPromise, SpawnResult } from '@expo/turtle-spawn';\n\nimport { BuildContext } from '../context';\n\nexport async function installPods<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n { infoCallbackFn }: SpawnOptions\n): Promise<{ spawnPromise: SpawnPromise<SpawnResult> }> {\n const iosDir = path.join(ctx.getReactNativeProjectDirectory(), 'ios');\n\n const verboseFlag = ctx.env['EAS_VERBOSE'] === '1' ? ['--verbose'] : [];\n const cocoapodsDeploymentFlag = ctx.env['POD_INSTALL_DEPLOYMENT'] === '1' ? ['--deployment'] : [];\n\n return {\n spawnPromise: spawn('pod', ['install', ...verboseFlag, ...cocoapodsDeploymentFlag], {\n cwd: iosDir,\n logger: ctx.logger,\n env: {\n ...ctx.env,\n LANG: 'en_US.UTF-8',\n ...(ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL\n ? { NEXUS_COCOAPODS_REPO_URL: ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL }\n : {}),\n },\n lineTransformer: (line?: string) => {\n if (\n !line ||\n /\\[!\\] '[\\w-]+' uses the unencrypted 'http' protocol to transfer the Pod\\./.exec(line)\n ) {\n return null;\n } else {\n return line;\n }\n },\n infoCallbackFn,\n }),\n };\n}\n"]}
@@ -24,10 +24,10 @@ const installPods_1 = require("./functions/installPods");
24
24
  const sendSlackMessage_1 = require("./functions/sendSlackMessage");
25
25
  const resolveBuildConfig_1 = require("./functions/resolveBuildConfig");
26
26
  const calculateEASUpdateRuntimeVersion_1 = require("./functions/calculateEASUpdateRuntimeVersion");
27
- const repack_1 = require("./functions/repack");
28
27
  const eagerBundle_1 = require("./functions/eagerBundle");
29
28
  const createSubmissionEntity_1 = require("./functions/createSubmissionEntity");
30
29
  const downloadBuild_1 = require("./functions/downloadBuild");
30
+ const repack_1 = require("./functions/repack");
31
31
  function getEasFunctions(ctx) {
32
32
  const functions = [
33
33
  (0, checkout_1.createCheckoutBuildFunction)(),
@@ -36,6 +36,7 @@ function getEasFunctions(ctx) {
36
36
  (0, installNodeModules_1.createInstallNodeModulesBuildFunction)(),
37
37
  (0, prebuild_1.createPrebuildBuildFunction)(),
38
38
  (0, downloadBuild_1.createDownloadBuildFunction)(),
39
+ (0, repack_1.createRepackBuildFunction)(),
39
40
  (0, configureEASUpdateIfInstalled_1.configureEASUpdateIfInstalledFunction)(),
40
41
  (0, injectAndroidCredentials_1.injectAndroidCredentialsFunction)(),
41
42
  (0, configureAndroidVersion_1.configureAndroidVersionFunction)(),
@@ -52,7 +53,6 @@ function getEasFunctions(ctx) {
52
53
  (0, installPods_1.createInstallPodsBuildFunction)(),
53
54
  (0, sendSlackMessage_1.createSendSlackMessageFunction)(),
54
55
  (0, calculateEASUpdateRuntimeVersion_1.calculateEASUpdateRuntimeVersionFunction)(),
55
- (0, repack_1.createRepackBuildFunction)(),
56
56
  (0, createSubmissionEntity_1.createSubmissionEntityFunction)(),
57
57
  ];
58
58
  if (ctx.hasBuildJob()) {
@@ -1 +1 @@
1
- {"version":3,"file":"easFunctions.js","sourceRoot":"","sources":["../../src/steps/easFunctions.ts"],"names":[],"mappings":";;;AAIA,+DAA+E;AAC/E,mDAAmE;AACnE,yDAAwE;AACxE,uEAAuF;AACvF,mDAAmE;AACnE,yFAAyG;AACzG,6FAAkG;AAClG,mFAAwF;AACxF,iFAAsF;AACtF,qDAA0D;AAC1D,qGAA0G;AAC1G,iFAAsF;AACtF,yEAA8E;AAC9E,yFAA8F;AAC9F,yDAA8D;AAC9D,2EAA2F;AAC3F,qEAAqF;AACrF,+DAA+E;AAC/E,uIAA0I;AAC1I,yDAAyE;AACzE,mEAA8E;AAC9E,uEAAuF;AACvF,mGAAwG;AACxG,+CAA+D;AAC/D,yDAAmE;AACnE,+EAAoF;AACpF,6DAAwE;AAExE,SAAgB,eAAe,CAAC,GAAuB;IACrD,MAAM,SAAS,GAAG;QAChB,IAAA,sCAA2B,GAAE;QAC7B,IAAA,kDAAiC,EAAC,GAAG,CAAC;QACtC,IAAA,2CAA6B,GAAE;QAC/B,IAAA,0DAAqC,GAAE;QACvC,IAAA,sCAA2B,GAAE;QAC7B,IAAA,2CAA2B,GAAE;QAE7B,IAAA,qEAAqC,GAAE;QACvC,IAAA,2DAAgC,GAAE;QAClC,IAAA,yDAA+B,GAAE;QACjC,IAAA,sCAAwB,GAAE;QAC1B,IAAA,6BAAiB,GAAE;QACnB,IAAA,6EAAyC,GAAE;QAC3C,IAAA,yDAA+B,GAAE;QACjC,IAAA,iDAA2B,GAAE;QAC7B,IAAA,iEAAmC,GAAE;QACrC,IAAA,iCAAmB,GAAE;QACrB,IAAA,8DAAuC,GAAE;QACzC,IAAA,wDAAoC,GAAE;QACtC,IAAA,kDAAiC,GAAE;QAEnC,IAAA,4CAA8B,GAAE;QAChC,IAAA,iDAA8B,GAAE;QAEhC,IAAA,2EAAwC,GAAE;QAE1C,IAAA,kCAAyB,GAAE;QAE3B,IAAA,uDAA8B,GAAE;KACjC,CAAC;IAEF,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CACZ,GAAG;YACD,IAAA,4EAA8C,EAAC,GAAG,CAAC;YACnD,IAAA,0DAAqC,EAAC,GAAG,CAAC;YAC1C,IAAA,6GAAwD,EAAC,GAAG,CAAC;SAC9D,CACF,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AA5CD,0CA4CC","sourcesContent":["import { BuildFunction } from '@expo/steps';\n\nimport { CustomBuildContext } from '../customBuildContext';\n\nimport { createUploadArtifactBuildFunction } from './functions/uploadArtifact';\nimport { createCheckoutBuildFunction } from './functions/checkout';\nimport { createSetUpNpmrcBuildFunction } from './functions/useNpmToken';\nimport { createInstallNodeModulesBuildFunction } from './functions/installNodeModules';\nimport { createPrebuildBuildFunction } from './functions/prebuild';\nimport { createFindAndUploadBuildArtifactsBuildFunction } from './functions/findAndUploadBuildArtifacts';\nimport { configureEASUpdateIfInstalledFunction } from './functions/configureEASUpdateIfInstalled';\nimport { injectAndroidCredentialsFunction } from './functions/injectAndroidCredentials';\nimport { configureAndroidVersionFunction } from './functions/configureAndroidVersion';\nimport { runGradleFunction } from './functions/runGradle';\nimport { resolveAppleTeamIdFromCredentialsFunction } from './functions/resolveAppleTeamIdFromCredentials';\nimport { configureIosCredentialsFunction } from './functions/configureIosCredentials';\nimport { configureIosVersionFunction } from './functions/configureIosVersion';\nimport { generateGymfileFromTemplateFunction } from './functions/generateGymfileFromTemplate';\nimport { runFastlaneFunction } from './functions/runFastlane';\nimport { createStartAndroidEmulatorBuildFunction } from './functions/startAndroidEmulator';\nimport { createStartIosSimulatorBuildFunction } from './functions/startIosSimulator';\nimport { createInstallMaestroBuildFunction } from './functions/installMaestro';\nimport { createGetCredentialsForBuildTriggeredByGithubIntegration } from './functions/getCredentialsForBuildTriggeredByGitHubIntegration';\nimport { createInstallPodsBuildFunction } from './functions/installPods';\nimport { createSendSlackMessageFunction } from './functions/sendSlackMessage';\nimport { createResolveBuildConfigBuildFunction } from './functions/resolveBuildConfig';\nimport { calculateEASUpdateRuntimeVersionFunction } from './functions/calculateEASUpdateRuntimeVersion';\nimport { createRepackBuildFunction } from './functions/repack';\nimport { eagerBundleBuildFunction } from './functions/eagerBundle';\nimport { createSubmissionEntityFunction } from './functions/createSubmissionEntity';\nimport { createDownloadBuildFunction } from './functions/downloadBuild';\n\nexport function getEasFunctions(ctx: CustomBuildContext): BuildFunction[] {\n const functions = [\n createCheckoutBuildFunction(),\n createUploadArtifactBuildFunction(ctx),\n createSetUpNpmrcBuildFunction(),\n createInstallNodeModulesBuildFunction(),\n createPrebuildBuildFunction(),\n createDownloadBuildFunction(),\n\n configureEASUpdateIfInstalledFunction(),\n injectAndroidCredentialsFunction(),\n configureAndroidVersionFunction(),\n eagerBundleBuildFunction(),\n runGradleFunction(),\n resolveAppleTeamIdFromCredentialsFunction(),\n configureIosCredentialsFunction(),\n configureIosVersionFunction(),\n generateGymfileFromTemplateFunction(),\n runFastlaneFunction(),\n createStartAndroidEmulatorBuildFunction(),\n createStartIosSimulatorBuildFunction(),\n createInstallMaestroBuildFunction(),\n\n createInstallPodsBuildFunction(),\n createSendSlackMessageFunction(),\n\n calculateEASUpdateRuntimeVersionFunction(),\n\n createRepackBuildFunction(),\n\n createSubmissionEntityFunction(),\n ];\n\n if (ctx.hasBuildJob()) {\n functions.push(\n ...[\n createFindAndUploadBuildArtifactsBuildFunction(ctx),\n createResolveBuildConfigBuildFunction(ctx),\n createGetCredentialsForBuildTriggeredByGithubIntegration(ctx),\n ]\n );\n }\n\n return functions;\n}\n"]}
1
+ {"version":3,"file":"easFunctions.js","sourceRoot":"","sources":["../../src/steps/easFunctions.ts"],"names":[],"mappings":";;;AAIA,+DAA+E;AAC/E,mDAAmE;AACnE,yDAAwE;AACxE,uEAAuF;AACvF,mDAAmE;AACnE,yFAAyG;AACzG,6FAAkG;AAClG,mFAAwF;AACxF,iFAAsF;AACtF,qDAA0D;AAC1D,qGAA0G;AAC1G,iFAAsF;AACtF,yEAA8E;AAC9E,yFAA8F;AAC9F,yDAA8D;AAC9D,2EAA2F;AAC3F,qEAAqF;AACrF,+DAA+E;AAC/E,uIAA0I;AAC1I,yDAAyE;AACzE,mEAA8E;AAC9E,uEAAuF;AACvF,mGAAwG;AACxG,yDAAmE;AACnE,+EAAoF;AACpF,6DAAwE;AACxE,+CAA+D;AAE/D,SAAgB,eAAe,CAAC,GAAuB;IACrD,MAAM,SAAS,GAAG;QAChB,IAAA,sCAA2B,GAAE;QAC7B,IAAA,kDAAiC,EAAC,GAAG,CAAC;QACtC,IAAA,2CAA6B,GAAE;QAC/B,IAAA,0DAAqC,GAAE;QACvC,IAAA,sCAA2B,GAAE;QAC7B,IAAA,2CAA2B,GAAE;QAC7B,IAAA,kCAAyB,GAAE;QAE3B,IAAA,qEAAqC,GAAE;QACvC,IAAA,2DAAgC,GAAE;QAClC,IAAA,yDAA+B,GAAE;QACjC,IAAA,sCAAwB,GAAE;QAC1B,IAAA,6BAAiB,GAAE;QACnB,IAAA,6EAAyC,GAAE;QAC3C,IAAA,yDAA+B,GAAE;QACjC,IAAA,iDAA2B,GAAE;QAC7B,IAAA,iEAAmC,GAAE;QACrC,IAAA,iCAAmB,GAAE;QACrB,IAAA,8DAAuC,GAAE;QACzC,IAAA,wDAAoC,GAAE;QACtC,IAAA,kDAAiC,GAAE;QAEnC,IAAA,4CAA8B,GAAE;QAChC,IAAA,iDAA8B,GAAE;QAEhC,IAAA,2EAAwC,GAAE;QAE1C,IAAA,uDAA8B,GAAE;KACjC,CAAC;IAEF,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACtB,SAAS,CAAC,IAAI,CACZ,GAAG;YACD,IAAA,4EAA8C,EAAC,GAAG,CAAC;YACnD,IAAA,0DAAqC,EAAC,GAAG,CAAC;YAC1C,IAAA,6GAAwD,EAAC,GAAG,CAAC;SAC9D,CACF,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AA3CD,0CA2CC","sourcesContent":["import { BuildFunction } from '@expo/steps';\n\nimport { CustomBuildContext } from '../customBuildContext';\n\nimport { createUploadArtifactBuildFunction } from './functions/uploadArtifact';\nimport { createCheckoutBuildFunction } from './functions/checkout';\nimport { createSetUpNpmrcBuildFunction } from './functions/useNpmToken';\nimport { createInstallNodeModulesBuildFunction } from './functions/installNodeModules';\nimport { createPrebuildBuildFunction } from './functions/prebuild';\nimport { createFindAndUploadBuildArtifactsBuildFunction } from './functions/findAndUploadBuildArtifacts';\nimport { configureEASUpdateIfInstalledFunction } from './functions/configureEASUpdateIfInstalled';\nimport { injectAndroidCredentialsFunction } from './functions/injectAndroidCredentials';\nimport { configureAndroidVersionFunction } from './functions/configureAndroidVersion';\nimport { runGradleFunction } from './functions/runGradle';\nimport { resolveAppleTeamIdFromCredentialsFunction } from './functions/resolveAppleTeamIdFromCredentials';\nimport { configureIosCredentialsFunction } from './functions/configureIosCredentials';\nimport { configureIosVersionFunction } from './functions/configureIosVersion';\nimport { generateGymfileFromTemplateFunction } from './functions/generateGymfileFromTemplate';\nimport { runFastlaneFunction } from './functions/runFastlane';\nimport { createStartAndroidEmulatorBuildFunction } from './functions/startAndroidEmulator';\nimport { createStartIosSimulatorBuildFunction } from './functions/startIosSimulator';\nimport { createInstallMaestroBuildFunction } from './functions/installMaestro';\nimport { createGetCredentialsForBuildTriggeredByGithubIntegration } from './functions/getCredentialsForBuildTriggeredByGitHubIntegration';\nimport { createInstallPodsBuildFunction } from './functions/installPods';\nimport { createSendSlackMessageFunction } from './functions/sendSlackMessage';\nimport { createResolveBuildConfigBuildFunction } from './functions/resolveBuildConfig';\nimport { calculateEASUpdateRuntimeVersionFunction } from './functions/calculateEASUpdateRuntimeVersion';\nimport { eagerBundleBuildFunction } from './functions/eagerBundle';\nimport { createSubmissionEntityFunction } from './functions/createSubmissionEntity';\nimport { createDownloadBuildFunction } from './functions/downloadBuild';\nimport { createRepackBuildFunction } from './functions/repack';\n\nexport function getEasFunctions(ctx: CustomBuildContext): BuildFunction[] {\n const functions = [\n createCheckoutBuildFunction(),\n createUploadArtifactBuildFunction(ctx),\n createSetUpNpmrcBuildFunction(),\n createInstallNodeModulesBuildFunction(),\n createPrebuildBuildFunction(),\n createDownloadBuildFunction(),\n createRepackBuildFunction(),\n\n configureEASUpdateIfInstalledFunction(),\n injectAndroidCredentialsFunction(),\n configureAndroidVersionFunction(),\n eagerBundleBuildFunction(),\n runGradleFunction(),\n resolveAppleTeamIdFromCredentialsFunction(),\n configureIosCredentialsFunction(),\n configureIosVersionFunction(),\n generateGymfileFromTemplateFunction(),\n runFastlaneFunction(),\n createStartAndroidEmulatorBuildFunction(),\n createStartIosSimulatorBuildFunction(),\n createInstallMaestroBuildFunction(),\n\n createInstallPodsBuildFunction(),\n createSendSlackMessageFunction(),\n\n calculateEASUpdateRuntimeVersionFunction(),\n\n createSubmissionEntityFunction(),\n ];\n\n if (ctx.hasBuildJob()) {\n functions.push(\n ...[\n createFindAndUploadBuildArtifactsBuildFunction(ctx),\n createResolveBuildConfigBuildFunction(ctx),\n createGetCredentialsForBuildTriggeredByGithubIntegration(ctx),\n ]\n );\n }\n\n return functions;\n}\n"]}
@@ -35,7 +35,9 @@ function createEasMaestroTestFunctionGroup(buildToolsContext) {
35
35
  ];
36
36
  if (buildToolsContext.job.platform === eas_build_job_1.Platform.IOS) {
37
37
  steps.push((0, startIosSimulator_1.createStartIosSimulatorBuildFunction)().createBuildStepFromFunctionCall(globalCtx));
38
- const searchPath = (_a = inputs.app_path.value) !== null && _a !== void 0 ? _a : 'ios/build/Build/Products/*simulator/*.app';
38
+ const searchPath = (_a = inputs.app_path.getValue({
39
+ interpolationContext: globalCtx.getInterpolationContext(),
40
+ })) !== null && _a !== void 0 ? _a : 'ios/build/Build/Products/*simulator/*.app';
39
41
  steps.push(new steps_1.BuildStep(globalCtx, {
40
42
  id: steps_1.BuildStep.getNewId(),
41
43
  name: 'install_app',
@@ -62,14 +64,19 @@ function createEasMaestroTestFunctionGroup(buildToolsContext) {
62
64
  }));
63
65
  }
64
66
  else if (buildToolsContext.job.platform === eas_build_job_1.Platform.ANDROID) {
65
- steps.push((0, startAndroidEmulator_1.createStartAndroidEmulatorBuildFunction)().createBuildStepFromFunctionCall(globalCtx, inputs.android_emulator_system_image_package.value
67
+ const system_image_package = inputs.android_emulator_system_image_package.getValue({
68
+ interpolationContext: globalCtx.getInterpolationContext(),
69
+ });
70
+ steps.push((0, startAndroidEmulator_1.createStartAndroidEmulatorBuildFunction)().createBuildStepFromFunctionCall(globalCtx, system_image_package
66
71
  ? {
67
72
  callInputs: {
68
- system_image_package: inputs.android_emulator_system_image_package.value,
73
+ system_image_package,
69
74
  },
70
75
  }
71
76
  : undefined));
72
- const searchPath = (_b = inputs.app_path.value) !== null && _b !== void 0 ? _b : 'android/app/build/outputs/**/*.apk';
77
+ const searchPath = (_b = inputs.app_path.getValue({
78
+ interpolationContext: globalCtx.getInterpolationContext(),
79
+ })) !== null && _b !== void 0 ? _b : 'android/app/build/outputs/**/*.apk';
73
80
  steps.push(new steps_1.BuildStep(globalCtx, {
74
81
  id: steps_1.BuildStep.getNewId(),
75
82
  name: 'install_app',
@@ -97,7 +104,9 @@ function createEasMaestroTestFunctionGroup(buildToolsContext) {
97
104
  `,
98
105
  }));
99
106
  }
100
- const flowPaths = `${inputs.flow_path.value}`
107
+ const flowPaths = `${inputs.flow_path.getValue({
108
+ interpolationContext: globalCtx.getInterpolationContext(),
109
+ })}`
101
110
  .split('\n') // It's easy to get an empty line with YAML
102
111
  .filter((entry) => entry);
103
112
  for (const flowPath of flowPaths) {
@@ -1 +1 @@
1
- {"version":3,"file":"maestroTest.js","sourceRoot":"","sources":["../../../src/steps/functionGroups/maestroTest.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BuildFunctionGroup,\n BuildStep,\n BuildStepInput,\n BuildStepInputValueTypeName,\n} from '@expo/steps';\nimport { Platform } from '@expo/eas-build-job';\n\nimport { CustomBuildContext } from '../../customBuildContext';\nimport { createInstallMaestroBuildFunction } from '../functions/installMaestro';\nimport { createStartIosSimulatorBuildFunction } from '../functions/startIosSimulator';\nimport { createStartAndroidEmulatorBuildFunction } from '../functions/startAndroidEmulator';\nimport { createUploadArtifactBuildFunction } from '../functions/uploadArtifact';\n\nexport function createEasMaestroTestFunctionGroup(\n buildToolsContext: CustomBuildContext\n): BuildFunctionGroup {\n return new BuildFunctionGroup({\n namespace: 'eas',\n id: 'maestro_test',\n inputProviders: [\n BuildStepInput.createProvider({\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n id: 'flow_path',\n required: true,\n }),\n BuildStepInput.createProvider({\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n id: 'app_path',\n required: false,\n }),\n BuildStepInput.createProvider({\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n id: 'android_emulator_system_image_package',\n required: false,\n }),\n ],\n createBuildStepsFromFunctionGroupCall: (globalCtx, { inputs }) => {\n const steps: BuildStep[] = [\n createInstallMaestroBuildFunction().createBuildStepFromFunctionCall(globalCtx),\n ];\n\n if (buildToolsContext.job.platform === Platform.IOS) {\n steps.push(\n createStartIosSimulatorBuildFunction().createBuildStepFromFunctionCall(globalCtx)\n );\n const searchPath = inputs.app_path.value ?? 'ios/build/Build/Products/*simulator/*.app';\n steps.push(\n new BuildStep(globalCtx, {\n id: BuildStep.getNewId(),\n name: 'install_app',\n displayName: `Install app to Simulator`,\n command: `\n # shopt -s nullglob is necessary not to try to install\n # SEARCH_PATH literally if there are no matching files.\n shopt -s nullglob\n\n SEARCH_PATH=\"${searchPath}\"\n FILES_FOUND=false\n\n for APP_PATH in $SEARCH_PATH; do\n FILES_FOUND=true\n echo \"Installing \\\\\"$APP_PATH\\\\\"\"\n xcrun simctl install booted \"$APP_PATH\"\n done\n\n if ! $FILES_FOUND; then\n echo \"No files found matching \\\\\"$SEARCH_PATH\\\\\". Are you sure you've built a Simulator app?\"\n exit 1\n fi\n `,\n })\n );\n } else if (buildToolsContext.job.platform === Platform.ANDROID) {\n steps.push(\n createStartAndroidEmulatorBuildFunction().createBuildStepFromFunctionCall(\n globalCtx,\n inputs.android_emulator_system_image_package.value\n ? {\n callInputs: {\n system_image_package: inputs.android_emulator_system_image_package.value,\n },\n }\n : undefined\n )\n );\n const searchPath = inputs.app_path.value ?? 'android/app/build/outputs/**/*.apk';\n steps.push(\n new BuildStep(globalCtx, {\n id: BuildStep.getNewId(),\n name: 'install_app',\n displayName: `Install app to Emulator`,\n command: `\n # shopt -s globstar is necessary to add /**/ support\n shopt -s globstar\n # shopt -s nullglob is necessary not to try to install\n # SEARCH_PATH literally if there are no matching files.\n shopt -s nullglob\n\n SEARCH_PATH=\"${searchPath}\"\n FILES_FOUND=false\n\n for APP_PATH in $SEARCH_PATH; do\n FILES_FOUND=true\n echo \"Installing \\\\\"$APP_PATH\\\\\"\"\n adb install \"$APP_PATH\"\n done\n\n if ! $FILES_FOUND; then\n echo \"No files found matching \\\\\"$SEARCH_PATH\\\\\". Are you sure you've built an Emulator app?\"\n exit 1\n fi\n `,\n })\n );\n }\n\n const flowPaths = `${inputs.flow_path.value}`\n .split('\\n') // It's easy to get an empty line with YAML\n .filter((entry) => entry);\n for (const flowPath of flowPaths) {\n steps.push(\n new BuildStep(globalCtx, {\n id: BuildStep.getNewId(),\n name: 'maestro_test',\n ifCondition: '${ always() }',\n displayName: `maestro test ${flowPath}`,\n command: `maestro test ${flowPath}`,\n })\n );\n }\n\n steps.push(\n createUploadArtifactBuildFunction(buildToolsContext).createBuildStepFromFunctionCall(\n globalCtx,\n {\n ifCondition: '${ always() }',\n name: 'Upload Maestro test results',\n callInputs: {\n path: '${ eas.env.HOME }/.maestro/tests',\n ignore_error: true,\n type: 'build-artifact',\n },\n }\n )\n );\n\n return steps;\n },\n });\n}\n"]}
1
+ {"version":3,"file":"maestroTest.js","sourceRoot":"","sources":["../../../src/steps/functionGroups/maestroTest.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BuildFunctionGroup,\n BuildStep,\n BuildStepInput,\n BuildStepInputValueTypeName,\n} from '@expo/steps';\nimport { Platform } from '@expo/eas-build-job';\n\nimport { CustomBuildContext } from '../../customBuildContext';\nimport { createInstallMaestroBuildFunction } from '../functions/installMaestro';\nimport { createStartIosSimulatorBuildFunction } from '../functions/startIosSimulator';\nimport { createStartAndroidEmulatorBuildFunction } from '../functions/startAndroidEmulator';\nimport { createUploadArtifactBuildFunction } from '../functions/uploadArtifact';\n\nexport function createEasMaestroTestFunctionGroup(\n buildToolsContext: CustomBuildContext\n): BuildFunctionGroup {\n return new BuildFunctionGroup({\n namespace: 'eas',\n id: 'maestro_test',\n inputProviders: [\n BuildStepInput.createProvider({\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n id: 'flow_path',\n required: true,\n }),\n BuildStepInput.createProvider({\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n id: 'app_path',\n required: false,\n }),\n BuildStepInput.createProvider({\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n id: 'android_emulator_system_image_package',\n required: false,\n }),\n ],\n createBuildStepsFromFunctionGroupCall: (globalCtx, { inputs }) => {\n const steps: BuildStep[] = [\n createInstallMaestroBuildFunction().createBuildStepFromFunctionCall(globalCtx),\n ];\n\n if (buildToolsContext.job.platform === Platform.IOS) {\n steps.push(\n createStartIosSimulatorBuildFunction().createBuildStepFromFunctionCall(globalCtx)\n );\n const searchPath =\n inputs.app_path.getValue({\n interpolationContext: globalCtx.getInterpolationContext(),\n }) ?? 'ios/build/Build/Products/*simulator/*.app';\n steps.push(\n new BuildStep(globalCtx, {\n id: BuildStep.getNewId(),\n name: 'install_app',\n displayName: `Install app to Simulator`,\n command: `\n # shopt -s nullglob is necessary not to try to install\n # SEARCH_PATH literally if there are no matching files.\n shopt -s nullglob\n\n SEARCH_PATH=\"${searchPath}\"\n FILES_FOUND=false\n\n for APP_PATH in $SEARCH_PATH; do\n FILES_FOUND=true\n echo \"Installing \\\\\"$APP_PATH\\\\\"\"\n xcrun simctl install booted \"$APP_PATH\"\n done\n\n if ! $FILES_FOUND; then\n echo \"No files found matching \\\\\"$SEARCH_PATH\\\\\". Are you sure you've built a Simulator app?\"\n exit 1\n fi\n `,\n })\n );\n } else if (buildToolsContext.job.platform === Platform.ANDROID) {\n const system_image_package = inputs.android_emulator_system_image_package.getValue({\n interpolationContext: globalCtx.getInterpolationContext(),\n });\n steps.push(\n createStartAndroidEmulatorBuildFunction().createBuildStepFromFunctionCall(\n globalCtx,\n system_image_package\n ? {\n callInputs: {\n system_image_package,\n },\n }\n : undefined\n )\n );\n const searchPath =\n inputs.app_path.getValue({\n interpolationContext: globalCtx.getInterpolationContext(),\n }) ?? 'android/app/build/outputs/**/*.apk';\n steps.push(\n new BuildStep(globalCtx, {\n id: BuildStep.getNewId(),\n name: 'install_app',\n displayName: `Install app to Emulator`,\n command: `\n # shopt -s globstar is necessary to add /**/ support\n shopt -s globstar\n # shopt -s nullglob is necessary not to try to install\n # SEARCH_PATH literally if there are no matching files.\n shopt -s nullglob\n\n SEARCH_PATH=\"${searchPath}\"\n FILES_FOUND=false\n\n for APP_PATH in $SEARCH_PATH; do\n FILES_FOUND=true\n echo \"Installing \\\\\"$APP_PATH\\\\\"\"\n adb install \"$APP_PATH\"\n done\n\n if ! $FILES_FOUND; then\n echo \"No files found matching \\\\\"$SEARCH_PATH\\\\\". Are you sure you've built an Emulator app?\"\n exit 1\n fi\n `,\n })\n );\n }\n\n const flowPaths = `${inputs.flow_path.getValue({\n interpolationContext: globalCtx.getInterpolationContext(),\n })}`\n .split('\\n') // It's easy to get an empty line with YAML\n .filter((entry) => entry);\n\n for (const flowPath of flowPaths) {\n steps.push(\n new BuildStep(globalCtx, {\n id: BuildStep.getNewId(),\n name: 'maestro_test',\n ifCondition: '${ always() }',\n displayName: `maestro test ${flowPath}`,\n command: `maestro test ${flowPath}`,\n })\n );\n }\n\n steps.push(\n createUploadArtifactBuildFunction(buildToolsContext).createBuildStepFromFunctionCall(\n globalCtx,\n {\n ifCondition: '${ always() }',\n name: 'Upload Maestro test results',\n callInputs: {\n path: '${ eas.env.HOME }/.maestro/tests',\n ignore_error: true,\n type: 'build-artifact',\n },\n }\n )\n );\n\n return steps;\n },\n });\n}\n"]}
@@ -60,7 +60,7 @@ function createSubmissionEntityFunction() {
60
60
  stepsCtx.logger.error('Failed to create submission entity: no build ID provided');
61
61
  return;
62
62
  }
63
- const workflowJobId = stepsCtx.global.staticContext.env.__WORKFLOW_JOB_ID;
63
+ const workflowJobId = stepsCtx.global.env.__WORKFLOW_JOB_ID;
64
64
  if (!workflowJobId) {
65
65
  stepsCtx.logger.error('Failed to create submission entity: no workflow job ID found');
66
66
  return;