Skip to content
This repository has been archived by the owner on Sep 2, 2024. It is now read-only.

Draft release guidelines doc #123

Merged
merged 20 commits into from
Mar 15, 2023
Merged

Conversation

shilpa-padgaonkar
Copy link
Contributor

@shilpa-padgaonkar shilpa-padgaonkar commented Jan 17, 2023

Fixes #118

@shilpa-padgaonkar shilpa-padgaonkar changed the title Shilpa padgaonkar patch 2 1 Draft versioning guidelines doc Jan 17, 2023
@eric-murray
Copy link
Contributor

In the example, is the last release really meant to be release-0.2.0 rather than release-2.0.0? It is possible that release-0.2.0 could come after release-1.0.0 of course, but it is a confusing example as it implies that patch-1.0.1 and subsequent patches lead to release-0.2.0.

@shilpa-padgaonkar
Copy link
Contributor Author

shilpa-padgaonkar commented Jan 17, 2023

@eric-murray : The order is descending. On top you have latest=main, then 1.0.0 then 0.8.0, 02.0 and so on. So 0.2.0 is shown as the oldest release here. I will however change the patch direction (which probably was the reason for confusion)

@@ -0,0 +1,20 @@
# Camara versioning guidelines

* Every release includes a **CHANGELOG.md** file. Please make sure that the content is structured in a format that is easy to read.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to agree on a common location for this file, for example code/API_definitions

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jlurien CHANGELOG.md is normally at the root of the repo alongside README.md

Copy link
Contributor

@jpengar jpengar Jan 17, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, maybe instead of having a CHANGELOG.md for each realease is more convenient actually, to have a common file in main branch included all cumulative changes of each release/version i.e. actually each new release con just change that file adding the corresponding changes. Specific changes for each release could be included in the release notes, you could even include a link to the detailed change log using the compare github feature (you can compare your release against any previous tag/release).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jpengar CHANGELOG.md will be made available in every release branch. It's location is right beside the README file. In the main branch the changelog file could either be kept empty or can be used to give an overview as you have stated above of the releases.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And we may think about using the github concept of pre-release if the release is not production ready.

# Camara versioning guidelines

* Every release includes a **CHANGELOG.md** file. Please make sure that the content is structured in a format that is easy to read.
* Release should follow the convention **\<subprj-name> \<tag-name>**
Copy link

@jlurien jlurien Jan 17, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is <subprj-name> here? Maybe providing an example would help

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

* Release should follow the convention **\<subprj-name> \<tag-name>**
* Changelog content:
* APIs/Software in alpha release needs to be clearly specified
* API changes
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could propose a template, and give some guidelines about the expected level of detail, for example:

Changelog

X.Y.Z [ALPHA] - YYYY-MM-DD

Added

  • New property new_name
  • New endpoint new_name
  • Examples

Changed

  • Property old_name renamed to new_name
  • Format for property property changed to new_format

Fixed

  • Typos fixed
  • Reference corrected

Removed

  • Deprecated field old_field
  • Deprecated endpoint

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jlurien Much appreciated! I can add this as a separate md file and refer it in this doc

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doc and link are now added

# Camara versioning guidelines

