528a09ca90
Split release.sh into release-client.sh and release-engine.sh for independent release cadences. Client checks engine version on first API call and hard-fails if engine is below MinEngineVersion. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.4 KiB
2.4 KiB
Why
Client and engine are currently locked to the same version number and released together via a single script. This means a client-only bug fix (e.g. output formatting) forces a full engine Docker image rebuild and push, and vice versa. Decoupling versions allows each component to be released independently on its own cadence, while a compatibility check ensures users don't run a client that requires engine features not yet deployed.
What Changes
- Separate version files —
client/VERSIONandengine/VERSIONmay diverge (they already exist as separate files, but are currently always set to the same value) - Split release script — Replace single
release.shwithrelease-client.sh(builds Go binaries, tagsclient-vX.Y.Z, creates release) andrelease-engine.sh(builds Docker images, tagsengine-vX.Y.Z, creates release, pushes images) - Client compatibility check — Client embeds a
MinEngineVersionconstant (set at build time or in code). On every command that contacts the engine, the client callsGET /api/v1/status, compares the engine's reported version againstMinEngineVersion, and hard-fails with an actionable error if the engine is too old. No skip flag, no warning — just a clear error with upgrade instructions. - Tag naming convention —
client-vX.Y.Zandengine-vX.Y.Zreplace the currentvX.Y.Ztag format. BREAKING — existing tag format changes.
Capabilities
New Capabilities
(none)
Modified Capabilities
go-client: Add engine version compatibility check requirement (hard fail if engine version < MinEngineVersion)engine-api: Status endpoint already returnsversion— no change needed, but delta spec documents the contract that the version field is required for compatibility checkingdocker-deployment: Compose files pin engine image tag; release script changes affect image tagging
Impact
release.sh— replaced byrelease-client.sh+release-engine.shclient/cmd/root.go— newMinEngineVersionconstantclient/internal/api/client.go— version check on first API callclient/Makefile— may injectMinEngineVersionvia ldflags alongsideVersion- Git tags — new naming convention (
client-v*,engine-v*) - Gitea releases — two separate releases per independent release cycle
engine/compose.nvidia.yaml,engine/compose.rocm.yaml— add pinned image tag