eas-cli 3.4.1 → 3.5.1

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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.truncateGitCommitMessage = exports.collectMetadataAsync = void 0;
3
+ exports.truncateGitCommitMessage = exports.getReactNativeVersionAsync = exports.collectMetadataAsync = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const config_plugins_1 = require("@expo/config-plugins");
6
6
  const eas_build_job_1 = require("@expo/eas-build-job");
@@ -29,7 +29,7 @@ async function collectMetadataAsync(ctx) {
29
29
  credentialsSource: ctx.buildProfile.credentialsSource,
30
30
  sdkVersion: ctx.exp.sdkVersion,
31
31
  runtimeVersion: (_b = config_plugins_1.Updates.getRuntimeVersionNullable(ctx.exp, ctx.platform)) !== null && _b !== void 0 ? _b : undefined,
32
- reactNativeVersion: await getReactNativeVersionAsync(ctx),
32
+ reactNativeVersion: await getReactNativeVersionAsync(ctx.projectDir),
33
33
  ...channelOrReleaseChannel,
34
34
  distribution,
35
35
  appName: ctx.exp.name,
@@ -126,9 +126,9 @@ async function getNativeChannelAsync(ctx) {
126
126
  }
127
127
  return undefined;
128
128
  }
129
- async function getReactNativeVersionAsync(ctx) {
129
+ async function getReactNativeVersionAsync(projectDir) {
130
130
  try {
131
- const reactNativePackageJsonPath = (0, resolve_from_1.default)(ctx.projectDir, 'react-native/package.json');
131
+ const reactNativePackageJsonPath = (0, resolve_from_1.default)(projectDir, 'react-native/package.json');
132
132
  return (await fs_extra_1.default.readJson(reactNativePackageJsonPath)).version;
133
133
  }
134
134
  catch (err) {
@@ -137,6 +137,7 @@ async function getReactNativeVersionAsync(ctx) {
137
137
  return undefined;
138
138
  }
139
139
  }
140
+ exports.getReactNativeVersionAsync = getReactNativeVersionAsync;
140
141
  function resolveIosEnterpriseProvisioning(ctx) {
141
142
  return ctx.buildProfile.enterpriseProvisioning;
142
143
  }
@@ -38,48 +38,6 @@ const printBuildInfo_1 = require("./utils/printBuildInfo");
38
38
  const repository_1 = require("./utils/repository");
39
39
  let metroConfigValidated = false;
40
40
  let sdkVersionChecked = false;
41
- const iosResourceClassToBuildResourceClassMapping = {
42
- [eas_json_1.ResourceClass.DEFAULT]: generated_1.BuildResourceClass.IosDefault,
43
- [eas_json_1.ResourceClass.LARGE]: generated_1.BuildResourceClass.IosLarge,
44
- [eas_json_1.ResourceClass.M1_EXPERIMENTAL]: generated_1.BuildResourceClass.IosM1Large,
45
- [eas_json_1.ResourceClass.M1_MEDIUM]: generated_1.BuildResourceClass.IosM1Medium,
46
- [eas_json_1.ResourceClass.M1_LARGE]: generated_1.BuildResourceClass.IosM1Large,
47
- [eas_json_1.ResourceClass.INTEL_MEDIUM]: generated_1.BuildResourceClass.IosIntelMedium,
48
- [eas_json_1.ResourceClass.MEDIUM]: generated_1.BuildResourceClass.IosMedium,
49
- };
50
- const androidResourceClassToBuildResourceClassMapping = {
51
- [eas_json_1.ResourceClass.DEFAULT]: generated_1.BuildResourceClass.AndroidDefault,
52
- [eas_json_1.ResourceClass.LARGE]: generated_1.BuildResourceClass.AndroidLarge,
53
- [eas_json_1.ResourceClass.MEDIUM]: generated_1.BuildResourceClass.AndroidMedium,
54
- };
55
- function resolveBuildResourceClass(profile, resourceClassFlag) {
56
- var _a;
57
- if (profile.platform !== eas_build_job_1.Platform.IOS &&
58
- resourceClassFlag &&
59
- [
60
- eas_json_1.ResourceClass.M1_EXPERIMENTAL,
61
- eas_json_1.ResourceClass.M1_MEDIUM,
62
- eas_json_1.ResourceClass.M1_LARGE,
63
- eas_json_1.ResourceClass.INTEL_MEDIUM,
64
- ].includes(resourceClassFlag)) {
65
- throw new Error(`Resource class ${resourceClassFlag} is only available for iOS builds`);
66
- }
67
- const profileResourceClass = profile.profile.resourceClass;
68
- if (profileResourceClass && resourceClassFlag && resourceClassFlag !== profileResourceClass) {
69
- log_1.default.warn(`Build profile specifies the "${profileResourceClass}" resource class but you passed "${resourceClassFlag}" to --resource-class.\nUsing the "${resourceClassFlag}" as the override.`);
70
- }
71
- const resourceClass = (_a = resourceClassFlag !== null && resourceClassFlag !== void 0 ? resourceClassFlag : profileResourceClass) !== null && _a !== void 0 ? _a : eas_json_1.ResourceClass.DEFAULT;
72
- if (profile.platform === eas_build_job_1.Platform.IOS && resourceClass === eas_json_1.ResourceClass.M1_EXPERIMENTAL) {
73
- log_1.default.warn(`Resource class ${chalk_1.default.bold('m1-experimental')} is deprecated.`);
74
- }
75
- if (profile.platform === eas_build_job_1.Platform.IOS &&
76
- [eas_json_1.ResourceClass.LARGE, eas_json_1.ResourceClass.M1_LARGE].includes(resourceClass)) {
77
- log_1.default.warn(`Large resource classes are not available for iOS builds yet. Your build will use the medium resource class.`);
78
- }
79
- return profile.platform === eas_build_job_1.Platform.ANDROID
80
- ? androidResourceClassToBuildResourceClassMapping[resourceClass]
81
- : iosResourceClassToBuildResourceClassMapping[resourceClass];
82
- }
83
41
  async function runBuildAndSubmitAsync(graphqlClient, analytics, projectDir, flags, actor, getDynamicProjectConfigAsync) {
84
42
  var _a, _b;
85
43
  await (0, vcs_1.getVcsClient)().ensureRepoExistsAsync();
@@ -113,7 +71,6 @@ async function runBuildAndSubmitAsync(graphqlClient, analytics, projectDir, flag
113
71
  flags,
114
72
  moreBuilds: platforms.length > 1,
115
73
  buildProfile,
116
- resourceClass: resolveBuildResourceClass(buildProfile, flags.resourceClass),
117
74
  easJsonCliConfig,
118
75
  actor,
119
76
  graphqlClient,
@@ -192,10 +149,10 @@ async function runBuildAndSubmitAsync(graphqlClient, analytics, projectDir, flag
192
149
  }
193
150
  }
194
151
  exports.runBuildAndSubmitAsync = runBuildAndSubmitAsync;
195
- async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildProfile, resourceClass, easJsonCliConfig, actor, graphqlClient, analytics, getDynamicProjectConfigAsync, }) {
152
+ async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildProfile, easJsonCliConfig, actor, graphqlClient, analytics, getDynamicProjectConfigAsync, }) {
196
153
  const buildCtx = await (0, createContext_1.createBuildContextAsync)({
197
154
  buildProfileName: buildProfile.profileName,
198
- resourceClass,
155
+ resourceClassFlag: flags.resourceClass,
199
156
  clearCache: flags.clearCache,
200
157
  buildProfile: buildProfile.profile,
201
158
  nonInteractive: flags.nonInteractive,
@@ -0,0 +1,5 @@
1
+ import { ExpoConfig } from '@expo/config-types';
2
+ import { Platform } from '@expo/eas-build-job';
3
+ import { BuildProfile, ResourceClass } from '@expo/eas-json';
4
+ import { BuildResourceClass } from '../../graphql/generated';
5
+ export declare function resolveBuildResourceClassAsync<T extends Platform>(profile: BuildProfile<T>, platform: Platform, projectDir: string, exp: ExpoConfig, resourceClassFlag?: ResourceClass): Promise<BuildResourceClass>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveBuildResourceClassAsync = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const eas_build_job_1 = require("@expo/eas-build-job");
6
+ const eas_json_1 = require("@expo/eas-json");
7
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
+ const semver_1 = tslib_1.__importDefault(require("semver"));
9
+ const generated_1 = require("../../graphql/generated");
10
+ const log_1 = tslib_1.__importDefault(require("../../log"));
11
+ const metadata_1 = require("../metadata");
12
+ const iosResourceClassToBuildResourceClassMapping = {
13
+ [eas_json_1.ResourceClass.DEFAULT]: generated_1.BuildResourceClass.IosDefault,
14
+ [eas_json_1.ResourceClass.LARGE]: generated_1.BuildResourceClass.IosLarge,
15
+ [eas_json_1.ResourceClass.M1_EXPERIMENTAL]: generated_1.BuildResourceClass.IosM1Large,
16
+ [eas_json_1.ResourceClass.M1_MEDIUM]: generated_1.BuildResourceClass.IosM1Medium,
17
+ [eas_json_1.ResourceClass.M1_LARGE]: generated_1.BuildResourceClass.IosM1Large,
18
+ [eas_json_1.ResourceClass.INTEL_MEDIUM]: generated_1.BuildResourceClass.IosIntelMedium,
19
+ [eas_json_1.ResourceClass.MEDIUM]: generated_1.BuildResourceClass.IosMedium,
20
+ };
21
+ const androidResourceClassToBuildResourceClassMapping = {
22
+ [eas_json_1.ResourceClass.DEFAULT]: generated_1.BuildResourceClass.AndroidDefault,
23
+ [eas_json_1.ResourceClass.LARGE]: generated_1.BuildResourceClass.AndroidLarge,
24
+ [eas_json_1.ResourceClass.MEDIUM]: generated_1.BuildResourceClass.AndroidMedium,
25
+ };
26
+ async function resolveBuildResourceClassAsync(profile, platform, projectDir, exp, resourceClassFlag) {
27
+ const profileResourceClass = profile.resourceClass;
28
+ if (profileResourceClass && resourceClassFlag && resourceClassFlag !== profileResourceClass) {
29
+ log_1.default.warn(`Build profile specifies the "${profileResourceClass}" resource class but you passed "${resourceClassFlag}" to --resource-class.\nUsing the "${resourceClassFlag}" as the override.`);
30
+ }
31
+ const selectedResourceClass = resourceClassFlag !== null && resourceClassFlag !== void 0 ? resourceClassFlag : profileResourceClass;
32
+ return platform === eas_build_job_1.Platform.IOS
33
+ ? await resolveIosResourceClassAsync(exp, projectDir, resourceClassFlag !== null && resourceClassFlag !== void 0 ? resourceClassFlag : profileResourceClass)
34
+ : resolveAndroidResourceClass(selectedResourceClass);
35
+ }
36
+ exports.resolveBuildResourceClassAsync = resolveBuildResourceClassAsync;
37
+ function resolveAndroidResourceClass(selectedResourceClass) {
38
+ if (selectedResourceClass &&
39
+ [
40
+ eas_json_1.ResourceClass.M1_EXPERIMENTAL,
41
+ eas_json_1.ResourceClass.M1_MEDIUM,
42
+ eas_json_1.ResourceClass.M1_LARGE,
43
+ eas_json_1.ResourceClass.INTEL_MEDIUM,
44
+ ].includes(selectedResourceClass)) {
45
+ throw new Error(`Resource class ${selectedResourceClass} is only available for iOS builds`);
46
+ }
47
+ const resourceClass = selectedResourceClass !== null && selectedResourceClass !== void 0 ? selectedResourceClass : eas_json_1.ResourceClass.DEFAULT;
48
+ return androidResourceClassToBuildResourceClassMapping[resourceClass];
49
+ }
50
+ async function resolveIosResourceClassAsync(exp, projectDir, selectedResourceClass) {
51
+ const resourceClass = selectedResourceClass !== null && selectedResourceClass !== void 0 ? selectedResourceClass : (await resolveIosDefaultRequestedResourceClassAsync(exp, projectDir));
52
+ if (resourceClass === eas_json_1.ResourceClass.M1_EXPERIMENTAL) {
53
+ log_1.default.warn(`Resource class ${chalk_1.default.bold('m1-experimental')} is deprecated.`);
54
+ }
55
+ return iosResourceClassToBuildResourceClassMapping[resourceClass];
56
+ }
57
+ async function resolveIosDefaultRequestedResourceClassAsync(exp, projectDir) {
58
+ const { sdkVersion } = exp;
59
+ const reactNativeVersion = await (0, metadata_1.getReactNativeVersionAsync)(projectDir);
60
+ if ((sdkVersion && semver_1.default.satisfies(sdkVersion, '>=48')) ||
61
+ (reactNativeVersion && semver_1.default.satisfies(reactNativeVersion, '>=0.71.0'))) {
62
+ return eas_json_1.ResourceClass.M1_MEDIUM;
63
+ }
64
+ else {
65
+ return eas_json_1.ResourceClass.DEFAULT;
66
+ }
67
+ }
@@ -11,6 +11,7 @@ const utils_1 = require("../update/utils");
11
11
  * Ensure that the branch mapping is properly formatted.
12
12
  */
13
13
  function getBranchMapping(branchMappingString) {
14
+ var _a;
14
15
  if (!branchMappingString) {
15
16
  throw new Error('Missing branch mapping.');
16
17
  }
@@ -26,7 +27,7 @@ function getBranchMapping(branchMappingString) {
26
27
  throw new Error('Branch mapping must be version 0.');
27
28
  }
28
29
  const isRollout = branchMapping.data.length === 2;
29
- const rolloutPercent = branchMapping.data[0].branchMappingLogic.operand;
30
+ const rolloutPercent = (_a = branchMapping.data[0]) === null || _a === void 0 ? void 0 : _a.branchMappingLogic.operand;
30
31
  switch (branchMapping.data.length) {
31
32
  case 0:
32
33
  break;
@@ -1,7 +1,7 @@
1
1
  import { ExpoConfig } from '@expo/config-types';
2
2
  import { ExpoConfigOptions } from '../../project/expoConfig';
3
3
  import ContextField, { ContextOptions } from './ContextField';
4
- export type DynamicConfigContextFn = (options?: ExpoConfigOptions) => Promise<{
4
+ export type DynamicConfigContextFn = (options: ExpoConfigOptions) => Promise<{
5
5
  projectId: string;
6
6
  exp: ExpoConfig;
7
7
  projectDir: string;
@@ -76,7 +76,7 @@ class UpdatePublish extends EasCommand_1.default {
76
76
  projectDir,
77
77
  projectId,
78
78
  });
79
- const { exp } = await getDynamicProjectConfigAsync();
79
+ const { exp } = await getDynamicProjectConfigAsync({});
80
80
  const codeSigningInfo = await (0, code_signing_1.getCodeSigningInfoAsync)(expPrivate, privateKeyPath);
81
81
  let realizedPlatforms = [];
82
82
  if (channelName && branchName) {
@@ -106,11 +106,20 @@ class IosCredentialsProvider {
106
106
  }
107
107
  assertProvisioningProfileType(provisioningProfile, targetName) {
108
108
  const isAdHoc = (0, provisioningProfile_1.isAdHocProfile)(provisioningProfile);
109
- if (this.options.distribution === 'internal' && !isAdHoc) {
110
- throw new Error(`You must use an adhoc provisioning profile${targetName ? ` (target '${targetName})'` : ''} for internal distribution`);
109
+ const isEnterprise = (0, provisioningProfile_1.isEnterpriseUniversalProfile)(provisioningProfile);
110
+ if (this.options.distribution === 'internal') {
111
+ if (this.options.enterpriseProvisioning === 'universal' && !isEnterprise) {
112
+ throw new Error(`You must use a universal provisioning profile${targetName ? ` (target '${targetName})'` : ''} for internal distribution if you specified "enterpriseProvisioning": "universal" in eas.json`);
113
+ }
114
+ else if (this.options.enterpriseProvisioning === 'adhoc' && !isAdHoc) {
115
+ throw new Error(`You must use an adhoc provisioning profile${targetName ? ` (target '${targetName})'` : ''} for internal distribution if you specified "enterpriseProvisioning": "adhoc" in eas.json`);
116
+ }
117
+ else if (!this.options.enterpriseProvisioning && !isEnterprise && !isAdHoc) {
118
+ throw new Error(`You must use an adhoc provisioning profile${targetName ? ` (target '${targetName})'` : ''} for internal distribution.`);
119
+ }
111
120
  }
112
- else if (this.options.distribution !== 'internal' && isAdHoc) {
113
- throw new Error(`You can't use an adhoc provisioning profile${targetName ? ` (target '${targetName}')` : ''} for app store distribution`);
121
+ else if (isAdHoc) {
122
+ throw new Error(`You can't use an adhoc provisioning profile${targetName ? ` (target '${targetName}')` : ''} for app store distribution.`);
114
123
  }
115
124
  }
116
125
  }
@@ -6,5 +6,6 @@ interface AppleTeam {
6
6
  export declare function readAppleTeam(dataBase64: string): AppleTeam;
7
7
  export declare function readProfileName(dataBase64: string): string;
8
8
  export declare function isAdHocProfile(dataBase64: string): boolean;
9
+ export declare function isEnterpriseUniversalProfile(dataBase64: string): boolean;
9
10
  export declare function parse(dataBase64: string): PlistObject;
10
11
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parse = exports.isAdHocProfile = exports.readProfileName = exports.readAppleTeam = void 0;
3
+ exports.parse = exports.isEnterpriseUniversalProfile = exports.isAdHocProfile = exports.readProfileName = exports.readAppleTeam = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const plist_1 = tslib_1.__importDefault(require("@expo/plist"));
6
6
  function readAppleTeam(dataBase64) {
@@ -25,6 +25,11 @@ function isAdHocProfile(dataBase64) {
25
25
  return Array.isArray(provisionedDevices);
26
26
  }
27
27
  exports.isAdHocProfile = isAdHocProfile;
28
+ function isEnterpriseUniversalProfile(dataBase64) {
29
+ const profilePlist = parse(dataBase64);
30
+ return !!profilePlist['ProvisionsAllDevices'];
31
+ }
32
+ exports.isEnterpriseUniversalProfile = isEnterpriseUniversalProfile;
28
33
  function parse(dataBase64) {
29
34
  try {
30
35
  const buffer = Buffer.from(dataBase64, 'base64');
@@ -27,7 +27,6 @@ export type Scalars = {
27
27
  DateTime: any;
28
28
  JSON: any;
29
29
  JSONObject: any;
30
- Upload: any;
31
30
  };
32
31
  export type AcceptUserInvitationResult = {
33
32
  __typename?: 'AcceptUserInvitationResult';
@@ -452,7 +451,7 @@ export declare enum ActivityTimelineProjectActivityType {
452
451
  Submission = "SUBMISSION",
453
452
  Update = "UPDATE"
454
453
  }
455
- /** A user or robot that can authenticate with Expo services and be a member of accounts. */
454
+ /** A regular user, SSO user, or robot that can authenticate with Expo services and be a member of accounts. */
456
455
  export type Actor = {
457
456
  /** Access Tokens belonging to this actor */
458
457
  accessTokens: Array<AccessToken>;
@@ -473,7 +472,7 @@ export type Actor = {
473
472
  id: Scalars['ID'];
474
473
  isExpoAdmin: Scalars['Boolean'];
475
474
  };
476
- /** A user or robot that can authenticate with Expo services and be a member of accounts. */
475
+ /** A regular user, SSO user, or robot that can authenticate with Expo services and be a member of accounts. */
477
476
  export type ActorFeatureGatesArgs = {
478
477
  filter?: InputMaybe<Array<Scalars['String']>>;
479
478
  };
@@ -661,6 +660,7 @@ export type AndroidJobInput = {
661
660
  /** @deprecated */
662
661
  artifactPath?: InputMaybe<Scalars['String']>;
663
662
  buildArtifactPaths?: InputMaybe<Array<Scalars['String']>>;
663
+ buildProfile?: InputMaybe<Scalars['String']>;
664
664
  buildType?: InputMaybe<AndroidBuildType>;
665
665
  builderEnvironment?: InputMaybe<AndroidBuilderEnvironmentInput>;
666
666
  cache?: InputMaybe<BuildCacheInput>;
@@ -672,6 +672,7 @@ export type AndroidJobInput = {
672
672
  projectRootDirectory: Scalars['String'];
673
673
  releaseChannel?: InputMaybe<Scalars['String']>;
674
674
  secrets?: InputMaybe<AndroidJobSecretsInput>;
675
+ triggeredBy?: InputMaybe<BuildTrigger>;
675
676
  type: BuildWorkflow;
676
677
  updates?: InputMaybe<BuildUpdatesInput>;
677
678
  username?: InputMaybe<Scalars['String']>;
@@ -688,6 +689,7 @@ export type AndroidJobOverridesInput = {
688
689
  /** @deprecated */
689
690
  artifactPath?: InputMaybe<Scalars['String']>;
690
691
  buildArtifactPaths?: InputMaybe<Array<Scalars['String']>>;
692
+ buildProfile?: InputMaybe<Scalars['String']>;
691
693
  buildType?: InputMaybe<AndroidBuildType>;
692
694
  builderEnvironment?: InputMaybe<AndroidBuilderEnvironmentInput>;
693
695
  cache?: InputMaybe<BuildCacheInput>;
@@ -703,6 +705,7 @@ export type AndroidJobOverridesInput = {
703
705
  };
704
706
  export type AndroidJobSecretsInput = {
705
707
  buildCredentials?: InputMaybe<AndroidJobBuildCredentialsInput>;
708
+ robotAccessToken?: InputMaybe<Scalars['String']>;
706
709
  };
707
710
  export type AndroidJobVersionInput = {
708
711
  versionCode: Scalars['String'];
@@ -1712,6 +1715,8 @@ export type BuildMutation = {
1712
1715
  retryBuild: Build;
1713
1716
  /** Retry an iOS EAS Build */
1714
1717
  retryIosBuild: Build;
1718
+ /** Update metadata for EAS Build build */
1719
+ updateBuildMetadata: Build;
1715
1720
  };
1716
1721
  export type BuildMutationCancelBuildArgs = {
1717
1722
  buildId: Scalars['ID'];
@@ -1742,6 +1747,10 @@ export type BuildMutationRetryIosBuildArgs = {
1742
1747
  buildId: Scalars['ID'];
1743
1748
  jobOverrides?: InputMaybe<IosJobOverridesInput>;
1744
1749
  };
1750
+ export type BuildMutationUpdateBuildMetadataArgs = {
1751
+ buildId: Scalars['ID'];
1752
+ metadata: BuildMetadataInput;
1753
+ };
1745
1754
  export type BuildOrBuildJob = {
1746
1755
  id: Scalars['ID'];
1747
1756
  };
@@ -1836,6 +1845,10 @@ export declare enum BuildStatus {
1836
1845
  InQueue = "IN_QUEUE",
1837
1846
  New = "NEW"
1838
1847
  }
1848
+ export declare enum BuildTrigger {
1849
+ EasCli = "EAS_CLI",
1850
+ GitBasedIntegration = "GIT_BASED_INTEGRATION"
1851
+ }
1839
1852
  export type BuildUpdatesInput = {
1840
1853
  channel?: InputMaybe<Scalars['String']>;
1841
1854
  };
@@ -1844,10 +1857,6 @@ export declare enum BuildWorkflow {
1844
1857
  Managed = "MANAGED",
1845
1858
  Unknown = "UNKNOWN"
1846
1859
  }
1847
- export declare enum CacheControlScope {
1848
- Private = "PRIVATE",
1849
- Public = "PUBLIC"
1850
- }
1851
1860
  export type Card = {
1852
1861
  __typename?: 'Card';
1853
1862
  brand?: Maybe<Scalars['String']>;
@@ -1858,13 +1867,13 @@ export type Card = {
1858
1867
  };
1859
1868
  export type Charge = {
1860
1869
  __typename?: 'Charge';
1861
- amount?: Maybe<Scalars['Int']>;
1862
- createdAt?: Maybe<Scalars['DateTime']>;
1870
+ amount: Scalars['Int'];
1871
+ createdAt: Scalars['DateTime'];
1863
1872
  id: Scalars['ID'];
1864
1873
  invoiceId?: Maybe<Scalars['String']>;
1865
- paid?: Maybe<Scalars['Boolean']>;
1874
+ paid: Scalars['Boolean'];
1866
1875
  receiptUrl?: Maybe<Scalars['String']>;
1867
- wasRefunded?: Maybe<Scalars['Boolean']>;
1876
+ wasRefunded: Scalars['Boolean'];
1868
1877
  };
1869
1878
  /** Represents a client build request */
1870
1879
  export type ClientBuild = {
@@ -2574,6 +2583,7 @@ export type IosJobInput = {
2574
2583
  artifactPath?: InputMaybe<Scalars['String']>;
2575
2584
  buildArtifactPaths?: InputMaybe<Array<Scalars['String']>>;
2576
2585
  buildConfiguration?: InputMaybe<Scalars['String']>;
2586
+ buildProfile?: InputMaybe<Scalars['String']>;
2577
2587
  /** @deprecated */
2578
2588
  buildType?: InputMaybe<IosBuildType>;
2579
2589
  builderEnvironment?: InputMaybe<IosBuilderEnvironmentInput>;
@@ -2589,6 +2599,7 @@ export type IosJobInput = {
2589
2599
  scheme?: InputMaybe<Scalars['String']>;
2590
2600
  secrets?: InputMaybe<IosJobSecretsInput>;
2591
2601
  simulator?: InputMaybe<Scalars['Boolean']>;
2602
+ triggeredBy?: InputMaybe<BuildTrigger>;
2592
2603
  type: BuildWorkflow;
2593
2604
  updates?: InputMaybe<BuildUpdatesInput>;
2594
2605
  username?: InputMaybe<Scalars['String']>;
@@ -2600,6 +2611,7 @@ export type IosJobOverridesInput = {
2600
2611
  artifactPath?: InputMaybe<Scalars['String']>;
2601
2612
  buildArtifactPaths?: InputMaybe<Array<Scalars['String']>>;
2602
2613
  buildConfiguration?: InputMaybe<Scalars['String']>;
2614
+ buildProfile?: InputMaybe<Scalars['String']>;
2603
2615
  /** @deprecated */
2604
2616
  buildType?: InputMaybe<IosBuildType>;
2605
2617
  builderEnvironment?: InputMaybe<IosBuilderEnvironmentInput>;
@@ -2621,6 +2633,7 @@ export type IosJobOverridesInput = {
2621
2633
  };
2622
2634
  export type IosJobSecretsInput = {
2623
2635
  buildCredentials?: InputMaybe<Array<InputMaybe<IosJobTargetCredentialsInput>>>;
2636
+ robotAccessToken?: InputMaybe<Scalars['String']>;
2624
2637
  };
2625
2638
  export type IosJobTargetCredentialsInput = {
2626
2639
  distributionCertificate: IosJobDistributionCertificateInput;
@@ -2885,11 +2898,14 @@ export type Project = {
2885
2898
  };
2886
2899
  export type ProjectArchiveSourceInput = {
2887
2900
  bucketKey?: InputMaybe<Scalars['String']>;
2901
+ gitRef?: InputMaybe<Scalars['String']>;
2902
+ repositoryUrl?: InputMaybe<Scalars['String']>;
2888
2903
  type: ProjectArchiveSourceType;
2889
2904
  url?: InputMaybe<Scalars['String']>;
2890
2905
  };
2891
2906
  export declare enum ProjectArchiveSourceType {
2892
2907
  Gcs = "GCS",
2908
+ Git = "GIT",
2893
2909
  None = "NONE",
2894
2910
  S3 = "S3",
2895
2911
  Url = "URL"
@@ -3138,10 +3154,15 @@ export type RootQuery = {
3138
3154
  */
3139
3155
  me?: Maybe<User>;
3140
3156
  /**
3141
- * If authenticated as a any type of Actor, this is the appropriate top-level
3157
+ * If authenticated as any type of Actor, this is the appropriate top-level
3142
3158
  * query object
3143
3159
  */
3144
3160
  meActor?: Maybe<Actor>;
3161
+ /**
3162
+ * If authenticated as any type of human end user (Actor types User or SSOUser),
3163
+ * this is the appropriate top-level query object
3164
+ */
3165
+ meUserActor?: Maybe<UserActor>;
3145
3166
  project: ProjectQuery;
3146
3167
  snack: SnackQuery;
3147
3168
  /** Top-level query object for querying SSO Users. */
@@ -3193,7 +3214,7 @@ export type Runtime = {
3193
3214
  version: Scalars['String'];
3194
3215
  };
3195
3216
  /** Represents a human SSO (not robot) actor. */
3196
- export type SsoUser = Actor & {
3217
+ export type SsoUser = Actor & UserActor & {
3197
3218
  __typename?: 'SSOUser';
3198
3219
  /** Access Tokens belonging to this actor, none at present */
3199
3220
  accessTokens: Array<AccessToken>;
@@ -3603,6 +3624,8 @@ export type Update = ActivityTimelineProjectActivity & {
3603
3624
  manifestPermalink: Scalars['String'];
3604
3625
  message?: Maybe<Scalars['String']>;
3605
3626
  platform: Scalars['String'];
3627
+ runtime: Runtime;
3628
+ /** @deprecated Use 'runtime' field . */
3606
3629
  runtimeVersion: Scalars['String'];
3607
3630
  updatedAt: Scalars['DateTime'];
3608
3631
  };
@@ -3765,7 +3788,7 @@ export type UsageMetricsTimespan = {
3765
3788
  start: Scalars['DateTime'];
3766
3789
  };
3767
3790
  /** Represents a human (not robot) actor. */
3768
- export type User = Actor & {
3791
+ export type User = Actor & UserActor & {
3769
3792
  __typename?: 'User';
3770
3793
  /** Access Tokens belonging to this actor */
3771
3794
  accessTokens: Array<AccessToken>;
@@ -3834,6 +3857,68 @@ export type UserSnacksArgs = {
3834
3857
  limit: Scalars['Int'];
3835
3858
  offset: Scalars['Int'];
3836
3859
  };
3860
+ /** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
3861
+ export type UserActor = {
3862
+ /** Access Tokens belonging to this user actor */
3863
+ accessTokens: Array<AccessToken>;
3864
+ accounts: Array<Account>;
3865
+ /**
3866
+ * Coalesced project activity for all apps belonging to all accounts this user actor belongs to.
3867
+ * Only resolves for the viewer.
3868
+ */
3869
+ activityTimelineProjectActivities: Array<ActivityTimelineProjectActivity>;
3870
+ appCount: Scalars['Int'];
3871
+ appetizeCode?: Maybe<Scalars['String']>;
3872
+ /** Apps this user has published */
3873
+ apps: Array<App>;
3874
+ created: Scalars['DateTime'];
3875
+ /**
3876
+ * Best-effort human readable name for this human actor for use in user interfaces during action attribution.
3877
+ * For example, when displaying a sentence indicating that actor X created a build or published an update.
3878
+ */
3879
+ displayName: Scalars['String'];
3880
+ /**
3881
+ * Server feature gate values for this user actor, optionally filtering by desired gates.
3882
+ * Only resolves for the viewer.
3883
+ */
3884
+ featureGates: Scalars['JSONObject'];
3885
+ firstName?: Maybe<Scalars['String']>;
3886
+ fullName?: Maybe<Scalars['String']>;
3887
+ githubUsername?: Maybe<Scalars['String']>;
3888
+ id: Scalars['ID'];
3889
+ industry?: Maybe<Scalars['String']>;
3890
+ isExpoAdmin: Scalars['Boolean'];
3891
+ lastName?: Maybe<Scalars['String']>;
3892
+ location?: Maybe<Scalars['String']>;
3893
+ /** Associated accounts */
3894
+ primaryAccount: Account;
3895
+ profilePhoto: Scalars['String'];
3896
+ /** Snacks associated with this user's personal account */
3897
+ snacks: Array<Snack>;
3898
+ twitterUsername?: Maybe<Scalars['String']>;
3899
+ username: Scalars['String'];
3900
+ };
3901
+ /** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
3902
+ export type UserActorActivityTimelineProjectActivitiesArgs = {
3903
+ createdBefore?: InputMaybe<Scalars['DateTime']>;
3904
+ filterTypes?: InputMaybe<Array<ActivityTimelineProjectActivityType>>;
3905
+ limit: Scalars['Int'];
3906
+ };
3907
+ /** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
3908
+ export type UserActorAppsArgs = {
3909
+ includeUnpublished?: InputMaybe<Scalars['Boolean']>;
3910
+ limit: Scalars['Int'];
3911
+ offset: Scalars['Int'];
3912
+ };
3913
+ /** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
3914
+ export type UserActorFeatureGatesArgs = {
3915
+ filter?: InputMaybe<Array<Scalars['String']>>;
3916
+ };
3917
+ /** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
3918
+ export type UserActorSnacksArgs = {
3919
+ limit: Scalars['Int'];
3920
+ offset: Scalars['Int'];
3921
+ };
3837
3922
  export type UserDataInput = {
3838
3923
  appetizeCode?: InputMaybe<Scalars['String']>;
3839
3924
  email?: InputMaybe<Scalars['String']>;
@@ -7160,6 +7245,82 @@ export type CreateIosBuildMutation = {
7160
7245
  };
7161
7246
  };
7162
7247
  };
7248
+ export type UpdateBuildMetadataMutationVariables = Exact<{
7249
+ buildId: Scalars['ID'];
7250
+ metadata: BuildMetadataInput;
7251
+ }>;
7252
+ export type UpdateBuildMetadataMutation = {
7253
+ __typename?: 'RootMutation';
7254
+ build: {
7255
+ __typename?: 'BuildMutation';
7256
+ updateBuildMetadata: {
7257
+ __typename?: 'Build';
7258
+ id: string;
7259
+ status: BuildStatus;
7260
+ platform: AppPlatform;
7261
+ channel?: string | null;
7262
+ releaseChannel?: string | null;
7263
+ distribution?: DistributionType | null;
7264
+ iosEnterpriseProvisioning?: BuildIosEnterpriseProvisioning | null;
7265
+ buildProfile?: string | null;
7266
+ sdkVersion?: string | null;
7267
+ appVersion?: string | null;
7268
+ appBuildVersion?: string | null;
7269
+ runtimeVersion?: string | null;
7270
+ gitCommitHash?: string | null;
7271
+ gitCommitMessage?: string | null;
7272
+ initialQueuePosition?: number | null;
7273
+ queuePosition?: number | null;
7274
+ estimatedWaitTimeLeftSeconds?: number | null;
7275
+ priority: BuildPriority;
7276
+ createdAt: any;
7277
+ updatedAt: any;
7278
+ completedAt?: any | null;
7279
+ resourceClass: BuildResourceClass;
7280
+ error?: {
7281
+ __typename?: 'BuildError';
7282
+ errorCode: string;
7283
+ message: string;
7284
+ docsUrl?: string | null;
7285
+ } | null;
7286
+ artifacts?: {
7287
+ __typename?: 'BuildArtifacts';
7288
+ buildUrl?: string | null;
7289
+ xcodeBuildLogsUrl?: string | null;
7290
+ applicationArchiveUrl?: string | null;
7291
+ } | null;
7292
+ initiatingActor?: {
7293
+ __typename: 'Robot';
7294
+ id: string;
7295
+ displayName: string;
7296
+ } | {
7297
+ __typename: 'SSOUser';
7298
+ id: string;
7299
+ displayName: string;
7300
+ } | {
7301
+ __typename: 'User';
7302
+ id: string;
7303
+ displayName: string;
7304
+ } | null;
7305
+ project: {
7306
+ __typename: 'App';
7307
+ id: string;
7308
+ name: string;
7309
+ slug: string;
7310
+ ownerAccount: {
7311
+ __typename?: 'Account';
7312
+ id: string;
7313
+ name: string;
7314
+ };
7315
+ } | {
7316
+ __typename: 'Snack';
7317
+ id: string;
7318
+ name: string;
7319
+ slug: string;
7320
+ };
7321
+ };
7322
+ };
7323
+ };
7163
7324
  export type RetryIosBuildMutationVariables = Exact<{
7164
7325
  buildId: Scalars['ID'];
7165
7326
  jobOverrides: IosJobOverridesInput;