packages feed

language-dockerfile 0.3.2.0 → 0.3.3.0

raw patch · 12 files changed

+84/−16 lines, 12 filesdep +process

Dependencies added: process

Files

language-dockerfile.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           language-dockerfile-version:        0.3.2.0+version:        0.3.3.0 synopsis:       Dockerfile linter, parser, pretty-printer and embedded DSL description:     Forked from @hadolint@.                 .@@ -170,6 +170,8 @@       Language.Dockerfile.EDSL.PluginsSpec       Language.Dockerfile.EDSL.QuasiSpec       Language.Dockerfile.EDSLSpec+      Language.Dockerfile.ExamplesSpec+      Language.Dockerfile.ParserSpec       SanitySpec       Spec   default-language: Haskell2010@@ -198,10 +200,13 @@     , Glob     , directory     , filepath+    , process   other-modules:       Language.Dockerfile.EDSL.PluginsSpec       Language.Dockerfile.EDSL.QuasiSpec       Language.Dockerfile.EDSLSpec+      Language.Dockerfile.ExamplesSpec+      Language.Dockerfile.ParserSpec       SanitySpec       Test   default-language: Haskell2010
src/Language/Dockerfile.hs view
@@ -38,6 +38,8 @@     , Language.Dockerfile.EDSL.cmdArgs     , Language.Dockerfile.EDSL.workdir     , Language.Dockerfile.EDSL.expose+    , Language.Dockerfile.EDSL.ports+    , Language.Dockerfile.EDSL.port     , Language.Dockerfile.EDSL.volume     , Language.Dockerfile.EDSL.entrypoint     , Language.Dockerfile.EDSL.entrypointArgs@@ -62,7 +64,7 @@     , Language.Dockerfile.Syntax.BaseImage(..)     , Language.Dockerfile.Syntax.Image     , Language.Dockerfile.Syntax.Tag-    , Language.Dockerfile.Syntax.Port+    , Language.Dockerfile.Syntax.Ports     , Language.Dockerfile.Syntax.Directory     , Language.Dockerfile.Syntax.Source     , Language.Dockerfile.Syntax.Destination
src/Language/Dockerfile/EDSL.hs view
@@ -103,6 +103,12 @@ digested :: String -> ByteString -> EBaseImage digested = EDigestedImage +ports :: [Integer] -> Syntax.Ports+ports = Syntax.Ports++port :: Integer -> Syntax.Ports+port = Syntax.Ports . (:[])+ run :: MonadFree EInstruction m => String -> m () run = runArgs . words 
src/Language/Dockerfile/EDSL/Types.hs view
@@ -2,7 +2,7 @@ module Language.Dockerfile.EDSL.Types   where -import           Data.ByteString.Char8 (ByteString)+import           Data.ByteString.Char8      (ByteString) import           Data.String import qualified Language.Dockerfile.Syntax as Syntax @@ -23,7 +23,7 @@                        | RunArgs Syntax.Arguments next                        | CmdArgs Syntax.Arguments next                        | Workdir Syntax.Directory next-                       | Expose [Syntax.Port] next+                       | Expose Syntax.Ports next                        | Volume String next                        | EntrypointArgs Syntax.Arguments next                        | Maintainer String next
src/Language/Dockerfile/Parser.hs view
@@ -1,11 +1,10 @@ module Language.Dockerfile.Parser where -import           Text.Parsec                   hiding (label)-import           Text.Parsec.String            (Parser)- import           Control.Monad                 (void) import           Data.ByteString.Char8         (pack)-+import           Data.String+import           Text.Parsec                   hiding (label)+import           Text.Parsec.String            (Parser) import qualified Text.Parsec.Token             as Token  import           Language.Dockerfile.Lexer@@ -136,8 +135,9 @@ expose :: Parser Instruction expose = do   reserved "EXPOSE"-  ports <- many natural-  return $ Expose ports+  sports <- untilEol+  let port = fromString sports+  return $ Expose port  run :: Parser Instruction run = do
src/Language/Dockerfile/PrettyPrint.hs view
@@ -73,9 +73,12 @@       Workdir w -> do           text "WORKDIR"           text w-      Expose ps -> do+      Expose (Ports ps) -> do           text "EXPOSE"           hsep (map (text . show) ps)+      Expose (PortStr p) -> do+          text "EXPOSE"+          text p       Volume dir -> do           text "VOLUME"           text dir
src/Language/Dockerfile/Rules.hs view
@@ -229,7 +229,7 @@     where code = "DL3011"           severity = ErrorC           message = "Valid UNIX ports range from 0 to 65535"-          check (Expose ports) = and [p <= 65535 | p <- ports]+          check (Expose (Ports ports)) = and [p <= 65535 | p <- ports]           check _ = True  maintainerAddress = instructionRule code severity message check
src/Language/Dockerfile/Syntax.hs view
@@ -1,10 +1,27 @@ module Language.Dockerfile.Syntax where  import           Data.ByteString.Char8 (ByteString)+import           Data.Maybe+import           Data.String+import           Text.Read  type Image = String type Tag = String-type Port = Integer++data Ports = Ports [Integer]+           | PortStr String+  deriving(Show, Eq, Ord)++instance IsString Ports where+    fromString p = case readMaybe p of+        Just i -> Ports [i]+        Nothing ->+            let rs = map readMaybe (words p)+            in if all isJust rs+            then Ports (catMaybes rs)+            else PortStr p++ type Directory = String  data BaseImage@@ -31,7 +48,7 @@   | Run Arguments   | Cmd Arguments   | Workdir Directory-  | Expose [Port]+  | Expose Ports   | Volume String   | Entrypoint Arguments   | Maintainer String
src/Language/Dockerfile/Syntax/Lift.hs view
@@ -8,6 +8,7 @@  import           Language.Dockerfile.Syntax +deriveLift ''Ports deriveLift ''BaseImage deriveLift ''Instruction deriveLift ''InstructionPos
test/Language/Dockerfile/EDSL/QuasiSpec.hs view
@@ -26,14 +26,14 @@         it "lets us use parsed dockerfiles seamlessly in our DSL" $ do             let d = do                     from "node"-                    expose [8080]+                    expose "8080"                     [edockerfile|                                 RUN apt-get update                                 CMD node something.js                                 |]                 df = map instruction (toDockerfile d)             df `shouldBe` [ From (UntaggedImage "node")-                          , Expose [8080]+                          , Expose (Ports [8080])                           , Run ["apt-get", "update"]                           , Cmd ["node", "something.js"]                           ]
+ test/Language/Dockerfile/ExamplesSpec.hs view
@@ -0,0 +1,20 @@+module Language.Dockerfile.ExamplesSpec where++import           Control.Monad+import           Data.Monoid+import           System.Directory+import           System.FilePath+import           System.FilePath.Glob+import           System.Process+import           Test.Hspec++stackRunGhc e = callProcess "stack" ["runghc", e]++spec :: Spec+spec = do+    cwd <- runIO getCurrentDirectory+    exampleSources <- runIO $ glob "./examples/*.hs"+    forM_ exampleSources $ \exampleSource -> do+        let exampleSource' = makeRelative cwd exampleSource+        describe exampleSource $ it ("stack runghc " <> exampleSource') $+            stackRunGhc exampleSource
+ test/Language/Dockerfile/ParserSpec.hs view
@@ -0,0 +1,14 @@+module Language.Dockerfile.ParserSpec+  where++import           Language.Dockerfile.Parser+import           Language.Dockerfile.Syntax+import           Test.Hspec+import           Text.Parsec++spec :: Spec+spec =+    describe "expose" $ do+        it "should handle number ports" $ do+            let content = "EXPOSE 8080"+            parse expose "" content `shouldBe` Right (Expose (Ports [8080]))