packages feed

language-dockerfile 0.1.2.0 → 0.2.3.0

raw patch · 7 files changed

+74/−34 lines, 7 filessetup-changedPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Language.Dockerfile.EDSL.Types: Cmd :: Arguments -> next -> EInstruction next
- Language.Dockerfile.EDSL.Types: Entrypoint :: Arguments -> next -> EInstruction next
- Language.Dockerfile.EDSL.Types: Run :: Arguments -> next -> EInstruction next
+ Language.Dockerfile: cmdArgs :: forall m_ayLx. MonadFree EInstruction m_ayLx => Arguments -> m_ayLx ()
+ Language.Dockerfile: entrypointArgs :: forall m_ayLJ. MonadFree EInstruction m_ayLJ => Arguments -> m_ayLJ ()
+ Language.Dockerfile: runArgs :: forall m_ayLu. MonadFree EInstruction m_ayLu => Arguments -> m_ayLu ()
+ Language.Dockerfile.EDSL: cmdArgs :: forall m_ayLx. MonadFree EInstruction m_ayLx => Arguments -> m_ayLx ()
+ Language.Dockerfile.EDSL: entrypointArgs :: forall m_ayLJ. MonadFree EInstruction m_ayLJ => Arguments -> m_ayLJ ()
+ Language.Dockerfile.EDSL: runArgs :: forall m_ayLu. MonadFree EInstruction m_ayLu => Arguments -> m_ayLu ()
+ Language.Dockerfile.EDSL.Types: CmdArgs :: Arguments -> next -> EInstruction next
+ Language.Dockerfile.EDSL.Types: EntrypointArgs :: Arguments -> next -> EInstruction next
+ Language.Dockerfile.EDSL.Types: RunArgs :: Arguments -> next -> EInstruction next
- Language.Dockerfile: cmd :: forall m_ayLx. MonadFree EInstruction m_ayLx => Arguments -> m_ayLx ()
+ Language.Dockerfile: cmd :: MonadFree EInstruction m => String -> m ()
- Language.Dockerfile: entrypoint :: forall m_ayLJ. MonadFree EInstruction m_ayLJ => Arguments -> m_ayLJ ()
+ Language.Dockerfile: entrypoint :: MonadFree EInstruction m => String -> m ()
- Language.Dockerfile: run :: forall m_ayLu. MonadFree EInstruction m_ayLu => Arguments -> m_ayLu ()
+ Language.Dockerfile: run :: MonadFree EInstruction m => String -> m ()
- Language.Dockerfile.EDSL: cmd :: forall m_ayLx. MonadFree EInstruction m_ayLx => Arguments -> m_ayLx ()
+ Language.Dockerfile.EDSL: cmd :: MonadFree EInstruction m => String -> m ()
- Language.Dockerfile.EDSL: entrypoint :: forall m_ayLJ. MonadFree EInstruction m_ayLJ => Arguments -> m_ayLJ ()
+ Language.Dockerfile.EDSL: entrypoint :: MonadFree EInstruction m => String -> m ()
- Language.Dockerfile.EDSL: run :: forall m_ayLu. MonadFree EInstruction m_ayLu => Arguments -> m_ayLu ()
+ Language.Dockerfile.EDSL: run :: MonadFree EInstruction m => String -> m ()

Files

