fix(CLI-39): bump client versions off published 0.1.2; guard the publish pipeline
Converges all five clients on one version after four had drifted onto the already-published 0.1.2/0.1.1 while their APIs kept changing underneath it: - Rust Cargo.toml [package] + [workspace.package] -> 0.2.0 (CLIENT_VERSION already derives from CARGO_PKG_VERSION, no separate edit). - Python pyproject.toml + version.py -> 0.2.0; new test asserts __version__ matches pyproject.toml (closes the CLI-26 residual drift mode). - Go mxgateway/version.go ClientVersion -> 0.2.0. - .NET ZB.MOM.WW.MxGateway.Client.csproj <Version> -> 0.2.0. - Java -> 0.2.1, not 0.2.0: the live Gitea Maven feed already had 0.2.0 published (2026-06-26), before the CLI-37/38/40/41 conformance fixes changed the client's observable behavior, so reusing 0.2.0 would label two different APIs identically. Recorded as an exception in docs/ClientPackaging.md's new Versioning section. Publish-pipeline guards: - scripts/tag-go-module.ps1 implements the CLI-21 guard: after semver validation it refuses to tag unless clients/go/mxgateway/version.go's ClientVersion already matches the requested tag version. - scripts/pack-clients.ps1 gains a Gitea package-registry collision guard wired into every per-language -Publish step; it aborts if the target name+version already exists rather than force-overwriting. Verified live against the real Gitea registry (credentials already present in this environment) — correctly refuses on every known-published artifact and passes on every unpublished target. Docs updated in the same commit: docs/ClientPackaging.md (new Versioning section), and the five client READMEs' stale 0.1.1/0.1.2 example versions. No .proto changes. No publish performed.
This commit is contained in:
@@ -32,6 +32,51 @@ $env:MXGATEWAY_TEST_ITEM = 'TestObject.TestInt'
|
||||
Use plaintext only for a local gateway. Use TLS when the gateway crosses a
|
||||
machine boundary or uses a production certificate.
|
||||
|
||||
## Versioning
|
||||
|
||||
Every client's version lives in its own manifest: `clients/rust/Cargo.toml`
|
||||
(`[package]` and `[workspace.package]`, both must match — `crates/mxgw-cli`
|
||||
inherits via `version.workspace = true`), `clients/python/pyproject.toml`
|
||||
(`[project].version`) and `clients/python/src/zb_mom_ww_mxgateway/version.py`
|
||||
(`__version__`, must match `pyproject.toml`), `clients/go/mxgateway/version.go`
|
||||
(`ClientVersion`), `clients/dotnet/ZB.MOM.WW.MxGateway.Client/ZB.MOM.WW.MxGateway.Client.csproj`
|
||||
(`<Version>`), and `clients/java/build.gradle` (`subprojects { version = ... }`,
|
||||
mirrored by the hand-maintained `MxGatewayClientVersion.CLIENT_VERSION`
|
||||
constant — the two have drifted before and there is no build-time link
|
||||
between them, so bump both together).
|
||||
|
||||
**Bump the version before every publish, never after.** A Gitea package feed
|
||||
rejects re-uploading an existing name+version, and `scripts/pack-clients.ps1`
|
||||
enforces this before it ever attempts a push: each per-language `-Publish`
|
||||
step queries the Gitea package API
|
||||
(`GET /api/v1/packages/dohertj2/{type}/{name}/{version}`) for the version
|
||||
about to be published and aborts with a clear error if it already exists —
|
||||
the script never force-overwrites a published artifact. `scripts/tag-go-module.ps1`
|
||||
carries the equivalent guard for the Go module: it refuses to create a
|
||||
`clients/go/vX.Y.Z` tag unless `clients/go/mxgateway/version.go`'s
|
||||
`ClientVersion` already equals `X.Y.Z` (CLI-21/CLI-39), so a forgotten
|
||||
version bump fails the tag instead of shipping a mismatched module.
|
||||
|
||||
As of 2026-08-07 (CLI-39) all five clients moved to **0.2.0**, converging on
|
||||
one number after four of the five had drifted onto the *already-published*
|
||||
0.1.2/0.1.1 while their public APIs kept changing underneath it (see
|
||||
`archreview/2026-07-12/remediation/50-clients.md` CLI-39). Verified against
|
||||
the live Gitea package API at that time: `nuget` had `ZB.MOM.WW.MxGateway.Client`
|
||||
and `.Contracts` published through 0.1.2; `pypi` (`zb-mom-ww-mxaccess-gateway-client`)
|
||||
and `cargo` (`zb-mom-ww-mxgateway-client`) had only reached 0.1.1 despite their
|
||||
source pinning 0.1.2; **`maven`
|
||||
(`com.zb.mom.ww.mxgateway:zb-mom-ww-mxgateway-client`) had already published
|
||||
0.2.0 on 2026-06-26** — before the CLI-37/38/40/41 conformance fixes changed
|
||||
the client's observable behavior (`category`-based status validation,
|
||||
`hresult < 0`, exact-secret redaction, typed malformed-reply errors). Reusing
|
||||
0.2.0 for the conformant Java build would have labeled two different APIs
|
||||
with the same coordinate, so **Java is the one exception: it shipped as
|
||||
0.2.1**, not 0.2.0. Operators publishing a future release must re-check the
|
||||
target version against the live registry before assuming any of these
|
||||
numbers are still unclaimed — the guards above do this automatically at
|
||||
publish time, but a version bump in the source is still a manual step per
|
||||
client.
|
||||
|
||||
## .NET
|
||||
|
||||
The .NET client uses .NET 10 and references
|
||||
|
||||
Reference in New Issue
Block a user