module Buffet.Assemble.JoinConsecutiveRunInstructions ( get ) where import qualified Buffet.Ir.Ir as Ir import qualified Data.Text as T import qualified Language.Docker as Docker import qualified Language.Docker.Syntax as Syntax import Prelude (($), (==), foldr, mconcat) get :: Ir.DockerfilePart -> Ir.DockerfilePart get :: DockerfilePart -> DockerfilePart get = (Instruction Text -> DockerfilePart -> DockerfilePart) -> DockerfilePart -> DockerfilePart -> DockerfilePart forall (t :: * -> *) a b. Foldable t => (a -> b -> b) -> b -> t a -> b foldr Instruction Text -> DockerfilePart -> DockerfilePart process [] where process :: Instruction Text -> DockerfilePart -> DockerfilePart process (Docker.Run (Syntax.RunArgs Arguments Text first RunFlags flags)) (Docker.Run (Syntax.RunArgs Arguments Text second RunFlags flags'):DockerfilePart rest) | RunFlags flags RunFlags -> RunFlags -> Bool forall a. Eq a => a -> a -> Bool == RunFlags flags' = RunArgs Text -> Instruction Text forall args. RunArgs args -> Instruction args Docker.Run (Arguments Text -> RunFlags -> RunArgs Text forall args. Arguments args -> RunFlags -> RunArgs args Syntax.RunArgs (Arguments Text -> Arguments Text -> Arguments Text joinRuns Arguments Text first Arguments Text second) RunFlags flags) Instruction Text -> DockerfilePart -> DockerfilePart forall a. a -> [a] -> [a] : DockerfilePart rest process Instruction Text first DockerfilePart rest = Instruction Text first Instruction Text -> DockerfilePart -> DockerfilePart forall a. a -> [a] -> [a] : DockerfilePart rest joinRuns :: Docker.Arguments T.Text -> Docker.Arguments T.Text -> Docker.Arguments T.Text joinRuns :: Arguments Text -> Arguments Text -> Arguments Text joinRuns Arguments Text first Arguments Text second = Text -> Arguments Text forall args. args -> Arguments args Syntax.ArgumentsText (Text -> Arguments Text) -> Text -> Arguments Text forall a b. (a -> b) -> a -> b $ [Text] -> Text forall a. Monoid a => [a] -> a mconcat [Arguments Text -> Text forall p. Arguments p -> p command Arguments Text first, String -> Text T.pack String " && ", Arguments Text -> Text forall p. Arguments p -> p command Arguments Text second] where command :: Arguments p -> p command (Syntax.ArgumentsText p shell) = p shell command (Syntax.ArgumentsList p exec) = p exec