Skip to content
This repository was archived by the owner on May 15, 2025. It is now read-only.

Commit 65ace0e

Browse files
authored
Merge branch 'main' into code-server_machine-settings
2 parents e1575da + 43ed02f commit 65ace0e

File tree

10 files changed

+210
-52
lines changed

10 files changed

+210
-52
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
- name: Format
4949
run: bun fmt:ci
5050
- name: typos-action
51-
uses: crate-ci/typos@v1.31.1
51+
uses: crate-ci/typos@v1.32.0
5252
with:
5353
config: .github/typos.toml
5454
- name: Lint

.github/workflows/deploy-registry.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
uses: actions/checkout@v4
2323

2424
- name: Authenticate to Google Cloud
25-
uses: google-github-actions/auth@71f986410dfbc7added4569d411d040a91dc6935
25+
uses: google-github-actions/auth@ba79af03959ebeac9769e648f473a284504d9193
2626
with:
2727
workload_identity_provider: projects/309789351055/locations/global/workloadIdentityPools/github-actions/providers/github
2828
service_account: [email protected]

devcontainers-cli/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ The devcontainers-cli module provides an easy way to install [`@devcontainers/cl
1616
```tf
1717
module "devcontainers-cli" {
1818
source = "registry.coder.com/modules/devcontainers-cli/coder"
19-
version = "1.0.1"
19+
version = "1.0.3"
2020
agent_id = coder_agent.example.id
2121
}
2222
```

devcontainers-cli/main.test.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,21 @@ const executeScriptInContainerWithPackageManager = async (
4040
]);
4141
}
4242

43-
const resp = await execContainer(id, [shell, "-c", instance.script]);
43+
const pathResp = await execContainer(id, [shell, "-c", "echo $PATH"]);
44+
const path = pathResp.stdout.trim();
45+
46+
console.log(path);
47+
48+
const resp = await execContainer(
49+
id,
50+
[shell, "-c", instance.script],
51+
[
52+
"--env",
53+
"CODER_SCRIPT_BIN_DIR=/tmp/coder-script-data/bin",
54+
"--env",
55+
`PATH=${path}:/tmp/coder-script-data/bin`,
56+
],
57+
);
4458
const stdout = resp.stdout.trim().split("\n");
4559
const stderr = resp.stderr.trim().split("\n");
4660
return {
@@ -104,7 +118,7 @@ describe("devcontainers-cli", async () => {
104118
"Installing @devcontainers/cli using yarn...",
105119
);
106120
expect(output.stdout[output.stdout.length - 1]).toEqual(
107-
"🥳 @devcontainers/cli has been installed into /usr/local/bin/devcontainer!",
121+
"🥳 @devcontainers/cli has been installed into /tmp/coder-script-data/bin/devcontainer!",
108122
);
109123
}, 15000);
110124

devcontainers-cli/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ install() {
3838
fi
3939
pnpm add -g @devcontainers/cli
4040
elif [ "$PACKAGE_MANAGER" = "yarn" ]; then
41-
yarn global add @devcontainers/cli
41+
yarn global add @devcontainers/cli --prefix "$(dirname "$CODER_SCRIPT_BIN_DIR")"
4242
fi
4343
}
4444

jetbrains-gateway/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Consult the [JetBrains documentation](https://www.jetbrains.com/help/idea/prereq
1818
module "jetbrains_gateway" {
1919
count = data.coder_workspace.me.start_count
2020
source = "registry.coder.com/modules/jetbrains-gateway/coder"
21-
version = "1.0.28"
21+
version = "1.1.0"
2222
agent_id = coder_agent.example.id
2323
folder = "/home/coder/example"
2424
jetbrains_ides = ["CL", "GO", "IU", "PY", "WS"]
@@ -36,7 +36,7 @@ module "jetbrains_gateway" {
3636
module "jetbrains_gateway" {
3737
count = data.coder_workspace.me.start_count
3838
source = "registry.coder.com/modules/jetbrains-gateway/coder"
39-
version = "1.0.28"
39+
version = "1.1.0"
4040
agent_id = coder_agent.example.id
4141
folder = "/home/coder/example"
4242
jetbrains_ides = ["GO", "WS"]
@@ -50,7 +50,7 @@ module "jetbrains_gateway" {
5050
module "jetbrains_gateway" {
5151
count = data.coder_workspace.me.start_count
5252
source = "registry.coder.com/modules/jetbrains-gateway/coder"
53-
version = "1.0.28"
53+
version = "1.1.0"
5454
agent_id = coder_agent.example.id
5555
folder = "/home/coder/example"
5656
jetbrains_ides = ["IU", "PY"]
@@ -65,7 +65,7 @@ module "jetbrains_gateway" {
6565
module "jetbrains_gateway" {
6666
count = data.coder_workspace.me.start_count
6767
source = "registry.coder.com/modules/jetbrains-gateway/coder"
68-
version = "1.0.28"
68+
version = "1.1.0"
6969
agent_id = coder_agent.example.id
7070
folder = "/home/coder/example"
7171
jetbrains_ides = ["IU", "PY"]
@@ -90,7 +90,7 @@ module "jetbrains_gateway" {
9090
module "jetbrains_gateway" {
9191
count = data.coder_workspace.me.start_count
9292
source = "registry.coder.com/modules/jetbrains-gateway/coder"
93-
version = "1.0.28"
93+
version = "1.1.0"
9494
agent_id = coder_agent.example.id
9595
folder = "/home/coder/example"
9696
jetbrains_ides = ["GO", "WS"]
@@ -108,7 +108,7 @@ Due to the highest priority of the `ide_download_link` parameter in the `(jetbra
108108
module "jetbrains_gateway" {
109109
count = data.coder_workspace.me.start_count
110110
source = "registry.coder.com/modules/jetbrains-gateway/coder"
111-
version = "1.0.28"
111+
version = "1.1.0"
112112
agent_id = coder_agent.example.id
113113
folder = "/home/coder/example"
114114
jetbrains_ides = ["GO", "WS"]

jetbrains-gateway/main.tf

Lines changed: 60 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ terraform {
1313
}
1414
}
1515

16+
variable "arch" {
17+
type = string
18+
description = "The target architecture of the workspace"
19+
default = "amd64"
20+
validation {
21+
condition = contains(["amd64", "arm64"], var.arch)
22+
error_message = "Architecture must be either 'amd64' or 'arm64'."
23+
}
24+
}
25+
1626
variable "agent_id" {
1727
type = string
1828
description = "The ID of a Coder agent."
@@ -178,78 +188,100 @@ data "http" "jetbrains_ide_versions" {
178188
}
179189

180190
locals {
191+
# AMD64 versions of the images just use the version string, while ARM64
192+
# versions append "-aarch64". Eg:
193+
#
194+
# https://download.jetbrains.com/idea/ideaIU-2025.1.tar.gz
195+
# https://download.jetbrains.com/idea/ideaIU-2025.1.tar.gz
196+
#
197+
# We rewrite the data map above dynamically based on the user's architecture parameter.
198+
#
199+
effective_jetbrains_ide_versions = {
200+
for k, v in var.jetbrains_ide_versions : k => {
201+
build_number = v.build_number
202+
version = var.arch == "arm64" ? "${v.version}-aarch64" : v.version
203+
}
204+
}
205+
206+
# When downloading the latest IDE, the download link in the JSON is either:
207+
#
208+
# linux.download_link
209+
# linuxARM64.download_link
210+
#
211+
download_key = var.arch == "arm64" ? "linuxARM64" : "linux"
212+
181213
jetbrains_ides = {
182214
"GO" = {
183215
icon = "/icon/goland.svg",
184216
name = "GoLand",
185217
identifier = "GO",
186-
build_number = var.jetbrains_ide_versions["GO"].build_number,
187-
download_link = "${var.download_base_link}/go/goland-${var.jetbrains_ide_versions["GO"].version}.tar.gz"
188-
version = var.jetbrains_ide_versions["GO"].version
218+
build_number = local.effective_jetbrains_ide_versions["GO"].build_number,
219+
download_link = "${var.download_base_link}/go/goland-${local.effective_jetbrains_ide_versions["GO"].version}.tar.gz"
220+
version = local.effective_jetbrains_ide_versions["GO"].version
189221
},
190222
"WS" = {
191223
icon = "/icon/webstorm.svg",
192224
name = "WebStorm",
193225
identifier = "WS",
194-
build_number = var.jetbrains_ide_versions["WS"].build_number,
195-
download_link = "${var.download_base_link}/webstorm/WebStorm-${var.jetbrains_ide_versions["WS"].version}.tar.gz"
196-
version = var.jetbrains_ide_versions["WS"].version
226+
build_number = local.effective_jetbrains_ide_versions["WS"].build_number,
227+
download_link = "${var.download_base_link}/webstorm/WebStorm-${local.effective_jetbrains_ide_versions["WS"].version}.tar.gz"
228+
version = local.effective_jetbrains_ide_versions["WS"].version
197229
},
198230
"IU" = {
199231
icon = "/icon/intellij.svg",
200232
name = "IntelliJ IDEA Ultimate",
201233
identifier = "IU",
202-
build_number = var.jetbrains_ide_versions["IU"].build_number,
203-
download_link = "${var.download_base_link}/idea/ideaIU-${var.jetbrains_ide_versions["IU"].version}.tar.gz"
204-
version = var.jetbrains_ide_versions["IU"].version
234+
build_number = local.effective_jetbrains_ide_versions["IU"].build_number,
235+
download_link = "${var.download_base_link}/idea/ideaIU-${local.effective_jetbrains_ide_versions["IU"].version}.tar.gz"
236+
version = local.effective_jetbrains_ide_versions["IU"].version
205237
},
206238
"PY" = {
207239
icon = "/icon/pycharm.svg",
208240
name = "PyCharm Professional",
209241
identifier = "PY",
210-
build_number = var.jetbrains_ide_versions["PY"].build_number,
211-
download_link = "${var.download_base_link}/python/pycharm-professional-${var.jetbrains_ide_versions["PY"].version}.tar.gz"
212-
version = var.jetbrains_ide_versions["PY"].version
242+
build_number = local.effective_jetbrains_ide_versions["PY"].build_number,
243+
download_link = "${var.download_base_link}/python/pycharm-professional-${local.effective_jetbrains_ide_versions["PY"].version}.tar.gz"
244+
version = local.effective_jetbrains_ide_versions["PY"].version
213245
},
214246
"CL" = {
215247
icon = "/icon/clion.svg",
216248
name = "CLion",
217249
identifier = "CL",
218-
build_number = var.jetbrains_ide_versions["CL"].build_number,
219-
download_link = "${var.download_base_link}/cpp/CLion-${var.jetbrains_ide_versions["CL"].version}.tar.gz"
220-
version = var.jetbrains_ide_versions["CL"].version
250+
build_number = local.effective_jetbrains_ide_versions["CL"].build_number,
251+
download_link = "${var.download_base_link}/cpp/CLion-${local.effective_jetbrains_ide_versions["CL"].version}.tar.gz"
252+
version = local.effective_jetbrains_ide_versions["CL"].version
221253
},
222254
"PS" = {
223255
icon = "/icon/phpstorm.svg",
224256
name = "PhpStorm",
225257
identifier = "PS",
226-
build_number = var.jetbrains_ide_versions["PS"].build_number,
227-
download_link = "${var.download_base_link}/webide/PhpStorm-${var.jetbrains_ide_versions["PS"].version}.tar.gz"
228-
version = var.jetbrains_ide_versions["PS"].version
258+
build_number = local.effective_jetbrains_ide_versions["PS"].build_number,
259+
download_link = "${var.download_base_link}/webide/PhpStorm-${local.effective_jetbrains_ide_versions["PS"].version}.tar.gz"
260+
version = local.effective_jetbrains_ide_versions["PS"].version
229261
},
230262
"RM" = {
231263
icon = "/icon/rubymine.svg",
232264
name = "RubyMine",
233265
identifier = "RM",
234-
build_number = var.jetbrains_ide_versions["RM"].build_number,
235-
download_link = "${var.download_base_link}/ruby/RubyMine-${var.jetbrains_ide_versions["RM"].version}.tar.gz"
236-
version = var.jetbrains_ide_versions["RM"].version
266+
build_number = local.effective_jetbrains_ide_versions["RM"].build_number,
267+
download_link = "${var.download_base_link}/ruby/RubyMine-${local.effective_jetbrains_ide_versions["RM"].version}.tar.gz"
268+
version = local.effective_jetbrains_ide_versions["RM"].version
237269
},
238270
"RD" = {
239271
icon = "/icon/rider.svg",
240272
name = "Rider",
241273
identifier = "RD",
242-
build_number = var.jetbrains_ide_versions["RD"].build_number,
243-
download_link = "${var.download_base_link}/rider/JetBrains.Rider-${var.jetbrains_ide_versions["RD"].version}.tar.gz"
244-
version = var.jetbrains_ide_versions["RD"].version
274+
build_number = local.effective_jetbrains_ide_versions["RD"].build_number,
275+
download_link = "${var.download_base_link}/rider/JetBrains.Rider-${local.effective_jetbrains_ide_versions["RD"].version}.tar.gz"
276+
version = local.effective_jetbrains_ide_versions["RD"].version
245277
},
246278
"RR" = {
247279
icon = "/icon/rustrover.svg",
248280
name = "RustRover",
249281
identifier = "RR",
250-
build_number = var.jetbrains_ide_versions["RR"].build_number,
251-
download_link = "${var.download_base_link}/rustrover/RustRover-${var.jetbrains_ide_versions["RR"].version}.tar.gz"
252-
version = var.jetbrains_ide_versions["RR"].version
282+
build_number = local.effective_jetbrains_ide_versions["RR"].build_number,
283+
download_link = "${var.download_base_link}/rustrover/RustRover-${local.effective_jetbrains_ide_versions["RR"].version}.tar.gz"
284+
version = local.effective_jetbrains_ide_versions["RR"].version
253285
}
254286
}
255287

@@ -258,7 +290,7 @@ locals {
258290
key = var.latest ? keys(local.json_data)[0] : ""
259291
display_name = local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].name
260292
identifier = data.coder_parameter.jetbrains_ide.value
261-
download_link = var.latest ? local.json_data[local.key][0].downloads.linux.link : local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].download_link
293+
download_link = var.latest ? local.json_data[local.key][0].downloads[local.download_key].link : local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].download_link
262294
build_number = var.latest ? local.json_data[local.key][0].build : local.jetbrains_ides[data.coder_parameter.jetbrains_ide.value].build_number
263295
version = var.latest ? local.json_data[local.key][0].version : var.jetbrains_ide_versions[data.coder_parameter.jetbrains_ide.value].version
264296
}

test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,13 @@ export const executeScriptInContainer = async (
6666
export const execContainer = async (
6767
id: string,
6868
cmd: string[],
69+
args?: string[],
6970
): Promise<{
7071
exitCode: number;
7172
stderr: string;
7273
stdout: string;
7374
}> => {
74-
const proc = spawn(["docker", "exec", id, ...cmd], {
75+
const proc = spawn(["docker", "exec", ...(args ?? []), id, ...cmd], {
7576
stderr: "pipe",
7677
stdout: "pipe",
7778
});

0 commit comments

Comments
 (0)