feat: report component versions across server, worker, SDK, and CLI#78
Merged
Conversation
Add version reporting across the stack: a public GET /api/v1/system/version endpoint, worker and node versions advertised through the existing registration meta into the registries and surfaced on the workers/nodes API, an SDK system.version() call plus version fields on the Worker and Node models, and a flowmesh --version flag. Node version is optional so manual SDK-driven registration without a version still succeeds; the node registry drops null fields before writing the Redis hash. Signed-off-by: Noppanat Wadlom <noppanat.wad@gmail.com>
The caller passes the node's version when known; it is sent as null otherwise, since the SDK client (the registrant) cannot infer the registered node's version. The server stores it via the optional NodeInfo.version, which the node registry already tolerates. Signed-off-by: Noppanat Wadlom <noppanat.wad@gmail.com>
Workers self-registering over gRPC came back with an empty node_alias: the supervisor servicer only held node_id and never wrote node_alias to the worker hash. Thread the node's alias into the servicer so the gRPC path populates it, matching the REST registration path. Signed-off-by: Noppanat Wadlom <noppanat.wad@gmail.com>
timzsu
requested changes
Jun 19, 2026
When the caller does not pass a version, the payload no longer carries a null version key; the server's optional NodeInfo.version and the node registry's null-drop already yield the same stored result. Signed-off-by: Noppanat Wadlom <noppanat.wad@gmail.com>
Add a version field to NodeWorkerInfo and populate it from the worker registry record so that flowmesh node worker list reports each registered worker's version alongside the workers/nodes API. Signed-off-by: Noppanat Wadlom <noppanat.wad@gmail.com>
Resolve the CLI version from a static fallback kept in lockstep by bump_version.py instead of reporting "unknown" when the package metadata is unreadable, and let info fall back to an unknown server version against servers that predate the /system/version endpoint. Signed-off-by: Noppanat Wadlom <noppanat.wad@gmail.com>
timzsu
requested changes
Jun 20, 2026
timzsu
left a comment
Collaborator
There was a problem hiding this comment.
Should we add the CLI version check to scripts/ci/check_release_version.py?
The release check now verifies cli/_version.py's _STATIC_VERSION along with the SDK and shared modules, matching bump_version.py so the CLI static version cannot drift unnoticed at release. Signed-off-by: Noppanat Wadlom <noppanat.wad@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
Once releases are versioned, an operator needs to see which version each running component is on — especially in a cluster where the root server and worker nodes may be rolled to different versions at different times. Today, the version is baked into the build (
FLOWMESH_RELEASE_VERSION, the SDKUser-Agent) but isn't reported anywhere a client can read it. This surfaces the version across all four components, so skew is observable.Changes
GET /api/v1/system/versionreturning{"version": "..."}. Worker and node versions are advertised through the existing registration meta landed in the worker/node registries and are surfaced on the workers/nodes API, includingflowmesh node worker list.FLOWMESH_RELEASE_VERSIONin its registration meta (riding the same path asWorkerCapabilities, no proto change); the node reports it viaNodeInfo.version.VersionResponsemodel andclient.system.version()(sync + async), plus aversionfield on the SDKWorkerandNodemodels. Version is optional andNonewhen unreported.flowmesh --version/-Vprints the CLI version;flowmesh infonow reports the client version alongside the server version and health, and falls back to an unknown server version against a server that predates the/system/versionendpoint./system/versionendpoint, the SDKVersionResponse, the CLI flag, and thenodes.register()version passthrough;docs/API.mdlists the new endpoint.Design
FLOWMESH_RELEASE_VERSION(server/worker) and the SDK and CLI_version.pymodules remain the single source of truth — all kept in lockstep byscripts/dev/bump_version.py— so nothing new needs syncing at release time. Worker/node versions ride on the existing registration meta into Redis. The node registry drops null-valued fields before the Redishset, where aNonewould otherwise be rejected. Skew handling is report-only by design — versions are exposed everywhere.Test Plan
Manually validated end-to-end on freshly built images, single-node and two-node:
GET /api/v1/system/versionreturns the release version without auth;flowmesh worker list/flowmesh node listshow the worker's and node'sversion;flowmesh inforeports matching client and server versions; bareflowmeshprints the command help.node listshows each node's distinct version, and a CPU worker spawned under each node reports its node's version — confirming the API surfaces server↔node↔worker skew.Test Result
Single-node:
/system/version,worker list, andnode listall reported0.1.3, andflowmesh infoshowed matching client/server versions. Two-node skew: the root reported0.1.3while the worker node and the worker running under it reported a distinct build version, both surfaced throughnode list/worker listagainst the root.Pre-submission Checklist
pre-commiton the changed files and fixed any issues.[BREAKING]and described migration steps above.