feat: Implement BerkeleyDB reader for RPM databases
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
console-runner-image / build-runner-image (push) Has been cancelled
wine-csp-build / Build Wine CSP Image (push) Has been cancelled
wine-csp-build / Integration Tests (push) Has been cancelled
wine-csp-build / Security Scan (push) Has been cancelled
wine-csp-build / Generate SBOM (push) Has been cancelled
wine-csp-build / Publish Image (push) Has been cancelled
wine-csp-build / Air-Gap Bundle (push) Has been cancelled
wine-csp-build / Test Summary (push) Has been cancelled
Some checks failed
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
console-runner-image / build-runner-image (push) Has been cancelled
wine-csp-build / Build Wine CSP Image (push) Has been cancelled
wine-csp-build / Integration Tests (push) Has been cancelled
wine-csp-build / Security Scan (push) Has been cancelled
wine-csp-build / Generate SBOM (push) Has been cancelled
wine-csp-build / Publish Image (push) Has been cancelled
wine-csp-build / Air-Gap Bundle (push) Has been cancelled
wine-csp-build / Test Summary (push) Has been cancelled
- Added BerkeleyDbReader class to read and extract RPM header blobs from BerkeleyDB hash databases. - Implemented methods to detect BerkeleyDB format and extract values, including handling of page sizes and magic numbers. - Added tests for BerkeleyDbReader to ensure correct functionality and header extraction. feat: Add Yarn PnP data tests - Created YarnPnpDataTests to validate package resolution and data loading from Yarn PnP cache. - Implemented tests for resolved keys, package presence, and loading from cache structure. test: Add egg-info package fixtures for Python tests - Created egg-info package fixtures for testing Python analyzers. - Included PKG-INFO, entry_points.txt, and installed-files.txt for comprehensive coverage. test: Enhance RPM database reader tests - Added tests for RpmDatabaseReader to validate fallback to legacy packages when SQLite is missing. - Implemented helper methods to create legacy package files and RPM headers for testing. test: Implement dual signing tests - Added DualSignTests to validate secondary signature addition when configured. - Created stub implementations for crypto providers and key resolvers to facilitate testing. chore: Update CI script for Playwright Chromium installation - Modified ci-console-exports.sh to ensure deterministic Chromium binary installation for console exports tests. - Added checks for Windows compatibility and environment variable setups for Playwright browsers.
This commit is contained in:
@@ -16,7 +16,8 @@ public static class OsComponentMapper
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(results);
|
||||
|
||||
var builder = ImmutableArray.CreateBuilder<LayerComponentFragment>();
|
||||
var fragmentsByLayer = new Dictionary<string, List<ComponentRecord>>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
foreach (var result in results)
|
||||
{
|
||||
if (result is null || string.IsNullOrWhiteSpace(result.AnalyzerId))
|
||||
@@ -24,31 +25,43 @@ public static class OsComponentMapper
|
||||
continue;
|
||||
}
|
||||
|
||||
var layerDigest = ComputeLayerDigest(result.AnalyzerId);
|
||||
var components = BuildComponentRecords(result.AnalyzerId, layerDigest, result.Packages);
|
||||
if (components.IsEmpty)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var syntheticDigest = ComputeLayerDigest(result.AnalyzerId);
|
||||
|
||||
builder.Add(LayerComponentFragment.Create(layerDigest, components));
|
||||
foreach (var package in result.Packages ?? Enumerable.Empty<OSPackageRecord>())
|
||||
{
|
||||
var actualLayerDigest = ResolveLayerDigest(package) ?? syntheticDigest;
|
||||
var record = ToComponentRecord(result.AnalyzerId, actualLayerDigest, package);
|
||||
|
||||
if (!fragmentsByLayer.TryGetValue(actualLayerDigest, out var records))
|
||||
{
|
||||
records = new List<ComponentRecord>();
|
||||
fragmentsByLayer[actualLayerDigest] = records;
|
||||
}
|
||||
|
||||
records.Add(record);
|
||||
}
|
||||
}
|
||||
|
||||
var builder = ImmutableArray.CreateBuilder<LayerComponentFragment>(fragmentsByLayer.Count);
|
||||
foreach (var (layerDigest, records) in fragmentsByLayer)
|
||||
{
|
||||
builder.Add(LayerComponentFragment.Create(layerDigest, ImmutableArray.CreateRange(records)));
|
||||
}
|
||||
|
||||
return builder.ToImmutable();
|
||||
}
|
||||
|
||||
private static ImmutableArray<ComponentRecord> BuildComponentRecords(
|
||||
string analyzerId,
|
||||
string layerDigest,
|
||||
IEnumerable<OSPackageRecord> packages)
|
||||
private static string? ResolveLayerDigest(OSPackageRecord package)
|
||||
{
|
||||
var records = ImmutableArray.CreateBuilder<ComponentRecord>();
|
||||
foreach (var package in packages ?? Enumerable.Empty<OSPackageRecord>())
|
||||
foreach (var file in package.Files)
|
||||
{
|
||||
records.Add(ToComponentRecord(analyzerId, layerDigest, package));
|
||||
if (!string.IsNullOrWhiteSpace(file.LayerDigest))
|
||||
{
|
||||
return file.LayerDigest;
|
||||
}
|
||||
}
|
||||
|
||||
return records.ToImmutable();
|
||||
return null;
|
||||
}
|
||||
|
||||
private static ComponentRecord ToComponentRecord(string analyzerId, string layerDigest, OSPackageRecord package)
|
||||
|
||||
Reference in New Issue
Block a user