-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Dockerfile linter, parser, pretty-printer and embedded DSL
--
-- Forked from hadolint.
--
-- All functions for parsing, printing and writting Dockerfiles are
-- exported through Language.Dockerfile. For more fine-grained
-- operations look for specific modules that implement a certain
-- functionality.
--
-- There are two flags in this package, which enable building two
-- executables:
--
--
-- - hadolint Enables building the hadolint
-- executable, though you might prefer to use the hadolint package
-- directly
-- - dockerfmt Builds example pretty-printer usage, which
-- reads a Dockerfile and pretty-prints it to stdout
--
--
-- See the GitHub project for the source-code and examples.
@package language-dockerfile
@version 0.1.2.0
module Language.Dockerfile.Bash
shellcheck :: String -> [Comment]
module Language.Dockerfile.Normalize
-- | Remove new line escapes and join escaped lines together on one line to
-- simplify parsing later on. Escapes are replaced with line breaks to
-- not alter the line numbers.
normalizeEscapedLines :: String -> String
module Language.Dockerfile.Lexer
lexer :: TokenParser ()
reserved :: String -> Parser ()
reservedOp :: String -> Parser ()
natural :: Parser Integer
commaSep :: ParsecT String () Identity a -> ParsecT String () Identity [a]
stringLiteral :: ParsecT String () Identity String
brackets :: ParsecT String () Identity a -> ParsecT String () Identity a
identifier :: ParsecT String () Identity String
lexeme :: ParsecT String () Identity a -> ParsecT String () Identity a
module Language.Dockerfile.Syntax
type Image = String
type Tag = String
type Port = Integer
type Directory = String
data BaseImage
UntaggedImage :: Image -> BaseImage
TaggedImage :: Image -> Tag -> BaseImage
DigestedImage :: Image -> ByteString -> BaseImage
-- | Type of the Dockerfile AST
type Dockerfile = [InstructionPos]
type Source = String
type Destination = String
type Arguments = [String]
type Pairs = [(String, String)]
-- | All commands available in Dockerfiles
data Instruction
From :: BaseImage -> Instruction
Add :: Source -> Destination -> Instruction
User :: String -> Instruction
Label :: Pairs -> Instruction
Stopsignal :: String -> Instruction
Copy :: Source -> Destination -> Instruction
Run :: Arguments -> Instruction
Cmd :: Arguments -> Instruction
Workdir :: Directory -> Instruction
Expose :: [Port] -> Instruction
Volume :: String -> Instruction
Entrypoint :: Arguments -> Instruction
Maintainer :: String -> Instruction
Env :: Pairs -> Instruction
Arg :: String -> Instruction
Comment :: String -> Instruction
OnBuild :: Instruction -> Instruction
EOL :: Instruction
type Filename = String
type Linenumber = Int
-- | Instruction with additional location information required for
-- creating good check messages
data InstructionPos
InstructionPos :: Instruction -> Filename -> Linenumber -> InstructionPos
instruction :: InstructionPos -> Instruction
sourcename :: InstructionPos -> Filename
instance GHC.Show.Show Language.Dockerfile.Syntax.InstructionPos
instance GHC.Classes.Ord Language.Dockerfile.Syntax.InstructionPos
instance GHC.Classes.Eq Language.Dockerfile.Syntax.InstructionPos
instance GHC.Show.Show Language.Dockerfile.Syntax.Instruction
instance GHC.Classes.Ord Language.Dockerfile.Syntax.Instruction
instance GHC.Classes.Eq Language.Dockerfile.Syntax.Instruction
instance GHC.Show.Show Language.Dockerfile.Syntax.BaseImage
instance GHC.Classes.Ord Language.Dockerfile.Syntax.BaseImage
instance GHC.Classes.Eq Language.Dockerfile.Syntax.BaseImage
module Language.Dockerfile.Rules
data Metadata
Metadata :: String -> Severity -> String -> Metadata
[code] :: Metadata -> String
[severity] :: Metadata -> Severity
[message] :: Metadata -> String
data Check
Check :: Metadata -> Filename -> Linenumber -> Bool -> Check
[metadata] :: Check -> Metadata
[filename] :: Check -> Filename
[linenumber] :: Check -> Linenumber
[success] :: Check -> Bool
link :: Metadata -> String
type Rule = Dockerfile -> [Check]
mapInstructions :: Metadata -> (Instruction -> Bool) -> Rule
instructionRule :: String -> Severity -> String -> (Instruction -> Bool) -> Rule
dockerfileRule :: String -> Severity -> String -> ([Instruction] -> Bool) -> Rule
analyze :: [Rule] -> Dockerfile -> [Check]
rules :: [Rule]
commentMetadata :: Comment -> Metadata
shellcheckBash :: Dockerfile -> [Check]
bashCommands :: [String] -> [[String]]
absoluteWorkdir :: Rule
hasMaintainer :: Rule
usingProgram :: String -> [String] -> Bool
multipleCmds :: Rule
multipleEntrypoints :: Rule
wgetOrCurl :: Rule
invalidCmd :: Rule
noRootUser :: Rule
noCd :: Rule
noSudo :: Rule
noUpgrade :: Rule
noUntagged :: Rule
noLatestTag :: Rule
aptGetVersionPinned :: Rule
aptGetPackages :: [String] -> [String]
aptGetCleanup :: Rule
useAdd :: Rule
invalidPort :: Rule
maintainerAddress :: Rule
pipVersionPinned :: Rule
isAptGetInstall :: [[Char]] -> Bool
aptGetYes :: Rule
aptGetNoRecommends :: Rule
isArchive :: String -> Bool
isUrl :: String -> Bool
copyInsteadAdd :: Rule
instance GHC.Classes.Eq Language.Dockerfile.Rules.Check
instance GHC.Classes.Eq Language.Dockerfile.Rules.Metadata
instance GHC.Classes.Ord Language.Dockerfile.Rules.Check
module Language.Dockerfile.FormatCheck
formatCheck :: Check -> String
module Language.Dockerfile.Syntax.Lift
instance Language.Haskell.TH.Syntax.Lift Language.Dockerfile.Syntax.InstructionPos
instance Language.Haskell.TH.Syntax.Lift Language.Dockerfile.Syntax.Instruction
instance Language.Haskell.TH.Syntax.Lift Language.Dockerfile.Syntax.BaseImage
module Language.Dockerfile.Parser
comment :: Parser Instruction
taggedImage :: Parser BaseImage
digestedImage :: Parser BaseImage
untaggedImage :: Parser BaseImage
baseImage :: Parser BaseImage
from :: Parser Instruction
cmd :: Parser Instruction
copy :: Parser Instruction
stopsignal :: Parser Instruction
quotedValue :: Parser String
rawValue :: Parser String
singleValue :: Parser String
pair :: Parser (String, String)
pairs :: Parser Pairs
remainingPairs :: Parser Pairs
label :: Parser Instruction
arg :: Parser Instruction
env :: Parser Instruction
user :: Parser Instruction
add :: Parser Instruction
expose :: Parser Instruction
run :: Parser Instruction
untilEol :: Parser String
untilOccurrence :: String -> Parser String
workdir :: Parser Instruction
volume :: Parser Instruction
maintainer :: Parser Instruction
argumentsExec :: Parser Arguments
argumentsShell :: Parser Arguments
arguments :: Parser Arguments
entrypoint :: Parser Instruction
onbuild :: Parser Instruction
eolInstruction :: Parser Instruction
parseInstruction :: Parser Instruction
contents :: Parser a -> Parser a
eol :: Parser ()
dockerfile :: Parser Dockerfile
parseString :: String -> Either ParseError Dockerfile
parseFile :: String -> IO (Either ParseError Dockerfile)
module Language.Dockerfile.PrettyPrint
-- | Pretty print a Dockerfile to a String
prettyPrint :: Dockerfile -> String
-- | Pretty print a InstructionPos to a String
prettyPrintInstructionPos :: InstructionPos -> String
prettyPrintBaseImage :: BaseImage -> Doc
prettyPrintPairs :: Pairs -> Doc
prettyPrintPair :: (String, String) -> Doc
prettyPrintArguments :: Arguments -> Doc
prettyPrintInstruction :: Instruction -> Doc
module Language.Dockerfile.EDSL.Types
data EBaseImage
EUntaggedImage :: String -> EBaseImage
ETaggedImage :: String -> String -> EBaseImage
EDigestedImage :: String -> ByteString -> EBaseImage
data EInstruction next
From :: EBaseImage -> next -> EInstruction next
Add :: Source -> Destination -> next -> EInstruction next
User :: String -> next -> EInstruction next
Label :: Pairs -> next -> EInstruction next
StopSignal :: String -> next -> EInstruction next
Copy :: Source -> Destination -> next -> EInstruction next
Run :: Arguments -> next -> EInstruction next
Cmd :: Arguments -> next -> EInstruction next
Workdir :: Directory -> next -> EInstruction next
Expose :: [Port] -> next -> EInstruction next
Volume :: String -> next -> EInstruction next
Entrypoint :: Arguments -> next -> EInstruction next
Maintainer :: String -> next -> EInstruction next
Env :: Pairs -> next -> EInstruction next
Arg :: String -> next -> EInstruction next
Comment :: String -> next -> EInstruction next
OnBuildRaw :: Instruction -> next -> EInstruction next
Embed :: [InstructionPos] -> next -> EInstruction next
instance GHC.Base.Functor Language.Dockerfile.EDSL.Types.EInstruction
instance GHC.Classes.Ord Language.Dockerfile.EDSL.Types.EBaseImage
instance GHC.Classes.Eq Language.Dockerfile.EDSL.Types.EBaseImage
instance GHC.Show.Show Language.Dockerfile.EDSL.Types.EBaseImage
instance Data.String.IsString Language.Dockerfile.EDSL.Types.EBaseImage
module Language.Dockerfile.EDSL
type EInstructionM = Free EInstruction
embed :: forall m_ayM1. MonadFree EInstruction m_ayM1 => [InstructionPos] -> m_ayM1 ()
onBuildRaw :: forall m_ayLY. MonadFree EInstruction m_ayLY => Instruction -> m_ayLY ()
comment :: forall m_ayLV. MonadFree EInstruction m_ayLV => String -> m_ayLV ()
arg :: forall m_ayLS. MonadFree EInstruction m_ayLS => String -> m_ayLS ()
env :: forall m_ayLP. MonadFree EInstruction m_ayLP => Pairs -> m_ayLP ()
maintainer :: forall m_ayLM. MonadFree EInstruction m_ayLM => String -> m_ayLM ()
entrypoint :: forall m_ayLJ. MonadFree EInstruction m_ayLJ => Arguments -> m_ayLJ ()
volume :: forall m_ayLG. MonadFree EInstruction m_ayLG => String -> m_ayLG ()
expose :: forall m_ayLD. MonadFree EInstruction m_ayLD => [Port] -> m_ayLD ()
workdir :: forall m_ayLA. MonadFree EInstruction m_ayLA => Directory -> m_ayLA ()
cmd :: forall m_ayLx. MonadFree EInstruction m_ayLx => Arguments -> m_ayLx ()
run :: forall m_ayLu. MonadFree EInstruction m_ayLu => Arguments -> m_ayLu ()
copy :: forall m_ayLq. MonadFree EInstruction m_ayLq => Source -> Destination -> m_ayLq ()
stopSignal :: forall m_ayLn. MonadFree EInstruction m_ayLn => String -> m_ayLn ()
label :: forall m_ayLk. MonadFree EInstruction m_ayLk => Pairs -> m_ayLk ()
user :: forall m_ayLh. MonadFree EInstruction m_ayLh => String -> m_ayLh ()
add :: forall m_ayLd. MonadFree EInstruction m_ayLd => Source -> Destination -> m_ayLd ()
from :: forall m_ayKw. MonadFree EInstruction m_ayKw => EBaseImage -> m_ayKw ()
runDockerWriter :: (MonadWriter [Instruction] m) => EInstructionM a -> m a
instructionPos :: Instruction -> InstructionPos
-- | Runs the Dockerfile EDSL and returns a Dockerfile you can
-- pretty print or manipulate
toDockerfile :: EInstructionM a -> Dockerfile
-- | 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")
--
toDockerfileStr :: EInstructionM a -> String
untagged :: String -> EBaseImage
tagged :: String -> String -> EBaseImage
digested :: String -> ByteString -> EBaseImage
-- | 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"
--
onBuild :: MonadFree EInstruction m => EInstructionM a -> m ()
module Language.Dockerfile.EDSL.Quasi
-- | 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
-- |]
--
edockerfile :: QuasiQuoter
edockerfileE :: String -> ExpQ
dockerfile :: QuasiQuoter
dockerfileE :: String -> ExpQ
filterEOL :: [InstructionPos] -> [InstructionPos]
module Language.Dockerfile
-- | Type of the Dockerfile AST
type Dockerfile = [InstructionPos]
parseString :: String -> Either ParseError Dockerfile
parseFile :: String -> IO (Either ParseError Dockerfile)
-- | Pretty print a Dockerfile to a String
prettyPrint :: Dockerfile -> String
-- | Pretty print a InstructionPos to a String
prettyPrintInstructionPos :: InstructionPos -> String
-- | 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")
--
toDockerfileStr :: EInstructionM a -> String
-- | Runs the Dockerfile EDSL and returns a Dockerfile you can
-- pretty print or manipulate
toDockerfile :: EInstructionM a -> Dockerfile
from :: forall m_ayKw. MonadFree EInstruction m_ayKw => EBaseImage -> m_ayKw ()
tagged :: String -> String -> EBaseImage
untagged :: String -> EBaseImage
digested :: String -> ByteString -> EBaseImage
add :: forall m_ayLd. MonadFree EInstruction m_ayLd => Source -> Destination -> m_ayLd ()
user :: forall m_ayLh. MonadFree EInstruction m_ayLh => String -> m_ayLh ()
label :: forall m_ayLk. MonadFree EInstruction m_ayLk => Pairs -> m_ayLk ()
stopSignal :: forall m_ayLn. MonadFree EInstruction m_ayLn => String -> m_ayLn ()
copy :: forall m_ayLq. MonadFree EInstruction m_ayLq => Source -> Destination -> m_ayLq ()
run :: forall m_ayLu. MonadFree EInstruction m_ayLu => Arguments -> m_ayLu ()
cmd :: forall m_ayLx. MonadFree EInstruction m_ayLx => Arguments -> m_ayLx ()
workdir :: forall m_ayLA. MonadFree EInstruction m_ayLA => Directory -> m_ayLA ()
expose :: forall m_ayLD. MonadFree EInstruction m_ayLD => [Port] -> m_ayLD ()
volume :: forall m_ayLG. MonadFree EInstruction m_ayLG => String -> m_ayLG ()
entrypoint :: forall m_ayLJ. MonadFree EInstruction m_ayLJ => Arguments -> m_ayLJ ()
maintainer :: forall m_ayLM. MonadFree EInstruction m_ayLM => String -> m_ayLM ()
env :: forall m_ayLP. MonadFree EInstruction m_ayLP => Pairs -> m_ayLP ()
arg :: forall m_ayLS. MonadFree EInstruction m_ayLS => String -> m_ayLS ()
comment :: forall m_ayLV. MonadFree EInstruction m_ayLV => String -> m_ayLV ()
-- | 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"
--
onBuild :: MonadFree EInstruction m => EInstructionM a -> m ()
onBuildRaw :: forall m_ayLY. MonadFree EInstruction m_ayLY => Instruction -> m_ayLY ()
embed :: forall m_ayM1. MonadFree EInstruction m_ayM1 => [InstructionPos] -> m_ayM1 ()
-- | 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
-- |]
--
edockerfile :: QuasiQuoter
data EBaseImage
EUntaggedImage :: String -> EBaseImage
ETaggedImage :: String -> String -> EBaseImage
EDigestedImage :: String -> ByteString -> EBaseImage
dockerfile :: QuasiQuoter
-- | All commands available in Dockerfiles
data Instruction
From :: BaseImage -> Instruction
Add :: Source -> Destination -> Instruction
User :: String -> Instruction
Label :: Pairs -> Instruction
Stopsignal :: String -> Instruction
Copy :: Source -> Destination -> Instruction
Run :: Arguments -> Instruction
Cmd :: Arguments -> Instruction
Workdir :: Directory -> Instruction
Expose :: [Port] -> Instruction
Volume :: String -> Instruction
Entrypoint :: Arguments -> Instruction
Maintainer :: String -> Instruction
Env :: Pairs -> Instruction
Arg :: String -> Instruction
Comment :: String -> Instruction
OnBuild :: Instruction -> Instruction
EOL :: Instruction
-- | Instruction with additional location information required for
-- creating good check messages
data InstructionPos
InstructionPos :: Instruction -> Filename -> Linenumber -> InstructionPos
data BaseImage
UntaggedImage :: Image -> BaseImage
TaggedImage :: Image -> Tag -> BaseImage
DigestedImage :: Image -> ByteString -> BaseImage
type Image = String
type Tag = String
type Port = Integer
type Directory = String
type Source = String
type Destination = String
type Arguments = [String]
type Pairs = [(String, String)]
type Filename = String
type Linenumber = Int
-- | 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.
data ParseError :: *
instruction :: InstructionPos -> Instruction
instructionPos :: Instruction -> InstructionPos
sourcename :: InstructionPos -> Filename