Repository navigation
Release v0.1.7
Vale v0.1.7 upgrades the complete workspace to Go 1.27.1 and refreshes all direct dependencies. It also introduces first-class in-process handlers and safe defaults for long-lived server-sent event streams.
All modules in this repository declare Go 1.27.1. Local development is
workspace-first: sibling modules are resolved by go.work, rather than by
adding repository-local require or replace entries to their go.mod files.
go version
go work sync
go test ./...Consumers can update the root library with:
go get github.com/arcgolabs/vale@v0.1.7
go mod tidyOptional modules use their own path-prefixed tags, matching the module path.
Use NewHandlerEndpoint when a route is backed by an http.Handler in the
current process:
endpoint, err := vale.NewHandlerEndpoint(
"static-capabilities",
1,
http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = io.WriteString(w, `{"status":"ready"}`)
}),
)
if err != nil {
return err
}
service := vale.NewService("capabilities", "round_robin", endpoint)
route := vale.NewRoute("capabilities", "web", service).
WithPathPrefix("/capabilities")A handler-backed endpoint:
- does not require a synthetic upstream URL;
- is excluded from HTTP upstream health probes;
- remains selectable independently of proxied upstream health; and
- has a stable name for admin views, metrics, access logs, catalog entries, and runtime diffs.
This means a failing model upstream can return 503 while an independent
static capability route continues to return its deterministic in-process
response immediately.
Use NewEndpoint for an actual proxied HTTP upstream and provide its real URL.
Responses with Content-Type: text/event-stream are stream-safe by default:
- the active write deadline is cleared after the response is identified as an event stream;
- gzip and
min_bytescompression buffering are bypassed; -
http.Flusherremains available through the middleware stack; and - client disconnect cancellation propagates to the upstream request context.
For code-first configuration, disable the write timeout on a dedicated SSE route:
events := vale.NewRoute("events", "web", service).
WithPathPrefix("/events").
WithWriteTimeout(0)For HCL configuration:
route "events" {
entrypoint = "web"
service = "model"
path_prefix = "/events"
write_timeout = "0s"
}The route timeout has three states:
- omitted: inherit the global security write timeout;
-
0: disable the write timeout for that route; and - positive duration: override the global timeout for that route.
Invalid or negative durations are rejected during configuration validation.
valed does not require CGO. A native Windows binary can be built without
MSYS2 or a C compiler:
$env:CGO_ENABLED = "0"
go build -C cmd -trimpath -o valed.exe .Use a temporary output directory outside the source tree for release artifacts when desired.
Release images are built from the tagged source tree on the release operator's machine and pushed with Docker Buildx. Authenticate to GHCR first, then run:
docker buildx build --platform linux/amd64,linux/arm64 --push \
--build-arg VERSION=v0.1.7 \
--build-arg COMMIT="$(git rev-parse --short=12 'v0.1.7^{}')" \
--build-arg DATE="$(git show -s --format=%cI 'v0.1.7^{}')" \
-t ghcr.io/arcgolabs/vale:v0.1.7 \
-t ghcr.io/arcgolabs/vale:0.1.7 \
-t ghcr.io/arcgolabs/vale:latest .The image build is CGO-free and uses Go 1.27.1. Verify the published manifests:
docker buildx imagetools inspect ghcr.io/arcgolabs/vale:v0.1.7- Public extension registries now provide generic, type-safe APIs.
- Operational gateway and TCP proxy logs use injected loggers.
- CI actions and golangci-lint were updated for Go 1.27.1.
- Direct dependencies were refreshed while preserving upstream compatibility constraints for transitive dependencies.
See the repository CHANGELOG for the concise release history.