Skip to content

Commit 177d4fe

Browse files
committed
Update release process
- create a new branch for each release instead of a tag/github-release Signed-off-by: Doug Davis <duglin@gmail.com>
1 parent c5eb14a commit 177d4fe

File tree

1 file changed

+88
-54
lines changed

1 file changed

+88
-54
lines changed

docs/GOVERNANCE.md

Lines changed: 88 additions & 54 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

@@ -139,18 +149,14 @@ If a vote is taken, the follow rules will be followed:
139149

140150
The specifications produced will adhere to the following:
141151

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.
152+
- The versioning scheme used will follow [semver](https://semver.org/).
153+
154+
- Specifications will be grouped into logical units and released at the same
155+
time, with the same version number. This is true regardless of whether each
156+
individual document actually changed during the release cycle. The
157+
determination of the number of groups, and which document belongs in a group,
158+
can change over time.
159+
154160
- Since changing the CloudEvents `specversion` string could have a significant
155161
impact on implementations, all non-breaking changes will be made as
156162
"patch" version updates - this allows for the value "on the wire" to remain
@@ -159,51 +165,79 @@ The specifications produced will adhere to the following:
159165
that the "minor" version number will always be zero and the `specversion`
160166
string will always be of the form `X.0`.
161167

162-
Note that these rules do not apply to the
168+
Note that these rules do not apply to unversioned documents, such as the
163169
[documented extensions](../cloudevents/extensions/README.md).
164170

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`.)
172-
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.
178-
179171
To create a new release:
180172

181173
- Periodically the group will examine the list of extensions to determine
182174
if any action should be taken (e.g. removed due to it being stale). The
183175
creation of a new release will be the reminder to do this check. If any
184176
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.
177+
178+
- For the most part we try to only use a single branch ("main") for our work.
179+
Git branches will be used as a way to snapshot/tag releases. While we hope
180+
to not push new commits to these branches, in practice, it is possible that
181+
changes to a release might be needed without "picking up" other changes that
182+
might have been commited to "main". Creating the branch during the release
183+
process will makes this easier to manage should the need should arise.
184+
185+
- Determine the new release version string. It should be of the form:
186+
`<subject>/vX.Y.Z`, e.g. `cloudevents/v1.0.4` or `subscriptions/v1.0.0`.
187+
188+
- Create a PR (for the "main" branch") that:
189+
- Modifies the repo's files to use the new version string appended with
190+
`-rc#` as appropriate. Make sure to remove all `-wip` suffixes as needed.
191+
- Merge the PR.
192+
- Initiate a final review/test of the release.
193+
194+
- A "release candidate" tag will be created with the new release version
195+
string but with a suffix of `-rc#` (release candidate). This will indicate
196+
that the authors believe it is ready for final review/testing. This will be
197+
true for updates to existing specifications and for new specifications.
198+
199+
- When review/testing is completed, create a PR (for the "main" branch") that:
200+
- Modifies the repo's files to use the new version string (w/o `-rc#`) as
201+
appropriate.
202+
- Update [RELEASES.md](RELEASES.md) to mention the new release, and
203+
reference the yet-to-be-created release tag.
204+
- Update the appropriate `*/RELEASE_NOTES.md` file with the changes
205+
for the release. The list can be generated via:
206+
`git log --pretty=format:%s main...v0.1 | grep -v "Merge pull"`
207+
by replacing "v0.1" with the name of the previous release. Or, use github's
208+
[new release](https://github.com/cloudevents/spec/releases/new) process
209+
to generate the list w/o actually creating the release yet.
210+
188211
- 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)
212+
- Note that the link checker should fail since any references to the new
213+
release tag will not be valid yet. This is expected.
214+
215+
- Create a new branch with the same name as the new release version string
216+
appended with `-branch` (e.g. `<subject>/vX.Y.Z-branch`).
217+
- Use Github to create a
218+
[new release](https://github.com/cloudevents/spec/releases/new).
219+
During that process, create a new tag with the new release version
220+
string (e.g. `<subject>/vX.Y.Z`) w/o any suffix.
221+
- Rerun the github CI actions from the previous PR and the "main" branch as
222+
they should all pass now; as a sanity check.
223+
224+
- Create an "announcement" highlighting the key features of the new release
225+
and any potential noteworthy activities of the group:
226+
- Send it to the mailing lists.
227+
- Announce the release on our [X account](http://x.com/cloudeventsio).
205228
- Add it to the "announcement" section of our
206-
[website](https://cloudevents.io/)
229+
[website](https://cloudevents.io/).
230+
231+
- If an update to a release is needed, create a PR for the appropriate
232+
branches (including "main"), and merge when ready. For any release that's
233+
updated, you'll need to move the tag for that release to point to the HEAD
234+
of that branch. We'll eventually setup a Github action to automatically do
235+
it but for now you can do it via the CLI:
236+
- `git pull` to make sure you have all latest branches and tags
237+
- `git tag -d vX.Y.Z` to delete the old tag for the release
238+
- `git tag vX.Y.Z vX.Y.Z-branch` to create a new tag for the HEAD of the
239+
release branch
240+
- `git push REMOTE vX.Y.Z -f` to force the tag to updated in the github repo
207241

208242
## Additional Information
209243

0 commit comments

Comments
 (0)