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 +3/−4
- src/Language/Docker.hs +2/−0
- src/Language/Docker/EDSL.hs +4/−1
- src/Language/Docker/Parser.hs +14/−8
- src/Language/Docker/PrettyPrint.hs +2/−1
- src/Language/Docker/Syntax.hs +1/−0
- test/Language/Docker/EDSLSpec.hs +3/−1
- test/Language/Docker/ParserSpec.hs +4/−1
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