These guidelines define how all external contributions to the ECMWF software stack must be developed, delivered, and maintained. They apply to all collaborators, including individuals, partner organisations, and contracted suppliers, across all ECMWF-managed repositories (software, configuration, deployment manifests, and scripts).
Two contribution pathways exist, depending on the nature of the work:
- Standard Contributions — the default method for all collaborators, using a fork and pull request workflow.
- Integration Delivery Workflow — an optional process for contractors who require tighter integration loops or internal tagging for staged testing prior to formal ECMWF review.
Public contributions follow the normal GitHub workflow.
- Fork the ECMWF repository into your own or your organisation’s GitHub space.
- Develop on your fork.
- When ready, open a Pull Request (PR) to the ECMWF repository.
- Follow the repository’s PR template and provide sufficient description, issue references, and rationale.
- Note that all contributions must comply with ECMWF’s copyright and licensing policies, as outlined in Copyright and Licensing.
- By creating a PR, you agree to the terms of the Contributor License Agreement (CLA) and this should be part of the PR template.
- ECMWF staff will review for safety and apply the label
approved-for-ci, which enables automated CI/CD checks. - The PR must pass all required tests, code-quality checks, and workflows before merge.
- All contributions must include tests demonstrating correct behaviour and preventing regressions.
This process applies equally to contractors unless following the Integration Delivery Workflow (Section 2).
For private repositories owned by ECMWF:
- Access requires an ECMWF GitHub Enterprise license.
- The project’s Technical Officer coordinates access requests.
- License management is handled by User Support (@bkasic).
- Development should occur on branches within the repository, using the same PR and review workflow as public repositories.
- Even for an internal/private repository, by creating a PR, you agree to the terms of the Contributor License Agreement (CLA) and this should be part of the PR template.
When a new repository is needed:
- It must be created under the ECMWF GitHub organisation, not a personal or external account.
- Creation is handled by ECMWF staff via the Technical Officer, and must follow the Requesting a New Repository procedure.
- Visibility (public or private) should be decided early, preferring public where feasible.
- If the project will eventually be public, start development publicly to avoid migration overhead.
- For public repositories or that eventually will be made public, all contributions must comply with ECMWF’s copyright and licensing policies, as outlined in Copyright and Licensing.
- Initialise the repository using the ECMWF cookie-cutter template and follow the Repository Structure.
- Add an appropriate Project Maturity Badge (e.g., Sandbox).
- Ensure the PR template includes the CLA agreement, so that all contributors agree to it when submitting contributions.
If ECMWF inherits an external repository (e.g., a Code4Earth project), one of three paths is used, to be decided case-by-case by ECMWF staff, typically the Technical Officer in agreement with Head of Development:
- Recreate and Import — create a new ECMWF repository using the cookie-cutter template, then import existing content via PR.
- Transfer Ownership — transfer the repository into ECMWF’s organisation once it complies with ECMWF’s licensing, copyright, and workflow requirements. This must include:
- Adding the CLA agreement to the PR template.
- Ensuring all past contributions comply with ECMWF’s Copyright and Licensing.
- Ensuring the open sourcing guidelines in Open Sourcing Software at ECMWF are followed.
- Fork — ECMWF forks the repository to maintain its own variant while the original remains active.
- Create an empty
defaultbranch containing a notice linking to the original project. - Make
defaultthe default branch so that it shows as the main entrypoint to the repository. - Disable all GitHub Actions to prevent execution of unverified workflows.
- Where applicable, ensure the forked repository complies with ECMWF’s Copyright and Licensing.
- Where applicable, ensure the open sourcing guidelines in Open Sourcing Software at ECMWF are followed.
- Create an empty
This workflow is only for external contractors who need a tighter development loop, internal tagging, or pre-delivery staging. It defines a controlled structure for interim releases before formal ECMWF acceptance. This should be used, for example, for systems or services which will be deployed (in a test or development environment ONLY) as part of the testing and acceptance process.
Contractors may work in one of two ways:
-
Forked Development — using the contractor’s fork of the ECMWF repository.
- The fork’s
mainbranch serves as the contractor’s working “upstream” branch. - Tags and iterations remain isolated to the contractor’s fork.
- The fork’s
-
ECMWF Integration Branch — when working directly in the ECMWF repository.
- The contractor creates their own integration branch named
upstreamor namespaced asupstream/<vendor>. - Direct commits to ECMWF’s
mainormasterare not permitted. - Force-pushes are prohibited.
- All changes are proposed to ECMWF
mainormastervia Pull Requests from the integration branch.
- The contractor creates their own integration branch named
Contractors using this model may create prerelease tags for internal testing and staging:
x.y.z-upstream.N
Where:
x.y.z= semantic version (major.minor.patch), which is the target release version upon acceptanceN= sequential prerelease number (1, 2, 3, …)
Rules:
- These prerelease tags are non-production.
- They must not appear on ECMWF’s
mainormasterbranches. - They are valid only for contractor-side testing, packaging, or CI pipelines.
- ECMWF production tags must use the clean Semantic Versioning form:
x.y.z
When ready for delivery:
-
Open a PR from the contractor’s fork
mainor from the ECMWF integration branch (upstreamorupstream/<vendor>) into ECMWF’smainormaster. -
ECMWF staff perform review, validation, and compliance checks.
- Note: at this stage, all contributions must comply with ECMWF’s copyright and licensing policies, as outlined in Copyright and Licensing and for open source projects, the Open Sourcing Software at ECMWF guidelines.
-
Upon acceptance, ECMWF merges the PR. When appropriate, ECMWF can apply a production tag:
x.y.z
Note: Acceptance of the PR into main or master is the point at which a contractor's deliverable is accepted for the purposes of the contract.
Only a production tag marks the release as production-ready.
- Upstream tags are explicitly non-production.
- Only clean ECMWF-issued tags (
x.y.z) onmainormasterrepresent production software. - Non-production tags must never be deployed beyond development or test environments.