language-dockerfile-0.3.4.0: Dockerfile linter, parser, pretty-printer and embedded DSL

Safe HaskellNone
LanguageHaskell2010

Language.Dockerfile

Contents

Synopsis

Parsing Dockerfiles (Language.Dockerfile.Syntax and Language.Dockerfile.Parser)

type Dockerfile = [InstructionPos] Source

Type of the Dockerfile AST

Pretty-printing Dockerfiles (Language.Dockerfile.PrettyPrint)

Writting Dockerfiles (Language.Dockerfile.EDSL)

toDockerfileStr :: EDockerfileM a -> String Source

runs the Dockerfile EDSL and returns a String using PrettyPrint

import           Language.Dockerfile

main :: IO ()
main = writeFile "something.dockerfile" $ toDockerfileStr $ do
    from (tagged "fpco/stack-build" "lts-6.9")
    add "." "applanguage-dockerfile"
    workdir "applanguage-dockerfile"
    run (words "stack build --test --only-dependencies")
    cmd (words "stack test")

toDockerfile :: EDockerfileM a -> Dockerfile Source

Runs the Dockerfile EDSL and returns a Dockerfile you can pretty print or manipulate

toDockerfileStrIO :: MonadIO m => EDockerfileTM m t -> m String Source

A version of toDockerfileStr which allows IO actions

toDockerfileIO :: MonadIO m => EDockerfileTM m t -> m Dockerfile Source

A version of toDockerfile which allows IO actions

runDockerfileIO :: MonadIO m => EDockerfileTM m t -> m (t, Dockerfile) Source

Just runs the EDSL's writer monad

runDockerfileStrIO :: MonadIO m => EDockerfileTM m t -> m (t, String) Source

Runs the EDSL's writer monad and pretty-prints the result

liftIO :: MonadIO m => forall a. IO a -> m a

Lift a computation from the IO monad.

from :: forall m. MonadFree EInstruction m => EBaseImage -> m () Source

Constructing base images

Syntax

add :: forall m. MonadFree EInstruction m => Source -> Destination -> m () Source

user :: forall m. MonadFree EInstruction m => String -> m () Source

label :: forall m. MonadFree EInstruction m => Pairs -> m () Source

stopSignal :: forall m. MonadFree EInstruction m => String -> m () Source

copy :: forall m. MonadFree EInstruction m => Source -> Destination -> m () Source

runArgs :: forall m. MonadFree EInstruction m => Arguments -> m () Source

cmdArgs :: forall m. MonadFree EInstruction m => Arguments -> m () Source

workdir :: forall m. MonadFree EInstruction m => Directory -> m () Source

expose :: forall m. MonadFree EInstruction m => Ports -> m () Source

volume :: forall m. MonadFree EInstruction m => String -> m () Source

maintainer :: forall m. MonadFree EInstruction m => String -> m () Source

env :: forall m. MonadFree EInstruction m => Pairs -> m () Source

arg :: forall m. MonadFree EInstruction m => String -> m () Source

comment :: forall m. MonadFree EInstruction m => String -> m () Source

onBuild :: MonadFree EInstruction m => EDockerfileM a -> m () Source

ONBUILD Dockerfile instruction

Each nested instruction gets emitted as a separate ONBUILD block

toDockerfile $ do
    from "node"
    run "apt-get update"
    onBuild $ do
        run "echo more-stuff"
        run "echo here"

embed :: forall m. MonadFree EInstruction m => [InstructionPos] -> m () Source

edockerfile :: QuasiQuoter Source

Quasiquoter for embedding dockerfiles on the EDSL

putStr $ toDockerfile $ do
    from "node"
    run "apt-get update"
    [edockerfile|
    RUN apt-get update
    CMD node something.js
    |]

Support types for the EDSL

type EDockerfileM = Free EInstruction Source

The type of Identity based EDSL blocks

type EDockerfileTM = FreeT EInstruction Source

The type of free monad EDSL blocks

QuasiQuoter (Language.Dockerfile.EDSL.Quasi)

Types (Language.Dockerfile.Syntax)

data InstructionPos Source

Instruction with additional location information required for creating good check messages

Re-exports from parsec

data ParseError :: *

The abstract data type ParseError represents parse errors. It provides the source position (SourcePos) of the error and a list of error messages (Message). A ParseError can be returned by the function parse. ParseError is an instance of the Show and Eq classes.

Instruction and InstructionPos helpers