summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEduardo Bellido Bellido <[email protected]>2026-02-18 23:11:57 +0100
committerGitHub <[email protected]>2026-02-18 16:11:57 -0600
commit87c16374aaafc309c237d05244d8cca974e28c34 (patch)
tree5fe0d8fc2ed0361401b8e8f8045410c25edd6411
parentd366a1430fddf22499068e60428e4b278a84ee31 (diff)
downloadopencode-87c16374aaafc309c237d05244d8cca974e28c34.tar.gz
opencode-87c16374aaafc309c237d05244d8cca974e28c34.zip
fix(lsp): use HashiCorp releases API for installing terraform-ls (#14200)
-rw-r--r--packages/opencode/src/lsp/server.ts27
1 files changed, 10 insertions, 17 deletions
diff --git a/packages/opencode/src/lsp/server.ts b/packages/opencode/src/lsp/server.ts
index 866ee2e5f..a4ebeb5a2 100644
--- a/packages/opencode/src/lsp/server.ts
+++ b/packages/opencode/src/lsp/server.ts
@@ -1654,22 +1654,17 @@ export namespace LSPServer {
if (!bin) {
if (Flag.OPENCODE_DISABLE_LSP_DOWNLOAD) return
- log.info("downloading terraform-ls from GitHub releases")
+ log.info("downloading terraform-ls from HashiCorp releases")
- const releaseResponse = await fetch("https://api.github.com/repos/hashicorp/terraform-ls/releases/latest")
+ const releaseResponse = await fetch("https://api.releases.hashicorp.com/v1/releases/terraform-ls/latest")
if (!releaseResponse.ok) {
log.error("Failed to fetch terraform-ls release info")
return
}
const release = (await releaseResponse.json()) as {
- tag_name?: string
- assets?: { name?: string; browser_download_url?: string }[]
- }
- const version = release.tag_name?.replace("v", "")
- if (!version) {
- log.error("terraform-ls release did not include a version tag")
- return
+ version?: string
+ builds?: { arch?: string; os?: string; url?: string }[]
}
const platform = process.platform
@@ -1678,22 +1673,20 @@ export namespace LSPServer {
const tfArch = arch === "arm64" ? "arm64" : "amd64"
const tfPlatform = platform === "win32" ? "windows" : platform
- const assetName = `terraform-ls_${version}_${tfPlatform}_${tfArch}.zip`
-
- const assets = release.assets ?? []
- const asset = assets.find((a) => a.name === assetName)
- if (!asset?.browser_download_url) {
- log.error(`Could not find asset ${assetName} in terraform-ls release`)
+ const builds = release.builds ?? []
+ const build = builds.find((b) => b.arch === tfArch && b.os === tfPlatform)
+ if (!build?.url) {
+ log.error(`Could not find build for ${tfPlatform}/${tfArch} terraform-ls release version ${release.version}`)
return
}
- const downloadResponse = await fetch(asset.browser_download_url)
+ const downloadResponse = await fetch(build.url)
if (!downloadResponse.ok) {
log.error("Failed to download terraform-ls")
return
}
- const tempPath = path.join(Global.Path.bin, assetName)
+ const tempPath = path.join(Global.Path.bin, "terraform-ls.zip")
if (downloadResponse.body) await Filesystem.writeStream(tempPath, downloadResponse.body)
const ok = await Archive.extractZip(tempPath, Global.Path.bin)