eas-cli 16.8.0 → 16.10.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 +105 -80
- package/build/build/android/prepareJob.js +1 -9
- package/build/build/context.d.ts +0 -1
- package/build/build/createContext.d.ts +1 -2
- package/build/build/createContext.js +1 -2
- package/build/build/ios/prepareJob.js +1 -9
- package/build/build/runBuildAndSubmit.d.ts +0 -1
- package/build/build/runBuildAndSubmit.js +3 -3
- package/build/build/types.d.ts +0 -1
- package/build/commandUtils/workflows.d.ts +20 -0
- package/build/commandUtils/workflows.js +21 -0
- package/build/commands/build/dev.js +0 -1
- package/build/commands/build/index.d.ts +0 -1
- package/build/commands/build/index.js +0 -6
- package/build/commands/build/inspect.js +0 -1
- package/build/commands/build/internal.js +0 -1
- package/build/commands/project/onboarding.js +0 -1
- package/build/commands/submit/internal.js +1 -0
- package/build/commands/submit.d.ts +1 -0
- package/build/commands/submit.js +8 -1
- package/build/commands/workflow/cancel.d.ts +13 -0
- package/build/commands/workflow/cancel.js +84 -0
- package/build/commands/workflow/runs.js +2 -17
- package/build/graphql/generated.d.ts +24 -2
- package/build/graphql/generated.js +2 -0
- package/build/graphql/mutations/WorkflowRunMutation.d.ts +3 -0
- package/build/graphql/mutations/WorkflowRunMutation.js +16 -0
- package/build/graphql/queries/AppQuery.js +1 -1
- package/build/graphql/queries/WorkflowRunQuery.js +1 -1
- package/build/submit/context.d.ts +2 -0
- package/build/submit/context.js +12 -1
- package/build/submit/ios/IosSubmitter.js +2 -1
- package/oclif.manifest.json +30 -8
- package/package.json +3 -3
|
@@ -36,10 +36,7 @@ async function prepareJobAsync(ctx, jobData) {
|
|
|
36
36
|
? (0, customBuildConfig_1.getCustomBuildConfigPathForJob)(buildProfile.config)
|
|
37
37
|
: undefined;
|
|
38
38
|
let buildMode;
|
|
39
|
-
if (
|
|
40
|
-
buildMode = eas_build_job_1.BuildMode.REPACK;
|
|
41
|
-
}
|
|
42
|
-
else if (buildProfile.config) {
|
|
39
|
+
if (buildProfile.config) {
|
|
43
40
|
buildMode = eas_build_job_1.BuildMode.CUSTOM;
|
|
44
41
|
}
|
|
45
42
|
else {
|
|
@@ -94,11 +91,6 @@ async function prepareJobAsync(ctx, jobData) {
|
|
|
94
91
|
path: maybeCustomBuildConfigPath,
|
|
95
92
|
},
|
|
96
93
|
}),
|
|
97
|
-
...(ctx.repack && {
|
|
98
|
-
customBuildConfig: {
|
|
99
|
-
path: '__eas/repack.yml',
|
|
100
|
-
},
|
|
101
|
-
}),
|
|
102
94
|
loggerLevel: ctx.loggerLevel,
|
|
103
95
|
// Technically, these are unused, but let's include them here for type consistency.
|
|
104
96
|
// See: https://github.com/expo/eas-build/pull/454
|
package/build/build/context.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGr
|
|
|
9
9
|
import { CustomBuildConfigMetadata } from '../project/customBuildConfig';
|
|
10
10
|
import { Actor } from '../user/User';
|
|
11
11
|
import { Client } from '../vcs/vcs';
|
|
12
|
-
export declare function createBuildContextAsync<T extends Platform>({ buildProfileName, buildProfile, easJsonCliConfig, clearCache, localBuildOptions, nonInteractive, noWait, platform, projectDir, resourceClassFlag, message, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, buildLoggerLevel, freezeCredentials,
|
|
12
|
+
export declare function createBuildContextAsync<T extends Platform>({ buildProfileName, buildProfile, easJsonCliConfig, clearCache, localBuildOptions, nonInteractive, noWait, platform, projectDir, resourceClassFlag, message, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, buildLoggerLevel, freezeCredentials, isVerboseLoggingEnabled, env, }: {
|
|
13
13
|
buildProfileName: string;
|
|
14
14
|
buildProfile: BuildProfile<T>;
|
|
15
15
|
easJsonCliConfig: EasJson['cli'];
|
|
@@ -29,7 +29,6 @@ export declare function createBuildContextAsync<T extends Platform>({ buildProfi
|
|
|
29
29
|
customBuildConfigMetadata?: CustomBuildConfigMetadata;
|
|
30
30
|
buildLoggerLevel?: LoggerLevel;
|
|
31
31
|
freezeCredentials: boolean;
|
|
32
|
-
repack: boolean;
|
|
33
32
|
isVerboseLoggingEnabled: boolean;
|
|
34
33
|
env: Record<string, string>;
|
|
35
34
|
}): Promise<BuildContext<T>>;
|
|
@@ -16,7 +16,7 @@ const AnalyticsManager_1 = require("../analytics/AnalyticsManager");
|
|
|
16
16
|
const context_1 = require("../credentials/context");
|
|
17
17
|
const projectUtils_1 = require("../project/projectUtils");
|
|
18
18
|
const workflow_1 = require("../project/workflow");
|
|
19
|
-
async function createBuildContextAsync({ buildProfileName, buildProfile, easJsonCliConfig, clearCache = false, localBuildOptions, nonInteractive, noWait, platform, projectDir, resourceClassFlag, message, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, buildLoggerLevel, freezeCredentials,
|
|
19
|
+
async function createBuildContextAsync({ buildProfileName, buildProfile, easJsonCliConfig, clearCache = false, localBuildOptions, nonInteractive, noWait, platform, projectDir, resourceClassFlag, message, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, buildLoggerLevel, freezeCredentials, isVerboseLoggingEnabled, env, }) {
|
|
20
20
|
const { exp, projectId } = await getDynamicPrivateProjectConfigAsync({
|
|
21
21
|
env,
|
|
22
22
|
});
|
|
@@ -90,7 +90,6 @@ async function createBuildContextAsync({ buildProfileName, buildProfile, easJson
|
|
|
90
90
|
developmentClient,
|
|
91
91
|
requiredPackageManager,
|
|
92
92
|
loggerLevel: buildLoggerLevel,
|
|
93
|
-
repack,
|
|
94
93
|
isVerboseLoggingEnabled,
|
|
95
94
|
env,
|
|
96
95
|
};
|
|
@@ -27,10 +27,7 @@ async function prepareJobAsync(ctx, jobData) {
|
|
|
27
27
|
? (0, customBuildConfig_1.getCustomBuildConfigPathForJob)(buildProfile.config)
|
|
28
28
|
: undefined;
|
|
29
29
|
let buildMode;
|
|
30
|
-
if (
|
|
31
|
-
buildMode = eas_build_job_1.BuildMode.REPACK;
|
|
32
|
-
}
|
|
33
|
-
else if (buildProfile.config) {
|
|
30
|
+
if (buildProfile.config) {
|
|
34
31
|
buildMode = eas_build_job_1.BuildMode.CUSTOM;
|
|
35
32
|
}
|
|
36
33
|
else {
|
|
@@ -88,11 +85,6 @@ async function prepareJobAsync(ctx, jobData) {
|
|
|
88
85
|
path: maybeCustomBuildConfigPath,
|
|
89
86
|
},
|
|
90
87
|
}),
|
|
91
|
-
...(ctx.repack && {
|
|
92
|
-
customBuildConfig: {
|
|
93
|
-
path: '__eas/repack.yml',
|
|
94
|
-
},
|
|
95
|
-
}),
|
|
96
88
|
loggerLevel: ctx.loggerLevel,
|
|
97
89
|
// Technically, these are unused, but let's include them here for type consistency.
|
|
98
90
|
// See: https://github.com/expo/eas-build/pull/454
|
|
@@ -24,7 +24,6 @@ export interface BuildFlags {
|
|
|
24
24
|
message?: string;
|
|
25
25
|
buildLoggerLevel?: LoggerLevel;
|
|
26
26
|
freezeCredentials: boolean;
|
|
27
|
-
repack: boolean;
|
|
28
27
|
isVerboseLoggingEnabled?: boolean;
|
|
29
28
|
}
|
|
30
29
|
export declare function runBuildAndSubmitAsync({ graphqlClient, analytics, vcsClient, projectDir, flags, actor, getDynamicPrivateProjectConfigAsync, downloadSimBuildAutoConfirm, envOverride, }: {
|
|
@@ -153,7 +153,7 @@ async function runBuildAndSubmitAsync({ graphqlClient, analytics, vcsClient, pro
|
|
|
153
153
|
});
|
|
154
154
|
for (const startedBuild of startedBuilds) {
|
|
155
155
|
const submitProfile = (0, nullthrows_1.default)(submitProfiles.find(({ platform }) => (0, AppPlatform_1.toAppPlatform)(platform) === startedBuild.build.platform)).profile;
|
|
156
|
-
const submission = await
|
|
156
|
+
const submission = await prepareAndStartAutoSubmissionAsync({
|
|
157
157
|
build: startedBuild.build,
|
|
158
158
|
buildCtx: (0, nullthrows_1.default)(buildCtxByPlatform[startedBuild.build.platform]),
|
|
159
159
|
moreBuilds: startedBuilds.length > 1,
|
|
@@ -237,7 +237,6 @@ async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildP
|
|
|
237
237
|
customBuildConfigMetadata,
|
|
238
238
|
buildLoggerLevel: flags.buildLoggerLevel ?? (log_1.default.isDebug ? logger_1.LoggerLevel.DEBUG : undefined),
|
|
239
239
|
freezeCredentials: flags.freezeCredentials,
|
|
240
|
-
repack: flags.repack,
|
|
241
240
|
isVerboseLoggingEnabled: flags.isVerboseLoggingEnabled ?? false,
|
|
242
241
|
env,
|
|
243
242
|
});
|
|
@@ -312,7 +311,7 @@ async function startBuildAsync(ctx) {
|
|
|
312
311
|
}
|
|
313
312
|
return await sendBuildRequestAsync();
|
|
314
313
|
}
|
|
315
|
-
async function
|
|
314
|
+
async function prepareAndStartAutoSubmissionAsync({ build, buildCtx, moreBuilds, projectDir, submitProfile, selectedSubmitProfileName, nonInteractive, }) {
|
|
316
315
|
const platform = (0, AppPlatform_1.toPlatform)(build.platform);
|
|
317
316
|
const submissionCtx = await (0, context_1.createSubmissionContextAsync)({
|
|
318
317
|
platform,
|
|
@@ -331,6 +330,7 @@ async function prepareAndStartSubmissionAsync({ build, buildCtx, moreBuilds, pro
|
|
|
331
330
|
vcsClient: buildCtx.vcsClient,
|
|
332
331
|
isVerboseFastlaneEnabled: false,
|
|
333
332
|
specifiedProfile: selectedSubmitProfileName,
|
|
333
|
+
groups: undefined, // use groups from submit profile
|
|
334
334
|
});
|
|
335
335
|
if (moreBuilds) {
|
|
336
336
|
log_1.default.newLine();
|
package/build/build/types.d.ts
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { WorkflowRunFragment } from '../graphql/generated';
|
|
2
|
+
export type WorkflowRunResult = {
|
|
3
|
+
id: string;
|
|
4
|
+
status: string;
|
|
5
|
+
gitCommitMessage: string | null;
|
|
6
|
+
gitCommitHash: string | null;
|
|
7
|
+
startedAt: string;
|
|
8
|
+
finishedAt: string;
|
|
9
|
+
workflowId: string;
|
|
10
|
+
workflowName: string | null;
|
|
11
|
+
workflowFileName: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function processWorkflowRuns(runs: WorkflowRunFragment[]): WorkflowRunResult[];
|
|
14
|
+
export type WorkflowResult = {
|
|
15
|
+
id: string;
|
|
16
|
+
name?: string | null | undefined;
|
|
17
|
+
fileName: string;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
updatedAt: string;
|
|
20
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processWorkflowRuns = void 0;
|
|
4
|
+
const generated_1 = require("../graphql/generated");
|
|
5
|
+
function processWorkflowRuns(runs) {
|
|
6
|
+
return runs.map(run => {
|
|
7
|
+
const finishedAt = run.status === generated_1.WorkflowRunStatus.InProgress ? null : run.updatedAt;
|
|
8
|
+
return {
|
|
9
|
+
id: run.id,
|
|
10
|
+
status: run.status,
|
|
11
|
+
gitCommitMessage: run.gitCommitMessage?.split('\n')[0] ?? null,
|
|
12
|
+
gitCommitHash: run.gitCommitHash ?? null,
|
|
13
|
+
startedAt: run.createdAt,
|
|
14
|
+
finishedAt,
|
|
15
|
+
workflowId: run.workflow.id,
|
|
16
|
+
workflowName: run.workflow.name ?? null,
|
|
17
|
+
workflowFileName: run.workflow.fileName,
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
exports.processWorkflowRuns = processWorkflowRuns;
|
|
@@ -20,7 +20,6 @@ export default class Build extends EasCommand {
|
|
|
20
20
|
message: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
21
21
|
'build-logger-level': import("@oclif/core/lib/interfaces").OptionFlag<LoggerLevel | undefined>;
|
|
22
22
|
'freeze-credentials': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
23
|
-
repack: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
24
23
|
'verbose-logs': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
25
24
|
};
|
|
26
25
|
static contextDefinition: {
|
|
@@ -89,11 +89,6 @@ class Build extends EasCommand_1.default {
|
|
|
89
89
|
default: false,
|
|
90
90
|
description: 'Prevent the build from updating credentials in non-interactive mode',
|
|
91
91
|
}),
|
|
92
|
-
repack: core_1.Flags.boolean({
|
|
93
|
-
default: false,
|
|
94
|
-
hidden: true,
|
|
95
|
-
description: 'Use the golden dev client build repack flow as it works for onboarding',
|
|
96
|
-
}),
|
|
97
92
|
'verbose-logs': core_1.Flags.boolean({
|
|
98
93
|
default: false,
|
|
99
94
|
description: 'Use verbose logs for the build process',
|
|
@@ -187,7 +182,6 @@ class Build extends EasCommand_1.default {
|
|
|
187
182
|
buildLoggerLevel: flags['build-logger-level'],
|
|
188
183
|
freezeCredentials: flags['freeze-credentials'],
|
|
189
184
|
isVerboseLoggingEnabled: flags['verbose-logs'],
|
|
190
|
-
repack: flags.repack,
|
|
191
185
|
};
|
|
192
186
|
}
|
|
193
187
|
async ensurePlatformSelectedAsync(flags) {
|
|
@@ -12,6 +12,7 @@ export default class Submit extends EasCommand {
|
|
|
12
12
|
verbose: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
13
|
wait: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
14
|
'verbose-fastlane': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
groups: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined>;
|
|
15
16
|
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
16
17
|
};
|
|
17
18
|
static contextDefinition: {
|
package/build/commands/submit.js
CHANGED
|
@@ -55,6 +55,11 @@ class Submit extends EasCommand_1.default {
|
|
|
55
55
|
default: false,
|
|
56
56
|
description: 'Enable verbose logging for the submission process',
|
|
57
57
|
}),
|
|
58
|
+
groups: core_1.Flags.string({
|
|
59
|
+
description: 'Internal TestFlight testing groups to add the build to (iOS only). Learn more: https://developer.apple.com/help/app-store-connect/test-a-beta-version/add-internal-testers',
|
|
60
|
+
multiple: true,
|
|
61
|
+
char: 'g',
|
|
62
|
+
}),
|
|
58
63
|
'non-interactive': core_1.Flags.boolean({
|
|
59
64
|
default: false,
|
|
60
65
|
description: 'Run command in non-interactive mode',
|
|
@@ -94,6 +99,7 @@ class Submit extends EasCommand_1.default {
|
|
|
94
99
|
archiveFlags: flagsWithPlatform.archiveFlags,
|
|
95
100
|
nonInteractive: flagsWithPlatform.nonInteractive,
|
|
96
101
|
isVerboseFastlaneEnabled: flagsWithPlatform.isVerboseFastlaneEnabled,
|
|
102
|
+
groups: flagsWithPlatform.groups,
|
|
97
103
|
actor,
|
|
98
104
|
graphqlClient,
|
|
99
105
|
analytics,
|
|
@@ -120,7 +126,7 @@ class Submit extends EasCommand_1.default {
|
|
|
120
126
|
}
|
|
121
127
|
}
|
|
122
128
|
sanitizeFlags(flags) {
|
|
123
|
-
const { platform, verbose, wait, profile, 'non-interactive': nonInteractive, 'verbose-fastlane': isVerboseFastlaneEnabled, ...archiveFlags } = flags;
|
|
129
|
+
const { platform, verbose, wait, profile, 'non-interactive': nonInteractive, 'verbose-fastlane': isVerboseFastlaneEnabled, groups, ...archiveFlags } = flags;
|
|
124
130
|
if (!flags.platform && nonInteractive) {
|
|
125
131
|
core_1.Errors.error('--platform is required when building in non-interactive mode', { exit: 1 });
|
|
126
132
|
}
|
|
@@ -136,6 +142,7 @@ class Submit extends EasCommand_1.default {
|
|
|
136
142
|
profile,
|
|
137
143
|
nonInteractive,
|
|
138
144
|
isVerboseFastlaneEnabled,
|
|
145
|
+
groups,
|
|
139
146
|
};
|
|
140
147
|
}
|
|
141
148
|
async ensurePlatformSelectedAsync(flags) {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import EasCommand from '../../commandUtils/EasCommand';
|
|
2
|
+
export default class WorkflowRunCancel extends EasCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static strict: boolean;
|
|
5
|
+
static contextDefinition: {
|
|
6
|
+
loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
|
|
7
|
+
projectId: import("../../commandUtils/context/ProjectIdContextField").ProjectIdContextField;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
runAsync(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
5
|
+
const flags_1 = require("../../commandUtils/flags");
|
|
6
|
+
const workflows_1 = require("../../commandUtils/workflows");
|
|
7
|
+
const generated_1 = require("../../graphql/generated");
|
|
8
|
+
const WorkflowRunMutation_1 = require("../../graphql/mutations/WorkflowRunMutation");
|
|
9
|
+
const AppQuery_1 = require("../../graphql/queries/AppQuery");
|
|
10
|
+
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
11
|
+
const prompts_1 = require("../../prompts");
|
|
12
|
+
class WorkflowRunCancel extends EasCommand_1.default {
|
|
13
|
+
static description = 'Cancel one or more workflow runs. If no workflow run IDs are provided, you will be prompted to select IN_PROGRESS runs to cancel.';
|
|
14
|
+
static strict = false;
|
|
15
|
+
static contextDefinition = {
|
|
16
|
+
...this.ContextOptions.ProjectId,
|
|
17
|
+
...this.ContextOptions.LoggedIn,
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
...flags_1.EASNonInteractiveFlag,
|
|
21
|
+
};
|
|
22
|
+
async runAsync() {
|
|
23
|
+
const { argv } = await this.parse(WorkflowRunCancel);
|
|
24
|
+
let nonInteractive = false;
|
|
25
|
+
const workflowRunIds = new Set();
|
|
26
|
+
// Custom parsing of argv
|
|
27
|
+
const tokens = [...argv];
|
|
28
|
+
while (tokens.length > 0) {
|
|
29
|
+
const token = tokens.shift();
|
|
30
|
+
if (token === '--non-interactive') {
|
|
31
|
+
nonInteractive = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
else if (token) {
|
|
35
|
+
workflowRunIds.add(token);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const { projectId, loggedIn: { graphqlClient }, } = await this.getContextAsync(WorkflowRunCancel, {
|
|
39
|
+
nonInteractive,
|
|
40
|
+
});
|
|
41
|
+
if (workflowRunIds.size === 0) {
|
|
42
|
+
if (nonInteractive) {
|
|
43
|
+
throw new Error('Must supply workflow run IDs as arguments when in non-interactive mode');
|
|
44
|
+
}
|
|
45
|
+
// Run the workflow run list query and select runs to cancel
|
|
46
|
+
const queryResult = await AppQuery_1.AppQuery.byIdWorkflowRunsFilteredByStatusAsync(graphqlClient, projectId, generated_1.WorkflowRunStatus.InProgress, 50);
|
|
47
|
+
const runs = (0, workflows_1.processWorkflowRuns)(queryResult);
|
|
48
|
+
if (runs.length === 0) {
|
|
49
|
+
log_1.default.warn('No workflow runs to cancel');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const answers = await (0, prompts_1.promptAsync)({
|
|
53
|
+
type: 'multiselect',
|
|
54
|
+
name: 'selectedRuns',
|
|
55
|
+
message: 'Select IN_PROGRESS workflow runs to cancel',
|
|
56
|
+
choices: runs.map(run => ({
|
|
57
|
+
title: `${run.id} - ${run.workflowFileName}, ${run.gitCommitMessage ?? ''}, ${run.startedAt}`,
|
|
58
|
+
value: run.id,
|
|
59
|
+
})),
|
|
60
|
+
});
|
|
61
|
+
answers.selectedRuns.forEach((id) => {
|
|
62
|
+
workflowRunIds.add(id);
|
|
63
|
+
});
|
|
64
|
+
if (workflowRunIds.size === 0) {
|
|
65
|
+
log_1.default.warn('No workflow runs to cancel');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
log_1.default.addNewLineIfNone();
|
|
70
|
+
for (const workflowRunId of workflowRunIds) {
|
|
71
|
+
try {
|
|
72
|
+
await WorkflowRunMutation_1.WorkflowRunMutation.cancelWorkflowRunAsync(graphqlClient, {
|
|
73
|
+
workflowRunId,
|
|
74
|
+
});
|
|
75
|
+
log_1.default.log(`Workflow run ${workflowRunId} has been canceled.`);
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
log_1.default.error(`Failed to cancel workflow run ${workflowRunId}: ${e}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
log_1.default.addNewLineIfNone();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.default = WorkflowRunCancel;
|
|
@@ -5,28 +5,13 @@ const core_1 = require("@oclif/core");
|
|
|
5
5
|
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
6
6
|
const flags_1 = require("../../commandUtils/flags");
|
|
7
7
|
const pagination_1 = require("../../commandUtils/pagination");
|
|
8
|
+
const workflows_1 = require("../../commandUtils/workflows");
|
|
8
9
|
const generated_1 = require("../../graphql/generated");
|
|
9
10
|
const AppQuery_1 = require("../../graphql/queries/AppQuery");
|
|
10
11
|
const WorkflowRunQuery_1 = require("../../graphql/queries/WorkflowRunQuery");
|
|
11
12
|
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
12
13
|
const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
|
|
13
14
|
const json_1 = require("../../utils/json");
|
|
14
|
-
function processWorkflowRuns(runs) {
|
|
15
|
-
return runs.map(run => {
|
|
16
|
-
const finishedAt = run.status === generated_1.WorkflowRunStatus.InProgress ? null : run.updatedAt;
|
|
17
|
-
return {
|
|
18
|
-
id: run.id,
|
|
19
|
-
status: run.status,
|
|
20
|
-
gitCommitMessage: run.gitCommitMessage ?? null,
|
|
21
|
-
gitCommitHash: run.gitCommitHash ?? null,
|
|
22
|
-
startedAt: run.createdAt,
|
|
23
|
-
finishedAt,
|
|
24
|
-
workflowId: run.workflow.id,
|
|
25
|
-
workflowName: run.workflow.name ?? null,
|
|
26
|
-
workflowFileName: run.workflow.fileName,
|
|
27
|
-
};
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
15
|
class WorkflowRunList extends EasCommand_1.default {
|
|
31
16
|
static description = 'list recent workflow runs for this project, with their IDs, statuses, and timestamps';
|
|
32
17
|
static flags = {
|
|
@@ -64,7 +49,7 @@ class WorkflowRunList extends EasCommand_1.default {
|
|
|
64
49
|
else {
|
|
65
50
|
runs = await AppQuery_1.AppQuery.byIdWorkflowRunsFilteredByStatusAsync(graphqlClient, projectId, status, limit);
|
|
66
51
|
}
|
|
67
|
-
const result = processWorkflowRuns(runs);
|
|
52
|
+
const result = (0, workflows_1.processWorkflowRuns)(runs);
|
|
68
53
|
if (flags.json) {
|
|
69
54
|
(0, json_1.printJsonOnlyOutput)(result);
|
|
70
55
|
return;
|
|
@@ -157,6 +157,7 @@ export type Account = {
|
|
|
157
157
|
/** Whether this account can enable SSO. */
|
|
158
158
|
canEnableSSO: Scalars['Boolean']['output'];
|
|
159
159
|
createdAt: Scalars['DateTime']['output'];
|
|
160
|
+
displayName?: Maybe<Scalars['String']['output']>;
|
|
160
161
|
/** Environment secrets for an account */
|
|
161
162
|
environmentSecrets: Array<EnvironmentSecret>;
|
|
162
163
|
/** Environment variables for an account */
|
|
@@ -542,6 +543,8 @@ export type AccountMutation = {
|
|
|
542
543
|
requestRefund?: Maybe<Scalars['Boolean']['output']>;
|
|
543
544
|
/** Revoke specified Permissions for Actor. Actor must already have at least one permission on the account. */
|
|
544
545
|
revokeActorPermissions: Account;
|
|
546
|
+
/** Set the display name for the account. */
|
|
547
|
+
setDisplayName: Account;
|
|
545
548
|
/** Require authorization to send push notifications for experiences owned by this account */
|
|
546
549
|
setPushSecurityEnabled: Account;
|
|
547
550
|
};
|
|
@@ -583,6 +586,10 @@ export type AccountMutationRevokeActorPermissionsArgs = {
|
|
|
583
586
|
actorID: Scalars['ID']['input'];
|
|
584
587
|
permissions?: InputMaybe<Array<InputMaybe<Permission>>>;
|
|
585
588
|
};
|
|
589
|
+
export type AccountMutationSetDisplayNameArgs = {
|
|
590
|
+
accountID: Scalars['ID']['input'];
|
|
591
|
+
displayName: Scalars['String']['input'];
|
|
592
|
+
};
|
|
586
593
|
export type AccountMutationSetPushSecurityEnabledArgs = {
|
|
587
594
|
accountID: Scalars['ID']['input'];
|
|
588
595
|
pushSecurityEnabled: Scalars['Boolean']['input'];
|
|
@@ -2330,6 +2337,7 @@ export declare enum AuthProtocolType {
|
|
|
2330
2337
|
Oidc = "OIDC"
|
|
2331
2338
|
}
|
|
2332
2339
|
export declare enum AuthProviderIdentifier {
|
|
2340
|
+
Generic = "GENERIC",
|
|
2333
2341
|
GoogleWs = "GOOGLE_WS",
|
|
2334
2342
|
MsEntraId = "MS_ENTRA_ID",
|
|
2335
2343
|
Okta = "OKTA",
|
|
@@ -3728,12 +3736,14 @@ export declare enum Feature {
|
|
|
3728
3736
|
export type Fingerprint = {
|
|
3729
3737
|
__typename?: 'Fingerprint';
|
|
3730
3738
|
app: App;
|
|
3739
|
+
buildCount: Scalars['Int']['output'];
|
|
3731
3740
|
builds: AppBuildsConnection;
|
|
3732
3741
|
createdAt: Scalars['DateTime']['output'];
|
|
3733
3742
|
debugInfoUrl?: Maybe<Scalars['String']['output']>;
|
|
3734
3743
|
hash: Scalars['String']['output'];
|
|
3735
3744
|
id: Scalars['ID']['output'];
|
|
3736
3745
|
source?: Maybe<FingerprintSource>;
|
|
3746
|
+
updateCount: Scalars['Int']['output'];
|
|
3737
3747
|
updatedAt: Scalars['DateTime']['output'];
|
|
3738
3748
|
updates: AppUpdatesConnection;
|
|
3739
3749
|
};
|
|
@@ -3907,8 +3917,6 @@ export type GitHubBuildInput = {
|
|
|
3907
3917
|
environment?: InputMaybe<EnvironmentVariableEnvironment>;
|
|
3908
3918
|
gitRef: Scalars['String']['input'];
|
|
3909
3919
|
platform: AppPlatform;
|
|
3910
|
-
/** Repack the golden dev client build instead of running full build process. Used for onboarding. Do not use outside of onboarding flow, as for now it's only created with this specific use case in mind. */
|
|
3911
|
-
repack?: InputMaybe<Scalars['Boolean']['input']>;
|
|
3912
3920
|
submitProfile?: InputMaybe<Scalars['String']['input']>;
|
|
3913
3921
|
};
|
|
3914
3922
|
export type GitHubBuildTrigger = {
|
|
@@ -7364,6 +7372,7 @@ export declare enum WorkflowJobType {
|
|
|
7364
7372
|
Build = "BUILD",
|
|
7365
7373
|
Custom = "CUSTOM",
|
|
7366
7374
|
Deploy = "DEPLOY",
|
|
7375
|
+
Doc = "DOC",
|
|
7367
7376
|
Fingerprint = "FINGERPRINT",
|
|
7368
7377
|
GetBuild = "GET_BUILD",
|
|
7369
7378
|
MaestroCloud = "MAESTRO_CLOUD",
|
|
@@ -12446,6 +12455,19 @@ export type CreateWorkflowRunMutation = {
|
|
|
12446
12455
|
};
|
|
12447
12456
|
};
|
|
12448
12457
|
};
|
|
12458
|
+
export type CancelWorkflowRunMutationVariables = Exact<{
|
|
12459
|
+
workflowRunId: Scalars['ID']['input'];
|
|
12460
|
+
}>;
|
|
12461
|
+
export type CancelWorkflowRunMutation = {
|
|
12462
|
+
__typename?: 'RootMutation';
|
|
12463
|
+
workflowRun: {
|
|
12464
|
+
__typename?: 'WorkflowRunMutation';
|
|
12465
|
+
cancelWorkflowRun: {
|
|
12466
|
+
__typename?: 'WorkflowRun';
|
|
12467
|
+
id: string;
|
|
12468
|
+
};
|
|
12469
|
+
};
|
|
12470
|
+
};
|
|
12449
12471
|
export type AppByIdQueryVariables = Exact<{
|
|
12450
12472
|
appId: Scalars['String']['input'];
|
|
12451
12473
|
}>;
|
|
@@ -136,6 +136,7 @@ var AuthProtocolType;
|
|
|
136
136
|
})(AuthProtocolType || (exports.AuthProtocolType = AuthProtocolType = {}));
|
|
137
137
|
var AuthProviderIdentifier;
|
|
138
138
|
(function (AuthProviderIdentifier) {
|
|
139
|
+
AuthProviderIdentifier["Generic"] = "GENERIC";
|
|
139
140
|
AuthProviderIdentifier["GoogleWs"] = "GOOGLE_WS";
|
|
140
141
|
AuthProviderIdentifier["MsEntraId"] = "MS_ENTRA_ID";
|
|
141
142
|
AuthProviderIdentifier["Okta"] = "OKTA";
|
|
@@ -878,6 +879,7 @@ var WorkflowJobType;
|
|
|
878
879
|
WorkflowJobType["Build"] = "BUILD";
|
|
879
880
|
WorkflowJobType["Custom"] = "CUSTOM";
|
|
880
881
|
WorkflowJobType["Deploy"] = "DEPLOY";
|
|
882
|
+
WorkflowJobType["Doc"] = "DOC";
|
|
881
883
|
WorkflowJobType["Fingerprint"] = "FINGERPRINT";
|
|
882
884
|
WorkflowJobType["GetBuild"] = "GET_BUILD";
|
|
883
885
|
WorkflowJobType["MaestroCloud"] = "MAESTRO_CLOUD";
|
|
@@ -33,4 +33,20 @@ var WorkflowRunMutation;
|
|
|
33
33
|
return { id: data.workflowRun.createWorkflowRun.id };
|
|
34
34
|
}
|
|
35
35
|
WorkflowRunMutation.createWorkflowRunAsync = createWorkflowRunAsync;
|
|
36
|
+
async function cancelWorkflowRunAsync(graphqlClient, { workflowRunId, }) {
|
|
37
|
+
await (0, client_1.withErrorHandlingAsync)(graphqlClient
|
|
38
|
+
.mutation((0, graphql_tag_1.default) `
|
|
39
|
+
mutation CancelWorkflowRun($workflowRunId: ID!) {
|
|
40
|
+
workflowRun {
|
|
41
|
+
cancelWorkflowRun(workflowRunId: $workflowRunId) {
|
|
42
|
+
id
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
`, {
|
|
47
|
+
workflowRunId,
|
|
48
|
+
})
|
|
49
|
+
.toPromise());
|
|
50
|
+
}
|
|
51
|
+
WorkflowRunMutation.cancelWorkflowRunAsync = cancelWorkflowRunAsync;
|
|
36
52
|
})(WorkflowRunMutation || (exports.WorkflowRunMutation = WorkflowRunMutation = {}));
|
|
@@ -75,7 +75,7 @@ exports.WorkflowRunQuery = {
|
|
|
75
75
|
workflows {
|
|
76
76
|
byAppIdAndFileName(appId: $appId, fileName: $fileName) {
|
|
77
77
|
id
|
|
78
|
-
runs: runsPaginated(
|
|
78
|
+
runs: runsPaginated(first: $limit, filter: { status: $status }) {
|
|
79
79
|
edges {
|
|
80
80
|
node {
|
|
81
81
|
id
|
|
@@ -14,6 +14,7 @@ export interface SubmissionContext<T extends Platform> {
|
|
|
14
14
|
exp: ExpoConfig;
|
|
15
15
|
nonInteractive: boolean;
|
|
16
16
|
isVerboseFastlaneEnabled: boolean;
|
|
17
|
+
groups: T extends Platform.IOS ? string[] : undefined;
|
|
17
18
|
platform: T;
|
|
18
19
|
profile: SubmitProfile<T>;
|
|
19
20
|
projectDir: string;
|
|
@@ -38,6 +39,7 @@ export declare function createSubmissionContextAsync<T extends Platform>(params:
|
|
|
38
39
|
env?: Record<string, string>;
|
|
39
40
|
nonInteractive: boolean;
|
|
40
41
|
isVerboseFastlaneEnabled: boolean;
|
|
42
|
+
groups: string[] | undefined;
|
|
41
43
|
platform: T;
|
|
42
44
|
profile: SubmitProfile<T>;
|
|
43
45
|
projectDir: string;
|