-- 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: -- -- -- -- 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