up
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
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
Export Center CI / export-ci (push) Has been cancelled
Notify Smoke Test / Notify Unit Tests (push) Has been cancelled
Notify Smoke Test / Notifier Service Tests (push) Has been cancelled
Notify Smoke Test / Notification Smoke Test (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
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
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
Export Center CI / export-ci (push) Has been cancelled
Notify Smoke Test / Notify Unit Tests (push) Has been cancelled
Notify Smoke Test / Notifier Service Tests (push) Has been cancelled
Notify Smoke Test / Notification Smoke Test (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
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
This commit is contained in:
@@ -31,7 +31,7 @@ internal sealed class PkgutilPackageAnalyzer : OsPackageAnalyzerBase
|
||||
|
||||
public override string AnalyzerId => "pkgutil";
|
||||
|
||||
protected override ValueTask<IReadOnlyList<OSPackageRecord>> ExecuteCoreAsync(
|
||||
protected override ValueTask<ExecutionResult> ExecuteCoreAsync(
|
||||
OSPackageAnalyzerContext context,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
@@ -39,24 +39,26 @@ internal sealed class PkgutilPackageAnalyzer : OsPackageAnalyzerBase
|
||||
if (!Directory.Exists(receiptsPath))
|
||||
{
|
||||
Logger.LogInformation("pkgutil receipts directory not found at {Path}; skipping analyzer.", receiptsPath);
|
||||
return ValueTask.FromResult<IReadOnlyList<OSPackageRecord>>(EmptyPackages);
|
||||
return ValueTask.FromResult(ExecutionResult.FromPackages(EmptyPackages));
|
||||
}
|
||||
|
||||
var receipts = _receiptParser.DiscoverReceipts(context.RootPath, cancellationToken);
|
||||
if (receipts.Count == 0)
|
||||
{
|
||||
Logger.LogInformation("No pkgutil receipts found; skipping analyzer.");
|
||||
return ValueTask.FromResult<IReadOnlyList<OSPackageRecord>>(EmptyPackages);
|
||||
return ValueTask.FromResult(ExecutionResult.FromPackages(EmptyPackages));
|
||||
}
|
||||
|
||||
Logger.LogInformation("Discovered {Count} pkgutil receipts", receipts.Count);
|
||||
|
||||
var evidenceFactory = OsFileEvidenceFactory.Create(context.RootPath, context.Metadata);
|
||||
|
||||
var records = new List<OSPackageRecord>(receipts.Count);
|
||||
foreach (var receipt in receipts)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
var record = CreateRecordFromReceipt(receipt, cancellationToken);
|
||||
var record = CreateRecordFromReceipt(receipt, evidenceFactory, cancellationToken);
|
||||
if (record is not null)
|
||||
{
|
||||
records.Add(record);
|
||||
@@ -67,11 +69,12 @@ internal sealed class PkgutilPackageAnalyzer : OsPackageAnalyzerBase
|
||||
|
||||
// Sort for deterministic output
|
||||
records.Sort();
|
||||
return ValueTask.FromResult<IReadOnlyList<OSPackageRecord>>(records);
|
||||
return ValueTask.FromResult(ExecutionResult.FromPackages(records));
|
||||
}
|
||||
|
||||
private OSPackageRecord? CreateRecordFromReceipt(
|
||||
PkgutilReceipt receipt,
|
||||
OsFileEvidenceFactory evidenceFactory,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(receipt.Identifier) ||
|
||||
@@ -104,12 +107,7 @@ internal sealed class PkgutilPackageAnalyzer : OsPackageAnalyzerBase
|
||||
|
||||
if (!entry.IsDirectory)
|
||||
{
|
||||
files.Add(new OSPackageFileEvidence(
|
||||
entry.Path,
|
||||
layerDigest: null,
|
||||
sha256: null,
|
||||
sizeBytes: null,
|
||||
isConfigFile: IsConfigPath(entry.Path)));
|
||||
files.Add(evidenceFactory.Create(entry.Path, IsConfigPath(entry.Path)));
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +124,17 @@ internal sealed class PkgutilReceiptParser
|
||||
{
|
||||
if (dict.TryGetValue(key, out var value) && value is NSDate nsDate)
|
||||
{
|
||||
return new DateTimeOffset(nsDate.Date, TimeSpan.Zero);
|
||||
var dateTime = nsDate.Date;
|
||||
if (dateTime.Kind == DateTimeKind.Local)
|
||||
{
|
||||
dateTime = dateTime.ToUniversalTime();
|
||||
}
|
||||
else if (dateTime.Kind == DateTimeKind.Unspecified)
|
||||
{
|
||||
dateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
|
||||
}
|
||||
|
||||
return new DateTimeOffset(dateTime, TimeSpan.Zero);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user