eas-cli 16.6.2 → 16.7.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.
package/build/api.d.ts CHANGED
@@ -18,5 +18,5 @@ export declare class ApiV2Client {
18
18
  }
19
19
  export declare function getExpoApiBaseUrl(): string;
20
20
  export declare function getExpoWebsiteBaseUrl(): string;
21
- export declare function getEASUpdateURL(projectId: string): string;
21
+ export declare function getEASUpdateURL(projectId: string, manifestHostOverride: string | null): string;
22
22
  export {};
package/build/api.js CHANGED
@@ -90,7 +90,10 @@ function getExpoWebsiteBaseUrl() {
90
90
  }
91
91
  }
92
92
  exports.getExpoWebsiteBaseUrl = getExpoWebsiteBaseUrl;
93
- function getEASUpdateURL(projectId) {
93
+ function getEASUpdateURL(projectId, manifestHostOverride) {
94
+ if (manifestHostOverride) {
95
+ return new URL(projectId, `https://${manifestHostOverride}`).href;
96
+ }
94
97
  if (process.env.EXPO_STAGING) {
95
98
  return new URL(projectId, `https://staging-u.expo.dev`).href;
96
99
  }
@@ -121,6 +121,7 @@ async function runBuildAndSubmitAsync({ graphqlClient, analytics, vcsClient, pro
121
121
  getDynamicPrivateProjectConfigAsync,
122
122
  customBuildConfigMetadata: customBuildConfigMetadataByPlatform[platform],
123
123
  env,
124
+ easJsonAccessor,
124
125
  });
125
126
  if (maybeBuild) {
126
127
  startedBuilds.push({ build: maybeBuild, buildProfile });
@@ -215,7 +216,7 @@ async function runBuildAndSubmitAsync({ graphqlClient, analytics, vcsClient, pro
215
216
  };
216
217
  }
217
218
  exports.runBuildAndSubmitAsync = runBuildAndSubmitAsync;
218
- async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildProfile, easJsonCliConfig, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, env, }) {
219
+ async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildProfile, easJsonCliConfig, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, env, easJsonAccessor, }) {
219
220
  const buildCtx = await (0, createContext_1.createBuildContextAsync)({
220
221
  buildProfileName: buildProfile.profileName,
221
222
  resourceClassFlag: flags.resourceClass,
@@ -255,8 +256,10 @@ async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildP
255
256
  nonInteractive: flags.nonInteractive,
256
257
  buildProfile,
257
258
  env: buildProfile.profile.env,
259
+ easJsonAccessor,
258
260
  });
259
- if ((0, projectUtils_1.isUsingEASUpdate)(buildCtx.exp, buildCtx.projectId)) {
261
+ const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
262
+ if ((0, projectUtils_1.isUsingEASUpdate)(buildCtx.exp, buildCtx.projectId, easJsonUpdateConfig.manifestHostOverride ?? null)) {
260
263
  const doesChannelExist = await (0, queries_1.doesChannelExistAsync)(graphqlClient, {
261
264
  appId: buildCtx.projectId,
262
265
  channelName: buildProfile.profile.channel,
@@ -371,7 +374,7 @@ async function maybeDownloadAndRunSimulatorBuildsAsync(builds, flags, autoConfir
371
374
  }
372
375
  }
373
376
  }
374
- async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ exp, projectId, projectDir, vcsClient, buildProfile, nonInteractive, sdkVersion, env, }) {
377
+ async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ exp, projectId, projectDir, vcsClient, buildProfile, nonInteractive, sdkVersion, env, easJsonAccessor, }) {
375
378
  if ((0, projectUtils_1.isExpoUpdatesInstalledOrAvailable)(projectDir, sdkVersion)) {
376
379
  return;
377
380
  }
@@ -387,6 +390,7 @@ async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ exp, proje
387
390
  message: `Would you like to install the "expo-updates" package and configure EAS Update now?`,
388
391
  });
389
392
  if (installExpoUpdates) {
393
+ const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
390
394
  await (0, configure_2.ensureEASUpdateIsConfiguredAsync)({
391
395
  exp,
392
396
  projectId,
@@ -394,6 +398,7 @@ async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ exp, proje
394
398
  platform: platform_1.RequestedPlatform.All,
395
399
  vcsClient,
396
400
  env,
401
+ manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
397
402
  });
398
403
  log_1.default.withTick('Installed expo-updates and configured EAS Update.');
399
404
  throw new Error('Command must be re-run to pick up new updates configuration.');
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const eas_build_job_1 = require("@expo/eas-build-job");
5
+ const eas_json_1 = require("@expo/eas-json");
5
6
  const core_1 = require("@oclif/core");
6
7
  const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
8
  const syncProjectConfiguration_1 = require("../../build/android/syncProjectConfiguration");
@@ -51,8 +52,12 @@ class BuildConfigure extends EasCommand_1.default {
51
52
  nonInteractive: false,
52
53
  vcsClient,
53
54
  });
