quorate/services/project-delivery/k8s/workflows/controller/publish.fsx

52 lines
1.5 KiB
Text
Raw Permalink Normal View History

#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