blob: 74dc68e601c2b45388baae8dbf1e80f7c58909e8 [file] [log] [blame] [view]
AndroidX Core Team2e416b22020-12-03 22:58:07 +00001# Versioning
2
3[TOC]
4
AndroidX Core Team21ccf652022-04-01 14:53:07 +00005This page covers Jetpack's usage of Semantic Versioning and pre-release cycles,
6including the expectations at each cycle and criteria for moving to the next
7cycle or SemVer revision.
8
AndroidX Core Team5fa61982023-01-13 10:43:41 -05009## Semantic versioning and binary compatibility {#semver}
AndroidX Core Team2e416b22020-12-03 22:58:07 +000010
alanv5e4feac2022-07-13 09:55:38 -070011Artifacts follow strict [semantic versioning](http://semver.org) for binary
AndroidX Core Team5fa61982023-01-13 10:43:41 -050012compatibility with an added inter-version sequence of pre-release revisions.
13Versions for finalized release artifacts, which are available on
14[Google Maven](https://maven.google.com) will follow the format
alanv5e4feac2022-07-13 09:55:38 -070015`<major>.<minor>.<bugfix>` with an optional `-<alpha|beta|rc><nn>` suffix.
AndroidX Core Team5fa61982023-01-13 10:43:41 -050016Internal or nightly releases, which are available on
17[androidx.dev](http://androidx.dev), use the `-SNAPSHOT` suffix.
alanv5e4feac2022-07-13 09:55:38 -070018
AndroidX Core Team5fa61982023-01-13 10:43:41 -050019### Behavioral and source compatibility {#compat}
alanv5e4feac2022-07-13 09:55:38 -070020
AndroidX Core Team5fa61982023-01-13 10:43:41 -050021Libraries are required to preserve *behavioral compatibility* -- APIs must
22behave as described in their documentation -- across minor versions. Special
23consideration must also be made for changes to undocumented behavior, as
24developers may have made their own assumptions about API contracts based on
25observed behavior.
AndroidX Core Team2e416b22020-12-03 22:58:07 +000026
AndroidX Core Team5fa61982023-01-13 10:43:41 -050027Libraries are strongly encouraged to preserve *source compatibility* across
28minor versions. Strictly requiring source compatibility would require major
29version bumps when implementing quality-of-life improvements such as nullability
30annotations or generics, which would be [disruptive](#major-implications) to the
31library ecosystem.
32
33### Notation {#notation}
AndroidX Core Team5c914c42021-02-08 17:22:57 +000034
35Major (`x.0.0`)
36: An artifact's major version indicates a guaranteed forward-compatibility
AndroidX Core Team21ccf652022-04-01 14:53:07 +000037 window. The number is incremented only when introducing breaking API or
38 behavioral changes.
AndroidX Core Team5c914c42021-02-08 17:22:57 +000039
40Minor (`1.x.0`)
41: Minor indicates compatible public API changes. This number is incremented
AndroidX Core Team21ccf652022-04-01 14:53:07 +000042 when APIs are added, including the addition of
Ian Baker186108e2023-11-20 06:54:36 -080043 [`@Deprecated` annotations](/docs/api_guidelines/index.md#deprecation-and-removal).
AndroidX Core Team5c914c42021-02-08 17:22:57 +000044 Binary compatibility must be preserved between minor version changes.
45
46Bugfix (`1.0.x`)
47: Bugfix indicates internal changes to address broken behavior. Care should be
48 taken to ensure that existing clients are not broken, including clients that
49 may have been working around long-standing broken behavior.
50
AndroidX Core Team5fa61982023-01-13 10:43:41 -050051#### Pre-release cycles {#prerelease}
AndroidX Core Team5c914c42021-02-08 17:22:57 +000052
alanve048d1c2021-02-11 08:46:57 -080053Alpha (`1.0.0-alphaXX`)
AndroidX Core Team5c914c42021-02-08 17:22:57 +000054: Feature development and API stabilization phase.
55
alanve048d1c2021-02-11 08:46:57 -080056Beta (`1.0.0-betaXX`)
AndroidX Core Team21ccf652022-04-01 14:53:07 +000057: Functional stabilization phase. Suitable for production use.
AndroidX Core Team5c914c42021-02-08 17:22:57 +000058
alanve048d1c2021-02-11 08:46:57 -080059RC (`1.0.0-rcXX`)
AndroidX Core Team5c914c42021-02-08 17:22:57 +000060: Verification phase.
61
62Stable (no-suffix)
AndroidX Core Team21ccf652022-04-01 14:53:07 +000063: Recommended for production use.
AndroidX Core Team5c914c42021-02-08 17:22:57 +000064
AndroidX Core Team2e416b22020-12-03 22:58:07 +000065### Major (`x.0.0`) {#major}
66
67An artifact's major version indicates a guaranteed forward-compatibility window.
68For example, a developer could update an artifact versioned `2.0.0` to `2.7.3`
alanve048d1c2021-02-11 08:46:57 -080069without taking any additional action; however, updating from `2.7.3` to `3.0.0`
70may require a complete rewrite of their application or cause conflicts with
AndroidX Core Team21ccf652022-04-01 14:53:07 +000071their dependencies. Major version bumps are
72[strongly discouraged](#major-implications).
AndroidX Core Team2e416b22020-12-03 22:58:07 +000073
alanve54cc242021-02-11 13:49:33 -080074#### When to increment {#major-when}
AndroidX Core Team2e416b22020-12-03 22:58:07 +000075
76An artifact *must* increment its major version number in response to breaking
alanv5e4feac2022-07-13 09:55:38 -070077changes in binary or behavioral compatibility within the library itself *or* in
AndroidX Core Team2e416b22020-12-03 22:58:07 +000078response to breaking changes within a dependency.
79
80For example, if an artifact updates a SemVer-type dependency from `1.0.0` to
81`2.0.0` then the artifact must also bump its own major version number.
82
83An artifact *may in rare cases* increment its major version number to indicate
84an important but non-breaking change in the library. Note, however, that the
85SemVer implications of incrementing the major version are the same as a breaking
alanv5e4feac2022-07-13 09:55:38 -070086change -- dependent projects *must* assume the major version change is breaking
AndroidX Core Team2e416b22020-12-03 22:58:07 +000087and update their dependency specifications.
88
alanve54cc242021-02-11 13:49:33 -080089#### Ecosystem implications {#major-implications}
AndroidX Core Team2e416b22020-12-03 22:58:07 +000090
alanv5e4feac2022-07-13 09:55:38 -070091When an artifact increases its major version, *all* artifacts that depended on
AndroidX Core Team2e416b22020-12-03 22:58:07 +000092the previous major version are no longer considered compatible and must
93explicitly migrate to depend on the new major version.
94
95As a result, if the library ecosystem is slow to adopt a new major version of an
96artifact then developers may end up in a situation where they cannot update an
97artifact because they depend on a library that has not yet adopted the new major
98version.
99
100For this reason, we *strongly* recommend against increasing the major version of
101a “core” artifact that is depended upon by other libraries. “Leaf” artifacts --
102those that apps depend upon directly and are not used by other libraries -- have
103a much easier time increasing their major version.
104
alanve54cc242021-02-11 13:49:33 -0800105#### Process requirements {#major-process}
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000106
107If the artifact has dependencies within Jetpack, owners *must* complete the
108assessment before implementing any breaking changes to binary or behavioral
109compatibility.
110
111Otherwise, owners are *strongly recommended* to complete the assessment before
112implementing any breaking changes to binary or behavioral compatibility, as such
113changes may negatively impact downstream clients in Android git or Google's
114repository. These clients are not part of our pre-submit workflow, but filling
115out the assessment will provide insight into how they will be affected by a
116major version change.
117
118### Minor (`1.x.0`) {#minor}
119
120Minor indicates compatible public API changes. This number is incremented when
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700121APIs are added -- including the addition of `@Deprecated` annotations -- and
122libraries must go through a full [pre-release](#pre-release-suffix) cycle before
123reaching stable. Binary compatibility must be preserved between minor version
124changes.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000125
126#### Moving between minor versions:
127
128* A change in the minor revision indicates the addition of binary-compatible
129 APIs. Libraries **must** increment their minor revision when adding APIs.
130 Dependent libraries are not required to update their minimum required
131 version unless they depend on newly-added APIs.
132
133### Bugfix (`1.0.x`) {#bugfix}
134
135Bugfix indicates internal changes to address broken behavior. Care should be
136taken to ensure that existing clients are not broken, including clients that may
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700137have been working around long-standing broken behavior. Bugfix releases *do not*
138go through a pre-release cycle and are considered stable.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000139
140#### Moving between bugfix versions:
141
142* A change in the bugfix revision indicates changes in behavior to fix bugs.
143 The API surface does not change. Changes to the bugfix version may *only*
144 occur in a release branch. The bugfix revision must always be `.0` in a
145 development branch.
146
147### Pre-release suffixes {#pre-release-suffix}
148
149The pre-release suffix indicates stability and feature completeness of a
150release. A typical release will begin as alpha, move to beta after acting on
151feedback from internal and external clients, move to release candidate for final
152verification, and ultimately move to a finalized build.
153
154Alpha, beta, and release candidate releases are versioned sequentially using a
155leading zero (ex. alpha01, beta11, rc01) for compatibility with the
156lexicographic ordering of versions used by SemVer.
157
158### Snapshot {#snapshot}
159
160Snapshot releases are whatever exists at tip-of-tree. They are only subject to
161the constraints placed on the average commit. Depending on when it's cut, a
alanv5e4feac2022-07-13 09:55:38 -0700162snapshot may even be binary-identical to an `alpha`, `beta`, or `stable`
163release.
164
165### Tooling guarantees
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000166
167Versioning policies are enforced by the following Gradle tasks:
168
169`checkApi`: ensures that changes to public API are intentional and tracked,
alanv5e4feac2022-07-13 09:55:38 -0700170asking the developer to explicitly run `updateApi` (see below) if any changes
171are detected
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000172
173`checkApiRelease`: verifies that API changes between previously released and
174currently under-development versions conform to semantic versioning guarantees
175
176`updateApi`: commits API changes to source control in such a way that they can
177be reviewed in pre-submit via Gerrit API+1 and reviewed in post-submit by API
178Council
179
180`SNAPSHOT`: is automatically added to the version string for all builds that
181occur outside the build server for release branches (ex. ub-androidx-release).
182Local release builds may be forced by passing -Prelease to the Gradle command
183line.
184
185## Picking the right version {#picking-the-right-version}
186
alanv5e4feac2022-07-13 09:55:38 -0700187Libraries follow [semantic versioning](https://semver.org), which means that the
188version code is strongly tied to the API surface. A full version consists of
189revision numbers for major, minor, and bugfix as well as a pre-release stage and
190revision. Correct versioning is, for the most part, automatically enforced;
191however, please check for the following:
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000192
193### Initial version {#initial-version}
194
195If your library is brand new, your version should start at 1.0.0, e.g.
196`1.0.0-alpha01`.
197
198The initial release within a new version always starts at `alpha01`. Note the
199two-digit revision code, which allows us to do up to 99 revisions within a
200pre-release stage.
201
202### Pre-release stages
203
204A single version will typically move through several revisions within each of
205the pre-release stages: alpha, beta, rc, and stable. Subsequent revisions within
206a stage (ex. alpha, beta) are incremented by 1, ex. `alpha01` is followed by
207`alpha02` with no gaps.
208
209### Moving between pre-release stages and revisions
210
211Libraries are expected to go through a number of pre-release stages within a
212version prior to release, with stricter requirements at each stage to ensure a
213high-quality stable release. The owner for a library should typically submit a
214CL to update the stage or revision when they are ready to perform a public
215release.
216
alanv5e4feac2022-07-13 09:55:38 -0700217Libraries are expected to allow >= 2 weeks per pre-release stage. This "soaking
218period" gives developers time to try each version, find bugs, and ensure a
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000219quality stable release. Therefore, at minimum:
220
221- An `alpha` version must be publically available for 2 weeks before releasing
222 a public `beta`
223- A `beta` version must be publically available for 2 weeks before releasing
224 an public `rc`
AndroidX Core Team39791e52021-06-01 06:53:20 -0700225- A `rc` version must be publically available for 2 weeks before releasing a
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000226 public stable version
227
228Your library must meet the following criteria to move your public release to
229each stage:
230
231### Alpha {#alpha}
232
233Alpha releases are expected to be functionally stable, but may have unstable API
234surface or incomplete features. Typically, alphas have not gone through API
235Council review but are expected to have performed a minimum level of validation.
236
237#### Within the `alphaXX` cycle
238
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700239* Workflow
240 * Development happens in `androidx-main` or `androidx-platform-dev`
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000241* API surface
242 * Prior to `alpha01` release, API tracking **must** be enabled (either
243 `publish=true` or create an `api` directory) and remain enabled
244 * May add/remove APIs within `alpha` cycle, but deprecate/remove cycle is
245 strongly recommended.
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500246 * May use
Ian Baker186108e2023-11-20 06:54:36 -0800247 [experimental APIs](/docs/api_guidelines/index.md#experimental-api)
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500248 across same-version group boundaries
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000249* Testing
AndroidX Core Teambaf089a2023-10-09 07:45:09 -0700250 * Ensure the library is testable. Follow the guideline on
Ian Baker186108e2023-11-20 06:54:36 -0800251 [go/androidx/testability](/docs/testability.md)
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000252 * All changes **should** be accompanied by a `Test:` stanza
253 * All pre-submit and post-submit tests are passing
254 * Flaky or failing tests **must** be suppressed or fixed within one day
255 (if affecting pre-submit) or three days (if affecting post-submit)
256
257### Beta {#beta}
258
259Beta releases are ready for production use but may contain bugs. They are
260expected to be functionally stable and have highly-stable, feature-complete API
alanve048d1c2021-02-11 08:46:57 -0800261surface. All APIs should have been reviewed by API Council at this stage. Tests
262should have 100% coverage of public API surface and translations must be 100%
263complete.
264
265While beta represents API Freeze, it does not necessarily mean APIs are locked
266down permanently. A limited number of exceptions may be granted by API Council
267in cases where ship-blocking mistakes or significant user experience issues can
268be addressed with minimal changes to the API surface. Exceptions **will not** be
269granted for new features, non-trivial API changes, significant refactorings, or
270any changes likely to introduce additional functional instability. Requests for
271exceptions **must** be accompanied by a justification explaining why the change
AndroidX Core Team0db91f02021-05-06 22:45:18 +0000272cannot be made in a future minor version. This policy does not apply to
273additions of `@Experimental` APIs or changes to `@Experimental` APIs.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000274
AndroidX Core Teamee9c1aa2021-04-06 17:29:05 +0000275#### Checklist for moving to `beta01` {#beta-checklist}
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000276
277* API surface
278 * Entire API surface has been reviewed by API Council
279 * All APIs from alpha undergoing deprecate/remove cycle must be removed
alanv5e4feac2022-07-13 09:55:38 -0700280 * The final removal of a `@Deprecated` API should occur in alpha, not
281 in beta
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500282 * Must not use
Ian Baker186108e2023-11-20 06:54:36 -0800283 [experimental APIs](/docs/api_guidelines#experimental-api)
alanv5e4feac2022-07-13 09:55:38 -0700284 across same-version group boundaries
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000285* Testing
286 * All public APIs are tested
287 * All pre-submit and post-submit tests are enabled (e.g. all suppressions
288 are removed) and passing
alanv5e4feac2022-07-13 09:55:38 -0700289* Use of experimental Kotlin features (e.g. `@OptIn`) must be audited for
290 stability
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000291* All dependencies are `beta`, `rc`, or stable
292* Be able to answer the question "How will developers test their apps against
293 your library?"
294 * Ideally, this is an integration app with automated tests that cover the
295 main features of the library and/or a `-testing` artifact as seen in
296 other Jetpack libraries
297
298#### Within the `betaXX` cycle
299
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700300* Workflow
301 * Development happens in `androidx-main` or, in extremely limited cases,
302 changes are cherry-picked to a `-release` branch
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000303* API surface
alanve54cc242021-02-11 13:49:33 -0800304 * May not add, remove, or change APIs unless granted an exception by API
305 Council following the beta API change exception request process
AndroidX Core Team0db91f02021-05-06 22:45:18 +0000306 * Must go through the full `@Deprecate` and hard-removal cycle in
307 separate `beta` releases for any exception-approved API removals or
308 changes
alanv5e4feac2022-07-13 09:55:38 -0700309 * May not remove `@RequiresOptIn` annotations from experimental APIs, as
310 this would amount to an API addition
311 * **May** add new `@RequiresOptIn` APIs and change existing experimental
AndroidX Core Team0db91f02021-05-06 22:45:18 +0000312 APIs
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000313
314### RC {#rc}
315
316Release candidates are expected to be nearly-identical to the final release, but
317may contain critical last-minute fixes for issues found during integration
318testing.
319
320#### Checklist for moving to `rc01`
321
322* All previous checklists still apply
323* Release branch, e.g. `androidx-<group_id>-release`, is created
324* API surface
325 * Any API changes from `beta` cycle are reviewed by API Council
alanv5e4feac2022-07-13 09:55:38 -0700326* No **known** `P0` or `P1` (ship-blocking) issues
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000327* All dependencies are `rc` or stable
328
329#### Within the `rcXX` cycle
330
AndroidX Core Teamb73968c2023-03-30 10:06:49 -0700331* Changes are cherry-picked to a `-release` branch
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000332* Ship-blocking bug fixes only
333* All changes must have corresponding tests
334* No API changes allowed
335
336### Stable {#stable}
337
338Final releases are well-tested, both by internal tests and external clients, and
339their API surface is reviewed and finalized. While APIs may be deprecated and
340removed in future versions, any APIs added at this stage must remain for at
341least a year.
342
343#### Checklist for moving to stable
344
345* Identical to a previously released `rcXX` (note that this means any bugs
346 that result in a new release candidate will necessarily delay your stable
347 release by a minimum of two weeks)
348* No changes of any kind allowed
349* All dependencies are stable
350
351## Updating your version {#update}
352
353A few notes about version updates:
354
AndroidX Core Team408c27b2020-12-15 15:57:00 +0000355- The version of your library listed in `androidx-main` should *always* be
356 higher than the version publically available on Google Maven. This allows us
357 to do proper version tracking and API tracking.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000358- Version increments must be done before the CL cutoff date (aka the build cut
359 date).
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000360- **Increments to the next stability suffix** (like `alpha` to `beta`) should
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500361 be handled by the library owner, with the Jetpack TPM (natnaelbelay@) CC'd
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000362 for API+1.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000363- Version increments in release branches will need to follow the guide
Ian Baker186108e2023-11-20 06:54:36 -0800364 [How to update your version on a release branch](/docs/release_branches.md#update-your-version)
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000365- When you're ready for `rc01`, the increment to `rc01` should be done in
AndroidX Core Team408c27b2020-12-15 15:57:00 +0000366 `androidx-main` and then your release branch should be snapped to that
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500367 build. See the guide
Ian Baker186108e2023-11-20 06:54:36 -0800368 [Snap your release branch](/docs/release_branches.md#snap)
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500369 on how to do this. After the release branch is snapped to that build, you
370 will need to update your version in `androidx-main` to `alpha01` of the next
AndroidX Core Team408c27b2020-12-15 15:57:00 +0000371 minor (or major) version.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000372
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000373### How to update your version
374
AndroidX Core Team179f25b2022-02-04 15:20:48 -08003751. Update the version listed in `frameworks/support/libraryversions.toml`
AndroidX Core Team95cd3da2021-01-14 11:47:43 -05003761. If your library is a `beta` or `rc01` version, run `./gradlew
377 <your-lib>:updateApi`. This will create an API txt file for the new version
AndroidX Core Team21ccf652022-04-01 14:53:07 +0000378 of your library. For other versions, this step is not required
AndroidX Core Team2e416b22020-12-03 22:58:07 +00003791. Verify changes with `./gradlew checkApi verifyDependencyVersions`.
3801. Commit these change as one commit.
3811. Upload these changes to Gerrit for review.
382
383An example of a version bump can be found here:
384[aosp/833800](https://android-review.googlesource.com/c/platform/frameworks/support/+/833800)
385
386## `-ktx` Modules {#ktx}
387
Ian Baker186108e2023-11-20 06:54:36 -0800388[Kotlin extension libraries](/docs/api_guidelines/index.md#module-ktx)
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500389(`-ktx`) follow the same versioning requirements as other libraries, but with
390one exception: they must match the version of the Java libraries that they
391extend.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000392
AndroidX Core Team21ccf652022-04-01 14:53:07 +0000393For example, let's say you are developing a Java library
394`androidx.foo:foo-bar:1.1.0-alpha01` and you want to add a Kotlin extension
395library `androidx.foo:foo-bar-ktx`. Your new `androidx.foo:foo-bar-ktx` library
396will start at version `1.1.0-alpha01` instead of `1.0.0-alpha01`.
AndroidX Core Team2e416b22020-12-03 22:58:07 +0000397
398If your `androidx.foo:foo-bar` module was in version `1.0.0-alpha06`, then the
AndroidX Core Team21ccf652022-04-01 14:53:07 +0000399Kotlin extension module would start in version `1.0.0-alpha06`.
alanv842f5e02022-10-11 07:25:45 -0700400
401## FAQ
402
403### When does an alpha ship?
404
405For public releases, an alpha ships when the library lead believes it is ready.
406Generally, these occur during the batched bi-weekly (every 2 weeks) release
407because all tip-of-tree dependencies will need to be released too.
408
alanv842f5e02022-10-11 07:25:45 -0700409### Can alpha work (ex. for the next Minor release) occur in the primary development branch during beta API lockdown?
410
AndroidX Core Team76f65452024-01-02 11:39:57 -0800411Generally, no. This is by design. Focus should be spent on improving the Beta
412version and adding documentation/samples/blog posts for usage!
413
414In limited cases, the
415[`@RequiresOptIn`](/docs/api_guidelines/index.md#experimental-api)
416meta-annotation may be used to extend development of a feature beyond the alpha
417cycle. When doing so, extreme care must be taken to avoid destabilizing the rest
418of the library.
alanv842f5e02022-10-11 07:25:45 -0700419
420### Is there an API freeze window between alpha and beta while API surface is reviewed and tests are added, but before the beta is released?
421
422Yes. If any new APIs are added in this window, the beta release will be blocked
423until API review is complete and addressed.
424
425### How often can a beta release?
426
AndroidX Core Team5fa61982023-01-13 10:43:41 -0500427As often as needed; however, releases outside of the bi-weekly (every 2 weeks)
alanv842f5e02022-10-11 07:25:45 -0700428release will need to get approval from the TPM (natnaelbelay@).