Skip to content

Commit ae279c7

Browse files
committed
Add open recent option to VS Code desktop
1 parent dcd605c commit ae279c7

File tree

2 files changed

+54
-11
lines changed

2 files changed

+54
-11
lines changed

vscode-desktop/main.test.ts

+43-1
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,55 @@ describe("vscode-desktop", async () => {
1818
agent_id: "foo",
1919
});
2020
expect(state.outputs.vscode_url.value).toBe(
21-
"vscode://coder.coder-remote/open?owner=default&workspace=default&token=$SESSION_TOKEN",
21+
"vscode://coder.coder-remote/open?owner=default&workspace=default&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
2222
);
2323

2424
const resources: any = state.resources;
2525
expect(resources[1].instances[0].attributes.order).toBeNull();
2626
});
2727

28+
it("adds folder", async () => {
29+
const state = await runTerraformApply(import.meta.dir, {
30+
agent_id: "foo",
31+
folder: "/foo/bar",
32+
});
33+
expect(state.outputs.vscode_url.value).toBe(
34+
"vscode://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
35+
);
36+
});
37+
38+
it("adds folder and open_recent", async () => {
39+
const state = await runTerraformApply(import.meta.dir, {
40+
agent_id: "foo",
41+
folder: "/foo/bar",
42+
open_recent: true,
43+
});
44+
expect(state.outputs.vscode_url.value).toBe(
45+
"vscode://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
46+
);
47+
});
48+
49+
it("adds folder but not open_recent", async () => {
50+
const state = await runTerraformApply(import.meta.dir, {
51+
agent_id: "foo",
52+
folder: "/foo/bar",
53+
openRecent: false,
54+
});
55+
expect(state.outputs.vscode_url.value).toBe(
56+
"vscode://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
57+
);
58+
});
59+
60+
it("adds open_recent", async () => {
61+
const state = await runTerraformApply(import.meta.dir, {
62+
agent_id: "foo",
63+
open_recent: true,
64+
});
65+
expect(state.outputs.vscode_url.value).toBe(
66+
"vscode://coder.coder-remote/open?owner=default&workspace=default&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
67+
);
68+
});
69+
2870
it("expect order to be set", async () => {
2971
const state = await runTerraformApply(import.meta.dir, {
3072
agent_id: "foo",

vscode-desktop/main.tf

+11-10
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ variable "folder" {
2020
default = ""
2121
}
2222

23+
variable "open_recent" {
24+
type = bool
25+
description = "Open the most recent workspace or folder. Falls back to the folder if there is no recent workspace or folder to open."
26+
default = false
27+
}
28+
2329
variable "order" {
2430
type = number
2531
description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
@@ -35,22 +41,17 @@ resource "coder_app" "vscode" {
3541
slug = "vscode"
3642
display_name = "VS Code Desktop"
3743
order = var.order
38-
url = var.folder != "" ? join("", [
39-
"vscode://coder.coder-remote/open?owner=",
44+
url = join("", [
45+
"vscode://coder.coder-remote/open",
46+
"?owner=",
4047
data.coder_workspace.me.owner,
4148
"&workspace=",
4249
data.coder_workspace.me.name,
43-
"&folder=",
44-
var.folder,
50+
var.folder != "" ? join("", ["&folder=", var.folder]) : "",
51+
var.open_recent ? "&openRecent" : "",
4552
"&url=",
4653
data.coder_workspace.me.access_url,
4754
"&token=$SESSION_TOKEN",
48-
]) : join("", [
49-
"vscode://coder.coder-remote/open?owner=",
50-
data.coder_workspace.me.owner,
51-
"&workspace=",
52-
data.coder_workspace.me.name,
53-
"&token=$SESSION_TOKEN",
5455
])
5556
}
5657

0 commit comments

Comments
 (0)