54
- if (didCreateEasJson && (0, projectUtils_1.isUsingEASUpdate)(exp, projectId)) {
55
- await (0, configure_2.ensureEASUpdateIsConfiguredInEasJsonAsync)(projectDir);
55
+ if (didCreateEasJson) {
56
+ const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
57
+ const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
58
+ if ((0, projectUtils_1.isUsingEASUpdate)(exp, projectId, easJsonUpdateConfig.manifestHostOverride ?? null)) {
59
+ await (0, configure_2.ensureEASUpdateIsConfiguredInEasJsonAsync)(projectDir);
60
+ }
56
61
  }
57
62
  // configure expo-updates
58
63
  if (expoUpdatesIsInstalled) {
@@ -283,7 +283,7 @@ async function configureProjectFromBareDefaultExpoTemplateAsync({ app, vcsClient
283
283
  const isSlugValidSegment = /^[^a-z]/.test(app.slug);
284
284
  const slugPrefix = isSlugValidSegment ? 'app' : '';
285
285
  const bundleIdentifier = `com.${userPrefix}${stripInvalidCharactersForBundleIdentifier(app.ownerAccount.name)}.${slugPrefix}${stripInvalidCharactersForBundleIdentifier(app.slug)}`;
286
- const updateUrl = (0, api_1.getEASUpdateURL)(app.id);
286
+ const updateUrl = (0, api_1.getEASUpdateURL)(app.id, /* manifestHostOverride */ null);
287
287
  const easBuildGitHubConfig = {
288
288
  android: {
289
289
  image: 'latest',
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
+ const eas_json_1 = require("@expo/eas-json");
4
5
  const core_1 = require("@oclif/core");
5
6
  const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
7
  const configure_1 = require("../../build/configure");
@@ -34,6 +35,8 @@ class UpdateConfigure extends EasCommand_1.default {
34
35
  });
35
36
  log_1.default.log('💡 The following process will configure your project to use EAS Update. These changes only apply to your local project files and you can safely revert them at any time.');
36
37
  await vcsClient.ensureRepoExistsAsync();
38
+ const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
39
+ const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
37
40
  await (0, configure_2.ensureEASUpdateIsConfiguredAsync)({
38
41
  exp,
39
42
  projectId,
@@ -42,6 +45,7 @@ class UpdateConfigure extends EasCommand_1.default {
42
45
  vcsClient,
43
46
  env: undefined,
44
47
  forceNativeConfigSync: true,
48
+ manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
45
49
  });
46
50
  await (0, configure_2.ensureEASUpdateIsConfiguredInEasJsonAsync)(projectDir);
47
51
  log_1.default.addNewLineIfNone();
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const eas_build_job_1 = require("@expo/eas-build-job");
5
+ const eas_json_1 = require("@expo/eas-json");
5
6
  const core_1 = require("@oclif/core");
6
7
  const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
8
  const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
@@ -110,6 +111,8 @@ class UpdatePublish extends EasCommand_1.default {
110
111
  await (0, repository_1.ensureRepoIsCleanAsync)(vcsClient, nonInteractive);
111
112
  const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicPublicProjectConfigAsync();
112
113
  await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
114
+ const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
115
+ const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
113
116
  await (0, configure_1.ensureEASUpdateIsConfiguredAsync)({
114
117
  exp: expPossiblyWithoutEasUpdateConfigured,
115
118
  platform: requestedPlatform,
@@ -117,6 +120,7 @@ class UpdatePublish extends EasCommand_1.default {
117
120
  projectId,
118
121
  vcsClient,
119
122
  env: undefined,
123
+ manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
120
124
  });
121
125
  const { exp } = await getDynamicPublicProjectConfigAsync();
122
126
  const { exp: expPrivate } = await getDynamicPrivateProjectConfigAsync();
@@ -341,6 +345,8 @@ class UpdatePublish extends EasCommand_1.default {
341
345
  isGitWorkingTreeDirty,
342
346
  awaitingCodeSigningInfo: !!codeSigningInfo,
343
347
  environment: environment ?? null,
348
+ manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
349
+ assetHostOverride: easJsonUpdateConfig.assetHostOverride ?? null,
344
350
  };
345
351
  });
346
352
  let newUpdates;
@@ -12,6 +12,7 @@ export default class UpdateRepublish extends EasCommand {
12
12
  message: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
13
13
  platform: import("@oclif/core/lib/interfaces").OptionFlag<string>;
14
14
  'private-key-path': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
15
+ 'rollout-percentage': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
15
16
  };
16
17
  static contextDefinition: {
17
18
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
@@ -56,6 +56,12 @@ class UpdateRepublish extends EasCommand_1.default {
56
56
  description: `File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named "private-key.pem" in the certificate's directory. Only relevant if you are using code signing: https://docs.expo.dev/eas-update/code-signing/`,
57
57
  required: false,
58
58
  }),
59
+ 'rollout-percentage': core_1.Flags.integer({
60
+ description: `Percentage of users this update should be immediately available to. Users not in the rollout will be served the previous latest update on the branch, even if that update is itself being rolled out. The specified number must be an integer between 1 and 100. When not specified, this defaults to 100.`,
61
+ required: false,
62
+ min: 0,
63
+ max: 100,
64
+ }),
59
65
  ...flags_1.EasNonInteractiveAndJsonFlags,
60
66
  };
61
67
  static contextDefinition = {
@@ -102,6 +108,7 @@ class UpdateRepublish extends EasCommand_1.default {
102
108
  updateMessage,
103
109
  codeSigningInfo,
104
110
  json: flags.json,
111
+ rolloutPercentage: flags.rolloutPercentage,
105
112
  });
106
113
  }
107
114
  sanitizeFlags(rawFlags) {
@@ -125,6 +132,7 @@ class UpdateRepublish extends EasCommand_1.default {
125
132
  platform,
126
133
  updateMessage: rawFlags.message,
127
134
  privateKeyPath,
135
+ rolloutPercentage: rawFlags['rollout-percentage'],
128
136
  json: rawFlags.json ?? false,
129
137
  nonInteractive,
130
138
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
+ const eas_json_1 = require("@expo/eas-json");
4
5
  const core_1 = require("@oclif/core");
5
6
  const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
6
7
  const queries_1 = require("../../branch/queries");
@@ -77,6 +78,8 @@ class UpdateRollBackToEmbedded extends EasCommand_1.default {
77
78
  }
78
79
  const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicPublicProjectConfigAsync();
79
80
  await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
81
+ const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
82
+ const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
80
83
  await (0, configure_1.ensureEASUpdateIsConfiguredAsync)({
81
84
  exp: expPossiblyWithoutEasUpdateConfigured,
82
85
  platform: platformFlag,
@@ -84,6 +87,7 @@ class UpdateRollBackToEmbedded extends EasCommand_1.default {
84
87
  projectId,
85
88
  vcsClient,
86
89
  env: undefined,
90
+ manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
87
91
  });
88
92
  // check that the expo-updates package version supports roll back to embedded
89
93
  await (0, projectUtils_1.enforceRollBackToEmbeddedUpdateSupportAsync)(projectDir);
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const core_1 = require("@oclif/core");
5
5
  const core_2 = require("@urql/core");
6
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ const fs = tslib_1.__importStar(require("node:fs"));
6
8
  const path = tslib_1.__importStar(require("node:path"));
7
9
  const url_1 = require("../../build/utils/url");
8
10
  const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
@@ -84,26 +86,38 @@ class WorkflowRun extends EasCommand_1.default {
84
86
  }
85
87
  }
86
88
  let projectArchiveBucketKey;
87
- let easJsonBucketKey;
88
- let packageJsonBucketKey;
89
+ let easJsonBucketKey = null;
90
+ let packageJsonBucketKey = null;
91
+ const easJsonPath = path.join(projectDir, 'eas.json');
92
+ const packageJsonPath = path.join(projectDir, 'package.json');
89
93
  try {
90
94
  ({ projectArchiveBucketKey } = await (0, uploadAccountScopedProjectSourceAsync_1.uploadAccountScopedProjectSourceAsync)({
91
95
  graphqlClient,
92
96
  vcsClient,
93
97
  accountId: account.id,
94
98
  }));
95
- ({ fileBucketKey: easJsonBucketKey } = await (0, uploadAccountScopedFileAsync_1.uploadAccountScopedFileAsync)({
96
- graphqlClient,
97
- accountId: account.id,
98
- filePath: path.join(projectDir, 'eas.json'),
99
- maxSizeBytes: 1024 * 1024,
100
- }));
101
- ({ fileBucketKey: packageJsonBucketKey } = await (0, uploadAccountScopedFileAsync_1.uploadAccountScopedFileAsync)({
102
- graphqlClient,
103
- accountId: account.id,
104
- filePath: path.join(projectDir, 'package.json'),
105
- maxSizeBytes: 1024 * 1024,
106
- }));
99
+ if (await fileExistsAsync(easJsonPath)) {
100
+ ({ fileBucketKey: easJsonBucketKey } = await (0, uploadAccountScopedFileAsync_1.uploadAccountScopedFileAsync)({
101
+ graphqlClient,
102
+ accountId: account.id,
103
+ filePath: easJsonPath,
104
+ maxSizeBytes: 1024 * 1024,
105
+ }));
106
+ }
107
+ else {
108
+ log_1.default.warn(`⚠ No ${chalk_1.default.bold('eas.json')} found in the project directory. Running ${chalk_1.default.bold('type: build')} jobs will not work. Run ${chalk_1.default.bold('eas build:configure')} to configure your project for builds.`);
109
+ }
110
+ if (await fileExistsAsync(packageJsonPath)) {
111
+ ({ fileBucketKey: packageJsonBucketKey } = await (0, uploadAccountScopedFileAsync_1.uploadAccountScopedFileAsync)({
112
+ graphqlClient,
113
+ accountId: account.id,
114
+ filePath: packageJsonPath,
115
+ maxSizeBytes: 1024 * 1024,
116
+ }));
117
+ }
118
+ else {
119
+ log_1.default.warn(`⚠ No ${chalk_1.default.bold('package.json')} found in the project directory. It is used to automatically infer best job configuration for your project. You may want to define ${chalk_1.default.bold('image')} property in your workflow to specify the image to use.`);
120
+ }
107
121
  }
108
122
  catch (err) {
109
123
  log_1.default.error('Failed to upload project sources.');
@@ -205,3 +219,9 @@ async function waitForWorkflowRunToEndAsync(graphqlClient, { workflowRunId }) {
205
219
  await (0, promise_1.sleepAsync)(10 /* seconds */ * 1000 /* milliseconds */);
206
220
  }
207
221
  }
222
+ async function fileExistsAsync(filePath) {
223
+ return await fs.promises
224
+ .access(filePath, fs.constants.F_OK)
225
+ .then(() => true)
226
+ .catch(() => false);
227
+ }
@@ -154,6 +154,8 @@ export type Account = {
154
154
  billingPeriod: BillingPeriod;
155
155
  /** (EAS Build) Builds associated with this account */
156
156
  builds: Array<Build>;
157
+ /** Whether this account can enable SSO. */
158
+ canEnableSSO: Scalars['Boolean']['output'];
157
159
  createdAt: Scalars['DateTime']['output'];
158
160
  /** Environment secrets for an account */
159
161
  environmentSecrets: Array<EnvironmentSecret>;
@@ -180,7 +182,10 @@ export type Account = {
180
182
  name: Scalars['String']['output'];
181
183
  /** Offers set on this account */
182
184
  offers?: Maybe<Array<Offer>>;
183
- /** Owning User of this account if personal account */
185
+ /**
186
+ * Owning User of this account if personal account
187
+ * @deprecated Deprecated in favor of ownerUserActor
188
+ */
184
189
  owner?: Maybe<User>;
185
190
  /** Owning UserActor of this account if personal account */
186
191
  ownerUserActor?: Maybe<UserActor>;
@@ -1073,6 +1078,7 @@ export type AndroidSubmissionConfig = {
1073
1078
  export type AndroidSubmissionConfigInput = {
1074
1079
  applicationIdentifier?: InputMaybe<Scalars['String']['input']>;
1075
1080
  archiveUrl?: InputMaybe<Scalars['String']['input']>;
1081
+ changelog?: InputMaybe<Scalars['String']['input']>;
1076
1082
  changesNotSentForReview?: InputMaybe<Scalars['Boolean']['input']>;
1077
1083
  googleServiceAccountKeyId?: InputMaybe<Scalars['String']['input']>;
1078
1084
  googleServiceAccountKeyJson?: InputMaybe<Scalars['String']['input']>;
@@ -1254,6 +1260,7 @@ export type App = Project & {
1254
1260
  workerDeploymentsCrashes?: Maybe<WorkerDeploymentCrashes>;
1255
1261
  workerDeploymentsRequest: WorkerDeploymentRequestEdge;
1256
1262
  workerDeploymentsRequests?: Maybe<WorkerDeploymentRequests>;
1263
+ workflowRunGitBranchesPaginated: AppWorkflowRunGitBranchesConnection;
1257
1264
  workflowRunsPaginated: AppWorkflowRunsConnection;
1258
1265
  workflows: Array<Workflow>;
1259
1266
  };
@@ -1467,9 +1474,18 @@ export type AppWorkerDeploymentsRequestsArgs = {
1467
1474
  timespan: DatasetTimespan;
1468
1475
  };
1469
1476
  /** Represents an Exponent App (or Experience in legacy terms) */
1477
+ export type AppWorkflowRunGitBranchesPaginatedArgs = {
1478
+ after?: InputMaybe<Scalars['String']['input']>;
1479
+ before?: InputMaybe<Scalars['String']['input']>;
1480
+ filter?: InputMaybe<WorkflowRunGitBranchFilterInput>;
1481
+ first?: InputMaybe<Scalars['Int']['input']>;
1482
+ last?: InputMaybe<Scalars['Int']['input']>;
1483
+ };
1484
+ /** Represents an Exponent App (or Experience in legacy terms) */
1470
1485
  export type AppWorkflowRunsPaginatedArgs = {
1471
1486
  after?: InputMaybe<Scalars['String']['input']>;
1472
1487
  before?: InputMaybe<Scalars['String']['input']>;
1488
+ filter?: InputMaybe<WorkflowRunFilterInput>;
1473
1489
  first?: InputMaybe<Scalars['Int']['input']>;
1474
1490
  last?: InputMaybe<Scalars['Int']['input']>;
1475
1491
  };
@@ -1876,6 +1892,21 @@ export type AppWorkflowRunEdge = {
1876
1892
  cursor: Scalars['String']['output'];
1877
1893
  node: WorkflowRun;
1878
1894
  };
1895
+ export type AppWorkflowRunGitBranchEdge = {
1896
+ __typename?: 'AppWorkflowRunGitBranchEdge';
1897
+ cursor: Scalars['String']['output'];
1898
+ node: AppWorkflowRunGitBranchNode;
1899
+ };
1900
+ export type AppWorkflowRunGitBranchNode = {
1901
+ __typename?: 'AppWorkflowRunGitBranchNode';
1902
+ lastRunAt: Scalars['DateTime']['output'];
1903
+ name: Scalars['String']['output'];
1904
+ };
1905
+ export type AppWorkflowRunGitBranchesConnection = {
1906
+ __typename?: 'AppWorkflowRunGitBranchesConnection';
1907
+ edges: Array<AppWorkflowRunGitBranchEdge>;
1908
+ pageInfo: PageInfo;
1909
+ };
1879
1910
  export type AppWorkflowRunsConnection = {
1880
1911
  __typename?: 'AppWorkflowRunsConnection';
1881
1912
  edges: Array<AppWorkflowRunEdge>;
@@ -4433,6 +4464,7 @@ export type IosSubmissionConfigInput = {
4433
4464
  ascApiKey?: InputMaybe<AscApiKeyInput>;
4434
4465
  ascApiKeyId?: InputMaybe<Scalars['String']['input']>;
4435
4466
  ascAppIdentifier: Scalars['String']['input'];
4467
+ changelog?: InputMaybe<Scalars['String']['input']>;
4436
4468
  groups?: InputMaybe<Array<Scalars['String']['input']>>;
4437
4469
  isVerboseFastlaneEnabled?: InputMaybe<Scalars['Boolean']['input']>;
4438
4470
  };
@@ -4945,6 +4977,7 @@ export type PublicArtifacts = {
4945
4977
  buildUrl?: Maybe<Scalars['String']['output']>;
4946
4978
  };
4947
4979
  export type PublishUpdateGroupInput = {
4980
+ assetHostOverride?: InputMaybe<Scalars['String']['input']>;
4948
4981
  assetMapGroup?: InputMaybe<AssetMapGroup>;
4949
4982
  awaitingCodeSigningInfo?: InputMaybe<Scalars['Boolean']['input']>;
4950
4983
  branchId: Scalars['String']['input'];
@@ -4953,6 +4986,7 @@ export type PublishUpdateGroupInput = {
4953
4986
  fingerprintInfoGroup?: InputMaybe<FingerprintInfoGroup>;
4954
4987
  gitCommitHash?: InputMaybe<Scalars['String']['input']>;
4955
4988
  isGitWorkingTreeDirty?: InputMaybe<Scalars['Boolean']['input']>;
4989
+ manifestHostOverride?: InputMaybe<Scalars['String']['input']>;
4956
4990
  message?: InputMaybe<Scalars['String']['input']>;
4957
4991
  rollBackToEmbeddedInfoGroup?: InputMaybe<UpdateRollBackToEmbeddedGroup>;
4958
4992
  rolloutInfoGroup?: InputMaybe<UpdateRolloutInfoGroup>;
@@ -5922,6 +5956,7 @@ export type Update = ActivityTimelineProjectActivity & {
5922
5956
  activityTimestamp: Scalars['DateTime']['output'];
5923
5957
  actor?: Maybe<Actor>;
5924
5958
  app: App;
5959
+ assetHostOverride?: Maybe<Scalars['String']['output']>;
5925
5960
  assetMapUrl?: Maybe<Scalars['String']['output']>;
5926
5961
  awaitingCodeSigningInfo: Scalars['Boolean']['output'];
5927
5962
  branch: UpdateBranch;
@@ -5941,6 +5976,7 @@ export type Update = ActivityTimelineProjectActivity & {
5941
5976
  isRollBackToEmbedded: Scalars['Boolean']['output'];
5942
5977
  jobRun?: Maybe<JobRun>;
5943
5978
  manifestFragment: Scalars['String']['output'];
5979
+ manifestHostOverride?: Maybe<Scalars['String']['output']>;
5944
5980
  manifestPermalink: Scalars['String']['output'];
5945
5981
  message?: Maybe<Scalars['String']['output']>;
5946
5982
  platform: Scalars['String']['output'];
@@ -7052,6 +7088,7 @@ export type WorkerDeploymentRequestNode = {
7052
7088
  requestId: Scalars['WorkerDeploymentRequestID']['output'];
7053
7089
  requestTimestamp: Scalars['DateTime']['output'];
7054
7090
  responseType: ResponseType;
7091
+ routerPath?: Maybe<Scalars['String']['output']>;
7055
7092
  scriptName: Scalars['String']['output'];
7056
7093
  search?: Maybe<Scalars['String']['output']>;
7057
7094
  status: Scalars['Int']['output'];
@@ -7324,6 +7361,7 @@ export declare enum WorkflowJobType {
7324
7361
  Deploy = "DEPLOY",
7325
7362
  Fingerprint = "FINGERPRINT",
7326
7363
  GetBuild = "GET_BUILD",
7364
+ MaestroCloud = "MAESTRO_CLOUD",
7327
7365
  MaestroTest = "MAESTRO_TEST",
7328
7366
  RequireApproval = "REQUIRE_APPROVAL",
7329
7367
  Slack = "SLACK",
@@ -7331,7 +7369,7 @@ export declare enum WorkflowJobType {
7331
7369
  Update = "UPDATE"
7332
7370
  }
7333
7371
  export type WorkflowProjectSourceInput = {
7334
- easJsonBucketKey: Scalars['String']['input'];
7372
+ easJsonBucketKey?: InputMaybe<Scalars['String']['input']>;
7335
7373
  packageJsonBucketKey?: InputMaybe<Scalars['String']['input']>;
7336
7374
  projectArchiveBucketKey: Scalars['String']['input'];
7337
7375
  type: WorkflowProjectSourceType;
@@ -7391,12 +7429,12 @@ export type WorkflowRun = ActivityTimelineProjectActivity & {
7391
7429
  activityTimestamp: Scalars['DateTime']['output'];
7392
7430
  actor?: Maybe<Actor>;
7393
7431
  createdAt: Scalars['DateTime']['output'];
7432
+ durationSeconds?: Maybe<Scalars['Int']['output']>;
7394
7433
  errors: Array<WorkflowRunError>;
7395
7434
  gitCommitHash?: Maybe<Scalars['String']['output']>;
7396
7435
  gitCommitMessage?: Maybe<Scalars['String']['output']>;
7397
7436
  githubRepository?: Maybe<GitHubRepository>;
7398
7437
  id: Scalars['ID']['output'];
7399
- initiatingUser?: Maybe<User>;
7400
7438
  jobs: Array<WorkflowJob>;
7401
7439
  name: Scalars['String']['output'];
7402
7440
  pullRequestNumber?: Maybe<Scalars['Int']['output']>;
@@ -7422,6 +7460,12 @@ export type WorkflowRunError = {
7422
7460
  message: Scalars['String']['output'];
7423
7461
  title?: Maybe<Scalars['String']['output']>;
7424
7462
  };
7463
+ export type WorkflowRunFilterInput = {
7464
+ requestedGitRef?: InputMaybe<Scalars['String']['input']>;
7465
+ };
7466
+ export type WorkflowRunGitBranchFilterInput = {
7467
+ searchTerm?: InputMaybe<Scalars['String']['input']>;
7468
+ };
7425
7469
  export type WorkflowRunInput = {
7426
7470
  projectSource: WorkflowProjectSourceInput;
7427
7471
  };
@@ -12040,7 +12084,11 @@ export type UpdatePublishMutation = {
12040
12084
  isRollBackToEmbedded: boolean;
12041
12085
  manifestPermalink: string;
12042
12086
  gitCommitHash?: string | null;
12087
+ isGitWorkingTreeDirty: boolean;
12088
+ environment?: EnvironmentVariableEnvironment | null;
12043
12089
  rolloutPercentage?: number | null;
12090
+ manifestHostOverride?: string | null;
12091
+ assetHostOverride?: string | null;
12044
12092
  actor?: {
12045
12093
  __typename: 'Robot';
12046
12094
  firstName?: string | null;
@@ -12126,7 +12174,11 @@ export type SetRolloutPercentageMutation = {
12126
12174
  isRollBackToEmbedded: boolean;
12127
12175
  manifestPermalink: string;
12128
12176
  gitCommitHash?: string | null;
12177
+ isGitWorkingTreeDirty: boolean;
12178
+ environment?: EnvironmentVariableEnvironment | null;
12129
12179
  rolloutPercentage?: number | null;
12180
+ manifestHostOverride?: string | null;
12181
+ assetHostOverride?: string | null;
12130
12182
  actor?: {
12131
12183
  __typename: 'Robot';
12132
12184
  firstName?: string | null;
@@ -12621,7 +12673,11 @@ export type BranchesByAppQuery = {
12621
12673
  isRollBackToEmbedded: boolean;
12622
12674
  manifestPermalink: string;
12623
12675
  gitCommitHash?: string | null;
12676
+ isGitWorkingTreeDirty: boolean;
12677
+ environment?: EnvironmentVariableEnvironment | null;
12624
12678
  rolloutPercentage?: number | null;
12679
+ manifestHostOverride?: string | null;
12680
+ assetHostOverride?: string | null;
12625
12681
  actor?: {
12626
12682
  __typename: 'Robot';
12627
12683
  firstName?: string | null;
@@ -12735,7 +12791,11 @@ export type ViewBranchesOnUpdateChannelQuery = {
12735
12791
  isRollBackToEmbedded: boolean;
12736
12792
  manifestPermalink: string;
12737
12793
  gitCommitHash?: string | null;
12794
+ isGitWorkingTreeDirty: boolean;
12795
+ environment?: EnvironmentVariableEnvironment | null;
12738
12796
  rolloutPercentage?: number | null;
12797
+ manifestHostOverride?: string | null;
12798
+ assetHostOverride?: string | null;
12739
12799
  actor?: {
12740
12800
  __typename: 'Robot';
12741
12801
  firstName?: string | null;
@@ -13240,7 +13300,11 @@ export type ViewUpdateChannelOnAppQuery = {
13240
13300
  isRollBackToEmbedded: boolean;
13241
13301
  manifestPermalink: string;
13242
13302
  gitCommitHash?: string | null;
13303
+ isGitWorkingTreeDirty: boolean;
13304
+ environment?: EnvironmentVariableEnvironment | null;
13243
13305
  rolloutPercentage?: number | null;
13306
+ manifestHostOverride?: string | null;
13307
+ assetHostOverride?: string | null;
13244
13308
  actor?: {
13245
13309
  __typename: 'Robot';
13246
13310
  firstName?: string | null;
@@ -13323,7 +13387,11 @@ export type ViewUpdateChannelsOnAppQuery = {
13323
13387
  isRollBackToEmbedded: boolean;
13324
13388
  manifestPermalink: string;
13325
13389
  gitCommitHash?: string | null;
13390
+ isGitWorkingTreeDirty: boolean;
13391
+ environment?: EnvironmentVariableEnvironment | null;
13326
13392
  rolloutPercentage?: number | null;
13393
+ manifestHostOverride?: string | null;
13394
+ assetHostOverride?: string | null;
13327
13395
  actor?: {
13328
13396
  __typename: 'Robot';
13329
13397
  firstName?: string | null;
@@ -13843,7 +13911,11 @@ export type ViewUpdatesByGroupQuery = {
13843
13911
  isRollBackToEmbedded: boolean;
13844
13912
  manifestPermalink: string;
13845
13913
  gitCommitHash?: string | null;
13914
+ isGitWorkingTreeDirty: boolean;
13915
+ environment?: EnvironmentVariableEnvironment | null;
13846
13916
  rolloutPercentage?: number | null;
13917
+ manifestHostOverride?: string | null;
13918
+ assetHostOverride?: string | null;
13847
13919
  actor?: {
13848
13920
  __typename: 'Robot';
13849
13921
  firstName?: string | null;
@@ -13915,7 +13987,11 @@ export type ViewUpdateGroupsOnBranchQuery = {
13915
13987
  isRollBackToEmbedded: boolean;
13916
13988
  manifestPermalink: string;
13917
13989
  gitCommitHash?: string | null;
13990
+ isGitWorkingTreeDirty: boolean;
13991
+ environment?: EnvironmentVariableEnvironment | null;
13918
13992
  rolloutPercentage?: number | null;
13993
+ manifestHostOverride?: string | null;
13994
+ assetHostOverride?: string | null;
13919
13995
  actor?: {
13920
13996
  __typename: 'Robot';
13921
13997
  firstName?: string | null;
@@ -13986,7 +14062,11 @@ export type ViewUpdateGroupsOnAppQuery = {
13986
14062
  isRollBackToEmbedded: boolean;
13987
14063
  manifestPermalink: string;
13988
14064
  gitCommitHash?: string | null;
14065
+ isGitWorkingTreeDirty: boolean;
14066
+ environment?: EnvironmentVariableEnvironment | null;
13989
14067
  rolloutPercentage?: number | null;
14068
+ manifestHostOverride?: string | null;
14069
+ assetHostOverride?: string | null;
13990
14070
  actor?: {
13991
14071
  __typename: 'Robot';
13992
14072
  firstName?: string | null;
@@ -14050,7 +14130,11 @@ export type UpdateByIdQuery = {
14050
14130
  isRollBackToEmbedded: boolean;
14051
14131
  manifestPermalink: string;
14052
14132
  gitCommitHash?: string | null;
14133
+ isGitWorkingTreeDirty: boolean;
14134
+ environment?: EnvironmentVariableEnvironment | null;
14053
14135
  rolloutPercentage?: number | null;
14136
+ manifestHostOverride?: string | null;
14137
+ assetHostOverride?: string | null;
14054
14138
  actor?: {
14055
14139
  __typename: 'Robot';
14056
14140
  firstName?: string | null;
@@ -14864,7 +14948,11 @@ export type UpdateFragment = {
14864
14948
  isRollBackToEmbedded: boolean;
14865
14949
  manifestPermalink: string;
14866
14950
  gitCommitHash?: string | null;
14951
+ isGitWorkingTreeDirty: boolean;
14952
+ environment?: EnvironmentVariableEnvironment | null;
14867
14953
  rolloutPercentage?: number | null;
14954
+ manifestHostOverride?: string | null;
14955
+ assetHostOverride?: string | null;
14868
14956
  actor?: {
14869
14957
  __typename: 'Robot';
14870
14958
  firstName?: string | null;
@@ -14922,7 +15010,11 @@ export type UpdateBranchFragment = {
14922
15010
  isRollBackToEmbedded: boolean;
14923
15011
  manifestPermalink: string;
14924
15012
  gitCommitHash?: string | null;
15013
+ isGitWorkingTreeDirty: boolean;
15014
+ environment?: EnvironmentVariableEnvironment | null;
14925
15015
  rolloutPercentage?: number | null;
15016
+ manifestHostOverride?: string | null;
15017
+ assetHostOverride?: string | null;
14926
15018
  actor?: {
14927
15019
  __typename: 'Robot';
14928
15020
  firstName?: string | null;
@@ -880,6 +880,7 @@ var WorkflowJobType;
880
880
  WorkflowJobType["Deploy"] = "DEPLOY";
881
881
  WorkflowJobType["Fingerprint"] = "FINGERPRINT";
882
882
  WorkflowJobType["GetBuild"] = "GET_BUILD";
883
+ WorkflowJobType["MaestroCloud"] = "MAESTRO_CLOUD";
883
884
  WorkflowJobType["MaestroTest"] = "MAESTRO_TEST";
884
885
  WorkflowJobType["RequireApproval"] = "REQUIRE_APPROVAL";
885
886
  WorkflowJobType["Slack"] = "SLACK";
@@ -15,6 +15,8 @@ exports.UpdateFragmentNode = (0, graphql_tag_1.default) `
15
15
  isRollBackToEmbedded
16
16
  manifestPermalink
17
17
  gitCommitHash
18
+ isGitWorkingTreeDirty
19
+ environment
18
20
  actor {
19
21
  __typename
20
22
  id
@@ -48,5 +50,7 @@ exports.UpdateFragmentNode = (0, graphql_tag_1.default) `
48
50
  isDebugFingerprint
49
51
  }
50
52
  }
53
+ manifestHostOverride
54
+ assetHostOverride
51
55
  }
52
56
  `;
@@ -16,7 +16,7 @@ export declare function isExpoNotificationsInstalled(projectDir: string): boolea
16
16
  export declare function isExpoInstalled(projectDir: string): boolean;
17
17
  export declare function isExpoUpdatesInstalledAsDevDependency(projectDir: string): boolean;
18
18
  export declare function isExpoUpdatesInstalledOrAvailable(projectDir: string, sdkVersion?: string): boolean;
19
- export declare function isUsingEASUpdate(exp: ExpoConfig, projectId: string): boolean;
19
+ export declare function isUsingEASUpdate(exp: ExpoConfig, projectId: string, manifestHostOverride: string | null): boolean;
20
20
  export declare function getExpoUpdatesPackageVersionIfInstalledAsync(projectDir: string): Promise<string | null>;
21
21
  export declare function validateAppVersionRuntimePolicySupportAsync(projectDir: string, exp: ExpoConfig): Promise<void>;
22
22
  export declare function enforceRollBackToEmbeddedUpdateSupportAsync(projectDir: string): Promise<void>;