There are two major code change sources for this project, either may push forward a new release for Kubernetes azure-cloud-controller-manager
:
Changes in Kubernetes cloud-controller-manager, which happens in Kubernetes repository
Since this project dependes on Kubernetes cloud-controller-manager
, we’ll periodically sync changes from Kubernetes upstream repository. When upstream shipped a new release tag, we may consider publishing a new release
Changes in Azure cloud provider, which happens directly in this repository Azure cloud provider also accepts new features and bug changes. In cases when a security fix is required or when the changes accumulated to certain amount, we may also consider publishing a new release, even if there is no change from Kubernetes upstream.
This project is a Kubernetes component whereas the functionalities and APIs all go with Kubernetes upstream project, thus we will use same versioning mechanism of Kubernetes, with some subtle differences for Azure cloud provider
and non-Kubernetes changes.
The basic rule is:
Semantic Versioning
, in the form of MAJOR.MINOR.PATCH
MAJOR.MINOR
, it keeps same value as the Kubernetes upstreamPATCH
, it is calculated independently:cloud-controller-manager
or any component we depend on, then sync the change and increase the PATCH
number.PATCH
number.References:
This project uses golang’s vendoring mechanism for managing dependencies (see Dependency management for detail). When talking about ‘sync from Kubernetes upstream’, it actually means vendoring Kubernetes repository code under the vendor directory.
During each sync from upstream, it is usually fine to sync to latest commit. But if there is a new tagged commit in upstream that we haven’t vendored, we should sync to that tagged commit first, and apply a version tag correspondingly if applicable. The version tag mechanism is a bit different on master branch and releasing branch, please see below for detail.
The upstream syncing change should be made in a single Pull Request. If in some case, the upstream change causes a test break, then the pull requests should not be merged until follow up fix commits are added.
For example, if upstream change adds a new cloud provider interface, syncing the upstream change may raise a test break, and we should add the implementation (even no-op) in same pull request.
This is the main development branch for merging pull requests. When upgrading dependencies, it will sync from Kubernetes upstream’s master
branch.
Fixes to releasing branches should be merged in master branch first, and then ported to corresponding release branch.
Version tags:
X.Y.0-alpha.W
in Kubernetes upstreamFor release X.Y
, the branch will have name release-X.Y
. When upgrading dependencies, it will sync with Kubernetes upstream’s release-X.Y
branch.
Release branch would be created when upstream release branch is created and first X.Y.0-beta.0
tag is applied.
Version tags:
X.Y.0-beta.0
would be tagged at first independent commit on release branch, the corresponding separation point commit on master would be tagged X.Y+1.0-alpha.0
X.Y.0-beta.W
in Kubernetes upstreamX.Y.0
tag rolls out, we will begin prepare X.Y.0
releaseX.Y.0
tag commit, we will run full test cycle to ensure the Azure cloud provider
works well before release:X.Y.0
to latest commit of releasing branchX.Y.Z
in Kubernetes upstreamX.Y.0
We use git-describe as versioning source, please check version for detail.
In this case, for commits that does not have a certain tag, the result version would be something like ‘v0.1.0-alpha.0-25-gd7999d10’.
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.