-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
docs: Add RELEASE.md for the release process #1690
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,152 @@ | ||||||||||
# Release | ||||||||||
|
||||||||||
The Prometheus Go client library follows a release process similar to the [Prometheus server](https://github.com/prometheus/prometheus/blob/main/RELEASE.md). | ||||||||||
|
||||||||||
## Branch Management | ||||||||||
|
||||||||||
We use [Semantic Versioning](https://semver.org/). | ||||||||||
|
||||||||||
- Maintain separate `release-<major>.<minor>` branches | ||||||||||
- Branch protection enabled automatically for `release-*` branches | ||||||||||
- Bug fixes go to latest release branch, then merge to main | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
- Features and changes go to main branch | ||||||||||
- Older release branches maintained on best-effort basis | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
||||||||||
## Pre-Release Preparations | ||||||||||
|
||||||||||
1. Review main branch state: | ||||||||||
- Expedite critical bug fixes | ||||||||||
- Hold back risky changes | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
- Update dependencies via Dependabot PRs | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
- Check for security alerts | ||||||||||
|
||||||||||
## Cutting a Minor Release | ||||||||||
|
||||||||||
1. Create release branch: | ||||||||||
|
||||||||||
```bash | ||||||||||
git checkout -b release-<major>.<minor> main | ||||||||||
git push origin release-<major>.<minor> | ||||||||||
``` | ||||||||||
|
||||||||||
2. Create feature branch: | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
||||||||||
```bash | ||||||||||
git checkout -b <yourname>/cut-<major>.<minor>.0 release-<major>.<minor> | ||||||||||
``` | ||||||||||
|
||||||||||
3. Update version and documentation: | ||||||||||
- Update `VERSION` file | ||||||||||
- Update `CHANGELOG.md` (user-impacting changes) | ||||||||||
- Order: [SECURITY], [CHANGE], [FEATURE], [ENHANCEMENT], [BUGFIX] | ||||||||||
- For RCs, append `-rc.0` | ||||||||||
|
||||||||||
4. Create PR and get review | ||||||||||
|
||||||||||
5. After merge, create tags: | ||||||||||
|
||||||||||
```bash | ||||||||||
tag="v$(< VERSION)" | ||||||||||
git tag -s "${tag}" -m "${tag}" | ||||||||||
git push origin "${tag}" | ||||||||||
``` | ||||||||||
|
||||||||||
6. For Release Candidates: | ||||||||||
- Create PR against prometheus/prometheus using RC version | ||||||||||
- Create PR against kubernetes/kubernetes using RC version | ||||||||||
- Make sure the CI is green for the PRs | ||||||||||
- Allow 1-2 days for downstream testing | ||||||||||
- Fix any issues found before final release | ||||||||||
- Use `-rc.1`, `-rc.2` etc. for additional fixes | ||||||||||
|
||||||||||
7. For Final Release: | ||||||||||
- Wait for CI completion | ||||||||||
- Verify artifacts published | ||||||||||
Comment on lines
+63
to
+64
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There are no CI/artifacts for our library. |
||||||||||
- Click "Publish release" | ||||||||||
- For RCs, ensure "pre-release" box is checked | ||||||||||
|
||||||||||
8. Announce release: | ||||||||||
- <[email protected]> | ||||||||||
- Slack | ||||||||||
- x.com/BlueSky | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you mean with our personal accounts? Or Prometheus account? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think it matters. We can use our own accounts and ask someone to repost it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think it matters. We can use our own accounts and ask someone to repost it. |
||||||||||
|
||||||||||
9. Merge release branch to main: | ||||||||||
|
||||||||||
```bash | ||||||||||
git checkout main | ||||||||||
git merge --no-ff release-<major>.<minor> | ||||||||||
``` | ||||||||||
|
||||||||||
## Cutting a Patch Release | ||||||||||
|
||||||||||
1. Create branch from release branch: | ||||||||||
|
||||||||||
```bash | ||||||||||
git checkout -b <yourname>/cut-<major>.<minor>.<patch> release-<major>.<minor> | ||||||||||
``` | ||||||||||
|
||||||||||
2. Apply fixes: | ||||||||||
- Cherry-pick from main: `git cherry-pick <commit>` | ||||||||||
- Or add new fix commits | ||||||||||
Comment on lines
+89
to
+90
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
|
||||||||||
3. Follow steps 3-9 from minor release process | ||||||||||
|
||||||||||
## Handling Merge Conflicts | ||||||||||
|
||||||||||
If conflicts occur merging to main: | ||||||||||
|
||||||||||
1. Create branch: `<yourname>/resolve-conflicts` | ||||||||||
2. Fix conflicts there | ||||||||||
3. PR into main | ||||||||||
4. Leave release branch unchanged | ||||||||||
|
||||||||||
## Note on Versioning | ||||||||||
|
||||||||||
Go modules require strict semver. Because we don't commit to avoid breaking changes between minor releases, we use major version zero releases for libraries. | ||||||||||
Comment on lines
+103
to
+105
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Copy pasta? I think we do care about breaking changes =D
Suggested change
|
||||||||||
|
||||||||||
## Compatibility Guarantees | ||||||||||
|
||||||||||
### Supported Go Versions | ||||||||||
|
||||||||||
- Support provided only for the three most recent major Go releases | ||||||||||
- While the library may work with older versions, no fixes or support provided | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
- Each release documents the minimum required Go version | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we add that to the TODO list for release too? |
||||||||||
|
||||||||||
### API Stability | ||||||||||
|
||||||||||
The Prometheus Go client library aims to maintain backward compatibility within minor versions, similar to [Go 1 compatibility promises](https://golang.org/doc/go1compat). However, as indicated by the major version zero (v0): | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
What v0 version? |
||||||||||
|
||||||||||
- API signatures may change between minor versions | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What do you mean? They can't change in many cases I believe e.g. you cannot rename them, remove arguments, or add arguments (unless it's variadic). |
||||||||||
- Types may be modified or relocated | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Again, they cannot mostly (you can only add fields) |
||||||||||
- Default behaviors might be altered | ||||||||||
- Feature removal/deprecation can occur with minor version bump | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It cannot, mostly? 🤔 |
||||||||||
|
||||||||||
### Compatibility Testing | ||||||||||
|
||||||||||
Before each release: | ||||||||||
|
||||||||||
1. **Internal Testing**: | ||||||||||
- Full test suite must pass | ||||||||||
- Integration tests with latest Prometheus server | ||||||||||
- Benchmark comparisons with previous version | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What do you mean? We don't have any tooling or way right now. Should we skip this and add once we have such a process? |
||||||||||
|
||||||||||
2. **External Validation**: | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
- Testing with prometheus/prometheus master branch | ||||||||||
- Testing with kubernetes/kubernetes master branch | ||||||||||
Comment on lines
+134
to
+135
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
- Breaking changes must be documented in CHANGELOG.md | ||||||||||
|
||||||||||
### Version Policy | ||||||||||
|
||||||||||
- Bug fixes increment patch version (e.g., v0.9.1) | ||||||||||
- New features increment minor version (e.g., v0.10.0) | ||||||||||
- Breaking changes increment minor version with clear documentation | ||||||||||
- Major version remains at 0 to indicate potential instability | ||||||||||
Comment on lines
+138
to
+143
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Copy pasta? It's bit trivial and also wrong (we are not v0 version) |
||||||||||
|
||||||||||
### Deprecation Policy | ||||||||||
|
||||||||||
1. Features may be deprecated in any minor release | ||||||||||
2. Deprecated features: | ||||||||||
- Will be documented in CHANGELOG.md | ||||||||||
- Will emit warnings when used (when possible) | ||||||||||
- May be removed in next minor version | ||||||||||
- Must have migration path documented | ||||||||||
Comment on lines
+145
to
+152
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also not needed? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it similar? I have the impression that we do releases when we have a feeling it's needed, there's no schedule here 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can explicitly state that we don't have a cadence.