September 7, 20262 minutes
The OCM CLI and the OCM Kubernetes controller have moved into the monolithic Go
module at ocm.software/open-component-model/bindings/go. This completes the
consolidation that we started with the
monolithic bindings.
This change does not affect released artifacts. If you consume the CLI binaries, container images, or the Helm chart, nothing changes for you.
In this post we explain what changed, why, and what it means for consumers and contributors.
The CLI and the controller were top-level Go modules with their own go.mod
files, release cycles, and CI pipelines. A new feature often needed a change in
a binding library plus a follow-up change in the CLI or controller. Each such
change required two releases: first the binding, then the consumer.
We already removed significant friction within the bindings development, making similar improvements to the CLI and controller is the logical next step.
The directories moved into the module:
cli/ → bindings/go/cli/kubernetes/controller/ → bindings/go/kubernetes/controller/Starting with v0.16.0 there is a single release with a single canonical tag
(vX.Y.Z). The module tag bindings/go/vX.Y.Z is created alongside it so Go
tooling resolves the module as before. Bindings, CLI, and controller will now
always be on the same version.
Nothing changes for consumers of the bindings (other than a new minor version).
For consumers of CLI or controller as libraries, the module and import paths
have to be adjusted. The go.mod requirement points at the unified module:
-require ocm.software/open-component-model/cli v0.15.0
+require ocm.software/open-component-model/bindings/go v0.16.0
The import paths in Go sources move below the unified module:
-import "ocm.software/open-component-model/cli/..."
+import "ocm.software/open-component-model/bindings/go/cli/..."
Since the CLI and controller are now part of the bindings, they share the
bindings installation methods: go get ocm.software/open-component-model/bindings/go@v0.16.0
ghcr.io/open-component-model/cli, the controller images, and the Helm
chart under ghcr.io/open-component-model/kubernetes/controller/chart).
OCM component names and CLI release binaries on GitHub Releases are
unchanged.depguard rules enforce the same boundaries that
the separate modules used to enforce structurally.go test ./... from bindings/go/
covers libraries, CLI, and controller together.Previously released versions remain available, but new features and fixes will only be published under the unified release.
The release strategy behind this change is documented in ADR 25: Bindings CI and Release Strategy.