ce7cb702218693d08ea6d83464d2457c9250027c

This commit is contained in:
ms2k 2026-11-12 20:46:28 +09:00
commit 34c5f8963c

View file

@ -0,0 +1,52 @@
#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<Target array>
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