eas-cli 0.30.1 → 0.31.0

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/README.md CHANGED
@@ -73,7 +73,7 @@ ALIASES
73
73
  $ eas login
74
74
  ```
75
75
 
76
- _See code: [src/commands/account/login.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/account/login.js)_
76
+ _See code: [src/commands/account/login.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/account/login.js)_
77
77
 
78
78
  ## `eas account:logout`
79
79
 
@@ -87,7 +87,7 @@ ALIASES
87
87
  $ eas logout
88
88
  ```
89
89
 
90
- _See code: [src/commands/account/logout.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/account/logout.js)_
90
+ _See code: [src/commands/account/logout.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/account/logout.js)_
91
91
 
92
92
  ## `eas account:view`
93
93
 
@@ -101,7 +101,7 @@ ALIASES
101
101
  $ eas whoami
102
102
  ```
103
103
 
104
- _See code: [src/commands/account/view.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/account/view.js)_
104
+ _See code: [src/commands/account/view.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/account/view.js)_
105
105
 
106
106
  ## `eas analytics [STATUS]`
107
107
 
@@ -112,7 +112,7 @@ USAGE
112
112
  $ eas analytics [STATUS]
113
113
  ```
114
114
 
115
- _See code: [src/commands/analytics.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/analytics.js)_
115
+ _See code: [src/commands/analytics.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/analytics.js)_
116
116
 
117
117
  ## `eas build`
118
118
 
@@ -145,7 +145,7 @@ OPTIONS
145
145
  --[no-]wait Wait for build(s) to complete
146
146
  ```
147
147
 
148
- _See code: [src/commands/build/index.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/build/index.js)_
148
+ _See code: [src/commands/build/index.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/build/index.js)_
149
149
 
150
150
  ## `eas build:cancel [BUILD_ID]`
151
151
 
@@ -156,7 +156,7 @@ USAGE
156
156
  $ eas build:cancel [BUILD_ID]
157
157
  ```
158
158
 
159
- _See code: [src/commands/build/cancel.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/build/cancel.js)_
159
+ _See code: [src/commands/build/cancel.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/build/cancel.js)_
160
160
 
161
161
  ## `eas build:configure`
162
162
 
@@ -170,7 +170,7 @@ OPTIONS
170
170
  -p, --platform=(android|ios|all) Platform to configure
171
171
  ```
172
172
 
173
- _See code: [src/commands/build/configure.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/build/configure.js)_
173
+ _See code: [src/commands/build/configure.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/build/configure.js)_
174
174
 
175
175
  ## `eas build:list`
176
176
 
@@ -203,7 +203,7 @@ OPTIONS
203
203
  --status=(new|in-queue|in-progress|errored|finished|canceled)
204
204
  ```
205
205
 
206
- _See code: [src/commands/build/list.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/build/list.js)_
206
+ _See code: [src/commands/build/list.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/build/list.js)_
207
207
 
208
208
  ## `eas build:view [BUILD_ID]`
209
209
 
@@ -217,7 +217,7 @@ OPTIONS
217
217
  --json Enable JSON output, non-JSON messages will be printed to stderr
218
218
  ```
219
219
 
220
- _See code: [src/commands/build/view.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/build/view.js)_
220
+ _See code: [src/commands/build/view.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/build/view.js)_
221
221
 
222
222
  ## `eas config`
223
223
 
@@ -232,7 +232,7 @@ OPTIONS
232
232
  --profile=profile
233
233
  ```
234
234
 
235
- _See code: [src/commands/config.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/config.js)_
235
+ _See code: [src/commands/config.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/config.js)_
236
236
 
237
237
  ## `eas credentials`
238
238
 
@@ -243,7 +243,7 @@ USAGE
243
243
  $ eas credentials
244
244
  ```
245
245
 
246
- _See code: [src/commands/credentials.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/credentials.js)_
246
+ _See code: [src/commands/credentials.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/credentials.js)_
247
247
 
248
248
  ## `eas device:create`
249
249
 
@@ -254,7 +254,7 @@ USAGE
254
254
  $ eas device:create
255
255
  ```
256
256
 
257
- _See code: [src/commands/device/create.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/device/create.js)_
257
+ _See code: [src/commands/device/create.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/device/create.js)_
258
258
 
259
259
  ## `eas device:list`
260
260
 
@@ -268,7 +268,7 @@ OPTIONS
268
268
  --apple-team-id=apple-team-id
269
269
  ```
270
270
 
271
- _See code: [src/commands/device/list.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/device/list.js)_
271
+ _See code: [src/commands/device/list.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/device/list.js)_
272
272
 
273
273
  ## `eas device:view [UDID]`
274
274
 
@@ -279,7 +279,7 @@ USAGE
279
279
  $ eas device:view [UDID]
280
280
  ```
281
281
 
282
- _See code: [src/commands/device/view.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/device/view.js)_
282
+ _See code: [src/commands/device/view.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/device/view.js)_
283
283
 
284
284
  ## `eas diagnostics`
285
285
 
@@ -290,7 +290,7 @@ USAGE
290
290
  $ eas diagnostics
291
291
  ```
292
292
 
293
- _See code: [src/commands/diagnostics.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/diagnostics.js)_
293
+ _See code: [src/commands/diagnostics.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/diagnostics.js)_
294
294
 
295
295
  ## `eas help [COMMAND]`
296
296
 
@@ -318,7 +318,7 @@ USAGE
318
318
  $ eas project:info
319
319
  ```
320
320
 
321
- _See code: [src/commands/project/info.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/project/info.js)_
321
+ _See code: [src/commands/project/info.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/project/info.js)_
322
322
 
323
323
  ## `eas project:init`
324
324
 
@@ -332,7 +332,7 @@ ALIASES
332
332
  $ eas init
333
333
  ```
334
334
 
335
- _See code: [src/commands/project/init.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/project/init.js)_
335
+ _See code: [src/commands/project/init.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/project/init.js)_
336
336
 
337
337
  ## `eas secret:create`
338
338
 
@@ -349,7 +349,7 @@ OPTIONS
349
349
  --value=value Value of the secret
350
350
  ```
351
351
 
352
- _See code: [src/commands/secret/create.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/secret/create.js)_
352
+ _See code: [src/commands/secret/create.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/secret/create.js)_
353
353
 
354
354
  ## `eas secret:delete`
355
355
 
@@ -366,7 +366,7 @@ DESCRIPTION
366
366
  Unsure where to find the secret's ID? Run eas secrets:list
367
367
  ```
368
368
 
369
- _See code: [src/commands/secret/delete.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/secret/delete.js)_
369
+ _See code: [src/commands/secret/delete.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/secret/delete.js)_
370
370
 
371
371
  ## `eas secret:list`
372
372
 
@@ -377,7 +377,7 @@ USAGE
377
377
  $ eas secret:list
378
378
  ```
