fix: allow experimental flags to override umbrella (#29273)
This commit is contained in:
parent
d595e472b3
commit
633b5d6208
@ -8,6 +8,10 @@ function truthy(key: string) {
|
|||||||
const OPENCODE_EXPERIMENTAL = truthy("OPENCODE_EXPERIMENTAL")
|
const OPENCODE_EXPERIMENTAL = truthy("OPENCODE_EXPERIMENTAL")
|
||||||
const copy = process.env["OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"]
|
const copy = process.env["OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT"]
|
||||||
|
|
||||||
|
function enabledByExperimental(key: string) {
|
||||||
|
return process.env[key] === undefined ? OPENCODE_EXPERIMENTAL : truthy(key)
|
||||||
|
}
|
||||||
|
|
||||||
export const Flag = {
|
export const Flag = {
|
||||||
OTEL_EXPORTER_OTLP_ENDPOINT: process.env["OTEL_EXPORTER_OTLP_ENDPOINT"],
|
OTEL_EXPORTER_OTLP_ENDPOINT: process.env["OTEL_EXPORTER_OTLP_ENDPOINT"],
|
||||||
OTEL_EXPORTER_OTLP_HEADERS: process.env["OTEL_EXPORTER_OTLP_HEADERS"],
|
OTEL_EXPORTER_OTLP_HEADERS: process.env["OTEL_EXPORTER_OTLP_HEADERS"],
|
||||||
@ -42,7 +46,7 @@ export const Flag = {
|
|||||||
OPENCODE_DB: process.env["OPENCODE_DB"],
|
OPENCODE_DB: process.env["OPENCODE_DB"],
|
||||||
|
|
||||||
OPENCODE_WORKSPACE_ID: process.env["OPENCODE_WORKSPACE_ID"],
|
OPENCODE_WORKSPACE_ID: process.env["OPENCODE_WORKSPACE_ID"],
|
||||||
OPENCODE_EXPERIMENTAL_WORKSPACES: OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_WORKSPACES"),
|
OPENCODE_EXPERIMENTAL_WORKSPACES: enabledByExperimental("OPENCODE_EXPERIMENTAL_WORKSPACES"),
|
||||||
|
|
||||||
// Evaluated at access time (not module load) because tests, the CLI, and
|
// Evaluated at access time (not module load) because tests, the CLI, and
|
||||||
// external tooling set these env vars at runtime.
|
// external tooling set these env vars at runtime.
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { Config, ConfigProvider, Context, Effect, Layer } from "effect"
|
import { Config, ConfigProvider, Context, Effect, Layer, Option } from "effect"
|
||||||
import { ConfigService } from "@/effect/config-service"
|
import { ConfigService } from "@/effect/config-service"
|
||||||
|
|
||||||
const bool = (name: string) => Config.boolean(name).pipe(Config.withDefault(false))
|
const bool = (name: string) => Config.boolean(name).pipe(Config.withDefault(false))
|
||||||
@ -9,7 +9,9 @@ const positiveInteger = (name: string) =>
|
|||||||
)
|
)
|
||||||
const experimental = bool("OPENCODE_EXPERIMENTAL")
|
const experimental = bool("OPENCODE_EXPERIMENTAL")
|
||||||
const enabledByExperimental = (name: string) =>
|
const enabledByExperimental = (name: string) =>
|
||||||
Config.all({ experimental, enabled: bool(name) }).pipe(Config.map((flags) => flags.experimental || flags.enabled))
|
Config.all({ experimental, enabled: Config.boolean(name).pipe(Config.option) }).pipe(
|
||||||
|
Config.map((flags) => Option.getOrElse(flags.enabled, () => flags.experimental)),
|
||||||
|
)
|
||||||
|
|
||||||
export class Service extends ConfigService.Service<Service>()("@opencode/RuntimeFlags", {
|
export class Service extends ConfigService.Service<Service>()("@opencode/RuntimeFlags", {
|
||||||
autoShare: bool("OPENCODE_AUTO_SHARE"),
|
autoShare: bool("OPENCODE_AUTO_SHARE"),
|
||||||
|
|||||||
@ -213,6 +213,21 @@ describe("RuntimeFlags", () => {
|
|||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
it.effect("specific experimental flags override OPENCODE_EXPERIMENTAL", () =>
|
||||||
|
Effect.gen(function* () {
|
||||||
|
const flags = yield* readFlags.pipe(
|
||||||
|
Effect.provide(
|
||||||
|
fromConfig({
|
||||||
|
OPENCODE_EXPERIMENTAL: "true",
|
||||||
|
OPENCODE_EXPERIMENTAL_ICON_DISCOVERY: "false",
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(flags.experimentalIconDiscovery).toBe(false)
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
|
||||||
it.effect("experimentalOxfmt defaults to false", () =>
|
it.effect("experimentalOxfmt defaults to false", () =>
|
||||||
Effect.gen(function* () {
|
Effect.gen(function* () {
|
||||||
const flags = yield* readFlags.pipe(Effect.provide(fromConfig({})))
|
const flags = yield* readFlags.pipe(Effect.provide(fromConfig({})))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user