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

- 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:
StellaOps Bot
2025-12-07 16:24:45 +02:00
parent e3f28a21ab
commit 11597679ed
199 changed files with 9809 additions and 4404 deletions

View File

@@ -7,7 +7,7 @@ internal sealed record UbuntuFetchCacheEntry(string? ETag, DateTimeOffset? LastM
{
public static UbuntuFetchCacheEntry Empty { get; } = new(null, null);
public static UbuntuFetchCacheEntry FromDocument(StellaOps.Concelier.Storage.Mongo.Documents.DocumentRecord document)
public static UbuntuFetchCacheEntry FromDocument(StellaOps.Concelier.Storage.Mongo.DocumentRecord document)
=> new(document.Etag, document.LastModified);
public static UbuntuFetchCacheEntry FromBson(BsonDocument document)
@@ -54,7 +54,7 @@ internal sealed record UbuntuFetchCacheEntry(string? ETag, DateTimeOffset? LastM
return doc;
}
public bool Matches(StellaOps.Concelier.Storage.Mongo.Documents.DocumentRecord document)
public bool Matches(StellaOps.Concelier.Storage.Mongo.DocumentRecord document)
{
if (document is null)
{

View File

@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using StellaOps.Concelier.Models;
using StellaOps.Concelier.Normalization.Distro;
using StellaOps.Concelier.Storage.Mongo.Documents;
using StellaOps.Concelier.Storage.Mongo;
namespace StellaOps.Concelier.Connector.Distro.Ubuntu.Internal;
@@ -162,11 +162,11 @@ internal static class UbuntuMapper
["ubuntu.pocket"] = package.Pocket ?? string.Empty
};
var range = new AffectedVersionRange(
rangeKind: "evr",
introducedVersion: null,
fixedVersion: package.Version,
lastAffectedVersion: null,
var range = new AffectedVersionRange(
rangeKind: "evr",
introducedVersion: null,
fixedVersion: package.Version,
lastAffectedVersion: null,
rangeExpression: rangeExpression,
provenance: rangeProvenance,
primitives: new RangePrimitives(
@@ -178,27 +178,27 @@ internal static class UbuntuMapper
LastAffected: null),
VendorExtensions: extensions));
var statuses = new[]
{
new AffectedPackageStatus(DetermineStatus(package), provenance)
};
var normalizedNote = string.IsNullOrWhiteSpace(package.Release)
? null
: $"ubuntu:{package.Release.Trim()}";
var normalizedRule = range.ToNormalizedVersionRule(normalizedNote);
var normalizedVersions = normalizedRule is null
? Array.Empty<NormalizedVersionRule>()
: new[] { normalizedRule };
list.Add(new AffectedPackage(
type: AffectedPackageTypes.Deb,
identifier: package.Package,
platform: package.Release,
versionRanges: new[] { range },
statuses: statuses,
provenance: new[] { provenance },
normalizedVersions: normalizedVersions));
var statuses = new[]
{
new AffectedPackageStatus(DetermineStatus(package), provenance)
};
var normalizedNote = string.IsNullOrWhiteSpace(package.Release)
? null
: $"ubuntu:{package.Release.Trim()}";
var normalizedRule = range.ToNormalizedVersionRule(normalizedNote);
var normalizedVersions = normalizedRule is null
? Array.Empty<NormalizedVersionRule>()
: new[] { normalizedRule };
list.Add(new AffectedPackage(
type: AffectedPackageTypes.Deb,
identifier: package.Package,
platform: package.Release,
versionRanges: new[] { range },
statuses: statuses,
provenance: new[] { provenance },
normalizedVersions: normalizedVersions));
}
return list.Count == 0

View File

@@ -13,8 +13,8 @@ using StellaOps.Concelier.Connector.Distro.Ubuntu.Configuration;
using StellaOps.Concelier.Connector.Distro.Ubuntu.Internal;
using StellaOps.Concelier.Storage.Mongo;
using StellaOps.Concelier.Storage.Mongo.Advisories;
using StellaOps.Concelier.Storage.Mongo.Documents;
using StellaOps.Concelier.Storage.Mongo.Dtos;
using StellaOps.Concelier.Storage.Mongo;
using StellaOps.Concelier.Storage.Mongo;
using StellaOps.Plugin;
using StellaOps.Cryptography;