You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: RELEASE.md
+35-24
Original file line number
Diff line number
Diff line change
@@ -1,23 +1,23 @@
1
1
# Release
2
2
3
-
The Prometheus Go client library follows a release process similar to the [Prometheus server](https://github.com/prometheus/prometheus/blob/main/RELEASE.md).
3
+
The Prometheus Go client library does not follow a strict release schedule. Releases are made based on necessity and the current state of the project.
4
4
5
5
## Branch Management
6
6
7
7
We use [Semantic Versioning](https://semver.org/).
8
8
9
9
- Maintain separate `release-<major>.<minor>` branches
10
10
- Branch protection enabled automatically for `release-*` branches
11
-
- Bug fixes go to latest release branch, then merge to main
11
+
- Bug fixes go to the latest release branch, then merge to main
12
12
- Features and changes go to main branch
13
-
-Older release branches maintained on best-effort basis
13
+
-Non-latest minor release branches are maintained (e.g. bug and security fixes) on the best-effort basis
14
14
15
15
## Pre-Release Preparations
16
16
17
17
1. Review main branch state:
18
18
- Expedite critical bug fixes
19
-
-Hold back risky changes
20
-
- Update dependencies via Dependabot PRs
19
+
-Don't rush on risky changes, consider them for the next release if not ready
20
+
- Update dependencies via Dependabot PRs or manually if needed
21
21
- Check for security alerts
22
22
23
23
## Cutting a Minor Release
@@ -29,7 +29,7 @@ We use [Semantic Versioning](https://semver.org/).
29
29
git push origin release-<major>.<minor>
30
30
```
31
31
32
-
2. Create feature branch:
32
+
2. Create a new branch on top of `release-<major>.<minor>`:
@@ -86,8 +86,8 @@ We use [Semantic Versioning](https://semver.org/).
86
86
```
87
87
88
88
2. Apply fixes:
89
-
-Cherry-pick from main: `git cherry-pick <commit>`
90
-
-Or add new fix commits
89
+
-Commit the required fixes; avoid refactoring or otherwise risky changes (preferred)
90
+
-Cherry-pick from main if fix was already merged there: `git cherry-pick <commit>`
91
91
92
92
3. Follow steps 3-9 from minor release process
93
93
@@ -102,21 +102,30 @@ If conflicts occur merging to main:
102
102
103
103
## Note on Versioning
104
104
105
-
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.
106
-
107
105
## Compatibility Guarantees
108
106
109
107
### Supported Go Versions
110
108
111
109
- Support provided only for the three most recent major Go releases
112
-
- While the library may work with older versions, no fixes or support provided
110
+
- While the library may work with older Go versions, support and fixes are best-effort for those.
113
111
- Each release documents the minimum required Go version
114
112
115
113
### API Stability
116
114
117
-
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):
115
+
The Prometheus Go client library aims to maintain backward compatibility within minor versions, similar to [Go 1 compatibility promises](https://golang.org/doc/go1compat):
118
116
119
-
- API signatures may change between minor versions
117
+
118
+
## Minor Version Changes
119
+
- API signatures are `stable` within a **minor** version
120
+
- No breaking changes are introduced
121
+
- Methods may be added, but not removed
122
+
- Arguments may NOT be removed or added (unless varargs)
123
+
- Return types may NOT be changed
124
+
- Types may be modified or relocated
125
+
- Default behaviors might be altered (unfortunately, this has happened in the past)
126
+
127
+
## Major Version Changes
128
+
- API signatures may change between **major** versions
120
129
- Types may be modified or relocated
121
130
- Default behaviors might be altered
122
131
- Feature removal/deprecation can occur with minor version bump
@@ -128,25 +137,27 @@ Before each release:
128
137
1.**Internal Testing**:
129
138
- Full test suite must pass
130
139
- Integration tests with latest Prometheus server
131
-
- Benchmark comparisons with previous version
140
+
- (optional) Benchmark comparisons with previous version
141
+
> There is no facility for running benchmarks in CI, so this is best-effort.
132
142
133
143
2.**External Validation**:
134
-
- Testing with prometheus/prometheus master branch
135
-
- Testing with kubernetes/kubernetes master branch
144
+
145
+
Test against bigger users, especially looking for broken tests or builds. This will give us awareness of a potential accidental breaking changes, or if there were intentional ones, the potential damage radius of them.
146
+
147
+
- Testing with [prometheus/prometheus](https://github.com/prometheus/prometheus)`main` branch
148
+
- Testing with [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)`main` branch
136
149
- Breaking changes must be documented in CHANGELOG.md
137
150
138
151
### Version Policy
139
152
140
153
- Bug fixes increment patch version (e.g., v0.9.1)
141
154
- New features increment minor version (e.g., v0.10.0)
142
155
- Breaking changes increment minor version with clear documentation
143
-
- Major version remains at 0 to indicate potential instability
144
156
145
157
### Deprecation Policy
146
158
147
159
1. Features may be deprecated in any minor release
0 commit comments