This document describes the versioning policy for this repository. This policy is designed so the following goals can be achieved.
Users are provided a codebase of value that is stable and secure.
Versioning of this project will be idiomatic of a Go project using Go modules.
Versions will comply with semver 2.0 with the following exceptions.
Warning: methods may be added to this interface in minor releases.
If a module is version v2
or higher, the major version of the module
must be included as a /vN
at the end of the module paths used in
go.mod
files (e.g., module go.opentelemetry.io/otel/v2
, require
go.opentelemetry.io/otel/v2 v2.0.1
) and in the package import path
(e.g., import "go.opentelemetry.io/otel/v2/trace"
). This includes the
paths used in go get
commands (e.g., go get
go.opentelemetry.io/otel/v2@v2.0.1
. Note there is both a /v2
and a
@v2.0.1
in that example. One way to think about it is that the module
name now includes the /v2
, so include /v2
whenever you are using the
module name).
If a module is version v0
or v1
, do not include the major version in
either the module path or the import path.
Modules will be used to encapsulate signals and components.
Experimental modules still under active development will be versioned at
v0
to imply the stability guarantee defined by
semver.
Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.
v0
.
v0.0.0
and will
increment their minor version when backwards incompatible changes are
released and increment their patch version when backwards compatible
changes are released.Versioning of the associated contrib repository of this project will be idiomatic of a Go project using Go modules.
v2
or higher, the
major version of the module must be included as a /vN
at the end of the
module paths used in go.mod
files (e.g., module
go.opentelemetry.io/contrib/instrumentation/host/v2
, require
go.opentelemetry.io/contrib/instrumentation/host/v2 v2.0.1
) and in the
package import path (e.g., import
"go.opentelemetry.io/contrib/instrumentation/host/v2"
). This includes
the paths used in go get
commands (e.g., go get
go.opentelemetry.io/contrib/instrumentation/host/v2@v2.0.1
. Note there
is both a /v2
and a @v2.0.1
in that example. One way to think about
it is that the module name now includes the /v2
, so include /v2
whenever you are using the module name).v0
or v1
, do not include the major version
in either the module path or the import path.v0
to imply the stability guarantee defined by
semver.Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.
v0
.v0.0.0
and will
increment their minor version when backwards incompatible changes are
released and increment their patch version when backwards compatible
changes are released.GitHub releases will be made for all releases.
Go modules will be made available at Go package mirrors.
To better understand the implementation of the above policy the following example is provided. This project is simplified to include only the following modules and their versions:
otel
: v0.14.0
otel/trace
: v0.14.0
otel/metric
: v0.14.0
otel/baggage
: v0.14.0
otel/sdk/trace
: v0.14.0
otel/sdk/metric
: v0.14.0
These modules have been developed to a point where the otel/trace
,
otel/baggage
, and otel/sdk/trace
modules have reached a point that they
should be considered for a stable release. The otel/metric
and
otel/sdk/metric
are still under active development and the otel
module
depends on both otel/trace
and otel/metric
.
The otel
package is refactored to remove its dependencies on otel/metric
so
it can be released as stable as well. With that done the following release
candidates are made:
otel
: v1.0.0-rc.1
otel/trace
: v1.0.0-rc.1
otel/baggage
: v1.0.0-rc.1
otel/sdk/trace
: v1.0.0-rc.1
The otel/metric
and otel/sdk/metric
modules remain at v0.14.0
.
A few minor issues are discovered in the otel/trace
package. These issues are
resolved with some minor, but backwards incompatible, changes and are released
as a second release candidate:
otel
: v1.0.0-rc.2
otel/trace
: v1.0.0-rc.2
otel/baggage
: v1.0.0-rc.2
otel/sdk/trace
: v1.0.0-rc.2
Notice that all module version numbers are incremented to adhere to our versioning policy.
After these release candidates have been evaluated to satisfaction, they are
released as version v1.0.0
.
otel
: v1.0.0
otel/trace
: v1.0.0
otel/baggage
: v1.0.0
otel/sdk/trace
: v1.0.0
Since both the go
utility and the Go module system support the semantic
versioning definition of
precedence, this release
will correctly be interpreted as the successor to the previous release
candidates.
Active development of this project continues. The otel/metric
module now has
backwards incompatible changes to its API that need to be released and the
otel/baggage
module has a minor bug fix that needs to be released. The
following release is made:
otel
: v1.0.1
otel/trace
: v1.0.1
otel/metric
: v0.15.0
otel/baggage
: v1.0.1
otel/sdk/trace
: v1.0.1
otel/sdk/metric
: v0.15.0
Notice that, again, all stable module versions are incremented in unison and
the otel/sdk/metric
package, which depends on the otel/metric
package, also
bumped its version. This bump of the otel/sdk/metric
package makes sense
given their coupling, though it is not explicitly required by our versioning
policy.
As we progress, the otel/metric
and otel/sdk/metric
packages have reached a
point where they should be evaluated for stability. The otel
module is
reintegrated with the otel/metric
package and the following release is made:
otel
: v1.1.0-rc.1
otel/trace
: v1.1.0-rc.1
otel/metric
: v1.1.0-rc.1
otel/baggage
: v1.1.0-rc.1
otel/sdk/trace
: v1.1.0-rc.1
otel/sdk/metric
: v1.1.0-rc.1
All the modules are evaluated and determined to a viable stable release. They
are then released as version v1.1.0
(the minor version is incremented to
indicate the addition of new signal).
otel
: v1.1.0
otel/trace
: v1.1.0
otel/metric
: v1.1.0
otel/baggage
: v1.1.0
otel/sdk/trace
: v1.1.0
otel/sdk/metric
: v1.1.0