Skip to main content

Contributing

Contributions to OpenCGMES are welcome — bug reports, fixes, new validation checks, documentation, and CGMES profile support. This page covers the practical workflow: where code lives, what to run before opening a pull request, and the project's conduct and licensing policies. For deeper setup detail, see Building, Testing, and Code style.

Workflow​

  1. Fork the SOPTIM/OpenCGMES repository and clone your fork.
  2. Initialise the submodule if you'll touch CIMVocabCheck or run the integration tests:
    git submodule update --init
  3. Create a branch for your change off main.
  4. Make your change in the right module — see Where code lives below.
  5. Run the checks for whatever you touched (tests + lint + SBOM — see below).
  6. Open a pull request against main. CI runs the matching -ci workflow automatically; keep it green.

Where code lives​

The Repository Overview has the full module map. In short:

If you're changing…Work in…
CIMXML parsing / profilescimxml/
Validation logic (checks, schema index, API)cimvocabcheck/core/
The CLI toolcimvocabcheck/cli/
The language servercimvocabcheck/lsp/
The VS Code extensioncimnotebook/vscode/
The IntelliJ plugincimnotebook/intellij/

Before you open a PR​

Run the gates relevant to your change — these mirror the CI workflows, so passing them locally means CI is likely to pass:

# Java change (CIMXML / CIMVocabCheck)
mvn spotless:apply # auto-format
mvn verify # tests + Checkstyle/SpotBugs/PMD/JaCoCo

# VS Code change
cd cimnotebook/vscode && npm run lint && npm run format:check && npm run compile

# IntelliJ change
cd cimnotebook/intellij && ./gradlew spotlessCheck buildPlugin

# New source file, any language
scripts/license-headers.sh check # every first-party file needs the SOPTIM Apache-2.0 header

New files need the standard SOPTIM Apache-2.0 header (CI checks for it, and fails the build if it's missing or wrong for CIMVocabCheck/IntelliJ/VS Code — CIMXML is advisory-only for now). See Code style → License headers for the details and the auto-fix command.

Regenerate SBOMs when dependencies change

If you add, remove, or bump any dependency, re-run scripts/generate-sbom.sh (the relevant subset) and commit the updated SBOM/attribution files in the same change. CI fails on SBOM drift. See CI & releases → Supply chain.

Don't worry about versions

Versions are derived from Git tags by the versioning scripts at build/release time — do not bump versions by hand in your PR.

Tests​

Add or update tests alongside your change. Unit tests run on any checkout; the ENTSO-E integration tests (CGMES 2.4.15 + 3.0) need the submodule and are skipped automatically when it's absent. See Testing for what's covered and how to run the full suite.

Code of Conduct​

This project adheres to a Code of Conduct adapted from the Apache Foundation's Code of Conduct. All contributors and users are expected to follow it, to keep the community welcoming and inclusive.

License​

OpenCGMES is licensed under the Apache License 2.0. By contributing, you agree that your contributions are licensed under the same terms. New dependencies must use a license on the project's reviewed open-source allow-list (Apache-2.0, MIT, BSD-2/3-Clause, EPL-1.0/2.0, and a few others) — the CI license gate enforces this.

Getting help​