packages feed

language-docker 4.0.1 → 5.0.0

raw patch · 8 files changed

+33/−16 lines, 8 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Language.Docker: portRange :: Integer -> Integer -> Port
+ Language.Docker: udpPortRange :: Integer -> Integer -> Port
+ Language.Docker.EDSL: udpPortRange :: Integer -> Integer -> Port
+ Language.Docker.Parser: protocol :: Parser Protocol
- Language.Docker: arg :: forall m_aDp1. MonadFree EInstruction m_aDp1 => String -> Maybe String -> m_aDp1 ()
+ Language.Docker: arg :: forall m_aDBG. MonadFree EInstruction m_aDBG => String -> Maybe String -> m_aDBG ()
- Language.Docker: cmdArgs :: forall m_aDoD. MonadFree EInstruction m_aDoD => Arguments -> m_aDoD ()
+ Language.Docker: cmdArgs :: forall m_aDBi. MonadFree EInstruction m_aDBi => Arguments -> m_aDBi ()
- Language.Docker: comment :: forall m_aDp5. MonadFree EInstruction m_aDp5 => String -> m_aDp5 ()
+ Language.Docker: comment :: forall m_aDBK. MonadFree EInstruction m_aDBK => String -> m_aDBK ()
- Language.Docker: embed :: forall m_aDpe. MonadFree EInstruction m_aDpe => [InstructionPos] -> m_aDpe ()
+ Language.Docker: embed :: forall m_aDBT. MonadFree EInstruction m_aDBT => [InstructionPos] -> m_aDBT ()
- Language.Docker: entrypointArgs :: forall m_aDoS. MonadFree EInstruction m_aDoS => Arguments -> m_aDoS ()
+ Language.Docker: entrypointArgs :: forall m_aDBx. MonadFree EInstruction m_aDBx => Arguments -> m_aDBx ()
- Language.Docker: env :: forall m_aDoY. MonadFree EInstruction m_aDoY => Pairs -> m_aDoY ()
+ Language.Docker: env :: forall m_aDBD. MonadFree EInstruction m_aDBD => Pairs -> m_aDBD ()
- Language.Docker: expose :: forall m_aDoM. MonadFree EInstruction m_aDoM => Ports -> m_aDoM ()
+ Language.Docker: expose :: forall m_aDBr. MonadFree EInstruction m_aDBr => Ports -> m_aDBr ()
- Language.Docker: from :: forall m_aDnB. MonadFree EInstruction m_aDnB => EBaseImage -> m_aDnB ()
+ Language.Docker: from :: forall m_aDAg. MonadFree EInstruction m_aDAg => EBaseImage -> m_aDAg ()
- Language.Docker: healthcheck :: forall m_aDp8. MonadFree EInstruction m_aDp8 => Check -> m_aDp8 ()
+ Language.Docker: healthcheck :: forall m_aDBN. MonadFree EInstruction m_aDBN => Check -> m_aDBN ()
- Language.Docker: label :: forall m_aDoo. MonadFree EInstruction m_aDoo => Pairs -> m_aDoo ()
+ Language.Docker: label :: forall m_aDB3. MonadFree EInstruction m_aDB3 => Pairs -> m_aDB3 ()
- Language.Docker: maintainer :: forall m_aDoV. MonadFree EInstruction m_aDoV => String -> m_aDoV ()
+ Language.Docker: maintainer :: forall m_aDBA. MonadFree EInstruction m_aDBA => String -> m_aDBA ()
- Language.Docker: onBuildRaw :: forall m_aDpb. MonadFree EInstruction m_aDpb => Instruction -> m_aDpb ()
+ Language.Docker: onBuildRaw :: forall m_aDBQ. MonadFree EInstruction m_aDBQ => Instruction -> m_aDBQ ()
- Language.Docker: runArgs :: forall m_aDoA. MonadFree EInstruction m_aDoA => Arguments -> m_aDoA ()
+ Language.Docker: runArgs :: forall m_aDBf. MonadFree EInstruction m_aDBf => Arguments -> m_aDBf ()
- Language.Docker: stopSignal :: forall m_aDor. MonadFree EInstruction m_aDor => String -> m_aDor ()
+ Language.Docker: stopSignal :: forall m_aDB6. MonadFree EInstruction m_aDB6 => String -> m_aDB6 ()
- Language.Docker: user :: forall m_aDol. MonadFree EInstruction m_aDol => String -> m_aDol ()
+ Language.Docker: user :: forall m_aDB0. MonadFree EInstruction m_aDB0 => String -> m_aDB0 ()
- Language.Docker: volume :: forall m_aDoP. MonadFree EInstruction m_aDoP => String -> m_aDoP ()
+ Language.Docker: volume :: forall m_aDBu. MonadFree EInstruction m_aDBu => String -> m_aDBu ()
- Language.Docker: workdir :: forall m_aDoJ. MonadFree EInstruction m_aDoJ => Directory -> m_aDoJ ()
+ Language.Docker: workdir :: forall m_aDBo. MonadFree EInstruction m_aDBo => Directory -> m_aDBo ()
- Language.Docker.EDSL: addArgs :: forall m_aDog. MonadFree EInstruction m_aDog => NonEmpty SourcePath -> TargetPath -> Chown -> m_aDog ()
+ Language.Docker.EDSL: addArgs :: forall m_aDAV. MonadFree EInstruction m_aDAV => NonEmpty SourcePath -> TargetPath -> Chown -> m_aDAV ()
- Language.Docker.EDSL: arg :: forall m_aDp1. MonadFree EInstruction m_aDp1 => String -> Maybe String -> m_aDp1 ()
+ Language.Docker.EDSL: arg :: forall m_aDBG. MonadFree EInstruction m_aDBG => String -> Maybe String -> m_aDBG ()
- Language.Docker.EDSL: cmdArgs :: forall m_aDoD. MonadFree EInstruction m_aDoD => Arguments -> m_aDoD ()
+ Language.Docker.EDSL: cmdArgs :: forall m_aDBi. MonadFree EInstruction m_aDBi => Arguments -> m_aDBi ()
- Language.Docker.EDSL: comment :: forall m_aDp5. MonadFree EInstruction m_aDp5 => String -> m_aDp5 ()
+ Language.Docker.EDSL: comment :: forall m_aDBK. MonadFree EInstruction m_aDBK => String -> m_aDBK ()
- Language.Docker.EDSL: copyArgs :: forall m_aDou. MonadFree EInstruction m_aDou => NonEmpty SourcePath -> TargetPath -> Chown -> CopySource -> m_aDou ()
+ Language.Docker.EDSL: copyArgs :: forall m_aDB9. MonadFree EInstruction m_aDB9 => NonEmpty SourcePath -> TargetPath -> Chown -> CopySource -> m_aDB9 ()
- Language.Docker.EDSL: embed :: forall m_aDpe. MonadFree EInstruction m_aDpe => [InstructionPos] -> m_aDpe ()
+ Language.Docker.EDSL: embed :: forall m_aDBT. MonadFree EInstruction m_aDBT => [InstructionPos] -> m_aDBT ()
- Language.Docker.EDSL: entrypointArgs :: forall m_aDoS. MonadFree EInstruction m_aDoS => Arguments -> m_aDoS ()
+ Language.Docker.EDSL: entrypointArgs :: forall m_aDBx. MonadFree EInstruction m_aDBx => Arguments -> m_aDBx ()
- Language.Docker.EDSL: env :: forall m_aDoY. MonadFree EInstruction m_aDoY => Pairs -> m_aDoY ()
+ Language.Docker.EDSL: env :: forall m_aDBD. MonadFree EInstruction m_aDBD => Pairs -> m_aDBD ()
- Language.Docker.EDSL: expose :: forall m_aDoM. MonadFree EInstruction m_aDoM => Ports -> m_aDoM ()
+ Language.Docker.EDSL: expose :: forall m_aDBr. MonadFree EInstruction m_aDBr => Ports -> m_aDBr ()
- Language.Docker.EDSL: from :: forall m_aDnB. MonadFree EInstruction m_aDnB => EBaseImage -> m_aDnB ()
+ Language.Docker.EDSL: from :: forall m_aDAg. MonadFree EInstruction m_aDAg => EBaseImage -> m_aDAg ()
- Language.Docker.EDSL: healthcheck :: forall m_aDp8. MonadFree EInstruction m_aDp8 => Check -> m_aDp8 ()
+ Language.Docker.EDSL: healthcheck :: forall m_aDBN. MonadFree EInstruction m_aDBN => Check -> m_aDBN ()
- Language.Docker.EDSL: label :: forall m_aDoo. MonadFree EInstruction m_aDoo => Pairs -> m_aDoo ()
+ Language.Docker.EDSL: label :: forall m_aDB3. MonadFree EInstruction m_aDB3 => Pairs -> m_aDB3 ()
- Language.Docker.EDSL: maintainer :: forall m_aDoV. MonadFree EInstruction m_aDoV => String -> m_aDoV ()
+ Language.Docker.EDSL: maintainer :: forall m_aDBA. MonadFree EInstruction m_aDBA => String -> m_aDBA ()
- Language.Docker.EDSL: onBuildRaw :: forall m_aDpb. MonadFree EInstruction m_aDpb => Instruction -> m_aDpb ()
+ Language.Docker.EDSL: onBuildRaw :: forall m_aDBQ. MonadFree EInstruction m_aDBQ => Instruction -> m_aDBQ ()
- Language.Docker.EDSL: runArgs :: forall m_aDoA. MonadFree EInstruction m_aDoA => Arguments -> m_aDoA ()
+ Language.Docker.EDSL: runArgs :: forall m_aDBf. MonadFree EInstruction m_aDBf => Arguments -> m_aDBf ()
- Language.Docker.EDSL: shell :: forall m_aDoG. MonadFree EInstruction m_aDoG => Arguments -> m_aDoG ()
+ Language.Docker.EDSL: shell :: forall m_aDBl. MonadFree EInstruction m_aDBl => Arguments -> m_aDBl ()
- Language.Docker.EDSL: stopSignal :: forall m_aDor. MonadFree EInstruction m_aDor => String -> m_aDor ()
+ Language.Docker.EDSL: stopSignal :: forall m_aDB6. MonadFree EInstruction m_aDB6 => String -> m_aDB6 ()
- Language.Docker.EDSL: user :: forall m_aDol. MonadFree EInstruction m_aDol => String -> m_aDol ()
+ Language.Docker.EDSL: user :: forall m_aDB0. MonadFree EInstruction m_aDB0 => String -> m_aDB0 ()
- Language.Docker.EDSL: volume :: forall m_aDoP. MonadFree EInstruction m_aDoP => String -> m_aDoP ()
+ Language.Docker.EDSL: volume :: forall m_aDBu. MonadFree EInstruction m_aDBu => String -> m_aDBu ()
- Language.Docker.EDSL: workdir :: forall m_aDoJ. MonadFree EInstruction m_aDoJ => Directory -> m_aDoJ ()
+ Language.Docker.EDSL: workdir :: forall m_aDBo. MonadFree EInstruction m_aDBo => Directory -> m_aDBo ()
- Language.Docker.Syntax: PortRange :: Integer -> Integer -> Port
+ Language.Docker.Syntax: PortRange :: Integer -> Integer -> Protocol -> Port