README.md view
@@ -2,6 +2,8 @@ Dockerfile linter, parser, pretty-printer and embedded DSL, forked from [hadolint](https://github.com/lukasmartinelli/hadolint). +Published on Hackage as [language-dockerfile](https://hackage.haskell.org/package/language-dockerfile).+ It extends hadolint with the pretty-printer and EDSL for writting Dockerfiles in Haskell. @@ -35,7 +37,8 @@ import Language.Dockerfile main = putStr $ toDockerfileStr $ do     from "node"-    run (words "apt-get update")+    run "apt-get update"+    run ["apt-get", "install", "something"]     -- ... ``` @@ -46,12 +49,35 @@ import Language.Dockerfile main = putStr $ toDockerfileStr $ do     from "node"-    run (words "apt-get update")+    run "apt-get update"     [edockerfile|     RUN apt-get update     CMD node something.js     |]     -- ...+```++## Templating Dockerfiles in Haskell+```haskell+{-# LANGUAGE FlexibleContexts  #-}+{-# LANGUAGE OverloadedStrings #-}+import Control.Monad+import Language.Dockerfile+tags = ["7.8", "7.10", "8"]+cabalSandboxBuild packageName = do+    let cabalFile = packageName ++ ".cabal"+    run "cabal sandbox init"+    run "cabal update"+    add cabalFile ("/app/" ++ cabalFile)+    run "cabal install --only-dep -j"+    add "." "/app/"+    run "cabal build"+main =+    forM_ tags $ \tag -> do+        let df = toDockerfileStr $ do+            from ("haskell" `tagged` tag)+            cabalSandboxBuild "mypackage"+        writeFile ("./examples/templating-" ++ tag ++ ".dockerfile") df ```  ## License
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
language-dockerfile.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           language-dockerfile-version:        0.1.2.0+version:        0.2.3.0 synopsis:       Dockerfile linter, parser, pretty-printer and embedded DSL description:     Forked from @hadolint@.                 .@@ -15,16 +15,16 @@                 - @dockerfmt@ Builds example pretty-printer usage, which reads a Dockerfile and pretty-prints it to stdout                 .                 See the <https://github.com/beijaflor-io/haskell-language-dockerfile GitHub project> for the source-code and examples. +category:       Development homepage:       https://github.com/beijaflor-io/language-dockerfile#readme bug-reports:    https://github.com/beijaflor-io/language-dockerfile/issues-license:        GPL-3-license-file:   LICENSE author:         Lukas Martinelli,                 Pedro Tacla Yamada maintainer:     tacla.yamada@gmail.com copyright:      Lukas Martinelli, Copyright (c) 2016,                 Pedro Tacla Yamada, Copyright (c) 2016-category:       Development+license:        GPL-3+license-file:   LICENSE build-type:     Simple cabal-version:  >= 1.10 @@ -79,9 +79,9 @@   default-language: Haskell2010  executable dockerfmt+  main-is: DockerFmt.hs   hs-source-dirs:       bin-  main-is: DockerFmt.hs   build-depends:       ShellCheck     , base >=4.8 && <5@@ -103,9 +103,9 @@   default-language: Haskell2010  executable hadolint+  main-is: HadoLint.hs   hs-source-dirs:       bin-  main-is: HadoLint.hs   build-depends:       ShellCheck     , base >=4.8 && <5@@ -122,16 +122,16 @@   buildable: False   if flag(hadolint)     buildable: True-  default-language: Haskell2010   other-modules:       DockerFmt+  default-language: Haskell2010  test-suite hadolint-unit-tests+  type: exitcode-stdio-1.0+  main-is: Test.hs   hs-source-dirs:       src     , test-  type: exitcode-stdio-1.0-  main-is: Test.hs   build-depends:       ShellCheck     , base >=4.8 && <5@@ -147,7 +147,6 @@     , HUnit >=1.2     , test-framework     , test-framework-hunit-  default-language: Haskell2010   other-modules:       Language.Dockerfile       Language.Dockerfile.Bash@@ -166,15 +165,13 @@       Language.Dockerfile.EDSLSpec       SanitySpec       Spec+  default-language: Haskell2010  test-suite hspec-  main-is: Spec.hs   type: exitcode-stdio-1.0-  other-modules:-      Language.Dockerfile.EDSL.QuasiSpec-      Language.Dockerfile.EDSLSpec-      SanitySpec-      Test+  main-is: Spec.hs+  hs-source-dirs:+      test   build-depends:       ShellCheck     , base >=4.8 && <5@@ -190,6 +187,9 @@     , hspec     , QuickCheck     , language-dockerfile-  hs-source-dirs:-      test+  other-modules:+      Language.Dockerfile.EDSL.QuasiSpec+      Language.Dockerfile.EDSLSpec+      SanitySpec+      Test   default-language: Haskell2010
src/Language/Dockerfile.hs view
@@ -26,11 +26,14 @@     , Language.Dockerfile.EDSL.stopSignal     , Language.Dockerfile.EDSL.copy     , Language.Dockerfile.EDSL.run+    , Language.Dockerfile.EDSL.runArgs     , Language.Dockerfile.EDSL.cmd+    , Language.Dockerfile.EDSL.cmdArgs     , Language.Dockerfile.EDSL.workdir     , Language.Dockerfile.EDSL.expose     , Language.Dockerfile.EDSL.volume     , Language.Dockerfile.EDSL.entrypoint+    , Language.Dockerfile.EDSL.entrypointArgs     , Language.Dockerfile.EDSL.maintainer     , Language.Dockerfile.EDSL.env     , Language.Dockerfile.EDSL.arg
src/Language/Dockerfile/EDSL.hs view
@@ -31,17 +31,17 @@         EUntaggedImage bi' -> runDef Syntax.From (Syntax.UntaggedImage bi') n         ETaggedImage bi' tg -> runDef Syntax.From (Syntax.TaggedImage bi' tg) n         EDigestedImage bi' d -> runDef Syntax.From (Syntax.DigestedImage bi' d) n-    runD (Cmd as n) = runDef Syntax.Cmd as n+    runD (CmdArgs as n) = runDef Syntax.Cmd as n     runD (Add s d n) = runDef2 Syntax.Add s d n     runD (User u n) = runDef Syntax.User u n     runD (Label ps n) = runDef Syntax.Label ps n     runD (StopSignal s n) = runDef Syntax.Stopsignal s n     runD (Copy s d n) = runDef2 Syntax.Copy s d n-    runD (Run as n) = runDef Syntax.Run as n+    runD (RunArgs as n) = runDef Syntax.Run as n     runD (Workdir d n) = runDef Syntax.Workdir d n     runD (Expose ps n) = runDef Syntax.Expose ps n     runD (Volume v n) = runDef Syntax.Volume v n-    runD (Entrypoint e n) = runDef Syntax.Entrypoint e n+    runD (EntrypointArgs e n) = runDef Syntax.Entrypoint e n     runD (Maintainer m n) = runDef Syntax.Maintainer m n     runD (Env ps n) = runDef Syntax.Env ps n     runD (Arg s n) = runDef Syntax.Arg s n@@ -86,6 +86,15 @@  digested :: String -> ByteString -> EBaseImage digested = EDigestedImage++run :: MonadFree EInstruction m => String -> m ()+run = runArgs . words++entrypoint :: MonadFree EInstruction m => String -> m ()+entrypoint = entrypointArgs . words++cmd :: MonadFree EInstruction m => String -> m ()+cmd = cmdArgs . words  -- | ONBUILD Dockerfile instruction --
src/Language/Dockerfile/EDSL/Types.hs view
@@ -20,12 +20,12 @@                        | Label Syntax.Pairs next                        | StopSignal String next                        | Copy Syntax.Source Syntax.Destination next-                       | Run Syntax.Arguments next-                       | Cmd Syntax.Arguments next+                       | RunArgs Syntax.Arguments next+                       | CmdArgs Syntax.Arguments next                        | Workdir Syntax.Directory next                        | Expose [Syntax.Port] next                        | Volume String next-                       | Entrypoint Syntax.Arguments next+                       | EntrypointArgs Syntax.Arguments next                        | Maintainer String next                        | Env Syntax.Pairs next                        | Arg String next
test/Language/Dockerfile/EDSLSpec.hs view
@@ -12,7 +12,7 @@         it "allows us to write haskell code that represents Dockerfiles" $ do             let r = map Syntax.instruction $ toDockerfile (do                         from "node"-                        cmd ["node", "-e", "'console.log(\'hey\')'"])+                        cmdArgs ["node", "-e", "'console.log(\'hey\')'"])             r `shouldBe` [ Syntax.From (Syntax.UntaggedImage "node")                          , Syntax.Cmd ["node", "-e", "'console.log(\'hey\')'"]                          ]@@ -21,22 +21,22 @@         it "allows us to write haskell code that represents Dockerfiles" $ do             let r = prettyPrint $ toDockerfile (do                         from "node"-                        cmd ["node", "-e", "'console.log(\'hey\')'"])+                        cmdArgs ["node", "-e", "'console.log(\'hey\')'"])             r `shouldBe` unlines [ "FROM node"                                  , "CMD node -e 'console.log(\'hey\')'"                                  ]          it "onBuild let's us nest statements" $ do-            let r = prettyPrint $ toDockerfile (do+            let r = prettyPrint $ toDockerfile $ do                         from "node"-                        cmd ["node", "-e", "'console.log(\'hey\')'"]+                        cmdArgs ["node", "-e", "'console.log(\'hey\')'"]                         onBuild $ do-                            run ["echo", "hello world"]-                            run ["echo", "hello world2"])+                            run "echo \"hello world\""+                            run "echo \"hello world2\""             r `shouldBe` unlines [ "FROM node"                                  , "CMD node -e 'console.log(\'hey\')'"-                                 , "ONBUILD RUN echo hello world"-                                 , "ONBUILD RUN echo hello world2"+                                 , "ONBUILD RUN echo \"hello world\""+                                 , "ONBUILD RUN echo \"hello world2\""                                  ]          it "onBuild disallows unallowed instructions" pending