#r "nuget: Yzl" open Yzl.Core let stages = Yzl.seq "stages" << Yzl.liftMany let stage = Yzl.str "stage" let job (name: string) = Yzl.map name let tags = Yzl.seq "tags" << Yzl.liftMany let image = Yzl.str "image" let script = Yzl.seq "script" << Yzl.liftMany let variables vs = "variables" .= [for k,v in vs -> k .= v] module Stage = let build = "build" let test = "test" let deploy = "deploy" let build m = job $"build {m}" [ image "mcr.microsoft.com/dotnet/sdk:6.0" stage Stage.build tags [ m ] script [ """echo "hello" """ "dotnet --version" ] variables [ "DEPLOY_ENVIRONMENT", "staging" "DEPLOY_PATH", @"C:\path" ] "needs".= [ [ "project" .= "group/project" "job" .= "build" "artifacts" .= true ] ] ] let machines = [ "server-1" "server-2" "server-3" ] [ stages [ Stage.build; Stage.test; Stage.deploy ] for m in machines do build m ] |> Yzl.render |> printf "%s"