Skip to content

Commit d730293

Browse files
authored
Create separate Build All Release task (#1000)
We were naively transforming the arguments of the returned Build All task to create one that would run a release version of Build All. Unfortunately the `task.execution` remained the same and so while upon inspection the task looked like it would run a release build it was not. Create two separate versions of the Build All task, one for Debug and one for Release builds, and use the release version when building tests in release mode.
1 parent beec5e6 commit d730293

File tree

2 files changed

+26
-17
lines changed

2 files changed

+26
-17
lines changed

src/TestExplorer/TestRunner.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -682,22 +682,11 @@ export class TestRunner {
682682

683683
/** Run test session inside debugger */
684684
async debugSession(token: vscode.CancellationToken, runState: TestRunnerTestRunState) {
685-
const buildAllTask = await getBuildAllTask(this.folderContext);
685+
const buildAllTask = await getBuildAllTask(this.folderContext, isRelease(this.testKind));
686686
if (!buildAllTask) {
687687
return;
688688
}
689689

690-
if (isRelease(this.testKind)) {
691-
buildAllTask.definition.args = [
692-
...buildAllTask.definition.args,
693-
"-c",
694-
"release",
695-
"-Xswiftc",
696-
"-enable-testing",
697-
];
698-
buildAllTask.detail = `swift ${buildAllTask.definition.args.join(" ")}`;
699-
}
700-
701690
const subscriptions: vscode.Disposable[] = [];
702691
let buildExitCode = 0;
703692
const buildTask = vscode.tasks.onDidStartTask(e => {

src/tasks/SwiftTaskProvider.ts

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,21 +134,35 @@ const buildAllTaskCache = (() => {
134134
};
135135
})();
136136

137+
function buildAllTaskName(release: boolean): string {
138+
return release ? `${SwiftTaskProvider.buildAllName} - Release` : SwiftTaskProvider.buildAllName;
139+
}
140+
137141
/**
138142
* Creates a {@link vscode.Task Task} to build all targets in this package.
139143
*/
140-
export function createBuildAllTask(folderContext: FolderContext): SwiftTask {
144+
export function createBuildAllTask(
145+
folderContext: FolderContext,
146+
release: boolean = false
147+
): SwiftTask {
141148
let additionalArgs = buildOptions(folderContext.workspaceContext.toolchain);
142149
if (folderContext.swiftPackage.getTargets(TargetType.test).length > 0) {
143150
additionalArgs.push(...testDiscoveryFlag(folderContext));
144151
}
145-
let buildTaskName = SwiftTaskProvider.buildAllName;
152+
let buildTaskName = buildAllTaskName(release);
153+
146154
if (folderContext.relativePath.length > 0) {
147155
buildTaskName += ` (${folderContext.relativePath})`;
148156
}
157+
if (release) {
158+
additionalArgs = [...additionalArgs, "-c", "release"];
159+
}
149160
// don't build tests for iOS etc as they don't compile
150161
if (folderContext.workspaceContext.toolchain.buildFlags.getDarwinTarget() === undefined) {
151162
additionalArgs = ["--build-tests", ...additionalArgs];
163+
if (release) {
164+
additionalArgs = [...additionalArgs, "-Xswiftc", "-enable-testing"];
165+
}
152166
}
153167

154168
// Create one Build All task per folder context, since this can be called multiple
@@ -183,8 +197,11 @@ export function createBuildAllTask(folderContext: FolderContext): SwiftTask {
183197
* @param folderContext Folder to get Build All Task for
184198
* @returns Build All Task
185199
*/
186-
export async function getBuildAllTask(folderContext: FolderContext): Promise<vscode.Task> {
187-
let buildTaskName = SwiftTaskProvider.buildAllName;
200+
export async function getBuildAllTask(
201+
folderContext: FolderContext,
202+
release: boolean = false
203+
): Promise<vscode.Task> {
204+
let buildTaskName = buildAllTaskName(release);
188205
if (folderContext.relativePath.length > 0) {
189206
buildTaskName += ` (${folderContext.relativePath})`;
190207
}
@@ -429,7 +446,10 @@ export class SwiftTaskProvider implements vscode.TaskProvider {
429446
continue;
430447
}
431448

432-
tasks.push(createBuildAllTask(folderContext));
449+
// Create both debug and release Build All tasks.
450+
tasks.push(createBuildAllTask(folderContext, false));
451+
tasks.push(createBuildAllTask(folderContext, true));
452+
433453
const executables = folderContext.swiftPackage.executableProducts;
434454
for (const executable of executables) {
435455
tasks.push(...createBuildTasks(executable, folderContext));

0 commit comments

Comments
 (0)