First off, thank you for considering contributing to CIME. CIME is a community-driven project, so it's people like you that make CIME useful and successful.
Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests.
We love contributions from community members, just like you! There are many ways to contribute, from writing tutorials or examples, improvements to the documentation, submitting bug report and feature requests, or even writing code which can be incorporated into CIME for everyone to use. If you get stuck at any point you can create an issue on GitHub.
For more information on contributing to open source projects, GitHub's own guide is a great starting point. Also, checkout the Zen of Scientific Software Maintenance for some guiding principles on how to create high quality scientific software contributions.
Interested in helping extend CIME? Have code from your research that you believe others will find useful? Have a few minutes to tackle an issue? In this guide we will get you setup and integrated into contributing to CIME!
-
Tackle any unassigned issues you wish!
-
Contribute code you already have. It doesn’t need to be perfect! We will help you clean things up, test it, etc.
-
Make a tutorial or example of how to do something.
Discussion of CIME development often happens in the issue tracker and in pull requests.
The goal is to maintain a diverse community that's pleasant for everyone.
- Each pull request should consist of a logical collection of changes. You can include multiple bug fixes in a single pull request, but they should be related. For unrelated changes, please submit multiple pull requests.
- Do not commit changes to files that are irrelevant to your feature or bugfix (eg: .gitignore).
- Be willing to accept constructive criticism as part of issuing a pull request, since the CIME developers are dedicated to ensuring that new features extend the system robustly and do not introduce new bugs.
- Be aware that the pull request review process is not immediate, and is generally proportional to the size of the pull request.
When creating a new issue, please be as specific as possible. Include the version of the code you were using, as well as what operating system you are running. If possible, include complete, minimal example code that reproduces the problem.
Working on your first Pull Request? You can learn how from this free video series How to Contribute to an Open Source Project on GitHub or the guide “How to Contribute to Open Source". We love pull requests from everyone. Fork, then clone the repo:
git clone git@github.com:your-username/CIME.git
Additionally you may need to checkout the submodules with:
cd CIME
git submodule update --init
You will need to install CIME dependencies and edit config files to tell CIME about your development machine. See the CIME users guide
Run the scripts_regression_tests:
cd CIME/tests
python scripts_regression_tests.py
Alternatively with pytest
:
pytest CIME/tests
Make your change. Add tests for your change. Make the tests pass to the same level as before your changes.
cd CIME/tests
python scripts_regression_tests.py
Run pre-commit before committing changes and submitting a PR.
pip install pre-commit
pre-commit run -a
Commit the changes you made. Chris Beams has written a guide on how to write good commit messages.
Push to your fork and submit a pull request.
Once you have submitted a pull request, expect to hear at least a comment within a couple of days. We may suggest some changes or improvements or alternatives.
Some things that will increase the chance that your pull request is accepted:
- Write tests.
- Follow PEP8 for style. (The
flake8
utility can help with this.) - Write a good commit message.
Pull requests will automatically have tests run by a Github Action. This
includes running both the unit tests as well as pre-commit
, which checks
linting.