build/build-ccr-digests.ps1 (91 lines of code) (raw):

param( [parameter(Mandatory = $true)] [string]$tag, [parameter(Mandatory = $true)] [string]$repo, [string]$outDir = "", [switch]$push, [switch]$skipRegoPolicy ) $ErrorActionPreference = 'Stop' $PSNativeCommandUseErrorActionPreference = $true . $PSScriptRoot/helpers.ps1 if ($outDir -eq "") { $outDir = "." } $ccrContainers = @( "blobfuse-launcher", "ccr-attestation", "ccr-governance", "ccr-init", "ccr-secrets", "ccr-proxy", "ccr-proxy-ext-processor", "code-launcher", "identity", "otel-collector", "skr" ) $ccrArtefacts = @( "policies/ccr-governance-opa-policy" ) #https://learn.microsoft.com/en-us/powershell/scripting/learn/experimental-features?view=powershell-7.4#psnativecommanderroractionpreference $ErrorActionPreference = 'Stop' $PSNativeCommandUseErrorActionPreference = $true $digests = @() $containerPolicies = @() foreach ($container in $ccrContainers) { $digest = Get-Digest -repo $repo -containerName $container -tag $tag $digests += [ordered]@{ image = $container digest = "$digest" policyDocument = $container + "-policy" policyDocumentDigest = "" } if (!$skipRegoPolicy) { $containerRegoPolicy = Get-Container-Rego-Policy -repo $repo -containerName $container -digest $digest -outDir $outDir $containerDebugRegoPolicy = Get-Container-Rego-Policy -repo $repo -containerName $container -digest $digest -outDir $outDir -debugMode } else { $containerRegoPolicy = "{}" } $templateJson = Get-Content -Path "$PSScriptRoot/templates/$container.json" | ConvertFrom-Json $policyJson = Get-Content -Path "$PSScriptRoot/templates/$container-policy.json" | ConvertFrom-Json $containerPolicies += [ordered]@{ image = $container templateJson = $templateJson policy = @{ json = $policyJson rego = $containerRegoPolicy rego_debug = $containerDebugRegoPolicy } } } foreach ($containerPolicy in $containerPolicies) { $imageName = $containerPolicy["image"] $fileName = $imageName + "-policy.yaml" $containerPolicy | ConvertTo-Yaml | Out-File $outDir/$fileName if ($push) { Set-Location $outDir oras push "$repo/policies/$imageName-policy:$tag" ./$fileName $policyDocumentDigest = Get-Digest -repo "$repo/policies" -containerName $imageName-policy -tag $tag foreach ($digest in $digests) { if ($digest["image"] -eq $imageName) { $digest["policyDocumentDigest"] = "$policyDocumentDigest" break } } } } foreach ($artefact in $ccrArtefacts) { $digest = Get-Digest -repo $repo -containerName $artefact -tag $tag $digests += [ordered]@{ image = $artefact digest = "$digest" } } $digests | ConvertTo-Yaml | Out-File $outDir/sidecar-digests.yaml if ($push) { Set-Location $outDir oras push "$repo/sidecar-digests:$tag" ./sidecar-digests.yaml }