buffet-0.2.0: src/Buffet/Parse/PartitionByBuildStage.hs
module Buffet.Parse.PartitionByBuildStage
( get
) where
import qualified Data.List.Split as Split
import qualified Language.Docker as Docker
import Prelude (Bool(False, True), ($), length, mconcat, pred, splitAt)
get ::
Docker.Dockerfile
-> (Docker.Dockerfile, [Docker.Dockerfile], Docker.Dockerfile)
get dockerfile = (beforeFirstStage, localStages, globalStage)
where
(beforeFirstStage, stages) =
case parts of
[] -> ([], [])
(first:rest) -> (first, rest)
parts = Split.split splitter dockerfile
splitter = Split.keepDelimsL $ Split.whenElt isFrom
(localStages, globalStageInstructions) =
splitAt (pred $ length stages) stages
globalStage = mconcat globalStageInstructions
isFrom :: Docker.InstructionPos a -> Bool
isFrom (Docker.InstructionPos (Docker.From _) _ _) = True
isFrom _ = False