This is a Dhall encoding of the GitLab CI configuration schema.
See code under the examples folder or checkout the dhall-gitlab-pipeline for a more complete project example.
let GitLab =
https://raw.githubusercontent.com/bgamari/dhall-gitlab-ci/master/package.dhall
let Prelude = GitLab.Prelude
let renderTop = GitLab.Top.toJSON
let demoJob =
GitLab.Job::{
, stage = Some "build"
, image = Some { name = "alpine:latest", entrypoint = Some [ " " ] }
, script = [ "echo 'Hello World'" ]
}
let top = GitLab.Top::{ jobs = toMap { generated-job = demoJob } }
in Prelude.JSON.renderYAML (renderTop top)
let GitLab = ../package.dhall
let Prelude = GitLab.Prelude
let List/map = Prelude.List.map
let Map = Prelude.Map.Type
let Job = GitLab.Job.Type
let renderTop = GitLab.Top.toJSON
let buildDir = "build"
let targets = [ "package-1", "package-2" ]
let mkJob =
λ(target : Text) →
GitLab.Job::{
, stage = Some "build"
, image = Some { name = "alpine:latest", entrypoint = Some [ " " ] }
, script = [ "echo 'Building ${buildDir}/${target} World'" ]
}
let jobList
: List { mapKey : Text, mapValue : Job }
= List/map
Text
{ mapKey : Text, mapValue : Job }
(λ(target : Text) → { mapKey = target, mapValue = mkJob target })
targets
let jobMap
: Map Text Job
= jobList
let top = GitLab.Top::{ jobs = jobMap }
in Prelude.JSON.renderYAML (renderTop top)