diff --git a/ADR/ADR-008-Stack-Dependencies.md b/ADR/ADR-008-Stack-Dependencies.md index db047d3..4bc2c70 100644 --- a/ADR/ADR-008-Stack-Dependencies.md +++ b/ADR/ADR-008-Stack-Dependencies.md @@ -250,7 +250,7 @@ via `add_subdirectory()`. In particular, the caching of build artifacts would have to be replicated everywhere potentially deteriorating the build time issue. -6. The python_wheels documentation already identifies this approach as the +6. The Python-Wheels documentation already identifies this approach as the intended path forward for compiled dependencies in wheel builds, indicating organisational alignment. @@ -287,7 +287,7 @@ reviewable; the latter is opaque and unbounded. libfmt is managed by `stack-dependencies`. ADR-007 notes that libfmt is "trivially built from source with CMake" — `stack-dependencies` provides the `find_package(fmt)`-compatible install tree. -- The python_wheels infrastructure (`Languages/python_wheels.md`) references +- The Python-Wheels infrastructure (`Languages/Python-Wheels.md`) references this repository as the intended mechanism for external compiled dependencies in wheel builds. @@ -312,7 +312,7 @@ provision them. - **Auditability**: the exact source of every dependency is available in the repository, satisfying compliance and licence audit requirements. - **Python wheel alignment**: unifies the dependency provisioning strategy - between the C++ build pipeline and the python_wheels pipeline. + between the C++ build pipeline and the Python-Wheels pipeline. ### Negative @@ -330,7 +330,7 @@ provision them. ## References - `stack-dependencies` repository: https://github.com/ecmwf/stack-dependencies -- Python wheels documentation: `Languages/python_wheels.md` +- Python wheels documentation: `Languages/Python-Wheels.md` - ecbuild: https://github.com/ecmwf/ecbuild - Spack: https://spack.io/ - Conan: https://conan.io/ diff --git a/ADR/ADR-Index.md b/ADR/README.md similarity index 74% rename from ADR/ADR-Index.md rename to ADR/README.md index 9e594fa..ba9f535 100644 --- a/ADR/ADR-Index.md +++ b/ADR/README.md @@ -1,4 +1,13 @@ -# Architectural Decision Records (ADR) Index +# Architectural Decision Records (ADR) + +Architectural Decision Records capturing key technical decisions for ECMWF software. + +## Resources + +- [ADR Guidelines](./ADR-Guidelines.md) — how to write and structure an ADR +- [ADR Template](./ADR-Template.md) — blank template for new records + +## Index | ADR | Status | | ----------- | ----------- | 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/Contributing Upstream/README.md b/Contributing Upstream/README.md index c6adb8c..0975cc9 100644 --- a/Contributing Upstream/README.md +++ b/Contributing Upstream/README.md @@ -1 +1 @@ -- [Forking External Repositories](./forking.md) \ No newline at end of file +- [Forking External Repositories](./Forking.md) \ No newline at end of file diff --git a/Guidelines/External-Contributions.md b/Guidelines/External-Contributions.md index dbfdca1..8eb30e7 100644 --- a/Guidelines/External-Contributions.md +++ b/Guidelines/External-Contributions.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,17 +35,17 @@ 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). +- 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. @@ -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/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/README.md b/Languages/README.md index 7e2a955..1e11f32 100644 --- a/Languages/README.md +++ b/Languages/README.md @@ -5,5 +5,5 @@ 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 +- [Python Wheels](./Python-Wheels.md) — building and using Python wheels with compiled libraries +- [Versioning](./Versioning.md) — versioning guidance for multi-language repositories 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 97% rename from Legal/copyright_and_licensing.md rename to Legal/Copyright-And-Licensing.md index 0882aa7..4e60e73 100644 --- a/Legal/copyright_and_licensing.md +++ b/Legal/Copyright-And-Licensing.md @@ -17,7 +17,7 @@ In December 2011, it was decided that ECMWF software packages, when open sourced Copyright 1996- European Centre for Medium-Range Weather Forecasts (ECMWF) ``` -Alternatively, you can use the [apache-licence](apache-licence) file provided in this repository as a template. +Alternatively, you can use the [Apache-Licence](Apache-Licence) file provided in this repository as a template. 3. A correct `NOTICE` file **must** be included in the same directory as the `LICENSE` file and list ALL external code contributions (if any). Please follow the instructions the [Apache guidelines](http://www.apache.org/legal/src-headers.html#notice). Typically, the `NOTICE` file will be empty for ECMWF packages unless you have included third-party code. 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 432c346..cb99fc1 100644 --- a/Legal/open_sourcing_software.md +++ b/Legal/Open-Sourcing-Software.md @@ -35,8 +35,8 @@ When open sourcing an ECMWF software, either as an ECMWF member or as a sub-cont - Use `.md` (prefered) or `.rst` format - Ensure the relevant software licence is applied - - One central licence file and references in each (code) file as described in [Copyright and Licensing](copyright_and_licensing.md) - - For Apache Licence, see [Applying the Apache License](copyright_and_licensing.md) + - One central licence file and references in each (code) file as described in [Copyright and Licensing](Copyright-And-Licensing.md) + - For Apache Licence, see [Applying the Apache License](Copyright-And-Licensing.md) - For first time releases, codes should be audited for: - IPR violations. Contact Development Section to arrange for a code audit - Sensitive information that is internal to ECMWF (e.g. passwords, user names, hostnames, emails, etc.) diff --git a/Legal/README.md b/Legal/README.md new file mode 100644 index 0000000..97f4d4a --- /dev/null +++ b/Legal/README.md @@ -0,0 +1,11 @@ +# Legal + +Legal guidance for ECMWF software projects covering licensing, copyright, and repository governance. + +## Contents + +- [Copyright and Licensing](./Copyright-And-Licensing.md) — ECMWF's approach to copyright and applying the Apache License +- [Open Sourcing Software](./Open-Sourcing-Software.md) — checklist and guidelines for open sourcing ECMWF software +- [Contributor Licence Agreement](./Contributor-License-Agreement.md) — CLA for contributions to ECMWF software +- [Requesting a New Repository](./Requesting-New-Repository.md) — process for requesting or renaming GitHub repositories +- [Apache Licence](./Apache-Licence) — full text of the Apache License 2.0 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 cb7190c..960bbc0 100644 --- a/Legal/requesting_new_repository.md +++ b/Legal/Requesting-New-Repository.md @@ -50,4 +50,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) +Please review and follow the guidelines documented here: [Open Sourcing Software Procedure](https://github.com/ecmwf/codex/blob/main/Legal/Open-Sourcing-Software.md) diff --git a/MARS language/MARS-Index.md b/MARS language/README.md similarity index 61% rename from MARS language/MARS-Index.md rename to MARS language/README.md index 4798fc9..3098e93 100644 --- a/MARS language/MARS-Index.md +++ b/MARS language/README.md @@ -1,4 +1,12 @@ -# MARS Language Decision Records Index +# MARS Language Decision Records + +Decision records for changes and additions to the MARS language. + +## Resources + +- [MARS Template](./MARS-Template.md) — blank template for new MARS language records + +## Index | Item | Status | | -- | -- | diff --git a/Principles/CODE_OF_CONDUCT.md b/Principles/Code-Of-Conduct.md similarity index 96% rename from Principles/CODE_OF_CONDUCT.md rename to Principles/Code-Of-Conduct.md index 24bd951..cd06a5d 100644 --- a/Principles/CODE_OF_CONDUCT.md +++ b/Principles/Code-Of-Conduct.md @@ -4,7 +4,7 @@ In developing software and services at ECMWF and with our community of Member and Cooperating States, we are committed to fostering an inclusive, respectful, and harassment-free community -in line with [ECMWF's Open Source Principles](./open-source-principles.md), +in line with [ECMWF's Open Source Principles](./Open-Source-Principles.md), which are inspired by the [United Nations Open Source Principles](https://opensource.un.org/en/news/united-nations-open-source-principles). In harmony with the [ECMWF's Charter of Ethics and Conduct](https://www.ecmwf.int/sites/default/files/Charter_of_Ethics.pdf), @@ -64,4 +64,4 @@ to maintain confidentiality with regard to the reporter of an incident. This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html, -and informed by [ECMWF's Open Source Principles](./open-source-principles.md). +and informed by [ECMWF's Open Source Principles](./Open-Source-Principles.md). diff --git a/Principles/open-source-principles.md b/Principles/Open-Source-Principles.md similarity index 100% rename from Principles/open-source-principles.md rename to Principles/Open-Source-Principles.md diff --git a/Principles/README.md b/Principles/README.md new file mode 100644 index 0000000..6c8d91d --- /dev/null +++ b/Principles/README.md @@ -0,0 +1,8 @@ +# Principles + +Core principles and standards guiding ECMWF software development. + +## Contents + +- [Open Source Principles](./Open-Source-Principles.md) — ECMWF's adoption of the United Nations Open Source Principles +- [Code of Conduct](./Code-Of-Conduct.md) — standards of behaviour for ECMWF software development diff --git a/README.md b/README.md index 8852f0e..22c7a31 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The Codex is a set of principles and guidelines for development of software and # Contents -- [Code of Conduct](./Principles/CODE_OF_CONDUCT.md) +- [Code of Conduct](./Principles/Code-Of-Conduct.md) - [Principles](./Principles) - [Architectural Decision Records](./ADR) - [Repository Structure](./Repository%20Structure) 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 index b055fa2..b865e95 100644 --- a/Software Management Plan/README.md +++ b/Software Management Plan/README.md @@ -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 diff --git a/TODO.md b/TODO.md index a5b71e2..f67351f 100644 --- a/TODO.md +++ b/TODO.md @@ -8,8 +8,8 @@ Contributions addressing any of these items are welcome via pull request. ## High Priority - [ ] **Guidelines/Testing.md** — File opens with an explicit `TODO`. No actual testing guidelines exist beyond test data hosting via `sites.ecmwf.int`. Needs unit, integration, and regression testing standards. -- [ ] **Languages/versioning.md** — Entire file is a single-line placeholder: *"How do we manage multi-language repositories with a single version number?"*. Needs a versioning policy. -- [ ] **LICENSE** (root) — File is empty. The licence text exists in `Legal/apache-licence` but the root `LICENSE` file that GitHub uses for badge detection and display contains no content. +- [ ] **Languages/Versioning.md** — Entire file is a single-line placeholder: *"How do we manage multi-language repositories with a single version number?"*. Needs a versioning policy. +- [ ] **LICENSE** (root) — File is empty. The licence text exists in `Legal/Apache-Licence` but the root `LICENSE` file that GitHub uses for badge detection and display contains no content. ## Medium Priority @@ -24,5 +24,5 @@ Contributions addressing any of these items are welcome via pull request. - [ ] **MARS language/MARS-Template.md** — Typo in title: "Languge" should be "Language". - [ ] **MARS language/MARS-007-Timespan-Absence.md** — Same "Languge" typo in title. Also contains an empty bullet point (`* `) around line 200. - [ ] **Contributing Upstream/README.md** — Single-line index file. Could benefit from a brief introductory paragraph explaining the purpose of the section. -- [ ] **Repository Structure/example.md** — Only provides a Python project README template. No equivalent example for a C++ project. -- [ ] **Languages/python_wheels.md** — Notes that automated release triggering is pending and pin derivation for Python interface wheels has a known deficiency. +- [ ] **Repository Structure/Example.md** — Only provides a Python project README template. No equivalent example for a C++ project. +- [ ] **Languages/Python-Wheels.md** — Notes that automated release triggering is pending and pin derivation for Python interface wheels has a known deficiency.