44
55module Stack.Types.Docker where
66
7- import Control.Applicative ( (<|>) )
7+ import Control.Applicative
88import Data.Aeson
99import Data.Monoid
1010import Data.Text (Text )
@@ -40,24 +40,13 @@ data DockerOpts = DockerOpts
4040 }
4141 deriving (Show )
4242
43- -- An uninterpreted representation of xidocker options.
43+ -- An uninterpreted representation of docker options.
4444-- Configurations may be "cascaded" using mappend (left-biased).
4545data DockerOptsMonoid = DockerOptsMonoid
4646 { dockerMonoidEnable :: ! (Maybe Bool )
4747 -- ^ Is using Docker enabled?
48- ,dockerMonoidRepoOwner :: ! (Maybe String )
49- -- ^ Docker repository (registry and) owner
50- -- EKB FIXME: rethink this prefix/repo/suffix business. Improve naming?
51- ,dockerMonoidRepoPrefix :: ! (Maybe String )
52- -- ^ Docker repository name's prefix (e.g. variant)
53- ,dockerMonoidRepo :: ! (Maybe String )
54- -- ^ Docker repository name (e.g. @dev@)
55- ,dockerMonoidRepoSuffix :: ! (Maybe String )
56- -- ^ Docker repository name's suffix (e.g. GHC version)
57- ,dockerMonoidImageTag :: ! (Maybe (Maybe String ))
58- -- ^ Optional Docker image tag (e.g. the date)
59- ,dockerMonoidImage :: ! (Maybe String )
60- -- ^ Exact Docker image tag or ID. Overrides docker-repo-*/tag.
48+ ,dockerMonoidRepoOrImage :: ! (Maybe DockerMonoidRepoOrImage )
49+ -- ^ Docker repository name (e.g. @fpco/dev@ or @fpco/dev:lts-2.8@)
6150 ,dockerMonoidRegistryLogin :: ! (Maybe Bool )
6251 -- ^ Does registry require login for pulls?
6352 ,dockerMonoidRegistryUsername :: ! (Maybe String )
@@ -86,12 +75,9 @@ data DockerOptsMonoid = DockerOptsMonoid
8675instance FromJSON DockerOptsMonoid where
8776 parseJSON = withObject " DockerOptsMonoid"
8877 (\ o -> do dockerMonoidEnable <- o .:? dockerEnableArgName .!= Just True
89- dockerMonoidRepoOwner <- o .:? dockerRepoOwnerArgName
90- dockerMonoidRepoPrefix <- o .:? dockerRepoPrefixArgName
91- dockerMonoidRepo <- o .:? dockerRepoArgName
92- dockerMonoidRepoSuffix <- o .:? dockerRepoSuffixArgName
93- dockerMonoidImageTag <- o .:? dockerImageTagArgName
94- dockerMonoidImage <- o .:? dockerImageArgName
78+ dockerMonoidRepoOrImage <- ((Just . DockerMonoidImage ) <$> o .: dockerImageArgName) <|>
79+ ((Just . DockerMonoidRepo ) <$> o .: dockerRepoArgName) <|>
80+ pure Nothing
9581 dockerMonoidRegistryLogin <- o .:? dockerRegistryLoginArgName
9682 dockerMonoidRegistryUsername <- o .:? dockerRegistryUsernameArgName
9783 dockerMonoidRegistryPassword <- o .:? dockerRegistryPasswordArgName
@@ -107,12 +93,7 @@ instance FromJSON DockerOptsMonoid where
10793instance Monoid DockerOptsMonoid where
10894 mempty = DockerOptsMonoid
10995 {dockerMonoidEnable = Nothing
110- ,dockerMonoidRepoOwner = Nothing
111- ,dockerMonoidRepoPrefix = Nothing
112- ,dockerMonoidRepo = Nothing
113- ,dockerMonoidRepoSuffix = Nothing
114- ,dockerMonoidImageTag = Nothing
115- ,dockerMonoidImage = Nothing
96+ ,dockerMonoidRepoOrImage = Nothing
11697 ,dockerMonoidRegistryLogin = Nothing
11798 ,dockerMonoidRegistryUsername = Nothing
11899 ,dockerMonoidRegistryPassword = Nothing
@@ -126,12 +107,7 @@ instance Monoid DockerOptsMonoid where
126107 }
127108 mappend l r = DockerOptsMonoid
128109 {dockerMonoidEnable = dockerMonoidEnable l <|> dockerMonoidEnable r
129- ,dockerMonoidRepoOwner = dockerMonoidRepoOwner l <|> dockerMonoidRepoOwner r
130- ,dockerMonoidRepoPrefix = dockerMonoidRepoPrefix l <|> dockerMonoidRepoPrefix r
131- ,dockerMonoidRepo = dockerMonoidRepo l <|> dockerMonoidRepo r
132- ,dockerMonoidRepoSuffix = dockerMonoidRepoSuffix l <|> dockerMonoidRepoSuffix r
133- ,dockerMonoidImageTag = dockerMonoidImageTag l <|> dockerMonoidImageTag r
134- ,dockerMonoidImage = dockerMonoidImage l <|> dockerMonoidImage r
110+ ,dockerMonoidRepoOrImage = dockerMonoidRepoOrImage l <|> dockerMonoidRepoOrImage r
135111 ,dockerMonoidRegistryLogin = dockerMonoidRegistryLogin l <|> dockerMonoidRegistryLogin r
136112 ,dockerMonoidRegistryUsername = dockerMonoidRegistryUsername l <|> dockerMonoidRegistryUsername r
137113 ,dockerMonoidRegistryPassword = dockerMonoidRegistryPassword l <|> dockerMonoidRegistryPassword r
@@ -144,30 +120,20 @@ instance Monoid DockerOptsMonoid where
144120 ,dockerMonoidPassHost = dockerMonoidPassHost l <|> dockerMonoidPassHost r
145121 }
146122
123+ -- | Options for Docker repository or image.
124+ data DockerMonoidRepoOrImage
125+ = DockerMonoidRepo String
126+ | DockerMonoidImage String
127+ deriving (Show )
128+
147129-- | Docker enable argument name.
148130dockerEnableArgName :: Text
149131dockerEnableArgName = " enable"
150132
151- -- | Docker repo owner argument name.
152- dockerRepoOwnerArgName :: Text
153- dockerRepoOwnerArgName = " repo-owner"
154-
155- -- | Docker repo prefix argument name.
156- dockerRepoPrefixArgName :: Text
157- dockerRepoPrefixArgName = " repo-prefix"
158-
159133-- | Docker repo arg argument name.
160134dockerRepoArgName :: Text
161135dockerRepoArgName = " repo"
162136
163- -- | Docker repo suffix argument name.
164- dockerRepoSuffixArgName :: Text
165- dockerRepoSuffixArgName = " repo-suffix"
166-
167- -- | Docker image tag argument name.
168- dockerImageTagArgName :: Text
169- dockerImageTagArgName = " image-tag"
170-
171137-- | Docker image argument name.
172138dockerImageArgName :: Text
173139dockerImageArgName = " image"
0 commit comments