Guide for maintainers of Hibernate ORM
====
This guide is intended for maintainers of Hibernate ORM,
i.e. anybody with direct push access to the git repository.
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md).
## Continuous integration
Continuous integration is split across two platforms:
* GitHub Actions at https://github.com/hibernate/hibernate-orm/actions
* a self-hosted Jenkins instance at https://ci.hibernate.org.
### GitHub Actions workflows
TODO: describe the workflows available.
### Jenkins main pipeline
https://ci.hibernate.org/job/hibernate-orm-pipeline/
This job takes care of testing additional DBs for:
* Primary branch builds
* Pull request builds
It is generally triggered on push,
but can also be triggered manually,
which is particularly useful to test more environments on a pull request.
See [Jenkinsfile](Jenkinsfile) for the job definition.
### Release pipeline
https://ci.hibernate.org/job/hibernate-orm-release/
This job takes care of releases. It is triggered manually.
See [ci/release/Jenkinsfile](ci/release/Jenkinsfile) for the job definition.
See [Releasing](#releasing) for more information.
## Releasing
### Automated releases
On select maintenance branches (`6.2`, `6.4`, ...),
micro releases (`x.y.1`, `x.y.2`, ...) are performed as soon as you push to that branch.
Make sure to assign fix versions properly before merging pull requests.
No announcements are expected for such releases:
neither through X, blog posts, or email.
### Manual releases
On `main` and some maintenance branches (`6.5`, ...),
automated releases are disabled.
You must perform releases by manually triggering a CI job.
#### Preparing the release
In any case, before the release:
* Check that everything has been pushed to the upstream repository.
* Check that the [CI jobs](#continuous-integration) for the branch you want to release are green.
* Check Jira [Releases](https://hibernate.atlassian.net/projects/HHH?selectedItem=com.atlassian.jira.jira-projects-plugin%3Arelease-page):
* Check that the release you are about to publish exists in Jira.
* Check there are no outstanding issues assigned to that release.
* Check there are no resolved/closed issues in the corresponding "work-in-progress version"
(e.g. `6.6`, `6.6-next`, ... naming convention may vary);
if there are, you might want to assign them to your release.
**If it is a new major or minor release**, before the release:
* Reset the migration guide to include only information relevant to the new major or minor.
**If it's a `.CR` or `.Final` release**, before the release:
* Check that the [migration guide](documentation/src/main/asciidoc/migration/index.adoc) is up to date.
In particular, check the git history for API/SPI changes
and document them in the migration guide.
#### Performing the release
Once you trigger the CI job, it automatically pushes artifacts to the
[OSSRH Maven Repository](https://repo1.maven.org/maven2/org/hibernate/orm/),
and the documentation to [docs.jboss.org](https://docs.jboss.org/hibernate/orm/).
* Do *not* mark the Jira Release as "released" or close issues,
the release job does it for you.
* Do *not* update the repository (in particular changelog.txt and README.md),
the release job does it for you.
* Trigger the release on CI:
* Go to CI, to [the "hibernate-orm-release" CI job](https://ci.hibernate.org/job/hibernate-orm-release/).
* Click the "run" button (the green triangle on top of a clock, to the right) next to the branch you want to release.
* **Be careful** when filling the form with the build parameters.
Note only `RELEASE_VERSION` is absolutely necessary.
* Note that for new branches where the job has never run, the first run may not ask for parameters and thus may fail:
that's expected, just run it again.
After the job succeeds:
* Update [hibernate.org](https://github.com/hibernate/hibernate.org) if necessary:
* If it is a new major or minor release, add a `_data/projects/orm/releases/series.yml` file
and a `orm/releases//index.adoc` file.
* Adjust the release file in `_data/projects/orm/releases`: use a meaningful summary and set `announcement_url` to the blog post, if any.
* Depending on which series you want to have displayed,
make sure to adjust the `status`/`displayed` attributes of the `series.yml` file of the old series.
* Push to the production branch.
* Check that the artifacts are available on Maven Central:
https://repo1.maven.org/maven2/org/hibernate/orm/hibernate-core/.
They should appear after a few minutes, sometimes a few hours.
* Make sure a GitHub release got created and that everything looks ok.
#### Announcing the release
* Send an email to `hibernate-announce@lists.jboss.org` and CC `hibernate-dev@lists.jboss.org`.
* Tweet about the release via the `@Hibernate` account.
#### Updating depending projects
If you just released the latest stable, you will need to update other projects:
* Approve and merge automatic updates that dependabot will send (it might take ~24h):
* In the [test case templates](https://github.com/hibernate/hibernate-test-case-templates/tree/master/orm).
* In the [demos](https://github.com/hibernate/hibernate-demos/tree/master/hibernate-orm).
* **If it's a `.Final` release**, upgrade the Hibernate ORM dependency manually:
* In the [Quarkus BOM](https://github.com/quarkusio/quarkus/blob/main/bom/application/pom.xml).
* In any other relevant project.
#### Updating Hibernate ORM
In any case:
* Reset [release_notes.md](release_notes.md).
**If it is a new major or minor release**:
* Reset the migration guide on the `main` branch if you forgot about it when preparing the release.
* Create a maintenance branch for the previous series, if necessary; see [branching](branching.adoc).