-
Notifications
You must be signed in to change notification settings - Fork 0
feat(integration): add ecosystem capability catalogue #1147
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
2101bda
bfb4dd9
9166c12
d69b506
d7cd3e7
76561de
c595100
867fc15
cd53b92
c934fb0
f3bc1ba
89c845d
21d935b
026debe
cdf97c2
06f67c1
043e0ed
be84bcc
79d86ca
ca5ebaa
06ca50d
ec1e165
5e41f0a
9ac03e0
db5e704
390af19
e15eaae
8df0efb
113de5e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,76 @@ | ||
| name: CWL Ecosystem Catalogue Quality CI | ||
|
|
||
| on: | ||
| pull_request: | ||
| paths: | ||
| - ".github/workflows/cwl-ecosystem-catalog-quality-ci.yml" | ||
| - "CHANGELOG.md" | ||
| - "docs/doctoring/ecosystem-capability-catalog-standards.md" | ||
| - "docs/integration/CWL_REPOSITORY_RESPONSIBILITY_CATALOG.md" | ||
| - "docs/integration/README.md" | ||
| - "docs/integration/adr/README.md" | ||
| - "docs/integration/adr/0002-cwl-capability-catalog.md" | ||
| - "schemas/cwl-ecosystem-catalog-v1.schema.json" | ||
| - "schemas/cwl-service-capability-v1.schema.json" | ||
| - "schemas/examples/cwl-ecosystem-catalog-v1.example.json" | ||
| - "schemas/examples/cwl-service-capability-v1.example.json" | ||
| - "schemas/examples/services/**" | ||
| - "scripts/ci/cwl_catalog_*.py" | ||
| - "scripts/ci/validate_cwl_ecosystem_catalog.py" | ||
| - "tests/catalogue_test_helpers.py" | ||
| - "tests/test_cwl_catalog_*.py" | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| concurrency: | ||
| group: cwl-ecosystem-catalog-quality-${{ github.event.pull_request.number || github.ref }} | ||
| cancel-in-progress: true | ||
|
|
||
| jobs: | ||
| exact-head-catalogue-quality: | ||
| runs-on: ubuntu-24.04 | ||
| timeout-minutes: 10 | ||
| steps: | ||
| - name: Checkout exact source revision | ||
| uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | ||
| with: | ||
| ref: ${{ github.event.pull_request.head.sha }} | ||
| persist-credentials: false | ||
|
|
||
| - name: Set up Python | ||
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | ||
| with: | ||
| python-version: "3.14" | ||
|
|
||
| - name: Install hash-verified test-only dependencies | ||
| env: | ||
| PIP_DISABLE_PIP_VERSION_CHECK: "1" | ||
| PIP_NO_INPUT: "1" | ||
| shell: bash --noprofile --norc -e -o pipefail {0} | ||
| run: | | ||
| cat >"${RUNNER_TEMP}/catalogue-quality-requirements.txt" <<'EOF' | ||
| coverage==7.15.2 --hash=sha256:b9a6367e4aff723e8ee8190836836124284e8fcd4265e307c844010cfa074f3f | ||
| iniconfig==2.1.0 --hash=sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760 | ||
| packaging==26.2 --hash=sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e | ||
| pluggy==1.6.0 --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 | ||
| pygments==2.20.0 --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 | ||
| pytest==9.1.1 --hash=sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c | ||
| EOF | ||
| python -m pip install --only-binary=:all: --require-hashes -r "${RUNNER_TEMP}/catalogue-quality-requirements.txt" | ||
|
|
||
| - name: Verify exact-head catalogue contracts | ||
| shell: bash --noprofile --norc -e -o pipefail {0} | ||
| run: | | ||
| test "$(git rev-parse HEAD)" = "${{ github.event.pull_request.head.sha }}" | ||
| python -m coverage run --branch -m pytest -q \ | ||
| tests/test_cwl_catalog_contract_and_io.py \ | ||
| tests/test_cwl_catalog_services.py \ | ||
| tests/test_cwl_catalog_relationships_cli_docs.py | ||
| python -m coverage report \ | ||
| --include='scripts/ci/cwl_catalog_*.py,scripts/ci/validate_cwl_ecosystem_catalog.py' \ | ||
| --fail-under=100 | ||
|
Comment on lines
+66
to
+72
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 Info: Catalogue quality workflow runs only 3 test files against a 100% coverage gate The new workflow cwl-ecosystem-catalog-quality-ci.yml runs coverage over only the three catalog test files and then asserts Was this helpful? React with 👍 or 👎 to provide feedback.
Comment on lines
+62
to
+72
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 Info: Envelope-contract test not run by this workflow The workflow runs only the three catalogue test files (.github/workflows/cwl-ecosystem-catalog-quality-ci.yml:66-69) and its path triggers omit the envelope schemas, their examples, and test_cwl_integration_contract.py added in this same PR. Those rely on the general central suite; this catalogue workflow gives the envelope contract no exact-head gate. Was this helpful? React with 👍 or 👎 to provide feedback. |
||
| python scripts/ci/validate_cwl_ecosystem_catalog.py \ | ||
| schemas/examples/cwl-ecosystem-catalog-v1.example.json | ||
| python -m compileall -q scripts/ci tests | ||
| git diff --exit-code | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| # Ecosystem Capability Catalogue Standards | ||
|
|
||
| The catalogue applies **JSON Schema Draft 2020-12** to closed machine-readable contracts, **OpenAPI 3.2.0** to new shared HTTP interfaces, **AsyncAPI 3.1.0** to asynchronous channel descriptions, **CloudEvents 1.0** to domain event identity, and **W3C PROV-O** to provenance semantics. The catalogue does not claim that schema validation proves authorization, scientific validity, deployment maturity, CSAP certification, or SOC 2 attestation. | ||
|
|
||
| ## APA 7th references | ||
|
|
||
| AsyncAPI Initiative. (2024). *AsyncAPI specification 3.1.0*. https://www.asyncapi.com/docs/reference/specification/v3.1.0 | ||
|
|
||
| Cloud Native Computing Foundation. (2024). *CloudEvents specification 1.0.2*. https://github.com/cloudevents/spec/tree/v1.0.2 | ||
|
|
||
| JSON Schema. (2022). *JSON Schema specification: Draft 2020-12*. https://json-schema.org/draft/2020-12 | ||
|
|
||
| OpenAPI Initiative. (2025). *OpenAPI specification 3.2.0*. https://spec.openapis.org/oas/v3.2.0.html | ||
|
|
||
| World Wide Web Consortium. (2013). *PROV-O: The PROV ontology*. https://www.w3.org/TR/prov-o/ | ||
|
|
||
| American Institute of Certified Public Accountants. (2022). *Trust services criteria*. AICPA. | ||
|
|
||
| Korea Internet & Security Agency. (2025). *Cloud Security Assurance Program guidance*. KISA. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| # Doctoring: CWL ecosystem integration standards | ||
|
|
||
| This record supports the organization-level integration profile. Product-domain scientific decisions remain in the owning repository's doctoring/research documentation. | ||
|
|
||
| ## Design implications | ||
|
|
||
| - **CloudEvents 1.0** provides a vendor-neutral event data model. CWL uses CloudEvents `specversion: "1.0"` and keeps organization metadata under the event `data` object so the profile is explicit and contract-testable. | ||
| - **OpenAPI 3.2.0** is the published OpenAPI baseline for new shared synchronous interfaces. | ||
| - **AsyncAPI 3.1.0** is the current published baseline for repositories that publish asynchronous channel contracts. | ||
| - **JSON Schema Draft 2020-12** is the baseline for shared JSON contracts. | ||
| - **RFC 9457** defines Problem Details for HTTP APIs and supersedes RFC 7807. | ||
| - **RFC 9562** defines UUIDs; UUIDv7 supplies a time-ordered Unix-millisecond layout appropriate for organization-level event/command/correlation identifiers when time-ordering is useful. | ||
| - **W3C Trace Context** defines stable cross-service tracing headers. The 2021 Recommendation is used as the production baseline rather than making a draft-level successor a hard dependency. The CWL v1 envelope profile pins `traceparent` version `00`, rejects the Recommendation's forbidden all-zero trace and parent identifiers, and accepts only flags `00` or `01` because senders MUST leave every reserved flag bit unset. | ||
| - **W3C PROV-O** supplies a standard vocabulary for provenance entities, activities, and agents when products expose provenance graphs. | ||
|
|
||
| ## APA 7th references | ||
|
|
||
| AsyncAPI Initiative. (2026). *AsyncAPI specification (Version 3.1.0).* https://www.asyncapi.com/docs/reference/specification/v3.1.0 | ||
|
|
||
| Cloud Native Computing Foundation. (2022). *CloudEvents specification (Version 1.0.2).* https://github.com/cloudevents/spec/tree/v1.0.2 | ||
|
|
||
| Davis, K., Peabody, B., & Leach, P. (2024). *Universally unique identifiers (UUIDs)* (RFC 9562). Internet Engineering Task Force. https://doi.org/10.17487/RFC9562 | ||
|
|
||
| Lebo, T., Sahoo, S., & McGuinness, D. (Eds.). (2013). *PROV-O: The PROV ontology.* World Wide Web Consortium. https://www.w3.org/TR/prov-o/ | ||
|
|
||
| Nottingham, M., Wilde, E., & Dalal, S. (2023). *Problem details for HTTP APIs* (RFC 9457). Internet Engineering Task Force. https://doi.org/10.17487/RFC9457 | ||
|
|
||
| OpenAPI Initiative. (2025). *OpenAPI specification (Version 3.2.0).* Linux Foundation. https://spec.openapis.org/oas/v3.2.0.html | ||
|
|
||
| World Wide Web Consortium. (2021). *Trace Context.* https://www.w3.org/TR/trace-context/ | ||
|
|
||
| Wright, A., Andrews, H., Hutton, B., & Dennis, G. (2022). *JSON Schema: A media type for describing JSON documents (Draft 2020-12).* JSON Schema. https://json-schema.org/draft/2020-12/json-schema-core |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📝 Info: Quality CI path filter omits conftest.py
The trigger
pathsin cwl-ecosystem-catalog-quality-ci.yml cover the catalogue scripts, schemas, and tests but not conftest.py, which now loads the catalogue helper the focused tests depend on. A change touching onlyconftest.pywould not re-run this gate.Was this helpful? React with 👍 or 👎 to provide feedback.