#r "/opt/fsi/packages/Oci.dll" #load "contract.fsx" open System open System.IO open System.Text.Json open Contract open Quorate.Oci let revision = Environment.GetEnvironmentVariable "SOURCE_REVISION" let targets = Environment.GetEnvironmentVariable "TARGETS" |> decode let repository = "quorate/project-delivery-controller" let layout = "/handoff/layout" let digest = File.ReadAllText("/handoff/image-digest").Trim() require (validRevision revision) "invalid source revision" require (validDigest digest) "invalid image digest" require (targets.Length = 1 && targets[0].Kind = "QuayOCI" && targets[0].Repository = repository) "invalid delivery target" let publish () = let auth = RegistryAuth.Load("/auth/.dockerconfigjson", "registry.quorate.internal") use root = Registry.LoadRoot "/registry-ca/ca.crt" use registry = new Registry(Uri("https://registry.quorate.internal"), auth, root) registry .PushAsync(repository, layout, "delivery", $"delivery-{revision}", cancellationToken) .GetAwaiter() .GetResult() let published = publish () require (published = digest) "published digest mismatch" directory "/result" |> ignore File.WriteAllText( "/result/delivery-result", JsonSerializer.Serialize( { SourceRevision = revision Targets = [| { Kind = "QuayOCI" Repository = repository Reference = $"registry.quorate.internal/{repository}@{digest}" } |] }, json ) ) printfn "publish=%s digest=%s" repository digest