Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Important Proposal] Versioning of OAM spec and separate release from apiVersion #369

Closed
resouer opened this issue Jun 19, 2020 · 3 comments · Fixed by #382
Closed

[Important Proposal] Versioning of OAM spec and separate release from apiVersion #369

resouer opened this issue Jun 19, 2020 · 3 comments · Fixed by #382
Assignees

Comments

@resouer
Copy link
Member

resouer commented Jun 19, 2020

This is a follow up of previous community meeting.

Today, we coupled release of OAM spec with apiVersion of the object, for example, in v1.0.0-alpha.2 release, all the objects will have apiVersion: v1alpha2, and in v1.0.0-alpha.1 release, all the objects had apiVersion: v1alpha1.

This is actually very challenging for OAM to be adopted in production env because release and apiVersion are two different things.

apiVersion in Kubernetes Resource Model which OAM adopted, is used to track version and change to the object fields. Specifically, a break change will require the object to upgrade to a new apiVersion. Also, the alpha/beta means different maturity levels of the API. Beta means stable, feature enable by default and backward compatibility must be guaranteed for 3 releases if breaking change introduced (i.e. corresponding code must work for multiple versions of the object).

So the issue is, we are essentially indicating that every release of OAM spec is a breaking change now (and in practice users are suffering from apiVersion must be upgraded in every release).
With OAM spec becoming stable and we now have OAM kubernetes runtime for user to install, this could be fixed.

So ideally as a user, if there's no breaking change in the objects fields, I should be able to upgrade my whole OAM platform to next release of OAM spec by upgrading my oam-k8s-runtime lib/controller smoothly.

Proposal

  • OAM spec version should be different from apiVersion. I'd suggest we adopt Semantic Versioning 2.0.0 i.e MAJOR.MINOR.PATCH.
    • change needed: v1.0.0-alpha.1 -> v0.1.0, v1.0.0-alpha.2 -> v0.2.0, and next release should be v0.3.0 or even v1.0.0.
    • the v1.0.0 of OAM spec will be treated as stable, i.e. all objects apiVersion will be promoted to beta. Before that, the apiVersion will follow rules defined by k8s api convention
    • spec README will have a full list of releases (release branches) and working draft branch (master branch)
      • we can make the latest release branch as the default branch of course.
  • oam-k8s-runtime will have its own release (every month), and its readme will clearly clarify which release of OAM spec it compliant with. For example:
OAM K8s Runtime Release OAM Spec Release
v0.0.1 v0.2.0
v0.0.2 v0.2.0
v0.1.0 v0.3.0
@wonderflow
Copy link
Member

LGTM, please send a PR for this clarification for versioning mechanism of SPEC

@hongchaodeng
Copy link
Member

Agree. This is a very confusing point in developing OAM platforms.
We should write this down into a doc and submit a PR for it.

@resouer resouer self-assigned this Jun 20, 2020
@resouer
Copy link
Member Author

resouer commented Jul 14, 2020

Review passed during community meeting and offline discussion.

Will update the doc and release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants