-
Notifications
You must be signed in to change notification settings - Fork 104
Add a section on pull requests to contributing instructions #635
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
mhauru
wants to merge
2
commits into
main
Choose a base branch
from
mhauru/contributing-branches
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+42
−0
Open
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -49,6 +49,48 @@ julia --project=. -e 'import Pkg; Pkg.test(; test_args=ARGS)' -- optim hmc --ski | |||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Or otherwise, set the global `ARGS` variable, and call `include("test/runtests.jl")`. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
### Pull requests, versions, and releases | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
We merge all code changes through pull requests on GitHub. To make a contribution to one of the Turing packages, fork it on GitHub, start a new branch on your fork, and add commits to it. Once you're done, open a pull request to the main repository under [TuringLang](https://github.com/TuringLang). Someone from the dev team will review your code (if they don't, ping `@TuringLang/maintainers` in a comment to get their attention) and check that the continuous integration tests pass. If all looks good, we'll merge your PR with much joy and gratitude If not, we'll help you fix it and then merge it with much joy and gratitude | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Everything in this section about pull requests and branches applies to the Turing.jl and DynamicPPL.jl repositories. Most of it also applies to other repositories under the TuringLang ecosystem, though some do not bother with the `main`/`breaking` distinction or with a `HISTORY.md`. As of August 2025 we are slowly moving towards having all repos do the full process, so a new `HISTORY.md` in a repo that doesn't yet have one is always welcome. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
#### Branches | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Like Julia packages generally, Turing follows [semantic versioning](https://semver.org/). Because of this, we have two persistently alive branches in our repository: `main` and `breaking`. All code that gets released as a new version of Turing gets merged into `main`, and a release is made from there. However, any breaking changes should first be merged into `breaking`. `breaking` will then periodically be merged into `main`. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
The idea is that `breaking` always contains commits that build towards the next breaking release in the semantic versioning sense. That is, if the changes you make might break or change the behaviour of correctly written code that uses Turing.jl, your PR should target the `breaking` branch, and your code should be merged into `breaking`. If your changes cause no such breakage for users, your PR should target `main`. Notably, any bug fixes should merge directly into `main`. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
This way we can frequently release new patch version from `main`, while developing breaking changes in parallel on `breaking`. E.g. if the current version is 0.19.3, and someone fixes a bug, we can merge the fix into `main` and release it as 0.19.4. Meanwhile, breaking changes can be developed and merged into `breaking`, which is building towards a release of 0.20.0. Multiple breaking changes may be accumulated into `breaking`, before finally the `breaking`-to-`main` merge is done, and 0.20.0 is released. On `breaking` the version number should then immediately be bumped to 0.21. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
We do not generally bother doing backports of bug fixes, though we may consider them in special circumstances. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
#### Change history | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
We keep a cumulative changelog in a file called `HISTORY.md` at the root of the repository. It should have an entry for every new breaking release, explaining everything our users need to know about the changes, such as what may have broken and how to fix things to work with the new version. Any major new features should also be described in `HISTORY.md`, as may any other changes that are useful for users to know about. Bug fixes generally don't need an entry in `HISTORY.md`. Any new breaking release must have an entry in `HISTORY.md`, entries for non-breaking releases are optional. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
#### Please make mistakes | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Getting pull requests from outside the core developer team is one of the greatest joys of open source maintenance, and Turing's community of contributors is its greatest asset. If you are thinking of contributing, please do open a pull request, even an imperfect or half-finished one, or an issue to discuss it first if you prefer. You don't need to nail all of the above details on the first go, the dev team is very happy to help you figure out how to bump version numbers or whether you need to target `main` or `breaking`. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
#### For Turing.jl core developers | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
If you are a core developer of TuringLang, two notes, in addition to the above, apply: | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
1. You don't need to make your own fork of the package you are editing. Just make a new branch on the main repository, usually named `your-username/change-you-are-making` (we don't strictly enforce this convention though). You should definitely still make a branch and a PR, and never push directly to `main` or `breaking`. | ||||||||||||||||||||||||||||||
2. You can make a release of the package after your work is merged into `main`. This is done by leaving a comment on the latest commit on `main`, saying | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||
@JuliaRegistrator register | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Release notes: | ||||||||||||||||||||||||||||||
[YOUR RELEASE NOTES HERE] | ||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Comment on lines
+83
to
+89
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||
The `@JuliaRegistrator` bot will handle creating a pull request into the Julia central package repository and tagging a new release in the repository. The release notes should be a copy-paste of the notes written in `HISTORY.md` if such an entry exists, or otherwise (for a patch release) a short summary of changes. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Even core devs should always merge all their code through pull requests into `main` or `breaking`. All code should generally be reviewed by another core developer and pass continuous integration (CI) checks. Exceptions can be made in some cases though, such as ignoring failing CI checks where the cause is known and not due to the current pull request, or skipping code review when the pull request author is an experienced developer of the package and the changes are trivial. | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
### Code Formatting | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
Turing uses [JuliaFormatter.jl](https://github.com/domluna/JuliaFormatter.jl) to ensure consistent code style across the codebase. | ||||||||||||||||||||||||||||||
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmmmm I've been putting changelog entries for all patch releases so far (at least for Turing / DPPL). I think it's a net benefit -- would it be too strict to enforce at least a one-liner for all releases?