Skip to content

Commit 4ad3223

Browse files
authored
Merge pull request #1356 from duglin/releases
Update release process
2 parents e2d119e + 40cda2e commit 4ad3223

File tree

1 file changed

+109
-58
lines changed

1 file changed

+109
-58
lines changed

docs/GOVERNANCE.md

Lines changed: 109 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,25 @@
55
This document describes the governance process under which the CloudEvents
66
project 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+
818
For easy reference, additional documentation related to how this project,
919
and 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:
4555
There are three categories of project membership:
4656

4757
1. **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

5161
2. **Voting Member.** See the [Voting](#voting) section below for more
@@ -56,7 +66,7 @@ There are three categories of project membership:
5666

5767
3. **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+
140152
The 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

Comments
 (0)