2017-08-08 10:27:12 -04:00
# Contributing
2016-06-08 03:59:08 -04:00
2012-11-14 14:40:13 -05:00
Contributions from the community are essential in keeping Hibernate (any Open Source
2017-08-08 10:27:12 -04:00
project really) strong and successful.
# Legal
All original contributions to Hibernate are licensed under the
[GNU Lesser General Public License (LGPL) ](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt ),
version 2.1 or later, or, if another license is specified as governing the file or directory being
2017-08-09 12:48:16 -04:00
modified, such other license. The LGPL text is included verbatim in the [lgpl.txt ](lgpl.txt ) file
2017-08-08 10:27:12 -04:00
in the root directory of the ORM repository.
All contributions are subject to the [Developer Certificate of Origin (DCO) ](https://developercertificate.org/ ).
2017-08-09 12:48:16 -04:00
The DCO text is also included verbatim in the [dco.txt ](dco.txt ) file in the root directory of the ORM repository.
2017-08-08 10:27:12 -04:00
## Guidelines
While we try to keep requirements for contributing to a minimum, there are a few guidelines
we ask that you mind.
For code contributions, these guidelines include:
2021-06-02 17:14:23 -04:00
* respect the project code style - find templates for [IntelliJ IDEA ](https://hibernate.org/community/contribute/intellij-idea/ ) or [Eclipse ](https://hibernate.org/community/contribute/eclipse-ide/ )
2017-08-08 10:27:12 -04:00
* have a corresponding JIRA issue and the key for this JIRA issue should be used in the commit message
* have a set of appropriate tests. For bug reports, the tests reproduce the initial reported bug
2021-06-02 17:14:23 -04:00
and illustrate that the solution actually fixes the bug. For features/enhancements, the
2017-08-08 10:27:12 -04:00
tests illustrate the feature working as intended. In both cases the tests are incorporated into
2021-01-12 22:22:43 -05:00
the project to protect against regressions
2017-08-08 10:27:12 -04:00
* if applicable, documentation is updated to reflect the introduced changes
* the code compiles and the tests pass (`./gradlew clean build`)
For documentation contributions, mainly just respect the project code style, especially in regards
2021-01-12 22:22:43 -05:00
to use of tabs - as mentioned above, code style templates are available for both IntelliJ IDEA and Eclipse
IDEs. Ideally these contributions would also have a corresponding JIRA issue, although this
2017-08-08 10:27:12 -04:00
is less necessary for documentation contributions.
2012-11-14 14:40:13 -05:00
## Getting Started
2016-06-08 03:59:08 -04:00
2012-11-14 14:40:13 -05:00
If you are just getting started with Git, GitHub and/or contributing to Hibernate via
2017-08-08 10:27:12 -04:00
GitHub there are a few pre-requisite steps to follow:
2012-11-14 14:40:13 -05:00
2021-01-12 22:22:43 -05:00
* make sure you have a [Hibernate JIRA account ](https://hibernate.atlassian.net )
* make sure you have a [GitHub account ](https://github.com/signup/free )
* [fork ](https://help.github.com/articles/fork-a-repo ) the Hibernate repository. As discussed in
2012-11-14 14:40:13 -05:00
the linked page, this also includes:
2021-01-12 22:22:43 -05:00
* [set up your local git install ](https://help.github.com/articles/set-up-git )
* clone your fork
2021-06-02 17:14:23 -04:00
* see the wiki pages for setting up your IDE, whether you use
[IntelliJ IDEA ](https://hibernate.org/community/contribute/intellij-idea/ )
or [Eclipse ](https://hibernate.org/community/contribute/eclipse-ide/ )< sup > (1)</ sup > .
2012-11-14 14:40:13 -05:00
2017-08-08 10:27:12 -04:00
2012-11-14 14:40:13 -05:00
## Create the working (topic) branch
2016-06-08 03:59:08 -04:00
2021-06-02 17:14:23 -04:00
Create a [topic branch ](https://git-scm.com/book/en/Git-Branching-Branching-Workflows#Topic-Branches )
2017-08-08 10:27:12 -04:00
on which you will work. The convention is to incorporate the JIRA issue key in the name of this branch,
2017-08-08 12:44:45 -04:00
although this is more of a mnemonic strategy than a hard-and-fast rule - but doing so helps:
2017-08-08 10:27:12 -04:00
* remember what each branch is for
2021-01-12 22:22:43 -05:00
* isolate the work from other contributions you may be working on
2017-08-08 10:27:12 -04:00
2017-08-08 12:44:45 -04:00
_If there is not already a JIRA issue covering the work you want to do, create one._
2021-03-19 11:59:03 -04:00
Assuming you will be working from the `main` branch and working
on the JIRA HHH-123 : `git checkout -b HHH-123 main`
2012-11-14 14:40:13 -05:00
## Code
2016-06-08 03:59:08 -04:00
2021-01-12 22:22:43 -05:00
Do your thing!
2012-11-14 14:40:13 -05:00
2017-08-08 12:44:45 -04:00
2012-11-14 14:40:13 -05:00
## Commit
2021-01-12 22:22:43 -05:00
* make commits of logical units
* be sure to **use the JIRA issue key** in the commit message. This is how JIRA will pick
up the related commits and display them on the JIRA issue
* make sure you have added the necessary tests for your changes
* run _all_ the tests to assure nothing else was accidentally broken
* make sure your source does not violate the _checkstyles_
2012-11-14 14:40:13 -05:00
2015-06-26 17:38:35 -04:00
_Prior to committing, if you want to pull in the latest upstream changes (highly
2012-11-14 14:40:13 -05:00
appreciated btw), please use rebasing rather than merging. Merging creates
"merge commits" that really muck up the project timeline._
## Submit
2016-06-08 03:59:08 -04:00
2021-01-12 22:22:43 -05:00
* push your changes to the topic branch in your fork of the repository
2021-06-02 17:14:23 -04:00
* initiate a [pull request ](https://help.github.com/articles/creating-a-pull-request )
2021-01-12 22:22:43 -05:00
* update the JIRA issue by providing the PR link in the **Pull Request** column on the right
2017-08-08 10:27:12 -04:00
It is important that this topic branch on your fork:
* be isolated to just the work on this one JIRA issue, or multiple issues if they are
related and also fixed/implemented by this work. The main point is to not push
commits for more than one PR to a single branch - GitHub PRs are linked to
2021-01-12 22:22:43 -05:00
a branch rather than specific commits
2017-08-08 10:27:12 -04:00
* remain until the PR is closed. Once the underlying branch is deleted the corresponding
2021-01-12 22:22:43 -05:00
PR will be closed, if not already, and the changes will be lost
2018-05-29 17:04:13 -04:00
# Notes
< sup > (1)</ sup > Gradle `eclipse` plugin is no longer supported, so the recommended way to import the project in your IDE is with the proper IDE tools/plugins. Don't try to run `./gradlew clean eclipse --refresh-dependencies` from the command line as you'll get an error because `eclipse` no longer exists