{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE NamedFieldPuns #-}
module Docker.Cacher.Internal where
import Data.Text ( Text )
import Language.Docker
import Turtle
newtype ImageName a =
ImageName Text
deriving (Show, Eq)
data SourceImage =
SourceImage
data CachedImage =
CachedImage
-- | A Stage is one of the FROM directives ina dockerfile
--
data Stage a = Stage
{ stageName :: !Text -- ^ The image name, for example ubuntu in "ubuntu:16"
, stageTag :: !Text -- ^ The image tag, for example latest in "python:latest"
, stageImageName :: !(ImageName a) -- ^ The name of the docker image to generate a separate cache for
-- this is pretty much the "template" image to use for 'buildImageName'
--
, stageFallbackImage :: !(Maybe (ImageName a)) -- ^ If the stageImageName does not exist, then we can try building
-- from another template, usually the one from the master branch
--
, stagePos :: !Linenumber -- ^ Where in the docker file this line is found
, stageAlias :: !Text -- ^ The alias in the FROM instruction, for example "builder" in "FROM ubuntu:16.10 AS builder"
, buildImageName :: !(ImageName a) -- ^ The resulting image image, after caching all assets
, directives :: !Dockerfile -- ^ Dockerfile is an alias for [InstructionPos]
} deriving (Show, Eq)
printLn :: MonadIO io => Format (io ()) r -> r
printLn message = printf (message % "\n")