379
379
 
380
- _See code: [src/commands/secret/list.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/secret/list.js)_
380
+ _See code: [src/commands/secret/list.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/secret/list.js)_
381
381
 
382
382
  ## `eas submit`
383
383
 
@@ -410,7 +410,7 @@ ALIASES
410
410
  $ eas build:submit
411
411
  ```
412
412
 
413
- _See code: [src/commands/submit.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/submit.js)_
413
+ _See code: [src/commands/submit.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/submit.js)_
414
414
 
415
415
  ## `eas webhook:create`
416
416
 
@@ -429,7 +429,7 @@ OPTIONS
429
429
  --url=url Webhook URL
430
430
  ```
431
431
 
432
- _See code: [src/commands/webhook/create.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/webhook/create.js)_
432
+ _See code: [src/commands/webhook/create.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/webhook/create.js)_
433
433
 
434
434
  ## `eas webhook:delete [ID]`
435
435
 
@@ -443,7 +443,7 @@ ARGUMENTS
443
443
  ID ID of the webhook to delete
444
444
  ```
445
445
 
446
- _See code: [src/commands/webhook/delete.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/webhook/delete.js)_
446
+ _See code: [src/commands/webhook/delete.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/webhook/delete.js)_
447
447
 
448
448
  ## `eas webhook:list`
449
449
 
@@ -457,7 +457,7 @@ OPTIONS
457
457
  --event=(BUILD) Event type that triggers the webhook
458
458
  ```
459
459
 
460
- _See code: [src/commands/webhook/list.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/webhook/list.js)_
460
+ _See code: [src/commands/webhook/list.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/webhook/list.js)_
461
461
 
462
462
  ## `eas webhook:update`
463
463
 
@@ -477,7 +477,7 @@ OPTIONS
477
477
  --url=url Webhook URL
478
478
  ```
479
479
 
480
- _See code: [src/commands/webhook/update.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/webhook/update.js)_
480
+ _See code: [src/commands/webhook/update.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/webhook/update.js)_
481
481
 
482
482
  ## `eas webhook:view ID`
483
483
 
@@ -491,5 +491,5 @@ ARGUMENTS
491
491
  ID ID of the webhook to view
492
492
  ```
493
493
 
