55This document describes the governance process under which the CloudEvents
66project will manage this repository.
77
8+ ## Table of Contents & References
9+
10+ - [ Meetings] ( #meetings )
11+ - [ Membership] ( #membership )
12+ - [ Admins] ( #admins )
13+ - [ PRs] ( #prs )
14+ - [ Voting] ( #voting )
15+ - [ Release Process and Versioning] ( #release-process-and-versioning )
16+ - [ Additional Information] ( #additional-information )
17+
818For easy reference, additional documentation related to how this project,
919and its subprojects, operate are listed below:
10- - [ Contributing] ( CONTRIBUTING.md )
11- - [ List of contributors to the project] ( contributors.md )
12- - [ Project Releases] ( RELEASES.md )
13- - [ Project Roadmap] ( ROADMAP.md )
14- - [ SDK Governance] ( SDK-GOVERNANCE.md )
15- - [ SDK Maintainer Guidlines] ( SDK-maintainer-guidelines.md )
16- - [ SDK PR Guidlines] ( SDK-PR-guidelines.md )
20+ - [ Contributing] ( CONTRIBUTING.md )
21+ - [ List of contributors to the project] ( contributors.md )
22+ - [ Project Releases] ( RELEASES.md )
23+ - [ Project Roadmap] ( ROADMAP.md )
24+ - [ SDK Governance] ( SDK-GOVERNANCE.md )
25+ - [ SDK Maintainer Guidlines] ( SDK-maintainer-guidelines.md )
26+ - [ SDK PR Guidlines] ( SDK-PR-guidelines.md )
1727
1828## Meetings
1929
@@ -45,7 +55,7 @@ be followed:
4555There are three categories of project membership:
4656
47571 . ** Member.** This is anyone who participates in the group's activities in any
48- of our communication channels (email, github issues/PRs, meetings, etc.). No
58+ of our communication channels (email, GitHub issues/PRs, meetings, etc.). No
4959 formal registration process is needed.
5060
51612 . ** Voting Member.** See the [ Voting] ( #voting ) section below for more
@@ -56,7 +66,7 @@ There are three categories of project membership:
5666
57673 . ** Admin.** Admins are Members of the group but have the ability to perform
5868 administrative actions on behalf of the group. For example, manage the
59- website, github repos and moderate the meetings. Their actions should be done
69+ website, GitHub repos and moderate the meetings. Their actions should be done
6070 with the knowledge and consent of the group. They also have the ability to
6171 merge/close PRs, but only per the group's approval. See the
6272 [ OWNERS] ( ../OWNERS ) file for the current list of Admins.
@@ -137,20 +147,19 @@ If a vote is taken, the follow rules will be followed:
137147
138148## Release Process and Versioning
139149
150+ ### Versioning
151+
140152The specifications produced will adhere to the following:
141153
142- - The versioning scheme used will follow [ semver] ( https://semver.org/ )
143- - All normative specifications, and the Primer, will be grouped together into a
144- single logical unit and released at the same time, at the same version number.
145- This is true regardless of whether each individual document actually changed
146- during the release cycle.
147- - When a new release of a specification is ready, it will be given a version
148- number matching the appropriate semver version string but with a suffix of
149- ` -rc# ` (release candidate). This will indicate that the authors believe it
150- is ready for final release but it needs to go through a testing period to
151- allow for broader testing before it promoted to its final version number.
152- This will be true for updates to existing specifications and for new
153- specifications.
154+ - The versioning scheme will follow [ semver] ( https://semver.org/ ) for the
155+ version number part of the version string.
156+
157+ - Specifications will be grouped into logical units, with all documents in a
158+ group released at the same time, with the same version number. This is true
159+ regardless of whether each individual document actually changed during the
160+ release cycle. The determination of the number of groups, and which document
161+ belongs in a group, can change over time.
162+
154163- Since changing the CloudEvents ` specversion ` string could have a significant
155164 impact on implementations, all non-breaking changes will be made as
156165 "patch" version updates - this allows for the value "on the wire" to remain
@@ -159,53 +168,95 @@ The specifications produced will adhere to the following:
159168 that the "minor" version number will always be zero and the ` specversion `
160169 string will always be of the form ` X.0 ` .
161170
162- Note that these rules do not apply to the
163- [ documented extensions] ( ../cloudevents/extensions/README.md ) .
171+ - Each release will have both a tag and a branch. The tag will be kept
172+ up-to-date with the tip of the branch. The purpose of having a branch is to
173+ support very minor fixes (typos, clarifications) which amend a release in
174+ place. The purpose of having a tag is to support GitHub releases, which can
175+ act as a notification channel for interested users.
164176
165- All versions are tagged from the ` main ` branch, but the tag only applies to
166- the "subject" of the release - the directory containing the information
167- covered by that release (e.g. ` subscriptions ` or ` cloudevents ` ). The
168- [ CloudEvents web site] ( https://cloudevents.io/ ) takes appropriate content from
169- each tagged version. (If the directory containing the information covered
170- by the release is not in a top-level directory, the subject should be the full path,
171- e.g. ` top-dir/sub-dir ` .)
177+ - Naming will adhere to the following pattern:
178+ - Release Name: ` SUBJECT@vX.Y.Z `
179+ - Release Candidate Tag Name: ` SUBJECT@vX.Y.Z-rc# `
180+ - Release Branch Name: ` SUBJECT@vX.Y.Z-branch `
181+ - Release Tag Name: ` SUBJECT@vX.Y.Z `
172182
173- > Note: should the need arise, additional branches may be created. For example,
174- > it is likely that a ` core-v2.0 ` branch will be created to collect changes for
175- > the core specification version 2.0 significantly before those changes are
176- > merged into the main branch, to allow for ongoing work on the main branch.
177- > Such branches should be deleted once their content is eventually merged.
183+ Note that these rules do not apply to unversioned documents, such as the
184+ [ documented extensions] ( ../cloudevents/extensions/README.md ) .
178185
179- To create a new release:
186+ ### Creating A New Release
180187
181188- Periodically the group will examine the list of extensions to determine
182189 if any action should be taken (e.g. removed due to it being stale). The
183190 creation of a new release will be the reminder to do this check. If any
184191 changes are needed then PRs will be created and reviewed by the group.
185- - Create a PR that modifies the [ README] ( README.md ) , and all specifications (ie.
186- \* .md files) that include a version string, to the new release version string.
187- Make sure to remove ` -wip ` from all of the version strings.
188- - Merge the PR.
189- - Create a [ new release] ( https://github.com/cloudevents/spec/releases/new ) :
190- - Choose a "Tag version" of the form: ` <subject>/vX.Y.Z ` , e.g.
191- ` cloudevents/v1.0.4 ` or ` subscriptions/v1.0.0 `
192- - Target should be ` main ` , the default value
193- - Release title should be the same as the Tag - ` <subject>/vX.Y.Z `
194- - Add some descriptive text, or the list of PRs that have been merged since
195- the previous release. The git query to get the list commits since the last
196- release is:
197- ` git log --pretty=format:%s main...v0.1 | grep -v "Merge pull" ` .
198- Just replace "v0.1" with the name of the previous release.
199- - Press ` Publish release ` button
200- - Create an "announcement" highlighting the key features of the new release and
201- any potential noteworthy activities of the group:
202- - Send it to the mailing list
203- - Announce the release on our
204- [ twitter account] ( http://twitter.com/cloudeventsio )
192+
193+ - Determine the new release version string. It should be of the form:
194+ ` SUBJECT@vX.Y.Z ` , e.g. ` cloudevents@v1.0.4 ` or ` subscriptions@v1.0.0 ` .
195+
196+ - Before a new release is finalized, a "release candidate" (rc) should be
197+ created that identifies the versions of files in the repository that are to
198+ be reviewed. The process for a RC is as follows:
199+ - Create a PR (for the "main" branch) that modifies the appropriate files
200+ to use the new version string appended with ` -rc# ` . Make sure to remove
201+ all ` -wip ` suffixes as needed.
202+ - Review and merge the PR. Note that this review is not really meant for
203+ checking the functionality of the specs, rather is it intended to verify
204+ the version string renaming was done properly.
205+ - Create a Github tag pointing to the commit on the "main" branch after the
206+ PR is merged, using the release version string suffixed with ` -rc# ` .
207+ - Initiate a final review/test of the release, pointing reviwers to the tag.
208+
209+ - When review/testing is completed, update all of the version string references
210+ to no longer use the ` -rc# ` suffix:
211+ - Create a PR with the following changes:
212+ - Modify the repo's files to use the new version string (without ` -rc# ` )
213+ as appropriate..
214+ - Update [ RELEASES.md] ( RELEASES.md ) to mention the new release, and
215+ reference the yet-to-be-created release tag.
216+ - Update the appropriate ` */RELEASE_NOTES.md ` file with the changes
217+ for the release. The list can be generated via:
218+ ` git log --pretty=format:%s main...cloudevents@v1.0.3 | grep -v "Merge pull" `
219+ by replacing "cloudevents@v1.0.3" with the name of the previous release.
220+ Or, use GitHub's
221+ [ new release] ( https://github.com/cloudevents/spec/releases/new ) process
222+ to generate the list without actually creating the release yet.
223+ - Merge the PR.
224+ - Note that the link checker should fail since any references to the new
225+ release tag will not be valid yet. This is expected.
226+
227+ - Create the Github release and tag for the new release:
228+ - Use GitHub to create a
229+ [ new release] ( https://github.com/cloudevents/spec/releases/new ) .
230+ During that process, create a new tag with the new release version string
231+ in the format ` SUBJECT@vX.Y.Z ` .
232+ - Create a new branch with the new release version string in the format
233+ ` SUBJECT@vX.Y.Z-branch ` .
234+ - Rerun the GitHub CI actions from the previous PR and the "main" branch as
235+ they should all pass now; as a sanity check.
236+
237+ - Create an "announcement" highlighting the key features of the new release
238+ and any potential noteworthy activities of the group:
239+ - Send it to the mailing lists.
240+ - Announce the release on our [ X account] ( http://x.com/cloudeventsio ) .
205241 - Add it to the "announcement" section of our
206- [ website] ( https://cloudevents.io/ )
242+ [ website] ( https://cloudevents.io/ ) .
243+
244+ - If an update to a release is needed, create a PR for the appropriate
245+ branches (including "main"), and merge when ready. For any release that's
246+ updated, you'll need to move the tag for that release to point to the head
247+ of that branch. We'll eventually setup a GitHub action to automatically do
248+ it but for now you can do it via the CLI:
249+ - ` git pull --tags ` to make sure you have all latest branches and tags
250+ - ` git tag -d SUBJECT@vX.Y.Z ` to delete the old tag for the release
251+ - ` git tag SUBJECT@vX.Y.Z SUBJECT@vX.Y.Z-branch ` to create a new tag for
252+ the head of the release branch
253+ - ` git push REMOTE SUBJECT@vX.Y.Z -f ` to force the tag to updated in the
254+ GitHub repo, where ` REMOTE ` is replaced with the git "remote" name that
255+ you have defined that references the GitHub repo
207256
208257## Additional Information
209258
210259- We adhere to the CNCF's
211- [ Code of Conduct] ( https://github.com/cncf/foundation/blob/master/code-of-conduct.md ) guidelines
260+ [ Code of
261+ Conduct] ( https://github.com/cncf/foundation/blob/master/code-of-conduct.md )
262+ guidelines.
0 commit comments