sbom-validator
Validates SBOM (Software Bill of Materials) files generated by BazBOM for correctness, completeness, and SPDX compliance. Use when checking if generated SBOMs are valid or debugging SBOM generation issues.
- Category: discovered
- Tags: github, community
- Version: 1.0.0
- Author: walid
- Downloads: 0
- GitHub stars: 1
- Updated: 2025-11-21
Download the latest version (v1.0.0) from this page.
SKILL.md
--- name: sbom-validator description: Validates SBOM (Software Bill of Materials) files generated by BazBOM for correctness, completeness, and SPDX compliance. Use when checking if generated SBOMs are valid or debugging SBOM generation issues. --- # SBOM Validator Skill Automatically validates SBOM files for structure, content, and compliance. ## When to Use Activate this skill when you hear: - "Is this SBOM valid?" - "Check the generated SBOM" - "Validate SBOM output" - "SBOM looks wrong" - "How many packages in the SBOM?" ## Validation Checks ### 1. File Existence and Format ```bash # Check file exists test -f sbom.spdx.json || test -f sbom.cyclonedx.json # Validate JSON syntax jq empty sbom.spdx.json ``` ### 2. SPDX Structure Validation ```bash # Required fields present jq -e '.spdxVersion' sbom.spdx.json jq -e '.dataLicense' sbom.spdx.json jq -e '.name' sbom.spdx.json jq -e '.packages' sbom.spdx.json jq -e '.relationships' sbom.spdx.json # Version check jq -r '.spdxVersion' sbom.spdx.json # Should be: "SPDX-2.3" or similar ``` ### 3. Package Validation ```bash # Count packages jq '.packages | length' sbom.spdx.json # Check package structure jq '.packages[0] | keys' sbom.spdx.json # Should have: SPDXID, name, versionInfo, externalRefs # Validate PURLs jq -r '.packages[].externalRefs[]? | select(.referenceType == "purl") | .referenceLocator' sbom.spdx.json ``` ### 4. Relationship Validation ```bash # Count relationships jq '.relationships | length' sbom.spdx.json # Check for DESCRIBES relationships jq '[.relationships[] | select(.relationship_type == "DESCRIBES")] | length' sbom.spdx.json # Check for DEPENDS_ON relationships jq '[.relationships[] | select(.relationshipType == "DEPENDS_ON")] | length' sbom.spdx.json ``` ### 5. Content Quality Checks ```bash # Check for empty packages jq '[.packages[] | select(.name == "" or .versionInfo == "")] | length' sbom.spdx.json # Verify download locations jq -r '.packages[] | .downloadLocation' sbom.spdx.json | grep -v "NOASSERTION" # Check SPDX IDs are unique jq -r '.packages[].SPDXID' sbom.spdx.json | sort | uniq -d ``` ## Validation Report Format ``` SBOM Validation Report ===================== File: sbom.spdx.json Size: 45KB ✅ JSON Format: Valid ✅ SPDX Version: SPDX-2.3 ✅ Required Fields: Present ✅ Package Count: 59 packages ✅ Relationship Count: 232 relationships Package Quality: ✅ All packages have names ✅ All packages have versions ✅ All packages have PURLs ✅ 59 download locations specified Relationships: ✅ 1 DESCRIBES relationship ✅ 231 DEPENDS_ON relationships ✅ No orphaned packages Summary: SBOM is valid and complete ✅ ``` ## Common Issues Detected ### Zero Packages **Symptom:** `.packages | length` returns 0 **Cause:** Dependency extraction failed **Action:** Check Bazel detection and maven_install.json parsing ### Missing PURLs **Symptom:** Some packages lack `externalRefs` **Cause:** Package URL generation failed **Action:** Verify artifact coordinates in maven_install.json ### Invalid Relationships **Symptom:** Relationship references non-existent SPDX IDs **Cause:** Graph conversion bug **Action:** Check `BazelDependencyGraph::to_spdx()` logic ### Malformed JSON **Symptom:** `jq` parsing fails **Cause:** Serialization error **Action:** Check `serde_json::to_string_pretty()` calls ## Quick Validation Commands ```bash # Basic validation jq '.packages | length' sbom.spdx.json # Show first 3 packages jq '.packages[0:3]' sbom.spdx.json # List all package names and versions jq -r '.packages[] | "\(.name)@\(.versionInfo)"' sbom.spdx.json # Check for duplicate packages jq -r '.packages[] | "\(.name)@\(.versionInfo)"' sbom.spdx.json | sort | uniq -d # Validate PURLs jq -r '.packages[].externalRefs[] | select(.referenceType == "purl") | .referenceLocator' sbom.spdx.json | head -5 ``` ## Integration with Testing Use after running BazBOM: ```bash # Generate SBOM bazbom scan --format spdx -o /tmp/test # Validate output jq '.packages | length' /tmp/test/sbom.spdx.json # Full validation ./validate-sbom.sh /tmp/test/sbom.spdx.json ``` ## Success Criteria An SBOM passes validation when: - ✅ JSON is syntactically valid - ✅ SPDX version is specified - ✅ All required fields present - ✅ Package count > 0 (for repos with dependencies) - ✅ All packages have names and versions - ✅ All packages have valid PURLs - ✅ Relationships reference existing packages - ✅ At least one DESCRIBES relationship Remember: A valid SBOM is the foundation for vulnerability scanning and compliance.