This document explains the release strategy for artifacts in this organization.
Given the next major release of 3.0, current major release of 2.x, and latest minor release of 2.10, this project maintains the following active branches.
- main: The next major release, e.g.
3.0.0
. This is the branch where all merges take place and code moves fast. - 2.x: The next minor release, e.g.
2.11.0
. Once a change is merged intomain
, decide whether to backport it to2.x
. - 2.10: The next patch release, e.g.
2.10.5
. In between minor releases, only hotfixes (e.g. security) are backported to2.10
.
PRs go into main
. Label PRs that you need to be backported as backport 2.x
. Backport PRs by checking out the versioned branch, cherry-pick changes and open a PR against each target backport branch.
Do not create branches in the upstream repo, use your fork, for the exception of long lasting feature branches that require active collaboration from multiple developers. Name feature branches feature/<thing>
. Once the work is merged to main
, please make sure to delete the feature branch.
Repositories create consistent release labels, such as v1.0.0
, v1.1.0
and v2.0.0
. Use release labels to target an issue or a PR for a given release. See MAINTAINERS for more information on triaging issues.
The release process is standard across repositories in this org and is run by a release manager volunteering from amongst MAINTAINERS.
Assuming the following current state.
2.10
: next patch, i.e.2.10.5-SNAPSHOT
2.x
: next minor, i.e.2.11.0-SNAPSHOT
main
: next major, i.e.3.0.0-SNAPSHOT
- Check out
2.10
. - Ensure
systemProp.version
in gradle.properties matches the version being released, i.e.2.10.5
. - Replace
## [Unreleased x.y]
with## [2.10.5] - 06/20/2024
in CHANGELOG. - Commit changes to
gradle.properties
and CHANGELOG. - Create a tag,
v2.10.5
, and push your changes and the new tag to GitHub. An automated release will be made. - An increment version workflow will make a pull request to set
systemProp.version
in gradle.properties to2.10.6
in the2.10
branch.
- Check out
2.x
. - Ensure
systemProp.version
in gradle.properties matches the version being released, i.e.2.11.0
. - Replace
## [Unreleased x.y]
with## [2.11.0] - 06/20/2024
in CHANGELOG. - Commit changes to
gradle.properties
and CHANGELOG. - Create a tag,
v2.11.0
, and push your changes and the new tag to GitHub. An automated release will be made. - Create a branch,
2.11
, setsystemProp.version
in gradle.properties to2.11.1
, and push the new branch to GitHub. - An increment version workflow will make a pull request to set
systemProp.version
in gradle.properties to2.12.0
in the2.x
branch.
- Check out
main
. - Ensure
systemProp.version
in gradle.properties matches the version being released, i.e.3.0.0
. - Replace
## [Unreleased x.y]
with## [3.0.0] - 06/20/2024
in CHANGELOG. - Commit changes to
gradle.properties
and CHANGELOG. - Create a tag,
v3.0.0
, and push your changes and the new tag to GitHub. An automated release will be made. - Create a branch,
3.0
, setsystemProp.version
in gradle.properties to3.0.1
, and push the new branch to GitHub. - Create a branch,
3.x
, setsystemProp.version
in gradle.properties to3.1.0
, and push the new branch to GitHub. - An increment version workflow will make a pull request to set
systemProp.version
in gradle.properties to4.0.0
in themain
branch.
The release-drafter workflow will be automatically kicked off and is responsible for drafting a new release on GitHub containing release artifacts. Before creating a draft release, this workflow creates a GitHub issue asking for approval from the maintainers. See sample issue. The maintainers need to approve in order to continue the workflow run. Once a release is drafted opensearch-java-maven-sign-and-release Jenkins workflow is triggered. The artifacts will be automatically signed and published to maven.
The unreleased section in CHANGELOG should look like so.
## [Unreleased 2.x]
### Added
### Dependencies
### Changed
### Deprecated
### Removed
### Fixed
### Security