ECMWF provides various levels of software codes, ranging from training codes and scripts, research projects to software supporting the production services. ECMWF has five spaces on GitHub and software are assign according to the use and support level:

GitHub spacePurposeSupport
ecmwfECMWF official software packagesSupport is given under the rules of ECMWF's Software Support. Users should report issues by email to Software.Software@ecmwf.int or in the Software Support page at ECMWF
ecmwf-projectsCodes for addressing scientific challenges or technical tasks which are aimed at specific user groups.There is no support commitment by ECMWF and users should contact the maintainers of the respective GitHub repository. (Checklist to add a repo there)
ecmwf-labECMWF codes for explorative work and one-off training and development activities. These codes might not be suitable for production use.No support by ECMWF, please contact developers within GitHub repository. (Checklist to add a repo there)
ecmwf-ifsSelected components of IFS that are available as open-sourceNo support by ECMWF, please contact developers within GitHub repository. (Checklist to add a repo there)
esowcEuropean Summer of Weather Code (ESoWC) projects No support by ECMWF, please contact developers within GitHub repository.

The GitHub ECMWF space

ECMWF tries to provide a set-up which allows easy co-operations with the wider community:

  • Allow users to fork code repositories & adopt the codes to their needs; but also allow continuous pulling of changes at their convenience. These changes can be contributed through pull requests.
  • Various test & build services can be automatically linked to the repositories to ensure CI testing and automatic builds.

Please note

Please note that many ECMWF git repositories are not self-contained! Many repositories require the ecBuild repository to be cloned/forked as well to be able to build the software. If the ecbuild repository is placed at the same level in your directory structure as the software package you intend to build, it should be found automatically.

Code contributions to ECMWF software

Code contributions on ECMWF GitHub space should follow the standard fork-based contribution model on GitHub, which ends with opening of a pull request. Any contribution should follow these steps:

  1. Fork the master branch of the targeted package from GitHub to your own GitHub space
  2. Clone your fork locally
  3. Make the necessary code changes & add and run tests to ensure the new codes works as intended
  4. Push changes back to fork on GitHub
  5. Create a pull request (PR) back to ECMWF:
    1. Describe the motivation of the change and impact on code
    2. Accept the ECMWF Contributors License Agreement (CLA - see below for more information)
    3. Make sure that all requirements of the PR are addressed
  6. As soon as all conditions are fulfilled an ECMWF staff member will review the PR and either merge the request or comment on the PR



The Contributor License Agreement (CLA)

All open source software packages at ECMWF are distributed under the Apache License 2.0. The standard Apache License was amended to cater for ECMWF special status as an international organisation. For you to be able to contribute any code to our software packages you need to agree that

  • ... you are happy for your code to be redistributed under Apache License.
  • ... that your contribution does not violate anyone's Intellectual Property Rights (IPR).

To do so, you and your organisation need to sign a contributors agreement.

At the beginning you see this comment -
press on the button "CLA not signed yet" and accept the agreement:

After this you will see the button becomes green:

Tips to get your pull request merged

  1. Any contribution must be built with cmake and tested with ctest (see General CMake installation instructions)
  2. Make sure that all provided regression tests have passed correctly in your development system
  3. We encourage you to test changes with as many host and target combinations as is practical.
  4. Ideally we would encourage you to also implement a new unit test to validate your changes. However if this is not possible, please provide us with data and a procedure for us to create the new test.
  5. Make sure your changes are documented (Ideally JIRA issue and/or page on Confluence)
    1. Make function and variable names meaningful and follow existing conventions
    2. Add comments appropriately.
    3. Any Python code should ideally be PEP8 compliant