@@ -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+
1626variable "agent_id" {
1727 type = string
1828 description = " The ID of a Coder agent."
@@ -178,78 +188,100 @@ data "http" "jetbrains_ide_versions" {
178188}
179189
180190locals {
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}
0 commit comments