* Every release includes a **CHANGELOG.md** file. Please make sure that the content is structured in a format that is easy to read.
* Release should follow the convention **\<subprj-name> \<tag-name>** for e.g. qod v0.8.0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May be we could explicitly mention that we mean to use releases feature of github and link to the correpsonding documentation (https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. Done

@@ -0,0 +1,20 @@
# Camara versioning guidelines

* Every release includes a **CHANGELOG.md** file. Please make sure that the content is structured in a format that is easy to read.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And we may think about using the github concept of pre-release if the release is not production ready.

eric-murray
eric-murray previously approved these changes Jan 18, 2023
@hdamker
Copy link
Contributor

hdamker commented Jan 19, 2023

@jlurien

And we may think about using the github concept of pre-release if the release is not production ready.

I would reserve the "pre-release" feature of Github to release candidates (e.g. 0.9.0-rc) to mark releases as not yet final, e.g. that there could be minor corrections before the final release. My reasoning:

  • A release is on the complete subproject. It could contain APIs of different maturity grade side-by-side (e.g. an alpha and a beta version of the same API. Or a stable API and new one in alpha status). In the release notes and maybe also in the API definition file(s) the maturity has to be clearly stated.
  • A pre-release allows implementators a time to test the changes within the API definition before the release gets final (and would have then to be patched afterwards).
  • The pre-release feature is not suitable to indicate that the release is not production ready as it is only visible within Github, not in git. Therefore the "-rc" appendix to the release number as a proposal.

BTW: my "poster child" for a living versioning strategy in an open-source project is the Kubernetes Gateway API project: https://github.com/kubernetes-sigs/gateway-api/blob/main/CHANGELOG.md

@shilpa-padgaonkar
Copy link
Contributor Author

shilpa-padgaonkar commented Jan 20, 2023

After looking at some ongoing discussions in issue - camaraproject/QualityOnDemand#96 and this PR, I would like to add my 2-cents here :

  1. In realistic scenario, we may have multiple API objects contained within a single API (bundle/family) for e.g. like in K8s
  2. These API objects might be at different levels of maturity & might have different versions
  3. An API object version number in general != API-bundle's release number (it could be so by coincidence)
  4. When we make an API bundle release, then it can consist of one or more API objects with their specific versions.
  5. API bundle releases are based on GIT Tags, which ensure that no objects can be changed in the release anymore.
  6. If we have a semantic version in the API object's spec file, then this needs to be updated depending on the API change pull request (major, minor, patch).
  7. If the subprojects do not wish to update the API object's version for every API change, they could simply specify the version not as semantic format but rather in custom formats such as v0alpha2, v1beta1 etc. (my preference)
  8. Not every API-object(s) version change leads to a new release of an API bundle. API bundle releases are cherry-picked based on a consensus in the subproject.

@jlurien
Copy link

jlurien commented Jan 23, 2023

This is very relevant. As a WG/API "family" may include several API.yaml files and each one of these files may have a different version or stage of maturity, in general, a subproject relelease version does not have to always be the API version. Regarding changelogs, we may have a changelog per API just to document changes at API.yaml spec, and a changelog at root level to document changes between subproject releases. I know other people prefer to have a single changelog, but I think it is important to keep a track of changes per API spec as well. If we decide to have a single changelog per subproject, there should be a dedicated section documenting changes per API spec, in the format of the template. This is specially relevant once we reach maturity, from 1.0 specs, At some point we may need to publish the API specs somewehere out of github, and it will be convenient to have an explicit changelog per API spec, not relying on the commit history in Github.

@shilpa-padgaonkar
Copy link
Contributor Author

@jlurien I surely agree that API changes should be part of changelog and this is already specified in the doc under section "Changelog content"

@jlurien
Copy link

jlurien commented Jan 24, 2023

@jlurien I surely agree that API changes should be part of changelog and this is already specified in the doc under section "Changelog content"

Yes, we all agree that "API changes" must be part of the release changelog. But I also think that the format of this section "API changes" within the release changelog should follow the format proposed in the changelog_template, detailing the changes within the API yaml. If an API familiy has several API yaml files, there should be a subsection within "API changes" per API with the changes in that API yaml. Not sure if all of us agree on the later. For v0.x versions is not that important.

@shilpa-padgaonkar
Copy link
Contributor Author

@jlurien I have added an explicit note in the versioning doc. Feel free to update the template file with the format of your choice.

@shilpa-padgaonkar
Copy link
Contributor Author

#137

@jpengar
Copy link
Contributor

jpengar commented Jan 26, 2023

#137

It may be required to validate how this may affect or not to what was agreed in API Design Guidelines https://github.com/camaraproject/WorkingGroups/blob/main/Commonalities/documentation/API-design-guidelines.md#5-versioning.

@shilpa-padgaonkar shilpa-padgaonkar changed the title Draft versioning guidelines doc Draft release guidelines doc Feb 14, 2023
Added note that commonalities will not impose restrictions regarding tags/branches not relevant for subproject releases
@shilpa-padgaonkar
Copy link
Contributor Author

@jlurien @eric-murray @jpengar @jordonezlucena @FabrizioMoggio
Kindly request you to review the content. The current artefacts do not include any mention regarding change of api versioning from semantic to any other format. This currently just addresses the subproject release topic. This way we can try to get a consensus faster and then as a separate issue discuss the api versioning topic.
Hope this works for all.

@jpengar
Copy link
Contributor

jpengar commented Feb 20, 2023

@jlurien @eric-murray @jpengar @jordonezlucena @FabrizioMoggio
Kindly request you to review the content. The current artefacts do not include any mention regarding change of api versioning from semantic to any other format. This currently just addresses the subproject release topic. This way we can try to get a consensus faster and then as a separate issue discuss the api versioning topic.
Hope this works for all.

LGTM.

It would be great though (at least for me :bowtie:) to have a walk-through review (or similar) of the guidelines, just for everyone to know the recommended way of working for the CAMARA API/s subprojects. That way we could apply the same WoW in all subprojects. I mean WoW in terms of how to handle the branches and tags needed to create the releases according to the guidelines described here.

e.g. when to create the realease branch and tag; whether the realease branch should be developed in parallel to the main branch and only merge it into the main branch when that release is closed (so that the main branch has the latest stable release); or whether the main branch should always contain the latest status, even when a release is not closed, and then create the release branch from the main branch when the release is closed... If I've understood it properly you are proposing the second approach in this guidelines, but for example, so far I was using the first approach in HomeDevicesQoD subproject

@jordonezlucena jordonezlucena removed their request for review February 21, 2023 16:20
@shilpa-padgaonkar
Copy link
Contributor Author

@jpengar I will plan for a walkthrough in the next call as a part of the agenda

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

Successfully merging this pull request may close these issues.

Recommendations for creating releases for various sub-projects
5 participants