Skip to content

bgamari/dhall-gitlab-ci

master
Switch branches/tags
Code

dhall-gitlab-ci: A Dhall representation of gitlab-ci.yml

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.

Single Job Example - Source

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)

Multiple Jobs Example - Source

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)

About

A Dhall encoding of the GitLab CI configuration schema

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages