fix: ensure that plugin installs use --no-cache when using http proxy to prevent random hangs (see bun issue) (#12161)
This commit is contained in:
@@ -7,6 +7,7 @@ import { NamedError } from "@opencode-ai/util/error"
|
|||||||
import { readableStreamToText } from "bun"
|
import { readableStreamToText } from "bun"
|
||||||
import { Lock } from "../util/lock"
|
import { Lock } from "../util/lock"
|
||||||
import { PackageRegistry } from "./registry"
|
import { PackageRegistry } from "./registry"
|
||||||
|
import { proxied } from "@/util/proxied"
|
||||||
|
|
||||||
export namespace BunProc {
|
export namespace BunProc {
|
||||||
const log = Log.create({ service: "bun" })
|
const log = Log.create({ service: "bun" })
|
||||||
@@ -86,20 +87,13 @@ export namespace BunProc {
|
|||||||
log.info("Cached version is outdated, proceeding with install", { pkg, cachedVersion })
|
log.info("Cached version is outdated, proceeding with install", { pkg, cachedVersion })
|
||||||
}
|
}
|
||||||
|
|
||||||
const proxied = !!(
|
|
||||||
process.env.HTTP_PROXY ||
|
|
||||||
process.env.HTTPS_PROXY ||
|
|
||||||
process.env.http_proxy ||
|
|
||||||
process.env.https_proxy
|
|
||||||
)
|
|
||||||
|
|
||||||
// Build command arguments
|
// Build command arguments
|
||||||
const args = [
|
const args = [
|
||||||
"add",
|
"add",
|
||||||
"--force",
|
"--force",
|
||||||
"--exact",
|
"--exact",
|
||||||
// TODO: get rid of this case (see: https://github.com/oven-sh/bun/issues/19936)
|
// TODO: get rid of this case (see: https://github.com/oven-sh/bun/issues/19936)
|
||||||
...(proxied ? ["--no-cache"] : []),
|
...(proxied() ? ["--no-cache"] : []),
|
||||||
"--cwd",
|
"--cwd",
|
||||||
Global.Path.cache,
|
Global.Path.cache,
|
||||||
pkg + "@" + version,
|
pkg + "@" + version,
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import { Bus } from "@/bus"
|
|||||||
import { GlobalBus } from "@/bus/global"
|
import { GlobalBus } from "@/bus/global"
|
||||||
import { Event } from "../server/event"
|
import { Event } from "../server/event"
|
||||||
import { PackageRegistry } from "@/bun/registry"
|
import { PackageRegistry } from "@/bun/registry"
|
||||||
|
import { proxied } from "@/util/proxied"
|
||||||
|
|
||||||
export namespace Config {
|
export namespace Config {
|
||||||
const log = Log.create({ service: "config" })
|
const log = Log.create({ service: "config" })
|
||||||
@@ -247,13 +248,29 @@ export namespace Config {
|
|||||||
const hasGitIgnore = await Bun.file(gitignore).exists()
|
const hasGitIgnore = await Bun.file(gitignore).exists()
|
||||||
if (!hasGitIgnore) await Bun.write(gitignore, ["node_modules", "package.json", "bun.lock", ".gitignore"].join("\n"))
|
if (!hasGitIgnore) await Bun.write(gitignore, ["node_modules", "package.json", "bun.lock", ".gitignore"].join("\n"))
|
||||||
|
|
||||||
await BunProc.run(["add", `@opencode-ai/plugin@${targetVersion}`, "--exact"], {
|
await BunProc.run(
|
||||||
cwd: dir,
|
[
|
||||||
}).catch(() => {})
|
"add",
|
||||||
|
`@opencode-ai/plugin@${targetVersion}`,
|
||||||
|
"--exact",
|
||||||
|
// TODO: get rid of this case (see: https://github.com/oven-sh/bun/issues/19936)
|
||||||
|
...(proxied() ? ["--no-cache"] : []),
|
||||||
|
],
|
||||||
|
{
|
||||||
|
cwd: dir,
|
||||||
|
},
|
||||||
|
).catch(() => {})
|
||||||
|
|
||||||
// Install any additional dependencies defined in the package.json
|
// Install any additional dependencies defined in the package.json
|
||||||
// This allows local plugins and custom tools to use external packages
|
// This allows local plugins and custom tools to use external packages
|
||||||
await BunProc.run(["install"], { cwd: dir }).catch(() => {})
|
await BunProc.run(
|
||||||
|
[
|
||||||
|
"install",
|
||||||
|
// TODO: get rid of this case (see: https://github.com/oven-sh/bun/issues/19936)
|
||||||
|
...(proxied() ? ["--no-cache"] : []),
|
||||||
|
],
|
||||||
|
{ cwd: dir },
|
||||||
|
).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function needsInstall(dir: string) {
|
async function needsInstall(dir: string) {
|
||||||
|
|||||||
3
packages/opencode/src/util/proxied.ts
Normal file
3
packages/opencode/src/util/proxied.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export function proxied() {
|
||||||
|
return !!(process.env.HTTP_PROXY || process.env.HTTPS_PROXY || process.env.http_proxy || process.env.https_proxy)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user