Add CloudVulnDB importer for issue #1511#2217
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a new v2 importer pipeline to ingest CloudVulnDB advisories from the project’s public RSS feed, along with fixtures/tests and a pytest configuration tweak to avoid collecting setup.py in Docker.
Changes:
- Introduce
CloudVulnDBImporterPipelineand RSS parsing helpers to produceAdvisoryDataV2. - Register the new importer in the central importer registry.
- Add unit tests + RSS/XML and expected JSON fixtures; update pytest
addoptsto ignoresetup.pyduring collection.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| vulnerabilities/pipelines/v2_importers/cloudvulndb_importer.py | New CloudVulnDB RSS-based v2 importer implementation. |
| vulnerabilities/importers/init.py | Registers the new v2 importer in the importers registry. |
| vulnerabilities/tests/test_cloudvulndb_importer.py | Adds unit tests for RSS parsing and advisory ID derivation. |
| vulnerabilities/tests/test_data/cloudvulndb/cloudvulndb_rss_mock.xml | Adds mocked RSS fixture for deterministic tests. |
| vulnerabilities/tests/test_data/cloudvulndb/expected_cloudvulndb_advisory_output1.json | Adds expected AdvisoryDataV2 JSON output fixture. |
| pyproject.toml | Updates pytest collection options to ignore setup.py. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
159276b to
d964334
Compare
- add CloudVulnDB v2 importer pipeline - register importer - add tests and fixtures - ignore setup.py in pytest collection Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
…lines Signed-off-by: ziad hany <ziadhany2016@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Resolves: aboutcode-org#2186 Signed-off-by: Keshav Priyadarshi <git@keshav.space> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Keshav Priyadarshi <git@keshav.space> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Resolves: aboutcode-org#2187 Signed-off-by: Keshav Priyadarshi <git@keshav.space> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> Signed-off-by: Tedsig42 <teddams047@gmail.com>
2be778e to
ce44242
Compare
ziadhany
left a comment
There was a problem hiding this comment.
@Tednoob17 please fix the DOC, and see the comments below.
| cloudvulndb_importer_v2.CloudVulnDBImporterPipeline, | ||
| enisa_nisa_importer_v2.EnisaNisaImporterPipeline, |
There was a problem hiding this comment.
To keep things simple, let’s split each importer into its own PR, but we should first double-check the quality of the data source.
| filterwarnings = [ | ||
| "ignore:Unknown config option.*:pytest.PytestConfigWarning", | ||
| 'ignore:datetime.datetime.utcfromtimestamp\(\) is deprecated and scheduled for removal.*:DeprecationWarning', | ||
| "ignore:CheckConstraint.check is deprecated in favor of `.condition`.:django.utils.deprecation.RemovedInDjango60Warning", | ||
| ] | ||
|
|
||
| addopts = [ | ||
| "-rfExXw", | ||
| "--strict-markers", | ||
| "--doctest-modules", | ||
| # setup.py imports setuptools which is not available in the Docker runtime | ||
| # image. Without this, pytest (which uses python_files = "*.py") tries to | ||
| # collect setup.py as a test module and crashes with exit code 2. | ||
| "--ignore=setup.py", | ||
| "--ignore-glob=*/setup.py", |
There was a problem hiding this comment.
Please avoid unrelated changes to the PR.
| class EnisaNisaImporterPipeline(VulnerableCodeBaseImporterPipelineV2): | ||
| """ | ||
| Import ENISA NISA advisories with tolerant parsing. | ||
|
|
||
| This parser is intentionally fault-tolerant: when version mapping is malformed, | ||
| it still extracts CVE aliases and URL references. | ||
| """ | ||
|
|
||
| pipeline_id = "enisa_nisa_importer_v2" | ||
| spdx_license_expression = "CC-BY-4.0" | ||
| license_url = "https://www.enisa.europa.eu/" | ||
| repo_url = "git+https://github.com/enisaeu/CNW" | ||
|
|
||
| precedence = 200 |
There was a problem hiding this comment.
We already have a PR for importing enisa:
| import io | ||
| import os | ||
| import shutil | ||
| import subprocess | ||
| import tarfile | ||
| import zipfile | ||
| from pathlib import Path |
There was a problem hiding this comment.
Why do we need to change this file? Is this vide-code? Please don't submit AI-generated code.
Add a new v2 importer for CloudVulnDB from the public RSS feed.
Changes
Testing