buffet-0.5.0: src/Buffet/Assemble/JoinConsecutiveRunInstructions.hs
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 = foldr process []
where
process (Docker.Run (Syntax.RunArgs first flags)) (Docker.Run (Syntax.RunArgs second flags'):rest)
| flags == flags' =
Docker.Run (Syntax.RunArgs (joinRuns first second) flags) : rest
process first rest = first : rest
joinRuns ::
Docker.Arguments T.Text
-> Docker.Arguments T.Text
-> Docker.Arguments T.Text
joinRuns first second =
Syntax.ArgumentsText $ mconcat [command first, T.pack " && ", command second]
where
command (Syntax.ArgumentsText shell) = shell
command (Syntax.ArgumentsList exec) = exec