This document explains the release strategy for artifacts in this organization.
Given the next major release of 4.0, current major release of 3.x, and latest minor release of 3.2, this project maintains the following active branches.
- main: The next major release, e.g.
4.0.0. This is the branch where all merges take place and code moves fast. - 3.x: The next minor release, e.g.
3.3.0. Once a change is merged intomain, decide whether to backport it to3.x. - 3.2: The next patch release, e.g.
3.2.1. In between minor releases, only hotfixes (e.g. security) are backported to3.2.
PRs go into main. Label PRs that you need to be backported as backport 3.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, except for 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.
3.2: next patch, i.e.3.2.1-SNAPSHOT3.x: next minor, i.e.3.3.0-SNAPSHOTmain: next major, i.e.4.0.0-SNAPSHOT
- If the
3.2branch does not exist, create it at the commit taggedv3.2.0and push it to the upstream repo. The bump version workflow will make a pull request to setsystemProp.versionin gradle.properties to3.2.1in the3.2branch. - Check out the
3.2branch, and create a new branch in your fork from it (i.e.release/3.2.1). - Ensure
systemProp.versionin gradle.properties matches the version being released, i.e.3.2.1. - Replace
## [Unreleased x.y]with## [3.2.1] - 07/20/2025in CHANGELOG. - Commit changes to
gradle.propertiesand CHANGELOG. - Pull-request the changes from your fork into the
3.2branch. - Create a tag,
v3.2.1, on the3.2branch and push it to the upstream repo. An automated release will be made. - The bump version workflow will make a pull request to set
systemProp.versionin gradle.properties to3.2.2in the3.2branch.
- Check out the
3.xbranch, and create a new branch in your fork from it (i.e.release/3.3.0). - Ensure
systemProp.versionin gradle.properties matches the version being released, i.e.3.3.0. - Replace
## [Unreleased x.y]with## [3.3.0] - 07/20/2025in CHANGELOG. - Commit changes to
gradle.propertiesand CHANGELOG. - Pull-request the changes from your fork into the
3.xbranch. - Create a tag,
v3.3.0, on the3.xbranch and push it to the upstream repo. An automated release will be made. - The bump version workflow will make a pull request to set
systemProp.versionin gradle.properties to3.4.0in the3.xbranch.
- Check out the
mainbranch, and create a new branch in your fork from it (i.e.release/4.0.0). - Ensure
systemProp.versionin gradle.properties matches the version being released, i.e.4.0.0. - Replace
## [Unreleased x.y]with## [4.0.0] - 07/20/2025in CHANGELOG. - Commit changes to
gradle.propertiesand CHANGELOG. - Pull-request the changes from your fork into the
mainbranch. - Create a tag,
v4.0.0, on themainbranch and push it to the upstream repo. An automated release will be made. - The bump version workflow will automatically:
- Make a pull request to set
systemProp.versionin gradle.properties to5.0.0in themainbranch. - Create a
4.xbranch. - Make a pull request to set
systemProp.versionin gradle.properties to4.1.0in the4.xbranch.
- Make a pull request to set
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 3.x]
### Added
### Dependencies
### Changed
### Deprecated
### Removed
### Fixed
### Security