494
- _See code: [src/commands/webhook/view.js](https://github.com/expo/eas-cli/blob/v0.30.1/packages/eas-cli/src/commands/webhook/view.js)_
494
+ _See code: [src/commands/webhook/view.js](https://github.com/expo/eas-cli/blob/v0.31.0/packages/eas-cli/src/commands/webhook/view.js)_
495
495
  <!-- commandsstop -->
@@ -14,7 +14,6 @@ const cacheDefaults = {
14
14
  cacheDefaultPaths: true,
15
15
  };
16
16
  async function prepareJobAsync(ctx, jobData) {
17
- var _a;
18
17
  const username = (0, projectUtils_1.getUsername)(ctx.exp, await (0, actions_1.ensureLoggedInAsync)());
19
18
  const buildProfile = ctx.buildProfile;
20
19
  const projectRootDirectory = (0, slash_1.default)(path_1.default.relative(await vcs_1.default.getRootPathAsync(), ctx.projectDir)) || '.';
@@ -41,7 +40,7 @@ async function prepareJobAsync(ctx, jobData) {
41
40
  projectRootDirectory,
42
41
  projectArchive: jobData.projectArchive,
43
42
  builderEnvironment: {
44
- image: (_a = buildProfile.image) !== null && _a !== void 0 ? _a : 'default',
43
+ image: buildProfile.image,
45
44
  node: buildProfile.node,
46
45
  yarn: buildProfile.yarn,
47
46
  ndk: buildProfile.ndk,
@@ -4,7 +4,6 @@ exports.prepareJobAsync = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const eas_build_job_1 = require("@expo/eas-build-job");
6
6
  const path_1 = (0, tslib_1.__importDefault)(require("path"));
7
- const semver_1 = (0, tslib_1.__importDefault)(require("semver"));
8
7
  const slash_1 = (0, tslib_1.__importDefault)(require("slash"));
9
8
  const projectUtils_1 = require("../../project/projectUtils");
10
9
  const actions_1 = require("../../user/actions");
@@ -31,7 +30,7 @@ async function prepareJobAsync(ctx, jobData) {
31
30
  projectRootDirectory,
32
31
  distribution: ctx.buildProfile.simulator ? 'simulator' : ctx.buildProfile.distribution,
33
32
  builderEnvironment: {
34
- image: resolveImage(ctx),
33
+ image: ctx.buildProfile.image,
35
34
  node: ctx.buildProfile.node,
36
35
  yarn: ctx.buildProfile.yarn,
37
36
  bundler: ctx.buildProfile.bundler,
@@ -61,17 +60,6 @@ async function prepareJobAsync(ctx, jobData) {
61
60
  return (0, eas_build_job_1.sanitizeJob)(job);
62
61
  }
63
62
  exports.prepareJobAsync = prepareJobAsync;
64
- function resolveImage(ctx) {
65
- var _a;
66
- // see https://linear.app/expo/issue/ENG-1396/make-default-image-dependent-on-sdk-version
67
- if (!ctx.buildProfile.image && ctx.exp.sdkVersion) {
68
- const majorSdkVersion = semver_1.default.major(ctx.exp.sdkVersion);
69
- if (majorSdkVersion <= 41) {
70
- return 'macos-catalina-10.15-xcode-12.4';
71
- }
72
- }
73
- return (_a = ctx.buildProfile.image) !== null && _a !== void 0 ? _a : 'default';
74
- }
75
63
  function prepareTargetCredentials(targetCredentials) {
76
64
  return {
77
65
  provisioningProfileBase64: targetCredentials.provisioningProfile,
@@ -18,7 +18,7 @@ function printLogsUrls(builds) {
18
18
  else {
19
19
  builds.forEach(build => {
20
20
  const logsUrl = (0, url_1.getBuildLogsUrl)(build);
21
- log_1.default.log(`${platform_1.appPlatformDisplayNames[build.platform]} build details: ${chalk_1.default.underline(logsUrl)}`);
21
+ log_1.default.log(`${platform_1.appPlatformEmojis[build.platform]} ${platform_1.appPlatformDisplayNames[build.platform]} build details: ${chalk_1.default.underline(logsUrl)}`);
22
22
  });
23
23
  }
24
24
  }
@@ -15,6 +15,8 @@ export declare type KeystoreWithType = Keystore & {
15
15
  export declare type GoogleServiceAccountKey = {
16
16
  [key: string]: any;
17
17
  private_key: string;
18
+ type: string;
19
+ client_email: string;
18
20
  };
19
21
  export declare type AndroidCredentials = {
20
22
  experienceName: string;
@@ -13,6 +13,7 @@ const date_1 = require("../../../utils/date");
13
13
  exports.MinimalGoogleServiceAccountKeySchema = joi_1.default.object({
14
14
  type: joi_1.default.string().required(),
15
15
  private_key: joi_1.default.string().required(),
16
+ client_email: joi_1.default.string().required(),
16
17
  });
17
18
  function fileIsServiceAccountKey(keyJsonPath) {
18
19
  try {
@@ -8,6 +8,7 @@ export declare class SetupAdhocProvisioningProfile {
8
8
  runWithDistributionCertificateAsync(ctx: CredentialsContext, distCert: AppleDistributionCertificateFragment): Promise<IosAppBuildCredentialsFragment>;
9
9
  private areBuildCredentialsSetupAsync;
10
10
  private shouldUseExistingProfileAsync;
11
+ private promptForReuseActionAsync;
11
12
  private registerDevicesAsync;
12
13
  }
13
14
  export declare function doUDIDsMatch(udidsA: string[], udidsB: string[]): boolean;
@@ -16,6 +16,12 @@ const AppleTeamUtils_1 = require("./AppleTeamUtils");
16
16
  const BuildCredentialsUtils_1 = require("./BuildCredentialsUtils");
17
17
  const DeviceUtils_1 = require("./DeviceUtils");
18
18
  const SetupDistributionCertificate_1 = require("./SetupDistributionCertificate");
19
+ var ReuseAction;
20
+ (function (ReuseAction) {
21
+ ReuseAction[ReuseAction["Yes"] = 0] = "Yes";
22
+ ReuseAction[ReuseAction["ShowDevices"] = 1] = "ShowDevices";
23
+ ReuseAction[ReuseAction["No"] = 2] = "No";
24
+ })(ReuseAction || (ReuseAction = {}));
19
25
  class SetupAdhocProvisioningProfile {
20
26
  constructor(app) {
21
27
  this.app = app;
@@ -108,10 +114,23 @@ class SetupAdhocProvisioningProfile {
108
114
  const provisionedDevices = provisioningProfile.appleDevices;
109
115
  const allRegisteredDevicesAreProvisioned = doUDIDsMatch(registeredAppleDevices.map(({ identifier }) => identifier), provisionedDevices.map(({ identifier }) => identifier));
110
116
  if (allRegisteredDevicesAreProvisioned) {
111
- return await (0, prompts_1.confirmAsync)({
112
- message: `All your registered devices are present in the Provisioning Profile. Would you like to reuse it?`,
113
- initial: true,
114
- });
117
+ const reuseAction = await this.promptForReuseActionAsync();
118
+ if (reuseAction === ReuseAction.Yes) {
119
+ return true;
120
+ }
121
+ else if (reuseAction === ReuseAction.No) {
122
+ return false;
123
+ }
124
+ else {
125
+ log_1.default.newLine();
126
+ log_1.default.log('Devices registered in the Provisioning Profile:');
127
+ for (const device of provisionedDevices) {
128
+ log_1.default.log(`- ${(0, DeviceUtils_1.formatDeviceLabel)(device)}`);
129
+ }
130
+ log_1.default.newLine();
131
+ return ((await this.promptForReuseActionAsync({ showShowDevicesOption: false })) ===
132
+ ReuseAction.Yes);
133
+ }
115
134
  }
116
135
  else {
117
136
  const missingDevices = (0, differenceBy_1.default)(registeredAppleDevices, provisionedDevices, 'identifier');
@@ -125,6 +144,31 @@ class SetupAdhocProvisioningProfile {
125
144
  }));
126
145
  }
127
146
  }
147
+ async promptForReuseActionAsync({ showShowDevicesOption = true, } = {}) {
148
+ const { selected } = await (0, prompts_1.promptAsync)({
149
+ type: 'select',
150
+ name: 'selected',
151
+ message: `${showShowDevicesOption
152
+ ? 'All your registered devices are present in the Provisioning Profile. '
153
+ : ''}Would you like to reuse the profile?`,
154
+ choices: [
155
+ { title: 'Yes', value: ReuseAction.Yes },
156
+ ...(showShowDevicesOption
157
+ ? [
158
+ {
159
+ title: 'Show devices and ask me again',
160
+ value: ReuseAction.ShowDevices,
161
+ },
162
+ ]
163
+ : []),
164
+ {
165
+ title: 'No, let me choose devices again',
166
+ value: ReuseAction.No,
167
+ },
168
+ ],
169
+ });
170
+ return selected;
171
+ }
128
172
  async registerDevicesAsync(ctx, appleTeam) {
129
173
  const action = new action_1.default(this.app.account, appleTeam);
130
174
  const method = await action.runAsync();
@@ -99,10 +99,9 @@ function displayProjectCredentials(app, appBuildCredentials, targets) {
99
99
  }, {});
100
100
  const isMultitarget = targets.length > 1;
101
101
  log_1.default.addNewLineIfNone();
102
- const fields = [
103
- { label: 'Project Credentials Configuration', value: '' },
104
- { label: 'Project', value: projectFullName },
105
- ];
102
+ log_1.default.log(chalk_1.default.cyan.bold('Project Credentials Configuration'));
103
+ log_1.default.newLine();
104
+ const fields = [{ label: 'Project', value: projectFullName }];
106
105
  for (const [targetName, buildCredentials] of Object.entries(appBuildCredentials)) {
107
106
  if (isMultitarget) {
108
107
  fields.push({ label: '', value: '' });
@@ -115,10 +114,12 @@ function displayProjectCredentials(app, appBuildCredentials, targets) {
115
114
  }
116
115
  exports.displayProjectCredentials = displayProjectCredentials;
117
116
  function displayIosAppBuildCredentials(buildCredentials, fields) {
117
+ fields.push({ label: '', value: '' });
118
118
  fields.push({
119
119
  label: `${prettyIosDistributionType(buildCredentials.iosDistributionType)} Configuration`,
120
120
  value: '',
121
121
  });
122
+ fields.push({ label: '', value: '' });
122
123
  const maybeDistCert = buildCredentials.distributionCertificate;
123
124
  fields.push({ label: 'Distribution Certificate', value: '' });
124
125
  if (maybeDistCert) {
@@ -158,9 +159,13 @@ function displayIosAppBuildCredentials(buildCredentials, fields) {
158
159
  });
159
160
  }
160
161
  if (appleDevices && appleDevices.length > 0) {
161
- fields.push({ label: 'Provisioned devices', value: '' });
162
- for (const appleDevice of appleDevices) {
163
- fields.push({ label: ' -', value: formatAppleDevice(appleDevice) });
162
+ const [firstAppleDevice, ...rest] = appleDevices;
163
+ fields.push({
164
+ label: 'Provisioned devices',
165
+ value: `- ${formatAppleDevice(firstAppleDevice)}`,
166
+ });
167
+ for (const appleDevice of rest) {
168
+ fields.push({ label: '', value: `- ${formatAppleDevice(appleDevice)}` });
164
169
  }
165
170
  }
166
171
  fields.push({ label: 'Updated', value: `${(0, date_1.fromNow)(new Date(updatedAt))} ago` });
@@ -120,14 +120,9 @@ class AndroidSubmitCommand {
120
120
  path: serviceAccountKeyPath,
121
121
  });
122
122
  }
123
- else if (this.ctx.nonInteractive) {
124
- return (0, results_1.result)(new Error('Set serviceAccountKeyPath in the submit profile (eas.json).'));
125
- }
126
- else {
127
- return (0, results_1.result)({
128
- sourceType: ServiceAccountSource_1.ServiceAccountSourceType.detect,
129
- });
130
- }
123
+ return (0, results_1.result)({
124
+ sourceType: ServiceAccountSource_1.ServiceAccountSourceType.credentialsService,
125
+ });
131
126
  }
132
127
  }
133
128
  exports.default = AndroidSubmitCommand;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
4
+ const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
5
5
  const SubmissionMutation_1 = require("../../graphql/mutations/SubmissionMutation");
6
+ const formatFields_1 = (0, tslib_1.__importDefault)(require("../../utils/formatFields"));
6
7
  const ArchiveSource_1 = require("../ArchiveSource");
7
8
  const BaseSubmitter_1 = (0, tslib_1.__importDefault)(require("../BaseSubmitter"));
8
9
  const summary_1 = require("../utils/summary");
@@ -30,15 +31,14 @@ class AndroidSubmitter extends BaseSubmitter_1.default {
30
31
  async resolveSourceOptionsAsync() {
31
32
  const androidPackage = await (0, AndroidPackageSource_1.getAndroidPackageAsync)(this.options.androidPackageSource);
32
33
  const archive = await (0, ArchiveSource_1.getArchiveAsync)(this.options.archiveSource);
33
- const serviceAccountPath = await (0, ServiceAccountSource_1.getServiceAccountAsync)(this.options.serviceAccountSource);
34
+ const serviceAccountKeyResult = await (0, ServiceAccountSource_1.getServiceAccountKeyResultAsync)(this.ctx, this.options.serviceAccountSource, androidPackage);
34
35
  return {
35
36
  androidPackage,
36
37
  archive,
37
- serviceAccountPath,
38
+ serviceAccountKeyResult,
38
39
  };
39
40
  }
40
- async formatSubmissionConfigAsync(options, { archive, androidPackage, serviceAccountPath }) {
41
- const serviceAccount = await fs_extra_1.default.readFile(serviceAccountPath, 'utf-8');
41
+ async formatSubmissionConfigAsync(options, { archive, androidPackage, serviceAccountKeyResult }) {
42
42
  const { track, releaseStatus, changesNotSentForReview } = options;
43
43
  return {
44
44
  applicationIdentifier: androidPackage,
@@ -46,10 +46,10 @@ class AndroidSubmitter extends BaseSubmitter_1.default {
46
46
  track,
47
47
  changesNotSentForReview,
48
48
  releaseStatus,
49
- googleServiceAccountKeyJson: serviceAccount,
49
+ ...serviceAccountKeyResult.result,
50
50
  };
51
51
  }
52
- prepareSummaryData(options, { archive, androidPackage, serviceAccountPath }) {
52
+ prepareSummaryData(options, { archive, androidPackage, serviceAccountKeyResult }) {
53
53
  const { projectId, track, releaseStatus, changesNotSentForReview } = options;
54
54
  // structuring order affects table rows order
55
55
  return {
@@ -58,7 +58,7 @@ class AndroidSubmitter extends BaseSubmitter_1.default {
58
58
  track,
59
59
  changesNotSentForReview: changesNotSentForReview !== null && changesNotSentForReview !== void 0 ? changesNotSentForReview : undefined,
60
60
  releaseStatus: releaseStatus !== null && releaseStatus !== void 0 ? releaseStatus : undefined,
61
- serviceAccountPath,
61
+ formattedServiceAccount: formatServiceAccountSummary(serviceAccountKeyResult),
62
62
  ...(0, summary_1.formatArchiveSourceSummary)(archive),
63
63
  };
64
64
  }
@@ -70,8 +70,30 @@ const SummaryHumanReadableKeys = {
70
70
  archiveUrl: 'Download URL',
71
71
  changesNotSentForReview: 'Changes not sent for a review',
72
72
  formattedBuild: 'Build',
73
+ formattedServiceAccount: 'Google Service Account Key',
73
74
  projectId: 'Project ID',
74
75
  releaseStatus: 'Release status',
75
- serviceAccountPath: 'Google Service Key',
76
76
  track: 'Release track',
77
77
  };
78
+ function formatServiceAccountSummary({ summary }) {
79
+ const { email: serviceAccountEmail, path: serviceAccountKeyPath, source: serviceAccountKeySource, } = summary;
80
+ const fields = [
81
+ {
82
+ label: 'Key Source',
83
+ value: serviceAccountKeySource,
84
+ },
85
+ {
86
+ label: 'Key Path',
87
+ value: serviceAccountKeyPath,
88
+ },
89
+ {
90
+ label: 'Account E-mail',
91
+ value: serviceAccountEmail,
92
+ },
93
+ ];
94
+ const filteredFields = fields.filter(({ value }) => value !== undefined && value !== null);
95
+ return ('\n' +
96
+ (0, formatFields_1.default)(filteredFields, {
97
+ labelFormat: label => ` ${chalk_1.default.dim(label)}:`,
98
+ }));
99
+ }
@@ -1,7 +1,9 @@
1
+ import { Platform } from '@expo/eas-build-job';
2
+ import { SubmissionContext } from '../context';
1
3
  export declare enum ServiceAccountSourceType {
2
4
  path = 0,
3
5
  prompt = 1,
4
- detect = 2
6
+ credentialsService = 2
5
7
  }
6
8
  interface ServiceAccountSourceBase {
7
9
  sourceType: ServiceAccountSourceType;
@@ -13,9 +15,26 @@ interface ServiceAccountPathSource extends ServiceAccountSourceBase {
13
15
  interface ServiceAccountPromptSource extends ServiceAccountSourceBase {
14
16
  sourceType: ServiceAccountSourceType.prompt;
15
17
  }
16
- interface ServiceAccountDetectSource extends ServiceAccountSourceBase {
17
- sourceType: ServiceAccountSourceType.detect;
18
+ export interface ServiceAccountCredentialsServiceSource extends ServiceAccountSourceBase {
19
+ sourceType: ServiceAccountSourceType.credentialsService;
18
20
  }
19
- export declare type ServiceAccountSource = ServiceAccountPathSource | ServiceAccountPromptSource | ServiceAccountDetectSource;
20
- export declare function getServiceAccountAsync(source: ServiceAccountSource): Promise<string>;
21
+ export declare type ServiceAccountKeyResult = {
22
+ result: ServiceAccountKeyFile | ServiceAccountKeyFromExpoServers;
23
+ summary: ServiceAccountKeySummary;
24
+ };
25
+ declare type ServiceAccountKeySummary = {
26
+ source: 'local' | 'EAS servers';
27
+ path?: string;
28
+ email: string;
29
+ };
30
+ declare type ServiceAccountKeyFile = {
31
+ googleServiceAccountKeyJson: string;
32
+ };
33
+ declare type ServiceAccountKeyFromExpoServers = {
34
+ googleServiceAccountKeyId: string;
35
+ };
36
+ export declare type ServiceAccountSource = ServiceAccountPathSource | ServiceAccountPromptSource | ServiceAccountCredentialsServiceSource;
37
+ export declare function getServiceAccountKeyResultAsync(ctx: SubmissionContext<Platform.ANDROID>, source: ServiceAccountSource, androidApplicationIdentifier: string): Promise<ServiceAccountKeyResult>;
38
+ export declare function getServiceAccountKeyPathAsync(source: ServiceAccountSource): Promise<string>;
39
+ export declare function getServiceAccountFromCredentialsServiceAsync(ctx: SubmissionContext<Platform.ANDROID>, androidApplicationIdentifier: string): Promise<ServiceAccountKeyResult>;
21
40
  export {};
@@ -1,66 +1,85 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getServiceAccountAsync = exports.ServiceAccountSourceType = void 0;
3
+ exports.getServiceAccountFromCredentialsServiceAsync = exports.getServiceAccountKeyPathAsync = exports.getServiceAccountKeyResultAsync = exports.ServiceAccountSourceType = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
6
- const fast_glob_1 = (0, tslib_1.__importDefault)(require("fast-glob"));
7
6
  const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
8
- const path_1 = (0, tslib_1.__importDefault)(require("path"));
7
+ const nullthrows_1 = (0, tslib_1.__importDefault)(require("nullthrows"));
8
+ const SetupGoogleServiceAccountKey_1 = require("../../credentials/android/actions/SetupGoogleServiceAccountKey");
9
+ const googleServiceAccountKey_1 = require("../../credentials/android/utils/googleServiceAccountKey");
9
10
  const log_1 = (0, tslib_1.__importStar)(require("../../log"));
10
- const projectUtils_1 = require("../../project/projectUtils");
11
11
  const prompts_1 = require("../../prompts");
12
- const filterAsync_1 = require("../../utils/filterAsync");
12
+ const Account_1 = require("../../user/Account");
13
13
  const files_1 = require("../utils/files");
14
14
  var ServiceAccountSourceType;
15
15
  (function (ServiceAccountSourceType) {
16
16
  ServiceAccountSourceType[ServiceAccountSourceType["path"] = 0] = "path";
17
17
  ServiceAccountSourceType[ServiceAccountSourceType["prompt"] = 1] = "prompt";
18
- ServiceAccountSourceType[ServiceAccountSourceType["detect"] = 2] = "detect";
19
- // credentialsService,
20
- // ...
18
+ ServiceAccountSourceType[ServiceAccountSourceType["credentialsService"] = 2] = "credentialsService";
21
19
  })(ServiceAccountSourceType = exports.ServiceAccountSourceType || (exports.ServiceAccountSourceType = {}));
22
- async function getServiceAccountAsync(source) {
20
+ async function getServiceAccountKeyResultAsync(ctx, source, androidApplicationIdentifier) {
21
+ if (source.sourceType === ServiceAccountSourceType.credentialsService) {
22
+ return await getServiceAccountFromCredentialsServiceAsync(ctx, androidApplicationIdentifier);
23
+ }
24
+ else {
25
+ return await getServiceAccountLocallyAsync(source);
26
+ }
27
+ }
28
+ exports.getServiceAccountKeyResultAsync = getServiceAccountKeyResultAsync;
29
+ async function getServiceAccountLocallyAsync(source) {
30
+ const serviceAccountKeyPath = await getServiceAccountKeyPathAsync(source);
31
+ const serviceAccountKey = (0, googleServiceAccountKey_1.readAndValidateServiceAccountKey)(serviceAccountKeyPath);
32
+ return {
33
+ result: { googleServiceAccountKeyJson: await fs_extra_1.default.readFile(serviceAccountKeyPath, 'utf-8') },
34
+ summary: {
35
+ source: 'local',
36
+ path: serviceAccountKeyPath,
37
+ email: serviceAccountKey.client_email,
38
+ },
39
+ };
40
+ }
41
+ async function getServiceAccountKeyPathAsync(source) {
23
42
  switch (source.sourceType) {
24
43
  case ServiceAccountSourceType.path:
25
44
  return await handlePathSourceAsync(source);
26
45
  case ServiceAccountSourceType.prompt:
27
46
  return await handlePromptSourceAsync(source);
28
- case ServiceAccountSourceType.detect:
29
- return await handleDetectSourceAsync(source);
47
+ case ServiceAccountSourceType.credentialsService: {
48
+ throw new Error(`ServiceAccountSource ${source} does not return a path.`);
49
+ }
30
50
  }
31
51
  }
32
- exports.getServiceAccountAsync = getServiceAccountAsync;
52
+ exports.getServiceAccountKeyPathAsync = getServiceAccountKeyPathAsync;
53
+ async function getServiceAccountFromCredentialsServiceAsync(ctx, androidApplicationIdentifier) {
54
+ const appLookupParams = {
55
+ account: (0, nullthrows_1.default)((0, Account_1.findAccountByName)(ctx.user.accounts, ctx.accountName), `You do not have access to account: ${ctx.accountName}`),
56
+ projectName: ctx.projectName,
57
+ androidApplicationIdentifier,
58
+ };
59
+ const setupGoogleServiceAccountKeyAction = new SetupGoogleServiceAccountKey_1.SetupGoogleServiceAccountKey(appLookupParams);
60
+ const androidAppCredentials = await setupGoogleServiceAccountKeyAction.runAsync(ctx.credentialsCtx);
61
+ const googleServiceAccountKey = (0, nullthrows_1.default)(androidAppCredentials.googleServiceAccountKeyForSubmissions, 'Credentials Service must provide a valid GoogleServiceAccountKey');
62
+ return {
63
+ result: {
64
+ googleServiceAccountKeyId: googleServiceAccountKey.id,
65
+ },
66
+ summary: {
67
+ source: 'EAS servers',
68
+ email: googleServiceAccountKey.clientEmail,
69
+ },
70
+ };
71
+ }
72
+ exports.getServiceAccountFromCredentialsServiceAsync = getServiceAccountFromCredentialsServiceAsync;
33
73
  async function handlePathSourceAsync(source) {
34
74
  if (!(await (0, files_1.isExistingFileAsync)(source.path))) {
35
75
  log_1.default.warn(`File ${source.path} doesn't exist.`);
36
- return await getServiceAccountAsync({ sourceType: ServiceAccountSourceType.prompt });
76
+ return await getServiceAccountKeyPathAsync({ sourceType: ServiceAccountSourceType.prompt });
37
77
  }
38
78
  return source.path;
39
79
  }
40
- async function handleDetectSourceAsync(_source) {
41
- const projectDir = await (0, projectUtils_1.findProjectRootAsync)();
42
- const foundFilePaths = await (0, fast_glob_1.default)('**/*.json', {
43
- cwd: projectDir,
44
- ignore: ['app.json', 'package*.json', 'tsconfig.json', 'node_modules'],
45
- });
46
- const googleServiceFiles = await (0, filterAsync_1.filterAsync)(foundFilePaths.map(file => path_1.default.join(projectDir, file)), fileIsGoogleServicesAsync);
47
- if (googleServiceFiles.length > 1) {
48
- const selectedPath = await displayPathChooserAsync(googleServiceFiles, projectDir);
49
- if (selectedPath !== false) {
50
- return selectedPath;
51
- }
52
- }
53
- else if (googleServiceFiles.length === 1) {
54
- const [detectedPath] = googleServiceFiles;
55
- if (await confirmDetectedPathAsync(detectedPath)) {
56
- return detectedPath;
57
- }
58
- }
59
- return await getServiceAccountAsync({ sourceType: ServiceAccountSourceType.prompt });
60
- }
61
80
  async function handlePromptSourceAsync(_source) {
62
81
  const path = await askForServiceAccountPathAsync();
63
- return await getServiceAccountAsync({
82
+ return await getServiceAccountKeyPathAsync({
64
83
  sourceType: ServiceAccountSourceType.path,
65
84
  path,
66
85
  });
@@ -89,42 +108,3 @@ async function askForServiceAccountPathAsync() {
89
108
  });
90
109
  return filePath;
91
110
  }
92
- async function displayPathChooserAsync(paths, projectDir) {
93
- const choices = paths.map(f => ({
94
- value: f,
95
- title: f.startsWith(projectDir) ? path_1.default.relative(projectDir, f) : f,
96
- }));
97
- choices.push({
98
- title: 'None of the above',
99
- value: false,
100
- });
101
- log_1.default.log('Multiple Google Service Account JSON keys have been found inside your project directory.');
102
- const { selectedPath } = await (0, prompts_1.promptAsync)({
103
- name: 'selectedPath',
104
- type: 'select',
105
- message: 'Choose the key you want to use for this submission:',
106
- choices,
107
- });
108
- log_1.default.addNewLineIfNone();
109
- return selectedPath;
110
- }
111
- async function confirmDetectedPathAsync(path) {
112
- log_1.default.log(`A Google Service Account JSON key has been found at\n ${chalk_1.default.underline(path)}`);
113
- const { confirmed } = await (0, prompts_1.promptAsync)({
114
- name: 'confirmed',
115
- type: 'confirm',
116
- message: 'Would you like to use this file?',
117
- initial: true,
118
- });
119
- log_1.default.addNewLineIfNone();
120
- return confirmed;
121
- }
122
- async function fileIsGoogleServicesAsync(path) {
123
- try {
124
- const jsonFile = await fs_extra_1.default.readJson(path);
125
- return jsonFile.type === 'service_account';
126
- }
127
- catch (e) {
128
- return false;
129
- }
130
- }
@@ -2,7 +2,9 @@ import { ExpoConfig } from '@expo/config';
2
2
  import { Platform } from '@expo/eas-build-job';
3
3
  import { SubmitProfile } from '@expo/eas-json';
4
4
  import { CredentialsContext } from '../credentials/context';
5
+ import { Actor } from '../user/User';
5
6
  export interface SubmissionContext<T extends Platform> {
7
+ accountName: string;
6
8
  archiveFlags: SubmitArchiveFlags;
7
9
  credentialsCtx: CredentialsContext;
8
10
  exp: ExpoConfig;
@@ -11,6 +13,8 @@ export interface SubmissionContext<T extends Platform> {
11
13
  profile: SubmitProfile<T>;
12
14
  projectDir: string;
13
15
  projectId: string;
16
+ projectName: string;
17
+ user: Actor;
14
18
  }
15
19
  export interface SubmitArchiveFlags {
16
20
  latest?: boolean;
@@ -3,20 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSubmissionContextAsync = void 0;
4
4
  const context_1 = require("../credentials/context");
5
5
  const expoConfig_1 = require("../project/expoConfig");
6
+ const projectUtils_1 = require("../project/projectUtils");
6
7
  const actions_1 = require("../user/actions");
7
8
  async function createSubmissionContextAsync(params) {
8
9
  const { projectDir, nonInteractive } = params;
9
10
  const exp = (0, expoConfig_1.getExpoConfig)(projectDir, { env: params.env });
10
11
  const { env, ...rest } = params;
12
+ const user = await (0, actions_1.ensureLoggedInAsync)();
13
+ const projectName = exp.slug;
14
+ const accountName = (0, projectUtils_1.getProjectAccountName)(exp, user);
11
15
  let credentialsCtx = params.credentialsCtx;
12
16
  if (!credentialsCtx) {
13
- const user = await (0, actions_1.ensureLoggedInAsync)();
14
17
  credentialsCtx = new context_1.CredentialsContext({ projectDir, user, exp, nonInteractive });
15
18
  }
16
19
  return {
17
20
  ...rest,
21
+ accountName,
18
22
  credentialsCtx,
19
23
  exp,
24
+ projectName,
25
+ user,
20
26
  };
21
27
  }
22
28
  exports.createSubmissionContextAsync = createSubmissionContextAsync;
@@ -1 +1 @@
1
- {"version":"0.30.1","commands":{"analytics":{"id":"analytics","description":"view or change analytics settings","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"show the eas.json config","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","options":["android","ios"]},"profile":{"name":"profile","type":"option"}},"args":[]},"credentials":{"id":"credentials","description":"manage your credentials","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"log environment info to the console","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit build archive to app store\nSee how to configure submits with eas.json: https://docs.expo.dev/submit/eas-json/","pluginName":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","options":["android","ios","all"]},"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"release\" if defined in eas.json."},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false},"id":{"name":"id","type":"option","description":"ID of the build to submit"},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file"},"url":{"name":"url","type":"option","description":"App archive url"},"verbose":{"name":"verbose","type":"boolean","description":"Always print logs from Submission Service","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for submission to complete","allowNo":true},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[]},"account:login":{"id":"account:login","description":"log in with your Expo account","pluginName":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","pluginName":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","pluginName":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"Create a branch on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the new branch ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to create","required":false}]},"branch:delete":{"id":"branch:delete","description":"Republish an update group","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return JSON with the edited branch's ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to delete","required":false}]},"branch:list":{"id":"branch:list","description":"List all branches on this project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[]},"branch:publish":{"id":"branch:publish","description":"Publish an update group to a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"message":{"name":"message","type":"option","description":"short message describing the updates.","required":false},"republish":{"name":"republish","type":"boolean","description":"republish an update group","allowNo":false},"group":{"name":"group","type":"option","description":"update group to republish"},"input-dir":{"name":"input-dir","type":"option","description":"location of the bundle","required":false,"default":"dist"},"skip-bundler":{"name":"skip-bundler","type":"boolean","description":"skip running Expo CLI to bundle the app before publishing","allowNo":false},"platform":{"name":"platform","type":"option","char":"p","description":"only publish to a single platform","required":false,"helpValue":"(android|ios|all)","options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"return a json with the new update group.","allowNo":false},"auto":{"name":"auto","type":"boolean","description":"use the current git branch and commit message for the EAS branch and update message","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to publish on"}]},"branch:rename":{"id":"branch:rename","description":"Rename a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[]},"branch:view":{"id":"branch:view","description":"View a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the branch's ID name and recent update groups.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to view","required":false}]},"build:cancel":{"id":"build:cancel","description":"Cancel a build.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"Configure the project to support EAS Build.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","options":["android","ios","all"]}},"args":[]},"build":{"id":"build","description":"start a build","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","options":["android","ios","all"]},"skip-credentials-check":{"name":"skip-credentials-check","type":"boolean","hidden":true,"allowNo":false},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"skip-project-configuration":{"name":"skip-project-configuration","type":"boolean","description":"Skip project configuration","allowNo":false},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json","helpValue":"PROFILE_NAME","default":"release"},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false},"local":{"name":"local","type":"boolean","description":"Run build locally [experimental]","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for build(s) to complete","allowNo":true},"clear-cache":{"name":"clear-cache","type":"boolean","description":"Clear cache before the build","allowNo":false},"auto-submit":{"name":"auto-submit","type":"boolean","description":"Submit on build complete using the submit profile with the same name as the build profile","allowNo":false},"auto-submit-with-profile":{"name":"auto-submit-with-profile","type":"option","description":"Submit on build complete using the submit profile with provided name","helpValue":"PROFILE_NAME"}},"args":[]},"build:list":{"id":"build:list","description":"list all builds for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","options":["all","android","ios"]},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"status":{"name":"status","type":"option","helpValue":"(new|in-queue|in-progress|errored|finished|canceled)","options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option"},"appVersion":{"name":"appVersion","type":"option"},"appBuildVersion":{"name":"appBuildVersion","type":"option"},"sdkVersion":{"name":"sdkVersion","type":"option"},"runtimeVersion":{"name":"runtimeVersion","type":"option"},"appIdentifier":{"name":"appIdentifier","type":"option"},"buildProfile":{"name":"buildProfile","type":"option"},"gitCommitHash":{"name":"gitCommitHash","type":"option"},"limit":{"name":"limit","type":"option"}},"args":[]},"build:view":{"id":"build:view","description":"view a build for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false}},"args":[{"name":"BUILD_ID"}]},"channel:create":{"id":"channel:create","description":"Create a channel on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to create","required":false}]},"channel:edit":{"id":"channel:edit","description":"Point a channel at a new branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to"},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to edit","required":false}]},"channel:list":{"id":"channel:list","description":"List all channels on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[]},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false},"end":{"name":"end","type":"boolean","description":"end the rollout","allowNo":false},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"channel","description":"rollout that the channel is on","required":true}]},"channel:view":{"id":"channel:view","description":"View a channel on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to view","required":false}]},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:list":{"id":"device:list","description":"list all registered devices for your account","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option"}},"args":[]},"device:view":{"id":"device:view","description":"view a device for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"project:info":{"id":"project:info","description":"information about the current project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","pluginName":"eas-cli","pluginType":"core","aliases":["init"],"flags":{},"args":[]},"secret:create":{"id":"secret:create","description":"Create an environment secret on the current project or owner account.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret"},"value":{"name":"value","type":"option","description":"Value of the secret"},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[]},"secret:delete":{"id":"secret:delete","description":"Delete an environment secret by ID.\nUnsure where to find the secret's ID? Run eas secrets:list","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete"}},"args":[]},"secret:list":{"id":"secret:list","description":"Lists environment secrets available for your current app","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:delete":{"id":"update:delete","description":"Delete all the updates in an update Group.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the group ID of the deleted updates.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group to delete.","required":true}]},"update:view":{"id":"update:view","description":"Update group details.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the updates belonging to the group.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group.","required":true}]},"webhook:create":{"id":"webhook:create","description":"Create a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"],"default":"BUILD"},"url":{"name":"url","type":"option","description":"Webhook URL"},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header."}},"args":[]},"webhook:delete":{"id":"webhook:delete","description":"Delete a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to delete","required":false}]},"webhook:list":{"id":"webhook:list","description":"List webhooks on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"]}},"args":[]},"webhook:update":{"id":"webhook:update","description":"Create a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"],"default":"BUILD"},"url":{"name":"url","type":"option","description":"Webhook URL"},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header."}},"args":[]},"webhook:view":{"id":"webhook:view","description":"View a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
1
+ {"version":"0.31.0","commands":{"analytics":{"id":"analytics","description":"view or change analytics settings","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"show the eas.json config","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","options":["android","ios"]},"profile":{"name":"profile","type":"option"}},"args":[]},"credentials":{"id":"credentials","description":"manage your credentials","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"log environment info to the console","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit build archive to app store\nSee how to configure submits with eas.json: https://docs.expo.dev/submit/eas-json/","pluginName":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","options":["android","ios","all"]},"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"release\" if defined in eas.json."},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false},"id":{"name":"id","type":"option","description":"ID of the build to submit"},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file"},"url":{"name":"url","type":"option","description":"App archive url"},"verbose":{"name":"verbose","type":"boolean","description":"Always print logs from Submission Service","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for submission to complete","allowNo":true},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[]},"account:login":{"id":"account:login","description":"log in with your Expo account","pluginName":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","pluginName":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","pluginName":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"Create a branch on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the new branch ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to create","required":false}]},"branch:delete":{"id":"branch:delete","description":"Republish an update group","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return JSON with the edited branch's ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to delete","required":false}]},"branch:list":{"id":"branch:list","description":"List all branches on this project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[]},"branch:publish":{"id":"branch:publish","description":"Publish an update group to a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"message":{"name":"message","type":"option","description":"short message describing the updates.","required":false},"republish":{"name":"republish","type":"boolean","description":"republish an update group","allowNo":false},"group":{"name":"group","type":"option","description":"update group to republish"},"input-dir":{"name":"input-dir","type":"option","description":"location of the bundle","required":false,"default":"dist"},"skip-bundler":{"name":"skip-bundler","type":"boolean","description":"skip running Expo CLI to bundle the app before publishing","allowNo":false},"platform":{"name":"platform","type":"option","char":"p","description":"only publish to a single platform","required":false,"helpValue":"(android|ios|all)","options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"return a json with the new update group.","allowNo":false},"auto":{"name":"auto","type":"boolean","description":"use the current git branch and commit message for the EAS branch and update message","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to publish on"}]},"branch:rename":{"id":"branch:rename","description":"Rename a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[]},"branch:view":{"id":"branch:view","description":"View a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the branch's ID name and recent update groups.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to view","required":false}]},"build:cancel":{"id":"build:cancel","description":"Cancel a build.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"Configure the project to support EAS Build.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","options":["android","ios","all"]}},"args":[]},"build":{"id":"build","description":"start a build","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","options":["android","ios","all"]},"skip-credentials-check":{"name":"skip-credentials-check","type":"boolean","hidden":true,"allowNo":false},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"skip-project-configuration":{"name":"skip-project-configuration","type":"boolean","description":"Skip project configuration","allowNo":false},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json","helpValue":"PROFILE_NAME","default":"release"},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false},"local":{"name":"local","type":"boolean","description":"Run build locally [experimental]","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for build(s) to complete","allowNo":true},"clear-cache":{"name":"clear-cache","type":"boolean","description":"Clear cache before the build","allowNo":false},"auto-submit":{"name":"auto-submit","type":"boolean","description":"Submit on build complete using the submit profile with the same name as the build profile","allowNo":false},"auto-submit-with-profile":{"name":"auto-submit-with-profile","type":"option","description":"Submit on build complete using the submit profile with provided name","helpValue":"PROFILE_NAME"}},"args":[]},"build:list":{"id":"build:list","description":"list all builds for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","options":["all","android","ios"]},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"status":{"name":"status","type":"option","helpValue":"(new|in-queue|in-progress|errored|finished|canceled)","options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option"},"appVersion":{"name":"appVersion","type":"option"},"appBuildVersion":{"name":"appBuildVersion","type":"option"},"sdkVersion":{"name":"sdkVersion","type":"option"},"runtimeVersion":{"name":"runtimeVersion","type":"option"},"appIdentifier":{"name":"appIdentifier","type":"option"},"buildProfile":{"name":"buildProfile","type":"option"},"gitCommitHash":{"name":"gitCommitHash","type":"option"},"limit":{"name":"limit","type":"option"}},"args":[]},"build:view":{"id":"build:view","description":"view a build for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false}},"args":[{"name":"BUILD_ID"}]},"channel:create":{"id":"channel:create","description":"Create a channel on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to create","required":false}]},"channel:edit":{"id":"channel:edit","description":"Point a channel at a new branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to"},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to edit","required":false}]},"channel:list":{"id":"channel:list","description":"List all channels on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[]},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false},"end":{"name":"end","type":"boolean","description":"end the rollout","allowNo":false},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"channel","description":"rollout that the channel is on","required":true}]},"channel:view":{"id":"channel:view","description":"View a channel on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to view","required":false}]},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:list":{"id":"device:list","description":"list all registered devices for your account","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option"}},"args":[]},"device:view":{"id":"device:view","description":"view a device for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"project:info":{"id":"project:info","description":"information about the current project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","pluginName":"eas-cli","pluginType":"core","aliases":["init"],"flags":{},"args":[]},"secret:create":{"id":"secret:create","description":"Create an environment secret on the current project or owner account.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret"},"value":{"name":"value","type":"option","description":"Value of the secret"},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[]},"secret:delete":{"id":"secret:delete","description":"Delete an environment secret by ID.\nUnsure where to find the secret's ID? Run eas secrets:list","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete"}},"args":[]},"secret:list":{"id":"secret:list","description":"Lists environment secrets available for your current app","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:delete":{"id":"update:delete","description":"Delete all the updates in an update Group.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the group ID of the deleted updates.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group to delete.","required":true}]},"update:view":{"id":"update:view","description":"Update group details.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the updates belonging to the group.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group.","required":true}]},"webhook:create":{"id":"webhook:create","description":"Create a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"],"default":"BUILD"},"url":{"name":"url","type":"option","description":"Webhook URL"},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header."}},"args":[]},"webhook:delete":{"id":"webhook:delete","description":"Delete a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to delete","required":false}]},"webhook:list":{"id":"webhook:list","description":"List webhooks on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"]}},"args":[]},"webhook:update":{"id":"webhook:update","description":"Create a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"],"default":"BUILD"},"url":{"name":"url","type":"option","description":"Webhook URL"},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header."}},"args":[]},"webhook:view":{"id":"webhook:view","description":"View a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eas-cli",
3
3
  "description": "EAS command line tool",
4
- "version": "0.30.1",
4
+ "version": "0.31.0",
5
5
  "author": "Expo <support@expo.dev>",
6
6
  "bin": {
7
7
  "eas": "./bin/run"
@@ -11,8 +11,8 @@
11
11
  "@expo/apple-utils": "0.0.0-alpha.25",
12
12
  "@expo/config": "6.0.2",
13
13
  "@expo/config-plugins": "4.0.2",
14
- "@expo/eas-build-job": "0.2.48",
15
- "@expo/eas-json": "^0.30.0",
14
+ "@expo/eas-build-job": "0.2.52",
15
+ "@expo/eas-json": "^0.31.0",
16
16
  "@expo/json-file": "8.2.33",
17
17
  "@expo/pkcs12": "0.0.4",
18
18
  "@expo/plist": "0.0.14",
@@ -179,5 +179,5 @@
179
179
  "version": "yarn oclif-dev readme && node patch-readme && git add README.md",
180
180
  "generate-graphql-code": "graphql-codegen --config graphql-codegen.yml"
181
181
  },
182
- "gitHead": "79db9eb48270330d325d624a21f7b0b0ceb3bd5a"
182
+ "gitHead": "def91af01fe43106714f7782316d61270395a2ff"
183
183
  }