From bb03abfc1a9cf74ff30dd2b59ed458fd5f5584cc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 19:16:21 +0000 Subject: [PATCH 1/8] Initial plan From 45dcfa6f6137cdd5597d955ae0940cf413543dd4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 19:24:25 +0000 Subject: [PATCH 2/8] Tidy up repository: rename directories to lowercase kebab-case and fix typos Co-authored-by: jameshawkes <11695815+jameshawkes@users.noreply.github.com> --- README.md | 22 +++++++----- {ADR => adr}/ADR-001-Git-Branching-Model.md | 0 .../ADR-002-Optional-Dependency-CLI11.md | 0 .../ADR-003-PyBind11-For-CPP-Bindings.md | 0 {ADR => adr}/ADR-Guidelines.md | 10 +++--- {ADR => adr}/ADR-Index.md | 0 {ADR => adr}/ADR-Template.md | 0 .../README.md | 0 .../forking.md | 0 .../readme.md | 0 .../README.md | 0 {ESEE => esee}/README.md | 16 ++++----- {ESEE => esee}/data_provision_badge.svg | 0 {ESEE => esee}/foundation_badge.svg | 0 {ESEE => esee}/production_chain_badge.svg | 0 {ESEE => esee}/user_interaction_badge.svg | 0 .../README.md | 24 ++++++------- {Guidelines => guidelines}/pr_guidelines.md | 4 +-- {Languages => languages}/C++/README.md | 0 {Languages => languages}/C++/clang-format | 0 {Languages => languages}/C++/clang-tidy | 0 {Languages => languages}/python_wheels.md | 0 {Languages => languages}/versioning.md | 2 +- .../ai_contributions_to_software.md | 0 {Legal => legal}/apache-licence | 0 .../contributor_license_agreement.md | 0 {Legal => legal}/copyright_and_licensing.md | 2 +- {Legal => legal}/open_sourcing_software.md | 6 ++-- {Legal => legal}/requesting_new_repository.md | 2 +- .../README.md | 32 +++++++++--------- .../archived_badge.svg | 0 .../emerging_badge.svg | 0 .../graduated_badge.svg | 0 .../incubating_badge.svg | 0 .../sandbox_badge.svg | 0 .../README.md | 2 +- .../example.md | 0 .../README.md | 16 ++++----- .../SMP-example.docx | Bin .../SMP-template.docx | Bin {Testing => testing}/README.md | 0 41 files changed, 71 insertions(+), 67 deletions(-) rename {ADR => adr}/ADR-001-Git-Branching-Model.md (100%) rename {ADR => adr}/ADR-002-Optional-Dependency-CLI11.md (100%) rename {ADR => adr}/ADR-003-PyBind11-For-CPP-Bindings.md (100%) rename {ADR => adr}/ADR-Guidelines.md (94%) rename {ADR => adr}/ADR-Index.md (100%) rename {ADR => adr}/ADR-Template.md (100%) rename {Containerisation => containerisation}/README.md (100%) rename {Contributing Externally => contributing-externally}/forking.md (100%) rename {Contributing Externally => contributing-externally}/readme.md (100%) rename {Documentation and Training => documentation}/README.md (100%) rename {ESEE => esee}/README.md (74%) rename {ESEE => esee}/data_provision_badge.svg (100%) rename {ESEE => esee}/foundation_badge.svg (100%) rename {ESEE => esee}/production_chain_badge.svg (100%) rename {ESEE => esee}/user_interaction_badge.svg (100%) rename {External Contributions => external-contributions}/README.md (89%) rename {Guidelines => guidelines}/pr_guidelines.md (98%) rename {Languages => languages}/C++/README.md (100%) rename {Languages => languages}/C++/clang-format (100%) rename {Languages => languages}/C++/clang-tidy (100%) rename {Languages => languages}/python_wheels.md (100%) rename {Languages => languages}/versioning.md (87%) rename {Legal => legal}/ai_contributions_to_software.md (100%) rename {Legal => legal}/apache-licence (100%) rename {Legal => legal}/contributor_license_agreement.md (100%) rename {Legal => legal}/copyright_and_licensing.md (99%) rename {Legal => legal}/open_sourcing_software.md (95%) rename {Legal => legal}/requesting_new_repository.md (99%) rename {Project Maturity => project-maturity}/README.md (69%) rename {Project Maturity => project-maturity}/archived_badge.svg (100%) rename {Project Maturity => project-maturity}/emerging_badge.svg (100%) rename {Project Maturity => project-maturity}/graduated_badge.svg (100%) rename {Project Maturity => project-maturity}/incubating_badge.svg (100%) rename {Project Maturity => project-maturity}/sandbox_badge.svg (100%) rename {Repository Structure => repository-structure}/README.md (98%) rename {Repository Structure => repository-structure}/example.md (100%) rename {Sofware Management Plan => software-management-plan}/README.md (92%) rename {Sofware Management Plan => software-management-plan}/SMP-example.docx (100%) rename {Sofware Management Plan => software-management-plan}/SMP-template.docx (100%) rename {Testing => testing}/README.md (100%) diff --git a/README.md b/README.md index 3e3f951..511f58c 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,16 @@ The Codex is a set of guidelines for development of software and services at ECM # Contents -- [Architectural Decision Records](./ADR) -- [Repository Structure](./Repository%20Structure) -- [Project Maturity](./Project%20Maturity) -- [Containerisation](./Containerisation) -- [Testing](./Testing) -- [ECMWF Software EnginE (ESEE)](./ESEE) -- [External Contributions](./External%20Contributions/) -- [Documentation and Training](./Documentation%20and%20Training/) -- [Contributing to External Projects](./Contributing%20Externally/) +- [Architectural Decision Records](./adr) +- [Repository Structure](./repository-structure) +- [Project Maturity](./project-maturity) +- [Containerisation](./containerisation) +- [Testing](./testing) +- [ECMWF Software EnginE (ESEE)](./esee) +- [External Contributions](./external-contributions/) +- [Documentation and Training](./documentation/) +- [Contributing to External Projects](./contributing-externally/) +- [Guidelines](./guidelines/) +- [Languages](./languages/) +- [Legal](./legal/) +- [Software Management Plan](./software-management-plan/) diff --git a/ADR/ADR-001-Git-Branching-Model.md b/adr/ADR-001-Git-Branching-Model.md similarity index 100% rename from ADR/ADR-001-Git-Branching-Model.md rename to adr/ADR-001-Git-Branching-Model.md diff --git a/ADR/ADR-002-Optional-Dependency-CLI11.md b/adr/ADR-002-Optional-Dependency-CLI11.md similarity index 100% rename from ADR/ADR-002-Optional-Dependency-CLI11.md rename to adr/ADR-002-Optional-Dependency-CLI11.md diff --git a/ADR/ADR-003-PyBind11-For-CPP-Bindings.md b/adr/ADR-003-PyBind11-For-CPP-Bindings.md similarity index 100% rename from ADR/ADR-003-PyBind11-For-CPP-Bindings.md rename to adr/ADR-003-PyBind11-For-CPP-Bindings.md diff --git a/ADR/ADR-Guidelines.md b/adr/ADR-Guidelines.md similarity index 94% rename from ADR/ADR-Guidelines.md rename to adr/ADR-Guidelines.md index f85b281..7f16756 100644 --- a/ADR/ADR-Guidelines.md +++ b/adr/ADR-Guidelines.md @@ -4,7 +4,7 @@ This document provides a Guidelines and a template for creating Architectural De ## Template for Architectural Decision Records (ADRs) -Please find the template for creatinsg ADRs in the [ADR-Template.md](./ADR-Template.md) file. This template should be used for all ADRs to ensure consistency and clarity. +Please find the template for creating ADRs in the [ADR-Template.md](./ADR-Template.md) file. This template should be used for all ADRs to ensure consistency and clarity. ## Purpose @@ -22,7 +22,7 @@ Create an ADR when making decisions that: - **Require justification and analysis** - Trade-offs between options, risk assessments, cost-benefit - **Involve trade-offs between alternatives** - For example performance vs. maintainability, cost vs. functionality - **Establish important conventions** - Coding standards, deployment processes, monitoring strategies -- **Address compliance or regulatory requirements** - Adherance to standards like OGC and Data governance, but also security policies and identity managment +- **Address compliance or regulatory requirements** - Adherence to standards like OGC and Data governance, but also security policies and identity management ## Writing Guidelines @@ -126,10 +126,10 @@ Before finalizing an ADR, ensure it meets these criteria: ## Numbering and Filing -- Use sequential numbering: ADR-001-Meaningfull-Title, ADR-002-Another-Meaningfull-Title, etc. -- Store ADRs in the central **Codex** repository under `/ADR/` +- Use sequential numbering: ADR-001-Meaningful-Title, ADR-002-Another-Meaningful-Title, etc. +- Store ADRs in the central **Codex** repository under `/adr/` - Use descriptive filenames: `ADR-001-Git-Branching-Model.md` -- Use the [ADR index](./ADR/ADR-Index.md) to track all ADRs and their statuses +- Use the [ADR index](./ADR-Index.md) to track all ADRs and their statuses ## Review Process diff --git a/ADR/ADR-Index.md b/adr/ADR-Index.md similarity index 100% rename from ADR/ADR-Index.md rename to adr/ADR-Index.md diff --git a/ADR/ADR-Template.md b/adr/ADR-Template.md similarity index 100% rename from ADR/ADR-Template.md rename to adr/ADR-Template.md diff --git a/Containerisation/README.md b/containerisation/README.md similarity index 100% rename from Containerisation/README.md rename to containerisation/README.md diff --git a/Contributing Externally/forking.md b/contributing-externally/forking.md similarity index 100% rename from Contributing Externally/forking.md rename to contributing-externally/forking.md diff --git a/Contributing Externally/readme.md b/contributing-externally/readme.md similarity index 100% rename from Contributing Externally/readme.md rename to contributing-externally/readme.md diff --git a/Documentation and Training/README.md b/documentation/README.md similarity index 100% rename from Documentation and Training/README.md rename to documentation/README.md diff --git a/ESEE/README.md b/esee/README.md similarity index 74% rename from ESEE/README.md rename to esee/README.md index 3e2d762..b200e80 100644 --- a/ESEE/README.md +++ b/esee/README.md @@ -11,32 +11,32 @@ ESEE components are split into **four sub-categories**: ## Production Chain -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/production_chain_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/production_chain_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) ESEE Production Chain encompasses components that drive the execution of operational and research workflows, managing complex dependencies, scheduling, and processing of data at scale. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/production_chain_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/production_chain_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) ## Data Provision -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/data_provision_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/data_provision_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) ESEE Data Provision category includes components responsible for managing, storing, and delivering data, ensuring that users can access large datasets with ease. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/data_provision_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/data_provision_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) ## User Interaction -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/user_interaction_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/user_interaction_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) ESEE User Interaction focuses on user APIs, visualization tools, and interactive environments that allow users to efficiently access and work with Earth System data and tools. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/user_interaction_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/user_interaction_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) ## Foundation -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/foundation_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/foundation_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) ESEE Foundation comprises essential libraries, frameworks, and utilities that ensure scalability, interoperability, and performance across all components. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/foundation_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/foundation_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) diff --git a/ESEE/data_provision_badge.svg b/esee/data_provision_badge.svg similarity index 100% rename from ESEE/data_provision_badge.svg rename to esee/data_provision_badge.svg diff --git a/ESEE/foundation_badge.svg b/esee/foundation_badge.svg similarity index 100% rename from ESEE/foundation_badge.svg rename to esee/foundation_badge.svg diff --git a/ESEE/production_chain_badge.svg b/esee/production_chain_badge.svg similarity index 100% rename from ESEE/production_chain_badge.svg rename to esee/production_chain_badge.svg diff --git a/ESEE/user_interaction_badge.svg b/esee/user_interaction_badge.svg similarity index 100% rename from ESEE/user_interaction_badge.svg rename to esee/user_interaction_badge.svg diff --git a/External Contributions/README.md b/external-contributions/README.md similarity index 89% rename from External Contributions/README.md rename to external-contributions/README.md index dbfdca1..778b0ea 100644 --- a/External Contributions/README.md +++ b/external-contributions/README.md @@ -19,8 +19,8 @@ Public contributions follow the normal GitHub workflow. - 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](../Legal/copyright_and_licensing.md). -- By creating a PR, you agree to the terms of the [Contributor License Agreement (CLA)](../Legal/contributor_license_agreement.md) and this should be part of the PR template. +- Note that all contributions must comply with ECMWF’s copyright and licensing policies, as outlined in [Copyright and Licensing](../legal/copyright_and_licensing.md). +- By creating a PR, you agree to the terms of the [Contributor License Agreement (CLA)](../legal/contributor_license_agreement.md) 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. @@ -35,19 +35,19 @@ For private repositories owned by ECMWF: - 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)](../Legal/contributor_license_agreement.md) and this should be part of the PR template. +- Even for an internal/private repository, by creating a PR, you agree to the terms of the [Contributor License Agreement (CLA)](../legal/contributor_license_agreement.md) and this should be part of the PR template. ### New Repositories 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](../Legal/requesting_new_repository.md) procedure. +- Creation is handled by ECMWF staff via the Technical Officer, and must follow the [Requesting a New Repository](../legal/requesting_new_repository.md) 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](../Legal/copyright_and_licensing.md). -- Initialise the repository using the ECMWF cookie-cutter template and follow the [Repository Structure](../Repository%20Structure/README.md). -- Add an appropriate [Project Maturity Badge](../Project%20Maturity/README.md) (e.g., *Sandbox*). +- 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](../legal/copyright_and_licensing.md). +- Initialise the repository using the ECMWF cookie-cutter template and follow the [Repository Structure](../repository-structure/README.md). +- Add an appropriate [Project Maturity Badge](../project-maturity/README.md) (e.g., *Sandbox*). - Ensure the PR template includes the CLA agreement, so that all contributors agree to it when submitting contributions. ### Existing Repositories @@ -57,14 +57,14 @@ If ECMWF inherits an external repository (e.g., a Code4Earth project), one of th 1. **Recreate and Import** — create a new ECMWF repository using the cookie-cutter template, then import existing content via PR. 2. **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](../Legal/copyright_and_licensing.md). - - Ensuring the open sourcing guidelines in [Open Sourcing Software at ECMWF](../Legal/open_sourcing_software.md) are followed. + - Ensuring all past contributions comply with ECMWF’s [Copyright and Licensing](../legal/copyright_and_licensing.md). + - Ensuring the open sourcing guidelines in [Open Sourcing Software at ECMWF](../legal/open_sourcing_software.md) are followed. 3. **Fork** — ECMWF forks the repository to maintain its own variant while the original remains active. - Create an empty `default` branch containing a notice linking to the original project. - Make `default` the 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](../Legal/copyright_and_licensing.md). - - Where applicable, ensure the open sourcing guidelines in [Open Sourcing Software at ECMWF](../Legal/open_sourcing_software.md) are followed. + - Where applicable, ensure the forked repository complies with ECMWF’s [Copyright and Licensing](../legal/copyright_and_licensing.md). + - Where applicable, ensure the open sourcing guidelines in [Open Sourcing Software at ECMWF](../legal/open_sourcing_software.md) are followed. --- @@ -116,7 +116,7 @@ When ready for delivery: 1. Open a PR from the contractor’s fork `main` or from the ECMWF integration branch (`upstream` or `upstream/`) into ECMWF’s `main` or `master`. 2. 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](../Legal/copyright_and_licensing.md) and for open source projects, the [Open Sourcing Software at ECMWF](../Legal/open_sourcing_software.md) guidelines. + - **Note:** at this stage, all contributions must comply with ECMWF’s copyright and licensing policies, as outlined in [Copyright and Licensing](../legal/copyright_and_licensing.md) and for open source projects, the [Open Sourcing Software at ECMWF](../legal/open_sourcing_software.md) guidelines. 3. Upon acceptance, ECMWF merges the PR. When appropriate, ECMWF can apply a **production tag**: diff --git a/Guidelines/pr_guidelines.md b/guidelines/pr_guidelines.md similarity index 98% rename from Guidelines/pr_guidelines.md rename to guidelines/pr_guidelines.md index 8ced895..af9f973 100644 --- a/Guidelines/pr_guidelines.md +++ b/guidelines/pr_guidelines.md @@ -5,7 +5,7 @@ Changes to our repositories primary branches, i.e. 'main' / 'master' / Requests (PR). Reviewer and Reviewee have specific responsibilities. This document aims to help both roles to understand their responsibilities. Please also refer to our branching policy in -[ADR-001](../ADR/ADR-001-Git-Branching-Model.md) +[ADR-001](../adr/ADR-001-Git-Branching-Model.md) ## Preparation @@ -67,7 +67,7 @@ merge commits such as "WIP" or "Fix Review Comment", commits like this make it more difficult in the future to reason about changes. Be aware that this means rewriting your PRs history. While history rewriting is strongly discourraged for the primary branches, it is explicitly encouraged on your development -branch to create meaningfull commits. +branch to create meaningful commits. ## General Guidelines diff --git a/Languages/C++/README.md b/languages/C++/README.md similarity index 100% rename from Languages/C++/README.md rename to languages/C++/README.md diff --git a/Languages/C++/clang-format b/languages/C++/clang-format similarity index 100% rename from Languages/C++/clang-format rename to languages/C++/clang-format diff --git a/Languages/C++/clang-tidy b/languages/C++/clang-tidy similarity index 100% rename from Languages/C++/clang-tidy rename to languages/C++/clang-tidy diff --git a/Languages/python_wheels.md b/languages/python_wheels.md similarity index 100% rename from Languages/python_wheels.md rename to languages/python_wheels.md diff --git a/Languages/versioning.md b/languages/versioning.md similarity index 87% rename from Languages/versioning.md rename to languages/versioning.md index 5d0ffb9..6561b87 100644 --- a/Languages/versioning.md +++ b/languages/versioning.md @@ -1,3 +1,3 @@ # TODO -How do we manage multi-language repositories with a single version number> \ No newline at end of file +How do we manage multi-language repositories with a single version number? \ No newline at end of file diff --git a/Legal/ai_contributions_to_software.md b/legal/ai_contributions_to_software.md similarity index 100% rename from Legal/ai_contributions_to_software.md rename to legal/ai_contributions_to_software.md diff --git a/Legal/apache-licence b/legal/apache-licence similarity index 100% rename from Legal/apache-licence rename to legal/apache-licence diff --git a/Legal/contributor_license_agreement.md b/legal/contributor_license_agreement.md similarity index 100% rename from Legal/contributor_license_agreement.md rename to legal/contributor_license_agreement.md diff --git a/Legal/copyright_and_licensing.md b/legal/copyright_and_licensing.md similarity index 99% rename from Legal/copyright_and_licensing.md rename to legal/copyright_and_licensing.md index 2dd22e9..0882aa7 100644 --- a/Legal/copyright_and_licensing.md +++ b/legal/copyright_and_licensing.md @@ -23,7 +23,7 @@ Alternatively, you can use the [apache-licence](apache-licence) file provided in 4. Each original source document (code and documentation, but excluding generated files) **must** include a short license header at the top. To facilitate this, please you may use the script provided in the [Available Tooling](#available-tooling) section below. -Each source file shall begin with the following license and liability discalimer: +Each source file shall begin with the following license and liability disclaimer: ``` (C) Copyright - ECMWF and individual contributors. diff --git a/Legal/open_sourcing_software.md b/legal/open_sourcing_software.md similarity index 95% rename from Legal/open_sourcing_software.md rename to legal/open_sourcing_software.md index 65257be..53339d9 100644 --- a/Legal/open_sourcing_software.md +++ b/legal/open_sourcing_software.md @@ -9,7 +9,7 @@ When open sourcing an ECMWF software, either as an ECMWF member or as a sub-cont - Seek approval for open source: - Verify the package is right for ECMWF GitHub page and discuss the suitablility for it to be open. - Discuss the scope of the software, what it does and what it does not - - Agree the initial access, i.e. start closed and then open or start immedietly open even if incomplete. + - Agree the initial access, i.e. start closed and then open or start immediately open even if incomplete. - Agree that only once the following check list is complete, will this software be open sourced. - Contact GitHub space administrator, typically a Team Leader in Development: @@ -20,14 +20,14 @@ When open sourcing an ECMWF software, either as an ECMWF member or as a sub-cont - To give access, Maintainers and Contributors need to have a GitHub account. Currently for github.com/ecmwf this is a Github Enterprise account, for which the following applies: - Maintainers should be ECMWF staff - - External contributions must follow the policy for [External Contributions](../External%20Contributions/README.md) + - External contributions must follow the policy for [External Contributions](../external-contributions/README.md) - External contributors will be asked to agree with a contribution license agreement (CLA) on pull request. - Ensure a `README` file exists in the root directory - Explains purpose and scope of code - Explains what kind of support is to expect (none) and how to contact ECMWF (link to Service Desk) - May feature a disclaimer for codes that are not officially supported or should not be used in operational context - - Clarify the state of the software (stable, alpha, beta, obsolete, …) or, preferably, define following Software Maturity guidelines, see [Software Maturity](../Project%20Maturity/README.md) + - Clarify the state of the software (stable, alpha, beta, obsolete, …) or, preferably, define following Software Maturity guidelines, see [Software Maturity](../project-maturity/README.md) - Clarify the level of support (none, best effort, operational, …) - Link to any further documentation of the code - Provide instructions on how to install diff --git a/Legal/requesting_new_repository.md b/legal/requesting_new_repository.md similarity index 99% rename from Legal/requesting_new_repository.md rename to legal/requesting_new_repository.md index 9588c3b..247a978 100644 --- a/Legal/requesting_new_repository.md +++ b/legal/requesting_new_repository.md @@ -41,4 +41,4 @@ Requesting a **Public** repository (or changing an existing repository's visibil If your repository requires public visibility, you must complete the official open-sourcing approval procedure. Your repository will be first made Private and only made Public once the open-sourcing process is complete and approved. -Please review and follow the guidelines documented here: [Open Sourcing Software Procedure](https://github.com/ecmwf/codex/blob/main/Legal/open_sourcing_software.md) \ No newline at end of file +Please review and follow the guidelines documented here: [Open Sourcing Software Procedure](https://github.com/ecmwf/codex/blob/main/legal/open_sourcing_software.md) \ No newline at end of file diff --git a/Project Maturity/README.md b/project-maturity/README.md similarity index 69% rename from Project Maturity/README.md rename to project-maturity/README.md index 6cb5c94..5e5ebbb 100644 --- a/Project Maturity/README.md +++ b/project-maturity/README.md @@ -5,66 +5,66 @@ Software maturity refers to the stages a software project goes through during it Repositories should show a badge indicating their software maturity level, and the following disclaimer, adjusted to the correct level: > \[!IMPORTANT\] -> This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). +> This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). # Graduated -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/graduated_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#graduated) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/graduated_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#graduated) Graduated projects are ready for operations, and typically used by ECMWF and/or its Member and Cooperating states in operations. This does not mean ECMWF gives operational support to the software itself. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/graduated_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#graduated)) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/graduated_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#graduated)) > \[!IMPORTANT\] - > This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). + > This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). # Incubating -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#incubating) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#incubating) Incubating projects are mostly feature-complete and the interface is mostly stable. If this software is to be used in operational systems you are **strongly advised to use a released tag in your system configuration**, and you should be willing to accept incoming changes and bug fixes that require adaptations on your part. ECMWF **may be using** this software in operations and abides by the same caveats. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#incubating) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#incubating) > \[!IMPORTANT\] - > This software is **Incubating** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). + > This software is **Incubating** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). # Emerging -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/emerging_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#emerging) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/emerging_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#emerging) Emerging projects are in the early stages of development. There is a clear project goal, but they are not yet feature-complete and not stable. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/emerging_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#emerging) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/emerging_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#emerging) > \[!IMPORTANT\] - > This software is **Emerging** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). + > This software is **Emerging** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). # Sandbox -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/sandbox_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#sandbox) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/sandbox_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#sandbox) Sandbox projects are experimental, proof-of-concept. Expect frequent changes, incomplete features and instability. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/sandbox_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#sandbox) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/sandbox_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#sandbox) > \[!IMPORTANT\] - > This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). + > This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). # Archived -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/archived_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#archived) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/archived_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#archived) Projects that have reached the end of their lifecycle. They are no longer actively maintained or developed. These projects may still be available for reference or historical purposes, but they should not be used for any active development or operational purposes. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/archived_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#archived) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/archived_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#archived) > \[!IMPORTANT\] - > This software is **Archived** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). + > This software is **Archived** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). diff --git a/Project Maturity/archived_badge.svg b/project-maturity/archived_badge.svg similarity index 100% rename from Project Maturity/archived_badge.svg rename to project-maturity/archived_badge.svg diff --git a/Project Maturity/emerging_badge.svg b/project-maturity/emerging_badge.svg similarity index 100% rename from Project Maturity/emerging_badge.svg rename to project-maturity/emerging_badge.svg diff --git a/Project Maturity/graduated_badge.svg b/project-maturity/graduated_badge.svg similarity index 100% rename from Project Maturity/graduated_badge.svg rename to project-maturity/graduated_badge.svg diff --git a/Project Maturity/incubating_badge.svg b/project-maturity/incubating_badge.svg similarity index 100% rename from Project Maturity/incubating_badge.svg rename to project-maturity/incubating_badge.svg diff --git a/Project Maturity/sandbox_badge.svg b/project-maturity/sandbox_badge.svg similarity index 100% rename from Project Maturity/sandbox_badge.svg rename to project-maturity/sandbox_badge.svg diff --git a/Repository Structure/README.md b/repository-structure/README.md similarity index 98% rename from Repository Structure/README.md rename to repository-structure/README.md index fdabaea..00e4215 100644 --- a/Repository Structure/README.md +++ b/repository-structure/README.md @@ -3,7 +3,7 @@ These are the guidelines for how a software package repository should be structured. If creating a new software package repository you should [use the cookiecutter template](https://github.com/ecmwf/cookie-cutter) which will create -respository following the guidelines documented below. +repository following the guidelines documented below. - [Repository Structure](#repository-structure) - [Readme](#readme) diff --git a/Repository Structure/example.md b/repository-structure/example.md similarity index 100% rename from Repository Structure/example.md rename to repository-structure/example.md diff --git a/Sofware Management Plan/README.md b/software-management-plan/README.md similarity index 92% rename from Sofware Management Plan/README.md rename to software-management-plan/README.md index c708063..69580b2 100644 --- a/Sofware Management Plan/README.md +++ b/software-management-plan/README.md @@ -1,13 +1,13 @@ # Software Management Plan Guidelines -A sofware management plan (SMP) should be provided for all projects which contribute to the ECMWF software stack. +A software management plan (SMP) should be provided for all projects which contribute to the ECMWF software stack. This is to ensure that contributions are appropriate, visible, follow guidelines and there is a clear roadmap for development and ownership. A SMP is required for all projects where the lead developers are external contributors and should be provided in the planning stages of the project. For internal contributors, a SMP is required to progress a project from the *Sandbox* -to the *Emerging* [Project Maturity](../Project%20Maturity/) level. +to the *Emerging* [Project Maturity](../project-maturity/) level. Please use the [template SMP](./SMP-template.docx) to create your SMP, it contains much of the description provide below. @@ -97,9 +97,9 @@ Optional: - **Template** - If using a repository template, please provide the link here. - **Licence** - - If not the standard [Apache 2.0 licence](../Legal/apache-licence) -- **Long-term maintenence owner** - - If this is not consistent across all repostories + - If not the standard [Apache 2.0 licence](../legal/apache-licence) +- **Long-term maintenance owner** + - If this is not consistent across all repositories ## 6. Development and Maintenance Roadmap @@ -119,7 +119,7 @@ Include: - **Maintenance** - How will future developments, and user requests, be managed? - **Maturity timeline** - - What is the expected timeline for the progression through the [Project Maturity](../Project%20Maturity/) classifications + - What is the expected timeline for the progression through the [Project Maturity](../project-maturity/) classifications - **Performance and/or validation testing** - Optional. Describe any performance and/or validation testing that will be included - **Planned extensions/enhancements** @@ -129,7 +129,7 @@ Include: Outline how users (e.g. maintainers and operators) and developers will work with and understand the software. Please note that the documentation developments *MUST* be in unison with software developments and follow the -[Repository Structure guidelines](../Repository%20Structure/README.md). +[Repository Structure guidelines](../repository-structure/README.md). Include: @@ -142,7 +142,7 @@ Include: - **Documentation location** - read-the-docs/github-pages/confluence? - **Support model** - - Who is the point of conact for support + - Who is the point of contact for support - Where and how is support provided, e.g. github issues and/or jira tickets. - SLAs, expected response times - What support is and what support is not covered (optional) diff --git a/Sofware Management Plan/SMP-example.docx b/software-management-plan/SMP-example.docx similarity index 100% rename from Sofware Management Plan/SMP-example.docx rename to software-management-plan/SMP-example.docx diff --git a/Sofware Management Plan/SMP-template.docx b/software-management-plan/SMP-template.docx similarity index 100% rename from Sofware Management Plan/SMP-template.docx rename to software-management-plan/SMP-template.docx diff --git a/Testing/README.md b/testing/README.md similarity index 100% rename from Testing/README.md rename to testing/README.md From 0bc9a2f3770ccf5fe97b50ae50fba1391488eca8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 20:36:26 +0000 Subject: [PATCH 3/8] Fix content layout: move AI guidelines, rename confusing dirs, add index READMEs Co-authored-by: jameshawkes <11695815+jameshawkes@users.noreply.github.com> --- README.md | 4 ++-- .../readme.md => contributing-upstream/README.md | 0 .../forking.md | 0 {documentation => documentation-and-training}/README.md | 4 ++-- guidelines/README.md | 8 ++++++++ {legal => guidelines}/ai_contributions_to_software.md | 2 +- languages/README.md | 9 +++++++++ 7 files changed, 22 insertions(+), 5 deletions(-) rename contributing-externally/readme.md => contributing-upstream/README.md (100%) rename {contributing-externally => contributing-upstream}/forking.md (100%) rename {documentation => documentation-and-training}/README.md (87%) create mode 100644 guidelines/README.md rename {legal => guidelines}/ai_contributions_to_software.md (95%) create mode 100644 languages/README.md diff --git a/README.md b/README.md index 511f58c..c4b9fe6 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ The Codex is a set of guidelines for development of software and services at ECM - [Testing](./testing) - [ECMWF Software EnginE (ESEE)](./esee) - [External Contributions](./external-contributions/) -- [Documentation and Training](./documentation/) -- [Contributing to External Projects](./contributing-externally/) +- [Documentation and Training](./documentation-and-training/) +- [Contributing to External Projects](./contributing-upstream/) - [Guidelines](./guidelines/) - [Languages](./languages/) - [Legal](./legal/) diff --git a/contributing-externally/readme.md b/contributing-upstream/README.md similarity index 100% rename from contributing-externally/readme.md rename to contributing-upstream/README.md diff --git a/contributing-externally/forking.md b/contributing-upstream/forking.md similarity index 100% rename from contributing-externally/forking.md rename to contributing-upstream/forking.md diff --git a/documentation/README.md b/documentation-and-training/README.md similarity index 87% rename from documentation/README.md rename to documentation-and-training/README.md index 3a3b71e..a7e6379 100644 --- a/documentation/README.md +++ b/documentation-and-training/README.md @@ -1,5 +1,5 @@ -Documentation -============= +Documentation and Training +========================== 1. Documentation can be generated via any sensible tool that generates static pages (mkdocs, sphinx, etc.) 2. Documentation should be published to readthedocs, github pages or sites.ecmwf.int diff --git a/guidelines/README.md b/guidelines/README.md new file mode 100644 index 0000000..e7c361f --- /dev/null +++ b/guidelines/README.md @@ -0,0 +1,8 @@ +# Guidelines + +Development guidelines for ECMWF software projects. + +## Contents + +- [Pull Request Guidelines](./pr_guidelines.md) — responsibilities for reviewers and reviewees, and the PR workflow +- [AI Contributions to Software](./ai_contributions_to_software.md) — policy guidelines for AI-assisted code generation and AI agents diff --git a/legal/ai_contributions_to_software.md b/guidelines/ai_contributions_to_software.md similarity index 95% rename from legal/ai_contributions_to_software.md rename to guidelines/ai_contributions_to_software.md index 8afff60..1997c39 100644 --- a/legal/ai_contributions_to_software.md +++ b/guidelines/ai_contributions_to_software.md @@ -35,7 +35,7 @@ At ECMWF, we view AI Code Agents and Large Language Models (LLMs) as powerful pr ### Working with AI Agents -* **Data Privacy and Prompt Security:** Developers must not paste sensitive ECMWF data, proprietary keys, unreleased model architectures, or sensitive infrastructure details into *public* AI prompts (e.g., consumer ChatGPT) versus approved internal enterprise tools like GitHub Copilot Enterprise. We have guarrantees from our enterprise providers that data is kept secure, but we should still avoid sharing sensitive information in prompts. +* **Data Privacy and Prompt Security:** Developers must not paste sensitive ECMWF data, proprietary keys, unreleased model architectures, or sensitive infrastructure details into *public* AI prompts (e.g., consumer ChatGPT) versus approved internal enterprise tools like GitHub Copilot Enterprise. We have guarantees from our enterprise providers that data is kept secure, but we should still avoid sharing sensitive information in prompts. * **Warning on Intellectual Property and Licensing:** Note that AI models can occasionally reproduce snippets of copyrighted code (e.g., strictly GPL-licensed code). Developers should be reasonably confident the generated code does not violate ECMWF's open-source licensing strategy (mostly Apache 2.0). diff --git a/languages/README.md b/languages/README.md new file mode 100644 index 0000000..7e2a955 --- /dev/null +++ b/languages/README.md @@ -0,0 +1,9 @@ +# Languages + +Language-specific guidelines and tooling for ECMWF software projects. + +## Contents + +- [C++](./C++/README.md) — coding standards, clang-format and clang-tidy configuration +- [Python Wheels](./python_wheels.md) — building and using Python wheels with compiled libraries +- [Versioning](./versioning.md) — versioning guidance for multi-language repositories From 9dc37466789e7f4fa0ea758c5ac8ad080cb184cc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 13 Mar 2026 23:43:37 +0000 Subject: [PATCH 4/8] =?UTF-8?q?Fix=20cfii=E2=86=92cffi=20typo=20in=20pytho?= =?UTF-8?q?n=5Fwheels.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: tlmquintino <965734+tlmquintino@users.noreply.github.com> --- languages/python_wheels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages/python_wheels.md b/languages/python_wheels.md index 10e7ee6..1ae2482 100644 --- a/languages/python_wheels.md +++ b/languages/python_wheels.md @@ -5,7 +5,7 @@ This document describes the existing mechanism for Python Wheels to interface wi * Compiled library: e.g. `eckit`, `eccodes`, `mir`, `atlas`, ... code in e.g. C++ with ecbuild-based compilation * Python interface library: e.g. `eccodes-python`, `mir-python`, `pyodc`, ... either cffi or cython interface to a Compiled library * Python wrapper wheel: a trivial wheel containing only a Compiled library. We currently use `-lib` naming convention. For example, `eckitlib.whl` is a wheel (zip archive) of compiled `eckit`, including `lib64`, `include`, `etc`, ... everything found in install target. -* Python interface wheel: a regular wheel you can import in python and invoke code from, containing e.g. `eccodes-python` or `pyodc`. Whether its a binary wheel or pure python wheel depends on whether cython or cfii are used. Does not contain the Compiled library itself, but obviously requires it at runtime. +* Python interface wheel: a regular wheel you can import in python and invoke code from, containing e.g. `eccodes-python` or `pyodc`. Whether its a binary wheel or pure python wheel depends on whether cython or cffi are used. Does not contain the Compiled library itself, but obviously requires it at runtime. * Wheelmaker: utility docker image used in local or github actions builds of Python wrapper wheels * Findlibs: python library for dynamic discovery of libraries at python import time -- this is the glue that binds together at runtime the Python interface wheel to Compiled libraries (whether via Python wrapper wheel or manually compiled). From 10204bbf052a366d50b18a44e197e411f1e270be Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 00:05:57 +0000 Subject: [PATCH 5/8] Restore capitalised directory names with full-caps acronyms, update all links Co-authored-by: tlmquintino <965734+tlmquintino@users.noreply.github.com> --- {adr => ADR}/ADR-001-Git-Branching-Model.md | 0 .../ADR-002-Optional-Dependency-CLI11.md | 0 .../ADR-003-PyBind11-For-CPP-Bindings.md | 0 {adr => ADR}/ADR-Guidelines.md | 2 +- {adr => ADR}/ADR-Index.md | 0 {adr => ADR}/ADR-Template.md | 0 .../README.md | 0 .../README.md | 0 .../forking.md | 0 .../Observability.md | 0 .../README.md | 0 {esee => ESEE}/README.md | 16 ++++----- {esee => ESEE}/data_provision_badge.svg | 0 {esee => ESEE}/foundation_badge.svg | 0 {esee => ESEE}/production_chain_badge.svg | 0 {esee => ESEE}/user_interaction_badge.svg | 0 .../README.md | 24 ++++++------- {guidelines => Guidelines}/README.md | 0 .../ai_contributions_to_software.md | 0 {guidelines => Guidelines}/pr_guidelines.md | 2 +- {languages => Languages}/C++/README.md | 0 {languages => Languages}/C++/clang-format | 0 {languages => Languages}/C++/clang-tidy | 0 {languages => Languages}/README.md | 0 {languages => Languages}/python_wheels.md | 0 {languages => Languages}/versioning.md | 0 {legal => Legal}/apache-licence | 0 .../contributor_license_agreement.md | 0 {legal => Legal}/copyright_and_licensing.md | 0 {legal => Legal}/open_sourcing_software.md | 4 +-- {legal => Legal}/requesting_new_repository.md | 2 +- .../README.md | 32 +++++++++--------- .../archived_badge.svg | 0 .../emerging_badge.svg | 0 .../graduated_badge.svg | 0 .../incubating_badge.svg | 0 .../sandbox_badge.svg | 0 README.md | 28 +++++++-------- .../README.md | 0 .../example.md | 0 .../README.md | 8 ++--- .../SMP-example.docx | Bin .../SMP-template.docx | Bin {testing => Testing}/README.md | 0 44 files changed, 59 insertions(+), 59 deletions(-) rename {adr => ADR}/ADR-001-Git-Branching-Model.md (100%) rename {adr => ADR}/ADR-002-Optional-Dependency-CLI11.md (100%) rename {adr => ADR}/ADR-003-PyBind11-For-CPP-Bindings.md (100%) rename {adr => ADR}/ADR-Guidelines.md (99%) rename {adr => ADR}/ADR-Index.md (100%) rename {adr => ADR}/ADR-Template.md (100%) rename {containerisation => Containerisation}/README.md (100%) rename {contributing-upstream => Contributing Upstream}/README.md (100%) rename {contributing-upstream => Contributing Upstream}/forking.md (100%) rename {development-practices => Development Practices}/Observability.md (100%) rename {documentation-and-training => Documentation and Training}/README.md (100%) rename {esee => ESEE}/README.md (74%) rename {esee => ESEE}/data_provision_badge.svg (100%) rename {esee => ESEE}/foundation_badge.svg (100%) rename {esee => ESEE}/production_chain_badge.svg (100%) rename {esee => ESEE}/user_interaction_badge.svg (100%) rename {external-contributions => External Contributions}/README.md (89%) rename {guidelines => Guidelines}/README.md (100%) rename {guidelines => Guidelines}/ai_contributions_to_software.md (100%) rename {guidelines => Guidelines}/pr_guidelines.md (99%) rename {languages => Languages}/C++/README.md (100%) rename {languages => Languages}/C++/clang-format (100%) rename {languages => Languages}/C++/clang-tidy (100%) rename {languages => Languages}/README.md (100%) rename {languages => Languages}/python_wheels.md (100%) rename {languages => Languages}/versioning.md (100%) rename {legal => Legal}/apache-licence (100%) rename {legal => Legal}/contributor_license_agreement.md (100%) rename {legal => Legal}/copyright_and_licensing.md (100%) rename {legal => Legal}/open_sourcing_software.md (96%) rename {legal => Legal}/requesting_new_repository.md (99%) rename {project-maturity => Project Maturity}/README.md (69%) rename {project-maturity => Project Maturity}/archived_badge.svg (100%) rename {project-maturity => Project Maturity}/emerging_badge.svg (100%) rename {project-maturity => Project Maturity}/graduated_badge.svg (100%) rename {project-maturity => Project Maturity}/incubating_badge.svg (100%) rename {project-maturity => Project Maturity}/sandbox_badge.svg (100%) rename {repository-structure => Repository Structure}/README.md (100%) rename {repository-structure => Repository Structure}/example.md (100%) rename {software-management-plan => Software Management Plan}/README.md (96%) rename {software-management-plan => Software Management Plan}/SMP-example.docx (100%) rename {software-management-plan => Software Management Plan}/SMP-template.docx (100%) rename {testing => Testing}/README.md (100%) diff --git a/adr/ADR-001-Git-Branching-Model.md b/ADR/ADR-001-Git-Branching-Model.md similarity index 100% rename from adr/ADR-001-Git-Branching-Model.md rename to ADR/ADR-001-Git-Branching-Model.md diff --git a/adr/ADR-002-Optional-Dependency-CLI11.md b/ADR/ADR-002-Optional-Dependency-CLI11.md similarity index 100% rename from adr/ADR-002-Optional-Dependency-CLI11.md rename to ADR/ADR-002-Optional-Dependency-CLI11.md diff --git a/adr/ADR-003-PyBind11-For-CPP-Bindings.md b/ADR/ADR-003-PyBind11-For-CPP-Bindings.md similarity index 100% rename from adr/ADR-003-PyBind11-For-CPP-Bindings.md rename to ADR/ADR-003-PyBind11-For-CPP-Bindings.md diff --git a/adr/ADR-Guidelines.md b/ADR/ADR-Guidelines.md similarity index 99% rename from adr/ADR-Guidelines.md rename to ADR/ADR-Guidelines.md index 7f16756..94e0a46 100644 --- a/adr/ADR-Guidelines.md +++ b/ADR/ADR-Guidelines.md @@ -127,7 +127,7 @@ Before finalizing an ADR, ensure it meets these criteria: ## Numbering and Filing - Use sequential numbering: ADR-001-Meaningful-Title, ADR-002-Another-Meaningful-Title, etc. -- Store ADRs in the central **Codex** repository under `/adr/` +- Store ADRs in the central **Codex** repository under `/ADR/` - Use descriptive filenames: `ADR-001-Git-Branching-Model.md` - Use the [ADR index](./ADR-Index.md) to track all ADRs and their statuses diff --git a/adr/ADR-Index.md b/ADR/ADR-Index.md similarity index 100% rename from adr/ADR-Index.md rename to ADR/ADR-Index.md diff --git a/adr/ADR-Template.md b/ADR/ADR-Template.md similarity index 100% rename from adr/ADR-Template.md rename to ADR/ADR-Template.md diff --git a/containerisation/README.md b/Containerisation/README.md similarity index 100% rename from containerisation/README.md rename to Containerisation/README.md diff --git a/contributing-upstream/README.md b/Contributing Upstream/README.md similarity index 100% rename from contributing-upstream/README.md rename to Contributing Upstream/README.md diff --git a/contributing-upstream/forking.md b/Contributing Upstream/forking.md similarity index 100% rename from contributing-upstream/forking.md rename to Contributing Upstream/forking.md diff --git a/development-practices/Observability.md b/Development Practices/Observability.md similarity index 100% rename from development-practices/Observability.md rename to Development Practices/Observability.md diff --git a/documentation-and-training/README.md b/Documentation and Training/README.md similarity index 100% rename from documentation-and-training/README.md rename to Documentation and Training/README.md diff --git a/esee/README.md b/ESEE/README.md similarity index 74% rename from esee/README.md rename to ESEE/README.md index b200e80..3e2d762 100644 --- a/esee/README.md +++ b/ESEE/README.md @@ -11,32 +11,32 @@ ESEE components are split into **four sub-categories**: ## Production Chain -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/production_chain_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/production_chain_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) ESEE Production Chain encompasses components that drive the execution of operational and research workflows, managing complex dependencies, scheduling, and processing of data at scale. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/production_chain_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/production_chain_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) ## Data Provision -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/data_provision_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/data_provision_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) ESEE Data Provision category includes components responsible for managing, storing, and delivering data, ensuring that users can access large datasets with ease. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/data_provision_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/data_provision_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) ## User Interaction -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/user_interaction_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/user_interaction_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) ESEE User Interaction focuses on user APIs, visualization tools, and interactive environments that allow users to efficiently access and work with Earth System data and tools. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/user_interaction_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/user_interaction_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) ## Foundation -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/foundation_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/foundation_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) ESEE Foundation comprises essential libraries, frameworks, and utilities that ensure scalability, interoperability, and performance across all components. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/esee/foundation_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/esee) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE/foundation_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/ESEE) diff --git a/esee/data_provision_badge.svg b/ESEE/data_provision_badge.svg similarity index 100% rename from esee/data_provision_badge.svg rename to ESEE/data_provision_badge.svg diff --git a/esee/foundation_badge.svg b/ESEE/foundation_badge.svg similarity index 100% rename from esee/foundation_badge.svg rename to ESEE/foundation_badge.svg diff --git a/esee/production_chain_badge.svg b/ESEE/production_chain_badge.svg similarity index 100% rename from esee/production_chain_badge.svg rename to ESEE/production_chain_badge.svg diff --git a/esee/user_interaction_badge.svg b/ESEE/user_interaction_badge.svg similarity index 100% rename from esee/user_interaction_badge.svg rename to ESEE/user_interaction_badge.svg diff --git a/external-contributions/README.md b/External Contributions/README.md similarity index 89% rename from external-contributions/README.md rename to External Contributions/README.md index 778b0ea..dbfdca1 100644 --- a/external-contributions/README.md +++ b/External Contributions/README.md @@ -19,8 +19,8 @@ Public contributions follow the normal GitHub workflow. - 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](../legal/copyright_and_licensing.md). -- By creating a PR, you agree to the terms of the [Contributor License Agreement (CLA)](../legal/contributor_license_agreement.md) and this should be part of the PR template. +- Note that all contributions must comply with ECMWF’s copyright and licensing policies, as outlined in [Copyright and Licensing](../Legal/copyright_and_licensing.md). +- By creating a PR, you agree to the terms of the [Contributor License Agreement (CLA)](../Legal/contributor_license_agreement.md) 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. @@ -35,19 +35,19 @@ For private repositories owned by ECMWF: - 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)](../legal/contributor_license_agreement.md) and this should be part of the PR template. +- Even for an internal/private repository, by creating a PR, you agree to the terms of the [Contributor License Agreement (CLA)](../Legal/contributor_license_agreement.md) and this should be part of the PR template. ### New Repositories 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](../legal/requesting_new_repository.md) procedure. +- Creation is handled by ECMWF staff via the Technical Officer, and must follow the [Requesting a New Repository](../Legal/requesting_new_repository.md) 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](../legal/copyright_and_licensing.md). -- Initialise the repository using the ECMWF cookie-cutter template and follow the [Repository Structure](../repository-structure/README.md). -- Add an appropriate [Project Maturity Badge](../project-maturity/README.md) (e.g., *Sandbox*). +- 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](../Legal/copyright_and_licensing.md). +- Initialise the repository using the ECMWF cookie-cutter template and follow the [Repository Structure](../Repository%20Structure/README.md). +- Add an appropriate [Project Maturity Badge](../Project%20Maturity/README.md) (e.g., *Sandbox*). - Ensure the PR template includes the CLA agreement, so that all contributors agree to it when submitting contributions. ### Existing Repositories @@ -57,14 +57,14 @@ If ECMWF inherits an external repository (e.g., a Code4Earth project), one of th 1. **Recreate and Import** — create a new ECMWF repository using the cookie-cutter template, then import existing content via PR. 2. **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](../legal/copyright_and_licensing.md). - - Ensuring the open sourcing guidelines in [Open Sourcing Software at ECMWF](../legal/open_sourcing_software.md) are followed. + - Ensuring all past contributions comply with ECMWF’s [Copyright and Licensing](../Legal/copyright_and_licensing.md). + - Ensuring the open sourcing guidelines in [Open Sourcing Software at ECMWF](../Legal/open_sourcing_software.md) are followed. 3. **Fork** — ECMWF forks the repository to maintain its own variant while the original remains active. - Create an empty `default` branch containing a notice linking to the original project. - Make `default` the 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](../legal/copyright_and_licensing.md). - - Where applicable, ensure the open sourcing guidelines in [Open Sourcing Software at ECMWF](../legal/open_sourcing_software.md) are followed. + - Where applicable, ensure the forked repository complies with ECMWF’s [Copyright and Licensing](../Legal/copyright_and_licensing.md). + - Where applicable, ensure the open sourcing guidelines in [Open Sourcing Software at ECMWF](../Legal/open_sourcing_software.md) are followed. --- @@ -116,7 +116,7 @@ When ready for delivery: 1. Open a PR from the contractor’s fork `main` or from the ECMWF integration branch (`upstream` or `upstream/`) into ECMWF’s `main` or `master`. 2. 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](../legal/copyright_and_licensing.md) and for open source projects, the [Open Sourcing Software at ECMWF](../legal/open_sourcing_software.md) guidelines. + - **Note:** at this stage, all contributions must comply with ECMWF’s copyright and licensing policies, as outlined in [Copyright and Licensing](../Legal/copyright_and_licensing.md) and for open source projects, the [Open Sourcing Software at ECMWF](../Legal/open_sourcing_software.md) guidelines. 3. Upon acceptance, ECMWF merges the PR. When appropriate, ECMWF can apply a **production tag**: diff --git a/guidelines/README.md b/Guidelines/README.md similarity index 100% rename from guidelines/README.md rename to Guidelines/README.md diff --git a/guidelines/ai_contributions_to_software.md b/Guidelines/ai_contributions_to_software.md similarity index 100% rename from guidelines/ai_contributions_to_software.md rename to Guidelines/ai_contributions_to_software.md diff --git a/guidelines/pr_guidelines.md b/Guidelines/pr_guidelines.md similarity index 99% rename from guidelines/pr_guidelines.md rename to Guidelines/pr_guidelines.md index af9f973..0c65487 100644 --- a/guidelines/pr_guidelines.md +++ b/Guidelines/pr_guidelines.md @@ -5,7 +5,7 @@ Changes to our repositories primary branches, i.e. 'main' / 'master' / Requests (PR). Reviewer and Reviewee have specific responsibilities. This document aims to help both roles to understand their responsibilities. Please also refer to our branching policy in -[ADR-001](../adr/ADR-001-Git-Branching-Model.md) +[ADR-001](../ADR/ADR-001-Git-Branching-Model.md) ## Preparation diff --git a/languages/C++/README.md b/Languages/C++/README.md similarity index 100% rename from languages/C++/README.md rename to Languages/C++/README.md diff --git a/languages/C++/clang-format b/Languages/C++/clang-format similarity index 100% rename from languages/C++/clang-format rename to Languages/C++/clang-format diff --git a/languages/C++/clang-tidy b/Languages/C++/clang-tidy similarity index 100% rename from languages/C++/clang-tidy rename to Languages/C++/clang-tidy diff --git a/languages/README.md b/Languages/README.md similarity index 100% rename from languages/README.md rename to Languages/README.md diff --git a/languages/python_wheels.md b/Languages/python_wheels.md similarity index 100% rename from languages/python_wheels.md rename to Languages/python_wheels.md diff --git a/languages/versioning.md b/Languages/versioning.md similarity index 100% rename from languages/versioning.md rename to Languages/versioning.md diff --git a/legal/apache-licence b/Legal/apache-licence similarity index 100% rename from legal/apache-licence rename to Legal/apache-licence diff --git a/legal/contributor_license_agreement.md b/Legal/contributor_license_agreement.md similarity index 100% rename from legal/contributor_license_agreement.md rename to Legal/contributor_license_agreement.md diff --git a/legal/copyright_and_licensing.md b/Legal/copyright_and_licensing.md similarity index 100% rename from legal/copyright_and_licensing.md rename to Legal/copyright_and_licensing.md diff --git a/legal/open_sourcing_software.md b/Legal/open_sourcing_software.md similarity index 96% rename from legal/open_sourcing_software.md rename to Legal/open_sourcing_software.md index 53339d9..0508e18 100644 --- a/legal/open_sourcing_software.md +++ b/Legal/open_sourcing_software.md @@ -20,14 +20,14 @@ When open sourcing an ECMWF software, either as an ECMWF member or as a sub-cont - To give access, Maintainers and Contributors need to have a GitHub account. Currently for github.com/ecmwf this is a Github Enterprise account, for which the following applies: - Maintainers should be ECMWF staff - - External contributions must follow the policy for [External Contributions](../external-contributions/README.md) + - External contributions must follow the policy for [External Contributions](../External%20Contributions/README.md) - External contributors will be asked to agree with a contribution license agreement (CLA) on pull request. - Ensure a `README` file exists in the root directory - Explains purpose and scope of code - Explains what kind of support is to expect (none) and how to contact ECMWF (link to Service Desk) - May feature a disclaimer for codes that are not officially supported or should not be used in operational context - - Clarify the state of the software (stable, alpha, beta, obsolete, …) or, preferably, define following Software Maturity guidelines, see [Software Maturity](../project-maturity/README.md) + - Clarify the state of the software (stable, alpha, beta, obsolete, …) or, preferably, define following Software Maturity guidelines, see [Software Maturity](../Project%20Maturity/README.md) - Clarify the level of support (none, best effort, operational, …) - Link to any further documentation of the code - Provide instructions on how to install diff --git a/legal/requesting_new_repository.md b/Legal/requesting_new_repository.md similarity index 99% rename from legal/requesting_new_repository.md rename to Legal/requesting_new_repository.md index 247a978..9588c3b 100644 --- a/legal/requesting_new_repository.md +++ b/Legal/requesting_new_repository.md @@ -41,4 +41,4 @@ Requesting a **Public** repository (or changing an existing repository's visibil If your repository requires public visibility, you must complete the official open-sourcing approval procedure. Your repository will be first made Private and only made Public once the open-sourcing process is complete and approved. -Please review and follow the guidelines documented here: [Open Sourcing Software Procedure](https://github.com/ecmwf/codex/blob/main/legal/open_sourcing_software.md) \ No newline at end of file +Please review and follow the guidelines documented here: [Open Sourcing Software Procedure](https://github.com/ecmwf/codex/blob/main/Legal/open_sourcing_software.md) \ No newline at end of file diff --git a/project-maturity/README.md b/Project Maturity/README.md similarity index 69% rename from project-maturity/README.md rename to Project Maturity/README.md index 5e5ebbb..6cb5c94 100644 --- a/project-maturity/README.md +++ b/Project Maturity/README.md @@ -5,66 +5,66 @@ Software maturity refers to the stages a software project goes through during it Repositories should show a badge indicating their software maturity level, and the following disclaimer, adjusted to the correct level: > \[!IMPORTANT\] -> This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). +> This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). # Graduated -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/graduated_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#graduated) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/graduated_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#graduated) Graduated projects are ready for operations, and typically used by ECMWF and/or its Member and Cooperating states in operations. This does not mean ECMWF gives operational support to the software itself. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/graduated_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#graduated)) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/graduated_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#graduated)) > \[!IMPORTANT\] - > This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). + > This software is **Graduated** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). # Incubating -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#incubating) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#incubating) Incubating projects are mostly feature-complete and the interface is mostly stable. If this software is to be used in operational systems you are **strongly advised to use a released tag in your system configuration**, and you should be willing to accept incoming changes and bug fixes that require adaptations on your part. ECMWF **may be using** this software in operations and abides by the same caveats. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#incubating) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/incubating_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#incubating) > \[!IMPORTANT\] - > This software is **Incubating** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). + > This software is **Incubating** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). # Emerging -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/emerging_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#emerging) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/emerging_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#emerging) Emerging projects are in the early stages of development. There is a clear project goal, but they are not yet feature-complete and not stable. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/emerging_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#emerging) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/emerging_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#emerging) > \[!IMPORTANT\] - > This software is **Emerging** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). + > This software is **Emerging** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). # Sandbox -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/sandbox_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#sandbox) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/sandbox_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#sandbox) Sandbox projects are experimental, proof-of-concept. Expect frequent changes, incomplete features and instability. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/sandbox_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#sandbox) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/sandbox_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#sandbox) > \[!IMPORTANT\] - > This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). + > This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). # Archived -[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/archived_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#archived) +[![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/archived_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#archived) Projects that have reached the end of their lifecycle. They are no longer actively maintained or developed. These projects may still be available for reference or historical purposes, but they should not be used for any active development or operational purposes. - [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity/archived_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity#archived) + [![Static Badge](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity/archived_badge.svg)](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity#archived) > \[!IMPORTANT\] - > This software is **Archived** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/project-maturity). + > This software is **Archived** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). diff --git a/project-maturity/archived_badge.svg b/Project Maturity/archived_badge.svg similarity index 100% rename from project-maturity/archived_badge.svg rename to Project Maturity/archived_badge.svg diff --git a/project-maturity/emerging_badge.svg b/Project Maturity/emerging_badge.svg similarity index 100% rename from project-maturity/emerging_badge.svg rename to Project Maturity/emerging_badge.svg diff --git a/project-maturity/graduated_badge.svg b/Project Maturity/graduated_badge.svg similarity index 100% rename from project-maturity/graduated_badge.svg rename to Project Maturity/graduated_badge.svg diff --git a/project-maturity/incubating_badge.svg b/Project Maturity/incubating_badge.svg similarity index 100% rename from project-maturity/incubating_badge.svg rename to Project Maturity/incubating_badge.svg diff --git a/project-maturity/sandbox_badge.svg b/Project Maturity/sandbox_badge.svg similarity index 100% rename from project-maturity/sandbox_badge.svg rename to Project Maturity/sandbox_badge.svg diff --git a/README.md b/README.md index 2f98028..23895eb 100644 --- a/README.md +++ b/README.md @@ -10,17 +10,17 @@ The Codex is a set of guidelines for development of software and services at ECM # Contents -- [Architectural Decision Records](./adr) -- [Repository Structure](./repository-structure) -- [Project Maturity](./project-maturity) -- [Containerisation](./containerisation) -- [Testing](./testing) -- [Observability](./development-practices/Observability.md) -- [ECMWF Software EnginE (ESEE)](./esee) -- [External Contributions](./external-contributions/) -- [Documentation and Training](./documentation-and-training/) -- [Contributing to External Projects](./contributing-upstream/) -- [Guidelines](./guidelines/) -- [Languages](./languages/) -- [Legal](./legal/) -- [Software Management Plan](./software-management-plan/) +- [Architectural Decision Records](./ADR) +- [Repository Structure](./Repository%20Structure) +- [Project Maturity](./Project%20Maturity) +- [Containerisation](./Containerisation) +- [Testing](./Testing) +- [Observability](./Development%20Practices/Observability.md) +- [ECMWF Software EnginE (ESEE)](./ESEE) +- [External Contributions](./External%20Contributions/) +- [Documentation and Training](./Documentation%20and%20Training/) +- [Contributing to External Projects](./Contributing%20Upstream/) +- [Guidelines](./Guidelines/) +- [Languages](./Languages/) +- [Legal](./Legal/) +- [Software Management Plan](./Software%20Management%20Plan/) diff --git a/repository-structure/README.md b/Repository Structure/README.md similarity index 100% rename from repository-structure/README.md rename to Repository Structure/README.md diff --git a/repository-structure/example.md b/Repository Structure/example.md similarity index 100% rename from repository-structure/example.md rename to Repository Structure/example.md diff --git a/software-management-plan/README.md b/Software Management Plan/README.md similarity index 96% rename from software-management-plan/README.md rename to Software Management Plan/README.md index 69580b2..b055fa2 100644 --- a/software-management-plan/README.md +++ b/Software Management Plan/README.md @@ -7,7 +7,7 @@ for development and ownership. A SMP is required for all projects where the lead developers are external contributors and should be provided in the planning stages of the project. For internal contributors, a SMP is required to progress a project from the *Sandbox* -to the *Emerging* [Project Maturity](../project-maturity/) level. +to the *Emerging* [Project Maturity](../Project%20Maturity/) level. Please use the [template SMP](./SMP-template.docx) to create your SMP, it contains much of the description provide below. @@ -97,7 +97,7 @@ Optional: - **Template** - If using a repository template, please provide the link here. - **Licence** - - If not the standard [Apache 2.0 licence](../legal/apache-licence) + - If not the standard [Apache 2.0 licence](../Legal/apache-licence) - **Long-term maintenance owner** - If this is not consistent across all repositories @@ -119,7 +119,7 @@ Include: - **Maintenance** - How will future developments, and user requests, be managed? - **Maturity timeline** - - What is the expected timeline for the progression through the [Project Maturity](../project-maturity/) classifications + - What is the expected timeline for the progression through the [Project Maturity](../Project%20Maturity/) classifications - **Performance and/or validation testing** - Optional. Describe any performance and/or validation testing that will be included - **Planned extensions/enhancements** @@ -129,7 +129,7 @@ Include: Outline how users (e.g. maintainers and operators) and developers will work with and understand the software. Please note that the documentation developments *MUST* be in unison with software developments and follow the -[Repository Structure guidelines](../repository-structure/README.md). +[Repository Structure guidelines](../Repository%20Structure/README.md). Include: diff --git a/software-management-plan/SMP-example.docx b/Software Management Plan/SMP-example.docx similarity index 100% rename from software-management-plan/SMP-example.docx rename to Software Management Plan/SMP-example.docx diff --git a/software-management-plan/SMP-template.docx b/Software Management Plan/SMP-template.docx similarity index 100% rename from software-management-plan/SMP-template.docx rename to Software Management Plan/SMP-template.docx diff --git a/testing/README.md b/Testing/README.md similarity index 100% rename from testing/README.md rename to Testing/README.md From 381cc9f4fa90b8038ddf39df23c369ab3e2a2a8c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 00:24:58 +0000 Subject: [PATCH 6/8] Rename pr_guidelines.md to pull-requests.md in Guidelines Co-authored-by: tlmquintino <965734+tlmquintino@users.noreply.github.com> --- Guidelines/README.md | 2 +- Guidelines/{pr_guidelines.md => pull-requests.md} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename Guidelines/{pr_guidelines.md => pull-requests.md} (100%) diff --git a/Guidelines/README.md b/Guidelines/README.md index e7c361f..516dc93 100644 --- a/Guidelines/README.md +++ b/Guidelines/README.md @@ -4,5 +4,5 @@ Development guidelines for ECMWF software projects. ## Contents -- [Pull Request Guidelines](./pr_guidelines.md) — responsibilities for reviewers and reviewees, and the PR workflow +- [Pull Request Guidelines](./pull-requests.md) — responsibilities for reviewers and reviewees, and the PR workflow - [AI Contributions to Software](./ai_contributions_to_software.md) — policy guidelines for AI-assisted code generation and AI agents diff --git a/Guidelines/pr_guidelines.md b/Guidelines/pull-requests.md similarity index 100% rename from Guidelines/pr_guidelines.md rename to Guidelines/pull-requests.md From 13288b6704c38c2db8013e55a9d70ea5d48a9497 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 00:38:34 +0000 Subject: [PATCH 7/8] Move Containerisation and Observability into Guidelines, remove empty directories Co-authored-by: tlmquintino <965734+tlmquintino@users.noreply.github.com> --- Containerisation/README.md => Guidelines/Containerisation.md | 0 {Development Practices => Guidelines}/Observability.md | 0 Guidelines/README.md | 2 ++ README.md | 4 ++-- 4 files changed, 4 insertions(+), 2 deletions(-) rename Containerisation/README.md => Guidelines/Containerisation.md (100%) rename {Development Practices => Guidelines}/Observability.md (100%) diff --git a/Containerisation/README.md b/Guidelines/Containerisation.md similarity index 100% rename from Containerisation/README.md rename to Guidelines/Containerisation.md diff --git a/Development Practices/Observability.md b/Guidelines/Observability.md similarity index 100% rename from Development Practices/Observability.md rename to Guidelines/Observability.md diff --git a/Guidelines/README.md b/Guidelines/README.md index 516dc93..9e4ee21 100644 --- a/Guidelines/README.md +++ b/Guidelines/README.md @@ -6,3 +6,5 @@ Development guidelines for ECMWF software projects. - [Pull Request Guidelines](./pull-requests.md) — responsibilities for reviewers and reviewees, and the PR workflow - [AI Contributions to Software](./ai_contributions_to_software.md) — policy guidelines for AI-assisted code generation and AI agents +- [Containerisation](./Containerisation.md) — guidelines for containerising ECMWF software +- [Observability](./Observability.md) — observability guidelines for ECMWF services diff --git a/README.md b/README.md index 23895eb..3c12a21 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,9 @@ The Codex is a set of guidelines for development of software and services at ECM - [Architectural Decision Records](./ADR) - [Repository Structure](./Repository%20Structure) - [Project Maturity](./Project%20Maturity) -- [Containerisation](./Containerisation) - [Testing](./Testing) -- [Observability](./Development%20Practices/Observability.md) +- [Containerisation](./Guidelines/Containerisation.md) +- [Observability](./Guidelines/Observability.md) - [ECMWF Software EnginE (ESEE)](./ESEE) - [External Contributions](./External%20Contributions/) - [Documentation and Training](./Documentation%20and%20Training/) From 0f045f2128eca06c27428da0ddf7a1eefed4f4f8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 14 Mar 2026 00:40:41 +0000 Subject: [PATCH 8/8] Move External Contributions/README to Guidelines/external-contributions.md Co-authored-by: tlmquintino <965734+tlmquintino@users.noreply.github.com> --- Guidelines/README.md | 1 + .../README.md => Guidelines/external-contributions.md | 0 Legal/open_sourcing_software.md | 2 +- README.md | 2 +- 4 files changed, 3 insertions(+), 2 deletions(-) rename External Contributions/README.md => Guidelines/external-contributions.md (100%) diff --git a/Guidelines/README.md b/Guidelines/README.md index 9e4ee21..3711513 100644 --- a/Guidelines/README.md +++ b/Guidelines/README.md @@ -8,3 +8,4 @@ Development guidelines for ECMWF software projects. - [AI Contributions to Software](./ai_contributions_to_software.md) — policy guidelines for AI-assisted code generation and AI agents - [Containerisation](./Containerisation.md) — guidelines for containerising ECMWF software - [Observability](./Observability.md) — observability guidelines for ECMWF services +- [External Contributions](./external-contributions.md) — guidelines for accepting external contributions to ECMWF projects diff --git a/External Contributions/README.md b/Guidelines/external-contributions.md similarity index 100% rename from External Contributions/README.md rename to Guidelines/external-contributions.md diff --git a/Legal/open_sourcing_software.md b/Legal/open_sourcing_software.md index 0508e18..616b2f2 100644 --- a/Legal/open_sourcing_software.md +++ b/Legal/open_sourcing_software.md @@ -20,7 +20,7 @@ When open sourcing an ECMWF software, either as an ECMWF member or as a sub-cont - To give access, Maintainers and Contributors need to have a GitHub account. Currently for github.com/ecmwf this is a Github Enterprise account, for which the following applies: - Maintainers should be ECMWF staff - - External contributions must follow the policy for [External Contributions](../External%20Contributions/README.md) + - External contributions must follow the policy for [External Contributions](../Guidelines/external-contributions.md) - External contributors will be asked to agree with a contribution license agreement (CLA) on pull request. - Ensure a `README` file exists in the root directory diff --git a/README.md b/README.md index 3c12a21..69ed5c6 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The Codex is a set of guidelines for development of software and services at ECM - [Containerisation](./Guidelines/Containerisation.md) - [Observability](./Guidelines/Observability.md) - [ECMWF Software EnginE (ESEE)](./ESEE) -- [External Contributions](./External%20Contributions/) +- [External Contributions](./Guidelines/external-contributions.md) - [Documentation and Training](./Documentation%20and%20Training/) - [Contributing to External Projects](./Contributing%20Upstream/) - [Guidelines](./Guidelines/)