eas-cli 16.19.1 → 16.19.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,4 @@
1
1
  import { BuildFragment } from '../../graphql/generated';
2
+ import { FormatFieldsItem } from '../../utils/formatFields';
3
+ export declare function formatGraphQLBuildArtifacts(build: BuildFragment): FormatFieldsItem[];
2
4
  export declare function formatGraphQLBuild(build: BuildFragment): string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatGraphQLBuild = void 0;
3
+ exports.formatGraphQLBuild = exports.formatGraphQLBuildArtifacts = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
6
  const url_1 = require("./url");
@@ -8,6 +8,38 @@ const generated_1 = require("../../graphql/generated");
8
8
  const log_1 = require("../../log");
9
9
  const platform_1 = require("../../platform");
10
10
  const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
11
+ function formatGraphQLBuildArtifacts(build) {
12
+ const fields = [
13
+ {
14
+ label: 'Application Archive URL',
15
+ get value() {
16
+ switch (build.status) {
17
+ case generated_1.BuildStatus.InProgress:
18
+ return '<in progress>';
19
+ default: {
20
+ const url = build.artifacts?.buildUrl;
21
+ return url ? (0, log_1.link)(url) : 'null';
22
+ }
23
+ }
24
+ },
25
+ },
26
+ {
27
+ label: 'Build Artifacts URL',
28
+ get value() {
29
+ switch (build.status) {
30
+ case generated_1.BuildStatus.InProgress:
31
+ return '<in progress>';
32
+ default: {
33
+ const url = build.artifacts?.buildArtifactsUrl;
34
+ return url ? (0, log_1.link)(url) : 'null';
35
+ }
36
+ }
37
+ },
38
+ },
39
+ ];
40
+ return fields.filter(({ value }) => value !== undefined && value !== null);
41
+ }
42
+ exports.formatGraphQLBuildArtifacts = formatGraphQLBuildArtifacts;
11
43
  function formatGraphQLBuild(build) {
12
44
  const actor = getActorName(build);
13
45
  const fields = [
@@ -82,27 +114,7 @@ function formatGraphQLBuild(build) {
82
114
  label: 'Logs',
83
115
  value: (0, log_1.link)((0, url_1.getBuildLogsUrl)(build)),
84
116
  },
85
- {
86
- label: 'Artifact',
87
- get value() {
88
- switch (build.status) {
89
- case generated_1.BuildStatus.New:
90
- case generated_1.BuildStatus.InQueue:
91
- case generated_1.BuildStatus.InProgress:
92
- return '<in progress>';
93
- case generated_1.BuildStatus.PendingCancel:
94
- case generated_1.BuildStatus.Canceled:
95
- case generated_1.BuildStatus.Errored:
96
- return null;
97
- case generated_1.BuildStatus.Finished: {
98
- const url = build.artifacts?.buildUrl;
99
- return url ? (0, log_1.link)(url) : chalk_1.default.red('not found');
100
- }
101
- default:
102
- return null;
103
- }
104
- },
105
- },
117
+ ...formatGraphQLBuildArtifacts(build),
106
118
  {
107
119
  label: 'Fingerprint',
108
120
  get value() {
@@ -27,6 +27,5 @@ export default class UpdatePublish extends EasCommand {
27
27
  getDynamicPrivateProjectConfigAsync: import("../../commandUtils/context/DynamicProjectConfigContextField").DynamicPrivateProjectConfigContextField;
28
28
  };
29
29
  runAsync(): Promise<void>;
30
- private prettyPlatform;
31
30
  private sanitizeFlags;
32
31
  }
@@ -6,7 +6,7 @@ const eas_json_1 = require("@expo/eas-json");
6
6
  const core_1 = require("@oclif/core");
7
7
  const chalk_1 = tslib_1.__importDefault(require("chalk"));
8
8
  const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
9
- const api_1 = require("../../api");
9
+ // import { getExpoWebsiteBaseUrl } from '../../api';
10
10
  const queries_1 = require("../../branch/queries");
11
11
  const graphql_1 = require("../../build/graphql");
12
12
  const repository_1 = require("../../build/utils/repository");
@@ -17,7 +17,7 @@ const pagination_1 = require("../../commandUtils/pagination");
17
17
  const fetch_1 = tslib_1.__importDefault(require("../../fetch"));
18
18
  const generated_1 = require("../../graphql/generated");
19
19
  const PublishMutation_1 = require("../../graphql/mutations/PublishMutation");
20
- const AppQuery_1 = require("../../graphql/queries/AppQuery");
20
+ // import { AppQuery } from '../../graphql/queries/AppQuery';
21
21
  const log_1 = tslib_1.__importStar(require("../../log"));
22
22
  const ora_1 = require("../../ora");
23
23
  const platform_1 = require("../../platform");
@@ -399,7 +399,11 @@ class UpdatePublish extends EasCommand_1.default {
399
399
  log_1.default.log('👉 Since multiple runtime versions are defined, multiple update groups have been published.');
400
400
  }
401
401
  log_1.default.addNewLineIfNone();
402
- const runtimeToCompatibleBuilds = await Promise.all(runtimeToPlatformsAndFingerprintInfoAndFingerprintSourceMapping.map(obj => (0, publish_1.findCompatibleBuildsAsync)(graphqlClient, projectId, obj)));
402
+ // const runtimeToCompatibleBuilds = await Promise.all(
403
+ // runtimeToPlatformsAndFingerprintInfoAndFingerprintSourceMapping.map(obj =>
404
+ // findCompatibleBuildsAsync(graphqlClient, projectId, obj)
405
+ // )
406
+ // );
403
407
  for (const runtime of (0, uniqBy_1.default)(runtimeToPlatformsAndFingerprintInfoMapping, version => version.runtimeVersion)) {
404
408
  const newUpdatesForRuntimeVersion = newUpdates.filter(update => update.runtimeVersion === runtime.runtimeVersion);
405
409
  if (newUpdatesForRuntimeVersion.length === 0) {
@@ -456,39 +460,55 @@ class UpdatePublish extends EasCommand_1.default {
456
460
  })}.`);
457
461
  log_1.default.addNewLineIfNone();
458
462
  }
459
- const fingerprintsWithoutCompatibleBuilds = runtimeToCompatibleBuilds.find(({ runtimeVersion }) => runtimeVersion === runtime.runtimeVersion)?.fingerprintInfoGroupWithCompatibleBuilds;
460
- if (fingerprintsWithoutCompatibleBuilds) {
461
- const missingBuilds = Object.entries(fingerprintsWithoutCompatibleBuilds).filter(([_platform, fingerprintInfo]) => !fingerprintInfo.build);
462
- if (missingBuilds.length > 0) {
463
- const project = await AppQuery_1.AppQuery.byIdAsync(graphqlClient, projectId);
464
- log_1.default.warn('No compatible builds found for the following fingerprints:');
465
- for (const [platform, fingerprintInfo] of missingBuilds) {
466
- const fingerprintUrl = new URL(`/accounts/${project.ownerAccount.name}/projects/${project.slug}/fingerprints/${fingerprintInfo.fingerprintHash}`, (0, api_1.getExpoWebsiteBaseUrl)());
467
- log_1.default.warn((0, formatFields_1.default)([
468
- {
469
- label: `${this.prettyPlatform(platform)} fingerprint`,
470
- value: fingerprintInfo.fingerprintHash,
471
- },
472
- { label: 'URL', value: fingerprintUrl.toString() },
473
- ], {
474
- labelFormat: label => ` ${chalk_1.default.dim(label)}:`,
475
- }));
476
- log_1.default.addNewLineIfNone();
477
- }
478
- }
479
- }
480
- }
481
- }
482
- prettyPlatform(updatePlatform) {
483
- switch (updatePlatform) {
484
- case 'android':
485
- return 'Android';
486
- case 'ios':
487
- return 'iOS';
488
- default:
489
- return updatePlatform;
463
+ // NOTE(brentvatne): temporarily disable logging this until we can revisit the formatting
464
+ // and the logic for it - it's a bit too aggressive right now, and warns even if you're
465
+ // not using EAS Build
466
+ //
467
+ // const fingerprintsWithoutCompatibleBuilds = runtimeToCompatibleBuilds.find(
468
+ // ({ runtimeVersion }) => runtimeVersion === runtime.runtimeVersion
469
+ // )?.fingerprintInfoGroupWithCompatibleBuilds;
470
+ // if (fingerprintsWithoutCompatibleBuilds) {
471
+ // const missingBuilds = Object.entries(fingerprintsWithoutCompatibleBuilds).filter(
472
+ // ([_platform, fingerprintInfo]) => !fingerprintInfo.build
473
+ // );
474
+ // if (missingBuilds.length > 0) {
475
+ // const project = await AppQuery.byIdAsync(graphqlClient, projectId);
476
+ // Log.warn('No compatible builds found for the following fingerprints:');
477
+ // for (const [platform, fingerprintInfo] of missingBuilds) {
478
+ // const fingerprintUrl = new URL(
479
+ // `/accounts/${project.ownerAccount.name}/projects/${project.slug}/fingerprints/${fingerprintInfo.fingerprintHash}`,
480
+ // getExpoWebsiteBaseUrl()
481
+ // );
482
+ // Log.warn(
483
+ // formatFields(
484
+ // [
485
+ // {
486
+ // label: `${this.prettyPlatform(platform)} fingerprint`,
487
+ // value: fingerprintInfo.fingerprintHash,
488
+ // },
489
+ // { label: 'URL', value: fingerprintUrl.toString() },
490
+ // ],
491
+ // {
492
+ // labelFormat: label => ` ${chalk.dim(label)}:`,
493
+ // }
494
+ // )
495
+ // );
496
+ // Log.addNewLineIfNone();
497
+ // }
498
+ // }
499
+ // }
490
500
  }
491
501
  }
502
+ // private prettyPlatform(updatePlatform: string): string {
503
+ // switch (updatePlatform) {
504
+ // case 'android':
505
+ // return 'Android';
506
+ // case 'ios':
507
+ // return 'iOS';
508
+ // default:
509
+ // return updatePlatform;
510
+ // }
511
+ // }
492
512
  sanitizeFlags(flags) {
493
513
  const nonInteractive = flags['non-interactive'] ?? false;
494
514
  const { auto, branch: branchName, channel: channelName, message: updateMessage } = flags;
@@ -1,15 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
5
+ const formatBuild_1 = require("../../build/utils/formatBuild");
4
6
  const url_1 = require("../../build/utils/url");
5
7
  const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
6
8
  const flags_1 = require("../../commandUtils/flags");
7
9
  const stateMachine_1 = require("../../commandUtils/workflow/stateMachine");
8
10
  const utils_1 = require("../../commandUtils/workflow/utils");
11
+ const generated_1 = require("../../graphql/generated");
9
12
  const WorkflowRunQuery_1 = require("../../graphql/queries/WorkflowRunQuery");
10
13
  const log_1 = tslib_1.__importStar(require("../../log"));
11
14
  const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
12
15
  const json_1 = require("../../utils/json");
16
+ const processedOutputs = job => {
17
+ const result = [];
18
+ const keys = job.outputs ? Object.keys(job.outputs) : [];
19
+ keys.forEach(key => {
20
+ result.push({
21
+ label: ` ${key}`,
22
+ get value() {
23
+ const value = job.outputs[key];
24
+ return typeof value === 'string' ? value : JSON.stringify(value, null, 2);
25
+ },
26
+ });
27
+ });
28
+ return result;
29
+ };
13
30
  class WorkflowView extends EasCommand_1.default {
14
31
  static description = 'view details for a workflow run, including jobs. If no run ID is provided, you will be prompted to select from recent workflow runs for the current project.';
15
32
  static flags = {
@@ -52,9 +69,18 @@ class WorkflowView extends EasCommand_1.default {
52
69
  const { triggerType, trigger } = (0, utils_1.computeTriggerInfoForWorkflowRun)(result);
53
70
  result.triggerType = triggerType;
54
71
  result.trigger = trigger;
55
- result.jobs.forEach(job => {
56
- delete job.turtleJobRun;
72
+ const processedJobs = result.jobs.map(job => {
73
+ const processedJob = job;
74
+ if (job.type === generated_1.WorkflowJobType.Build) {
75
+ processedJob.artifacts = job.turtleBuild?.artifacts ?? undefined;
76
+ }
77
+ else {
78
+ processedJob.artifacts = job.turtleJobRun?.artifacts;
79
+ }
80
+ delete processedJob.turtleJobRun;
81
+ return processedJob;
57
82
  });
83
+ result.jobs = processedJobs;
58
84
  result.logURL = (0, url_1.getWorkflowRunUrl)(result.workflow.app.ownerAccount.name, result.workflow.app.name, result.id);
59
85
  if (flags.json) {
60
86
  (0, json_1.printJsonOnlyOutput)(result);
@@ -67,7 +93,7 @@ class WorkflowView extends EasCommand_1.default {
67
93
  { label: 'Trigger', value: result.trigger ?? 'null' },
68
94
  {
69
95
  label: 'Git Commit Message',
70
- value: result.gitCommitMessage?.split('\n')[0] ?? null ?? 'null',
96
+ value: result.gitCommitMessage?.split('\n')[0] ?? 'null',
71
97
  },
72
98
  { label: 'Status', value: result.status },
73
99
  { label: 'Errors', value: result.errors.map(error => error.title).join('\n') },
@@ -76,7 +102,7 @@ class WorkflowView extends EasCommand_1.default {
76
102
  { label: 'Log URL', value: (0, log_1.link)(result.logURL) },
77
103
  ]));
78
104
  log_1.default.addNewLineIfNone();
79
- result.jobs.forEach(job => {
105
+ result.jobs.forEach((job) => {
80
106
  log_1.default.log((0, formatFields_1.default)([
81
107
  { label: 'Job ID', value: job.id },
82
108
  { label: ' Key', value: job.key },
@@ -85,9 +111,52 @@ class WorkflowView extends EasCommand_1.default {
85
111
  { label: ' Type', value: job.type },
86
112
  { label: ' Created At', value: job.createdAt },
87
113
  { label: ' Updated At', value: job.updatedAt },
88
- { label: ' Outputs', value: JSON.stringify(job.outputs, null, 2) },
89
- { label: ' Errors', value: job.errors.map(error => error.title).join('\n') },
90
114
  ]));
115
+ if (job.errors.length > 0) {
116
+ log_1.default.gray(chalk_1.default.dim(' Errors:'));
117
+ job.errors.forEach(error => {
118
+ log_1.default.log((0, formatFields_1.default)([{ label: ` ${error.title}`, value: `${error.message}` }]));
119
+ });
120
+ }
121
+ if (job.outputs) {
122
+ const outputs = processedOutputs(job);
123
+ if (outputs.length > 0) {
124
+ log_1.default.gray(chalk_1.default.dim(' Outputs:'));
125
+ log_1.default.log((0, formatFields_1.default)(outputs));
126
+ }
127
+ }
128
+ if (job.type === generated_1.WorkflowJobType.Build) {
129
+ if (job.turtleBuild?.artifacts) {
130
+ log_1.default.gray(chalk_1.default.dim(' Artifacts:'));
131
+ log_1.default.log((0, formatFields_1.default)((0, formatBuild_1.formatGraphQLBuildArtifacts)(job.turtleBuild).map(item => {
132
+ item.label = ` ${item.label}`;
133
+ return item;
134
+ })));
135
+ }
136
+ }
137
+ else {
138
+ const jobArtifacts = job.artifacts;
139
+ if (jobArtifacts?.length) {
140
+ log_1.default.gray(chalk_1.default.dim(' Artifacts:'));
141
+ jobArtifacts.forEach(artifact => {
142
+ log_1.default.log((0, formatFields_1.default)([
143
+ { label: ' ID', value: artifact.id },
144
+ { label: ' Name', value: artifact.name },
145
+ { label: ' Content Type', value: artifact?.contentType ?? 'null' },
146
+ {
147
+ label: ' File Size Bytes',
148
+ value: artifact?.fileSizeBytes ? `${artifact.fileSizeBytes}` : 'null',
149
+ },
150
+ { label: ' Filename', value: artifact.filename },
151
+ {
152
+ label: ' Download URL',
153
+ value: artifact?.downloadUrl ? (0, log_1.link)(artifact.downloadUrl) : 'null',
154
+ },
155
+ ]));
156
+ log_1.default.addNewLineIfNone();
157
+ });
158
+ }
159
+ }
91
160
  log_1.default.addNewLineIfNone();
92
161
  });
93
162
  }
@@ -7480,6 +7480,7 @@ export declare enum WorkflowJobType {
7480
7480
  Doc = "DOC",
7481
7481
  Fingerprint = "FINGERPRINT",
7482
7482
  GetBuild = "GET_BUILD",
7483
+ GithubComment = "GITHUB_COMMENT",
7483
7484
  MaestroCloud = "MAESTRO_CLOUD",
7484
7485
  MaestroTest = "MAESTRO_TEST",
7485
7486
  Repack = "REPACK",
@@ -14620,12 +14621,100 @@ export type WorkflowJobByIdQuery = {
14620
14621
  __typename?: 'JobRun';
14621
14622
  id: string;
14622
14623
  logFileUrls: Array<string>;
14624
+ artifacts: Array<{
14625
+ __typename?: 'WorkflowArtifact';
14626
+ id: string;
14627
+ name: string;
14628
+ contentType?: string | null;
14629
+ fileSizeBytes?: number | null;
14630
+ filename: string;
14631
+ downloadUrl?: string | null;
14632
+ }>;
14623
14633
  errors: Array<{
14624
14634
  __typename?: 'JobRunError';
14625
14635
  errorCode: string;
14626
14636
  message: string;
14627
14637
  }>;
14628
14638
  } | null;
14639
+ turtleBuild?: {
14640
+ __typename?: 'Build';
14641
+ id: string;
14642
+ status: BuildStatus;
14643
+ platform: AppPlatform;
14644
+ channel?: string | null;
14645
+ distribution?: DistributionType | null;
14646
+ iosEnterpriseProvisioning?: BuildIosEnterpriseProvisioning | null;
14647
+ buildProfile?: string | null;
14648
+ sdkVersion?: string | null;
14649
+ appVersion?: string | null;
14650
+ appBuildVersion?: string | null;
14651
+ runtimeVersion?: string | null;
14652
+ gitCommitHash?: string | null;
14653
+ gitCommitMessage?: string | null;
14654
+ initialQueuePosition?: number | null;
14655
+ queuePosition?: number | null;
14656
+ estimatedWaitTimeLeftSeconds?: number | null;
14657
+ priority: BuildPriority;
14658
+ createdAt: any;
14659
+ updatedAt: any;
14660
+ message?: string | null;
14661
+ completedAt?: any | null;
14662
+ expirationDate?: any | null;
14663
+ isForIosSimulator: boolean;
14664
+ error?: {
14665
+ __typename?: 'BuildError';
14666
+ errorCode: string;
14667
+ message: string;
14668
+ docsUrl?: string | null;
14669
+ } | null;
14670
+ artifacts?: {
14671
+ __typename?: 'BuildArtifacts';
14672
+ buildUrl?: string | null;
14673
+ xcodeBuildLogsUrl?: string | null;
14674
+ applicationArchiveUrl?: string | null;
14675
+ buildArtifactsUrl?: string | null;
14676
+ } | null;
14677
+ fingerprint?: {
14678
+ __typename?: 'Fingerprint';
14679
+ id: string;
14680
+ hash: string;
14681
+ } | null;
14682
+ initiatingActor?: {
14683
+ __typename: 'Robot';
14684
+ id: string;
14685
+ displayName: string;
14686
+ } | {
14687
+ __typename: 'SSOUser';
14688
+ id: string;
14689
+ displayName: string;
14690
+ } | {
14691
+ __typename: 'User';
14692
+ id: string;
14693
+ displayName: string;
14694
+ } | null;
14695
+ project: {
14696
+ __typename: 'App';
14697
+ id: string;
14698
+ name: string;
14699
+ slug: string;
14700
+ ownerAccount: {
14701
+ __typename?: 'Account';
14702
+ id: string;
14703
+ name: string;
14704
+ };
14705
+ } | {
14706
+ __typename: 'Snack';
14707
+ id: string;
14708
+ name: string;
14709
+ slug: string;
14710
+ };
14711
+ metrics?: {
14712
+ __typename?: 'BuildMetrics';
14713
+ buildWaitTime?: number | null;
14714
+ buildQueueTime?: number | null;
14715
+ buildDuration?: number | null;
14716
+ } | null;
14717
+ } | null;
14629
14718
  errors: Array<{
14630
14719
  __typename?: 'WorkflowJobError';
14631
14720
  title: string;
@@ -14701,12 +14790,100 @@ export type WorkflowRunByIdWithJobsQuery = {
14701
14790
  __typename?: 'JobRun';
14702
14791
  id: string;
14703
14792
  logFileUrls: Array<string>;
14793
+ artifacts: Array<{
14794
+ __typename?: 'WorkflowArtifact';
14795
+ id: string;
14796
+ name: string;
14797
+ contentType?: string | null;
14798
+ fileSizeBytes?: number | null;
14799
+ filename: string;
14800
+ downloadUrl?: string | null;
14801
+ }>;
14704
14802
  errors: Array<{
14705
14803
  __typename?: 'JobRunError';
14706
14804
  errorCode: string;
14707
14805
  message: string;
14708
14806
  }>;
14709
14807
  } | null;
14808
+ turtleBuild?: {
14809
+ __typename?: 'Build';
14810
+ id: string;
14811
+ status: BuildStatus;
14812
+ platform: AppPlatform;
14813
+ channel?: string | null;
14814
+ distribution?: DistributionType | null;
14815
+ iosEnterpriseProvisioning?: BuildIosEnterpriseProvisioning | null;
14816
+ buildProfile?: string | null;
14817
+ sdkVersion?: string | null;
14818
+ appVersion?: string | null;
14819
+ appBuildVersion?: string | null;
14820
+ runtimeVersion?: string | null;
14821
+ gitCommitHash?: string | null;
14822
+ gitCommitMessage?: string | null;
14823
+ initialQueuePosition?: number | null;
14824
+ queuePosition?: number | null;
14825
+ estimatedWaitTimeLeftSeconds?: number | null;
14826
+ priority: BuildPriority;
14827
+ createdAt: any;
14828
+ updatedAt: any;
14829
+ message?: string | null;
14830
+ completedAt?: any | null;
14831
+ expirationDate?: any | null;
14832
+ isForIosSimulator: boolean;
14833
+ error?: {
14834
+ __typename?: 'BuildError';
14835
+ errorCode: string;
14836
+ message: string;
14837
+ docsUrl?: string | null;
14838
+ } | null;
14839
+ artifacts?: {
14840
+ __typename?: 'BuildArtifacts';
14841
+ buildUrl?: string | null;
14842
+ xcodeBuildLogsUrl?: string | null;
14843
+ applicationArchiveUrl?: string | null;
14844
+ buildArtifactsUrl?: string | null;
14845
+ } | null;
14846
+ fingerprint?: {
14847
+ __typename?: 'Fingerprint';
14848
+ id: string;
14849
+ hash: string;
14850
+ } | null;
14851
+ initiatingActor?: {
14852
+ __typename: 'Robot';
14853
+ id: string;
14854
+ displayName: string;
14855
+ } | {
14856
+ __typename: 'SSOUser';
14857
+ id: string;
14858
+ displayName: string;
14859
+ } | {
14860
+ __typename: 'User';
14861
+ id: string;
14862
+ displayName: string;
14863
+ } | null;
14864
+ project: {
14865
+ __typename: 'App';
14866
+ id: string;
14867
+ name: string;
14868
+ slug: string;
14869
+ ownerAccount: {
14870
+ __typename?: 'Account';
14871
+ id: string;
14872
+ name: string;
14873
+ };
14874
+ } | {
14875
+ __typename: 'Snack';
14876
+ id: string;
14877
+ name: string;
14878
+ slug: string;
14879
+ };
14880
+ metrics?: {
14881
+ __typename?: 'BuildMetrics';
14882
+ buildWaitTime?: number | null;
14883
+ buildQueueTime?: number | null;
14884
+ buildDuration?: number | null;
14885
+ } | null;
14886
+ } | null;
14710
14887
  errors: Array<{
14711
14888
  __typename?: 'WorkflowJobError';
14712
14889
  title: string;
@@ -15455,12 +15632,100 @@ export type WorkflowJobFragment = {
15455
15632
  __typename?: 'JobRun';
15456
15633
  id: string;
15457
15634
  logFileUrls: Array<string>;
15635
+ artifacts: Array<{
15636
+ __typename?: 'WorkflowArtifact';
15637
+ id: string;
15638
+ name: string;
15639
+ contentType?: string | null;
15640
+ fileSizeBytes?: number | null;
15641
+ filename: string;
15642
+ downloadUrl?: string | null;
15643
+ }>;
15458
15644
  errors: Array<{
15459
15645
  __typename?: 'JobRunError';
15460
15646
  errorCode: string;
15461
15647
  message: string;
15462
15648
  }>;
15463
15649
  } | null;
15650
+ turtleBuild?: {
15651
+ __typename?: 'Build';
15652
+ id: string;
15653
+ status: BuildStatus;
15654
+ platform: AppPlatform;
15655
+ channel?: string | null;
15656
+ distribution?: DistributionType | null;
15657
+ iosEnterpriseProvisioning?: BuildIosEnterpriseProvisioning | null;
15658
+ buildProfile?: string | null;
15659
+ sdkVersion?: string | null;
15660
+ appVersion?: string | null;
15661
+ appBuildVersion?: string | null;
15662
+ runtimeVersion?: string | null;
15663
+ gitCommitHash?: string | null;
15664
+ gitCommitMessage?: string | null;
15665
+ initialQueuePosition?: number | null;
15666
+ queuePosition?: number | null;
15667
+ estimatedWaitTimeLeftSeconds?: number | null;
15668
+ priority: BuildPriority;
15669
+ createdAt: any;
15670
+ updatedAt: any;
15671
+ message?: string | null;
15672
+ completedAt?: any | null;
15673
+ expirationDate?: any | null;
15674
+ isForIosSimulator: boolean;
15675
+ error?: {
15676
+ __typename?: 'BuildError';
15677
+ errorCode: string;
15678
+ message: string;
15679
+ docsUrl?: string | null;
15680
+ } | null;
15681
+ artifacts?: {
15682
+ __typename?: 'BuildArtifacts';
15683
+ buildUrl?: string | null;
15684
+ xcodeBuildLogsUrl?: string | null;
15685
+ applicationArchiveUrl?: string | null;
15686
+ buildArtifactsUrl?: string | null;
15687
+ } | null;
15688
+ fingerprint?: {
15689
+ __typename?: 'Fingerprint';
15690
+ id: string;
15691
+ hash: string;
15692
+ } | null;
15693
+ initiatingActor?: {
15694
+ __typename: 'Robot';
15695
+ id: string;
15696
+ displayName: string;
15697
+ } | {
15698
+ __typename: 'SSOUser';
15699
+ id: string;
15700
+ displayName: string;
15701
+ } | {
15702
+ __typename: 'User';
15703
+ id: string;
15704
+ displayName: string;
15705
+ } | null;
15706
+ project: {
15707
+ __typename: 'App';
15708
+ id: string;
15709
+ name: string;
15710
+ slug: string;
15711
+ ownerAccount: {
15712
+ __typename?: 'Account';
15713
+ id: string;
15714
+ name: string;
15715
+ };
15716
+ } | {
15717
+ __typename: 'Snack';
15718
+ id: string;
15719
+ name: string;
15720
+ slug: string;
15721
+ };
15722
+ metrics?: {
15723
+ __typename?: 'BuildMetrics';
15724
+ buildWaitTime?: number | null;
15725
+ buildQueueTime?: number | null;
15726
+ buildDuration?: number | null;
15727
+ } | null;
15728
+ } | null;
15464
15729
  errors: Array<{
15465
15730
  __typename?: 'WorkflowJobError';
15466
15731
  title: string;
@@ -898,6 +898,7 @@ var WorkflowJobType;
898
898
  WorkflowJobType["Doc"] = "DOC";
899
899
  WorkflowJobType["Fingerprint"] = "FINGERPRINT";
900
900
  WorkflowJobType["GetBuild"] = "GET_BUILD";
901
+ WorkflowJobType["GithubComment"] = "GITHUB_COMMENT";
901
902
  WorkflowJobType["MaestroCloud"] = "MAESTRO_CLOUD";
902
903
  WorkflowJobType["MaestroTest"] = "MAESTRO_TEST";
903
904
  WorkflowJobType["Repack"] = "REPACK";