For uniformity and clarity, the SciML Open Source Software Organization has many well-defined rules and practices for its development. However, we stress one important principle:
Do not be detered from contributing if you think you do not know everything. No one knows everything. These rules and styles are designed for iterative contributions. Open pull requests and contribute what you can with what you know, and the maintainers will help you learn and do the rest!
If you need any help contributing, please feel welcome joining our community channels.
- The #diffeq-bridged and #sciml-bridged channels in the Julia Slack
- JuliaDiffEq on Gitter
- On the Julia Discourse forums
- See also SciML Community page
We welcome everybody.
To get started contributing to SciML, check out the following resources:
This is a style guide for how to program in Julia for SciML contributions. It describes everything one needs to know, from preferred naming schemes of functions to fundamental dogmas for designing traits. We stress that this style guide is meant to be comprehensive for the sake of designing automatic formatters and teaching desired rules, but complete knoweldge and adherance to the style guide is not required for contributions!
What are the rules for when PRs should be merged? What are the rules for whether to tag a major, minor, or patch release? All of these development rules are defined in COLPRAC.
There are many solver libraries which share similar internals, such as OrdinaryDiffEq.jl, StochasticDiffEq.jl, and DelayDiffEq.jl. This section of the documentation describes the internal systems of these packages and how they are used to quickly write efficient solvers.
Documenter.jl is the documentation generation library that the SciML organization uses, and thus its documentation is the documentation of the documentation.
JuliaFormatter.jl is the formatter used by the SciML organization to enforce the SciML Style. Setting
style = "sciml" in a
.JuliaFormatter.toml file of a repo and using the standard FormatCheck.yml as part of continuous integration makes JuliaFormatter check for SciML Style compliance on pull requests.
To run JuliaFormatter in a SciML repository, do:
using JuliaFomatter, DevedPackage JuliaFormatter.format(pkgdir(DevedPackage))
which will reformat the code according to the SciML Style.
The SciML Organization uses continuous integration testing to always ensure tests are passing when merging pull requests. The organization uses the Github Actions supplied by Julia Actions to accomplish this. Common continuous integration scripts are:
- CI.yml, the standard CI script
- Downstream.yml, used to specify packages for downstream testing. This will make packages which depend on the current package also be tested to ensure that "non-breaking changes" do not actually break other packages.
- Documentation.yml, used to run the documentation automatic generation with Documenter.jl
- FormatCheck.yml, used to check JuliaFormatter SciML Style compliance
CompatHelper is used to automatically create pull requests whenever a dependent package is upper bounded. The results of CompatHelper PRs should be checked to ensure that the latest version of the dependencies are grabbed for the test process. After successful CompatHelper PRs, i.e. if the increase of the upper bound did not cause a break to the tests, a new version tag should follow. It is setup by adding the CompatHelper.yml Github action.
TagBot automatically creates tags in the Github repository whenever a package is registered to the Julia General repository. It is setup by adding the TagBot.yml Github action.