Files

language-docker.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 2177b40144f01ae0a40effd326ed6357de50c47b559d1a0d307d298994c38b37+-- hash: dd6c2b3624c04b2f48ffc3844fe2df02d25b1034408fc2221f6b572647e653bc  name:           language-docker-version:        4.0.1+version:        5.0.0 synopsis:       Dockerfile parser, pretty-printer and embedded DSL description:    All functions for parsing, printing and writting Dockerfiles are exported through @Language.Docker@. For more fine-grained operations look for specific modules that implement a certain functionality.                 See the <https://github.com/hadolint/language-docker GitHub project> for the source-code and examples.@@ -15,8 +15,7 @@ author:         Lukas Martinelli,                 Pedro Tacla Yamada,                 José Lorenzo Rodríguez-maintainer:     me@lukasmartinelli.ch,-                lorenzo@seatgeek.com+maintainer:     lorenzo@seatgeek.com copyright:      Lukas Martinelli, Copyright (c) 2016,                 Pedro Tacla Yamada, Copyright (c) 2016,                 José Lorenzo Rodríguez, Copyright (c) 2017
src/Language/Docker.hs view
@@ -47,6 +47,8 @@     , Language.Docker.EDSL.tcpPort     , Language.Docker.EDSL.udpPort     , Language.Docker.EDSL.variablePort+    , Language.Docker.EDSL.portRange+    , Language.Docker.EDSL.udpPortRange     , Language.Docker.EDSL.volume     , Language.Docker.EDSL.entrypoint     , Language.Docker.EDSL.entrypointArgs
src/Language/Docker/EDSL.hs view
@@ -268,7 +268,10 @@ variablePort varName = Syntax.PortStr ('$' : varName)  portRange :: Integer -> Integer -> Syntax.Port-portRange = Syntax.PortRange+portRange a b = Syntax.PortRange a b Syntax.TCP++udpPortRange :: Integer -> Integer -> Syntax.Port+udpPortRange a b = Syntax.PortRange a b Syntax.UDP  check :: Syntax.Arguments -> Syntax.Check check command =
src/Language/Docker/Parser.hs view
@@ -267,7 +267,7 @@ port :: Parser Port port =     (try portVariable <?> "a variable") <|> -- There a many valid representations of ports-    (try portRange <?> "a port range") <|>+    (try portRange <?> "a port range optionally followed by the protocol (udp/tcp)") <|>     (try portWithProtocol <?> "a port with its protocol (udp/tcp)") <|>     (try portInt <?> "a valid port number") @@ -279,8 +279,17 @@     start <- natural     void $ char '-'     finish <- try natural-    return $ PortRange start finish+    proto <- try protocol <|> return TCP+    return $ PortRange start finish proto +protocol :: Parser Protocol+protocol = do+    void (char '/')+    tcp <|> udp+  where+    tcp = caseInsensitiveString "tcp" >> return TCP+    udp = caseInsensitiveString "udp" >> return UDP+ portInt :: Parser Port portInt = do     portNumber <- natural@@ -290,10 +299,7 @@ portWithProtocol :: Parser Port portWithProtocol = do     portNumber <- natural-    void (char '/')-    proto <--        (caseInsensitiveString "tcp" >> return TCP) <|> -- Either tcp or udp-        (caseInsensitiveString "udp" >> return UDP)+    proto <- protocol     return $ Port portNumber proto  portVariable :: Parser Port@@ -336,8 +342,8 @@ -- Parse arguments of a command in the exec form argumentsExec :: Parser Arguments argumentsExec = do-  args <- brackets $ commaSep stringLiteral-  return $ Arguments args+    args <- brackets $ commaSep stringLiteral+    return $ Arguments args  -- Parse arguments of a command in the shell form argumentsShell :: Parser Arguments
src/Language/Docker/PrettyPrint.hs view
@@ -77,7 +77,8 @@  prettyPrintPort :: Port -> Doc prettyPrintPort (PortStr str) = text str-prettyPrintPort (PortRange start stop) = integer start <> text "-" <> integer stop+prettyPrintPort (PortRange start stop TCP) = integer start <> text "-" <> integer stop+prettyPrintPort (PortRange start stop UDP) = integer start <> text "-" <> integer stop <> char '/' <> text "udp" prettyPrintPort (Port num TCP) = integer num <> char '/' <> text "tcp" prettyPrintPort (Port num UDP) = integer num <> char '/' <> text "udp" 
src/Language/Docker/Syntax.hs view
@@ -42,6 +42,7 @@     | PortStr String     | PortRange Integer                 Integer+                Protocol     deriving (Show, Eq, Ord)  newtype Ports = Ports
test/Language/Docker/EDSLSpec.hs view
@@ -39,10 +39,12 @@             let r = prettyPrint $ toDockerfile (do                         from "scratch"                         expose $ ports [variablePort "PORT", tcpPort 80, udpPort 51]-                        expose $ ports [portRange 90 100])+                        expose $ ports [portRange 90 100]+                        expose $ ports [udpPortRange 190 200])             r `shouldBe` unlines [ "FROM scratch"                                  , "EXPOSE $PORT 80/tcp 51/udp"                                  , "EXPOSE 90-100"+                                 , "EXPOSE 190-200/udp"                                  ]          it "onBuild let's us nest statements" $ do
test/Language/Docker/ParserSpec.hs view
@@ -268,7 +268,10 @@                 parse expose "" content `shouldBe` Right (Expose (Ports [PortStr "$PORT", Port 8080 TCP, Port 8081 UDP]))             it "should handle port ranges" $ do                 let content = "EXPOSE 80 81 8080-8085"-                parse expose "" content `shouldBe` Right (Expose (Ports [Port 80 TCP, Port 81 TCP, PortRange 8080 8085]))+                parse expose "" content `shouldBe` Right (Expose (Ports [Port 80 TCP, Port 81 TCP, PortRange 8080 8085 TCP]))+            it "should handle udp port ranges" $ do+                let content = "EXPOSE 80 81 8080-8085/udp"+                parse expose "" content `shouldBe` Right (Expose (Ports [Port 80 TCP, Port 81 TCP, PortRange 8080 8085 UDP]))          describe "syntax" $ do             it "should handle lowercase instructions (#7 - https://github.com/beijaflor-io/haskell-language-dockerfile/issues/7)" $ do