fix(perception): bind worker dependency trees

This commit is contained in:
DCCONSTRUCTIONS
2026-08-05 15:59:00 +03:00
parent b38cd51338
commit 7756310bdf
4 changed files with 39 additions and 6 deletions
+14 -1
View File
@@ -161,6 +161,9 @@ if (
$descriptor.component -cne "mission-core-worker" -or
$descriptor.artifact_type -cne "shadow-release" -or
$descriptor.transition -cne "m4-detector-shadow-v1" -or
$descriptor.dependency_tree_identity -cne (
"relative-path-tab-size-tab-file-sha256-lf/v1"
) -or
$descriptor.boundary.repository -cne "NODEDC_MISSION_CORE" -or
$descriptor.boundary.nodedc_platform_repository -ne $false -or
$descriptor.boundary.external_deploy_registry -ne $false -or
@@ -177,6 +180,11 @@ if (
$wheelName = Get-RequiredText $descriptor.release.wheel.name "Wheel name"
$baselineName = Get-RequiredText $descriptor.release.baseline.name "Baseline name"
$runnerName = Get-RequiredText $descriptor.release.runner.name "Runner name"
if ($runnerName -cne "Invoke-M4DetectorShadow.ps1") {
throw "M4 runner name changed"
}
$null = Assert-FileSha256 $PSCommandPath $descriptor.release.runner.sha256 "M4 local runner"
$wheelPath = Assert-FileSha256 (
Join-Path $payload $wheelName
) $descriptor.release.wheel.sha256 "M4 runtime wheel"
@@ -188,6 +196,7 @@ foreach ($entry in $descriptor.inputs.PSObject.Properties) {
$input = $entry.Value
$null = Assert-FileSha256 $input.host_path $input.sha256 ("M4 input {0}" -f $entry.Name)
}
$dependencyFailures = @()
foreach ($dependency in $descriptor.dependencies) {
$root = Resolve-DDirectory $dependency.host_path ("M4 dependency {0}" -f $dependency.id) $false
$files = @()
@@ -217,7 +226,7 @@ foreach ($dependency in $descriptor.dependencies) {
$bytes -ne [int64]$dependency.bytes -or
$treeSha256 -cne [string]$dependency.tree_sha256
) {
throw (
$dependencyFailures += (
"M4 dependency {0} inventory changed: expected {1}/{2}/{3}, observed {4}/{5}/{6}" -f
$dependency.id,
$dependency.file_count,
@@ -229,6 +238,10 @@ foreach ($dependency in $descriptor.dependencies) {
)
}
}
if ($dependencyFailures.Count -gt 0) {
$dependencyFailures | ForEach-Object { Write-Output ("DEPENDENCY_MISMATCH={0}" -f $_) }
throw "M4 dependency inventory changed"
}
$imageRef = Get-RequiredText $descriptor.container.image_ref "Container image reference"
& docker image inspect $imageRef *> $null
+10 -2
View File
@@ -84,9 +84,17 @@ def build_wheel(output: Path) -> Path:
def render_descriptor(patch_id: str, revision: str) -> bytes:
template = DESCRIPTOR_TEMPLATE.read_text("utf-8")
if template.count("__PATCH_ID__") != 1 or template.count("__CODE_REVISION__") != 1:
if (
template.count("__PATCH_ID__") != 1
or template.count("__CODE_REVISION__") != 1
or template.count("__RUNNER_SHA256__") != 1
):
raise ArtifactBuildError("descriptor template placeholders changed")
rendered = template.replace("__PATCH_ID__", patch_id).replace("__CODE_REVISION__", revision)
rendered = (
template.replace("__PATCH_ID__", patch_id)
.replace("__CODE_REVISION__", revision)
.replace("__RUNNER_SHA256__", sha256_file(RUNNER))
)
document = json.loads(rendered)
if document["patch_id"] != patch_id or document["code_revision"] != revision:
raise ArtifactBuildError("descriptor identity rendering failed")