{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module HaskellCI.GitHub.Yaml where
import HaskellCI.Prelude
import qualified Data.Map.Strict as M
import HaskellCI.Compiler
import HaskellCI.List
import HaskellCI.Sh
import HaskellCI.YamlSyntax
data GitHub = GitHub
{ GitHub -> String
ghName :: String
, GitHub -> GitHubOn
ghOn :: GitHubOn
, GitHub -> Map String GitHubJob
ghJobs :: M.Map String GitHubJob
}
deriving (Int -> GitHub -> ShowS
[GitHub] -> ShowS
GitHub -> String
(Int -> GitHub -> ShowS)
-> (GitHub -> String) -> ([GitHub] -> ShowS) -> Show GitHub
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GitHub -> ShowS
showsPrec :: Int -> GitHub -> ShowS
$cshow :: GitHub -> String
show :: GitHub -> String
$cshowList :: [GitHub] -> ShowS
showList :: [GitHub] -> ShowS
Show)
newtype GitHubOn = GitHubOn
{ GitHubOn -> [String]
ghBranches :: [String]
}
deriving (Int -> GitHubOn -> ShowS
[GitHubOn] -> ShowS
GitHubOn -> String
(Int -> GitHubOn -> ShowS)
-> (GitHubOn -> String) -> ([GitHubOn] -> ShowS) -> Show GitHubOn
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GitHubOn -> ShowS
showsPrec :: Int -> GitHubOn -> ShowS
$cshow :: GitHubOn -> String
show :: GitHubOn -> String
$cshowList :: [GitHubOn] -> ShowS
showList :: [GitHubOn] -> ShowS
Show)
data GitHubJob = GitHubJob
{ GitHubJob -> String
ghjName :: String
, GitHubJob -> String
ghjRunsOn :: String
, GitHubJob -> [String]
ghjNeeds :: [String]
, GitHubJob -> Maybe String
ghjIf :: Maybe String
, GitHubJob -> Maybe String
ghjContainer :: Maybe String
, GitHubJob -> Map String GitHubService
ghjServices :: M.Map String GitHubService
, GitHubJob -> Maybe String
ghjContinueOnError :: Maybe String
, GitHubJob -> [GitHubMatrixEntry]
ghjMatrix :: [GitHubMatrixEntry]
, GitHubJob -> [GitHubStep]
ghjSteps :: [GitHubStep]
, GitHubJob -> Natural
ghjTimeout :: Natural
}
deriving (Int -> GitHubJob -> ShowS
[GitHubJob] -> ShowS
GitHubJob -> String
(Int -> GitHubJob -> ShowS)
-> (GitHubJob -> String)
-> ([GitHubJob] -> ShowS)
-> Show GitHubJob
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GitHubJob -> ShowS
showsPrec :: Int -> GitHubJob -> ShowS
$cshow :: GitHubJob -> String
show :: GitHubJob -> String
$cshowList :: [GitHubJob] -> ShowS
showList :: [GitHubJob] -> ShowS
Show)
data SetupMethod = HVRPPA | GHCUP
deriving Int -> SetupMethod -> ShowS
[SetupMethod] -> ShowS
SetupMethod -> String
(Int -> SetupMethod -> ShowS)
-> (SetupMethod -> String)
-> ([SetupMethod] -> ShowS)
-> Show SetupMethod
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SetupMethod -> ShowS
showsPrec :: Int -> SetupMethod -> ShowS
$cshow :: SetupMethod -> String
show :: SetupMethod -> String
$cshowList :: [SetupMethod] -> ShowS
showList :: [SetupMethod] -> ShowS
Show
data GitHubMatrixEntry = GitHubMatrixEntry
{ GitHubMatrixEntry -> CompilerVersion
ghmeCompiler :: CompilerVersion
, GitHubMatrixEntry -> Bool
ghmeAllowFailure :: Bool
, GitHubMatrixEntry -> SetupMethod
ghmeSetupMethod :: SetupMethod
}
deriving (Int -> GitHubMatrixEntry -> ShowS
[GitHubMatrixEntry] -> ShowS
GitHubMatrixEntry -> String
(Int -> GitHubMatrixEntry -> ShowS)
-> (GitHubMatrixEntry -> String)
-> ([GitHubMatrixEntry] -> ShowS)
-> Show GitHubMatrixEntry
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GitHubMatrixEntry -> ShowS
showsPrec :: Int -> GitHubMatrixEntry -> ShowS
$cshow :: GitHubMatrixEntry -> String
show :: GitHubMatrixEntry -> String
$cshowList :: [GitHubMatrixEntry] -> ShowS
showList :: [GitHubMatrixEntry] -> ShowS
Show)
data GitHubStep = GitHubStep
{ GitHubStep -> String
ghsName :: String
, GitHubStep -> Either GitHubRun GitHubUses
ghsStep :: Either GitHubRun GitHubUses
}
deriving (Int -> GitHubStep -> ShowS
[GitHubStep] -> ShowS
GitHubStep -> String
(Int -> GitHubStep -> ShowS)
-> (GitHubStep -> String)
-> ([GitHubStep] -> ShowS)
-> Show GitHubStep
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GitHubStep -> ShowS
showsPrec :: Int -> GitHubStep -> ShowS
$cshow :: GitHubStep -> String
show :: GitHubStep -> String
$cshowList :: [GitHubStep] -> ShowS
showList :: [GitHubStep] -> ShowS
Show)
data GitHubRun = GitHubRun
{ GitHubRun -> [Sh]
ghsRun :: [Sh]
, GitHubRun -> Map String String
ghsEnv :: M.Map String String
}
deriving (Int -> GitHubRun -> ShowS
[GitHubRun] -> ShowS
GitHubRun -> String
(Int -> GitHubRun -> ShowS)
-> (GitHubRun -> String)
-> ([GitHubRun] -> ShowS)
-> Show GitHubRun
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GitHubRun -> ShowS
showsPrec :: Int -> GitHubRun -> ShowS
$cshow :: GitHubRun -> String
show :: GitHubRun -> String
$cshowList :: [GitHubRun] -> ShowS
showList :: [GitHubRun] -> ShowS
Show)
data GitHubUses = GitHubUses
{ GitHubUses -> String
ghsAction :: String
, GitHubUses -> Maybe String
ghsIf :: Maybe String
, GitHubUses -> Map String String
ghsWith :: M.Map String String
}
deriving (Int -> GitHubUses -> ShowS
[GitHubUses] -> ShowS
GitHubUses -> String
(Int -> GitHubUses -> ShowS)
-> (GitHubUses -> String)
-> ([GitHubUses] -> ShowS)
-> Show GitHubUses
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GitHubUses -> ShowS
showsPrec :: Int -> GitHubUses -> ShowS
$cshow :: GitHubUses -> String
show :: GitHubUses -> String
$cshowList :: [GitHubUses] -> ShowS
showList :: [GitHubUses] -> ShowS
Show)
data GitHubService = GitHubService
{ GitHubService -> String
ghServImage :: String
, GitHubService -> Map String String
ghServEnv :: M.Map String String
, GitHubService -> Maybe String
ghServOptions :: Maybe String
}
deriving (Int -> GitHubService -> ShowS
[GitHubService] -> ShowS
GitHubService -> String
(Int -> GitHubService -> ShowS)
-> (GitHubService -> String)
-> ([GitHubService] -> ShowS)
-> Show GitHubService
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GitHubService -> ShowS
showsPrec :: Int -> GitHubService -> ShowS
$cshow :: GitHubService -> String
show :: GitHubService -> String
$cshowList :: [GitHubService] -> ShowS
showList :: [GitHubService] -> ShowS
Show)
instance ToYaml GitHub where
toYaml :: GitHub -> Yaml [String]
toYaml GitHub {String
Map String GitHubJob
GitHubOn
ghName :: GitHub -> String
ghOn :: GitHub -> GitHubOn
ghJobs :: GitHub -> Map String GitHubJob
ghName :: String
ghOn :: GitHubOn
ghJobs :: Map String GitHubJob
..} = [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt []
[ String
"name" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
ghName
, String
"on" String -> Yaml [String] -> ([String], String, Yaml [String])
~> GitHubOn -> Yaml [String]
forall a. ToYaml a => a -> Yaml [String]
toYaml GitHubOn
ghOn
, String
"jobs" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt []
[ ([], String
j, GitHubJob -> Yaml [String]
forall a. ToYaml a => a -> Yaml [String]
toYaml GitHubJob
job)
| (String
j, GitHubJob
job) <- Map String GitHubJob -> [(String, GitHubJob)]
forall k a. Map k a -> [(k, a)]
M.toList Map String GitHubJob
ghJobs
]
]
instance ToYaml GitHubOn where
toYaml :: GitHubOn -> Yaml [String]
toYaml GitHubOn {[String]
ghBranches :: GitHubOn -> [String]
ghBranches :: [String]
..}
| [String] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [String]
ghBranches
= [String] -> [Yaml [String]] -> Yaml [String]
forall ann. ann -> [Yaml ann] -> Yaml ann
ylistFilt [] [Yaml [String]
"push", Yaml [String]
"pull_request"]
| Bool
otherwise
= [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt []
[ String
"push" String -> Yaml [String] -> ([String], String, Yaml [String])
~> Yaml [String]
branches
, String
"pull_request" String -> Yaml [String] -> ([String], String, Yaml [String])
~> Yaml [String]
branches
]
where
branches :: Yaml [String]
branches = [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt []
[ String
"branches" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> [Yaml [String]] -> Yaml [String]
forall ann. ann -> [Yaml ann] -> Yaml ann
ylistFilt [] ((String -> Yaml [String]) -> [String] -> [Yaml [String]]
forall a b. (a -> b) -> [a] -> [b]
map String -> Yaml [String]
forall a. IsString a => String -> a
fromString [String]
ghBranches)
]
instance ToYaml GitHubJob where
toYaml :: GitHubJob -> Yaml [String]
toYaml GitHubJob {Natural
String
[String]
[GitHubStep]
[GitHubMatrixEntry]
Maybe String
Map String GitHubService
ghjName :: GitHubJob -> String
ghjRunsOn :: GitHubJob -> String
ghjNeeds :: GitHubJob -> [String]
ghjIf :: GitHubJob -> Maybe String
ghjContainer :: GitHubJob -> Maybe String
ghjServices :: GitHubJob -> Map String GitHubService
ghjContinueOnError :: GitHubJob -> Maybe String
ghjMatrix :: GitHubJob -> [GitHubMatrixEntry]
ghjSteps :: GitHubJob -> [GitHubStep]
ghjTimeout :: GitHubJob -> Natural
ghjName :: String
ghjRunsOn :: String
ghjNeeds :: [String]
ghjIf :: Maybe String
ghjContainer :: Maybe String
ghjServices :: Map String GitHubService
ghjContinueOnError :: Maybe String
ghjMatrix :: [GitHubMatrixEntry]
ghjSteps :: [GitHubStep]
ghjTimeout :: Natural
..} = [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt [] ([([String], String, Yaml [String])] -> Yaml [String])
-> [([String], String, Yaml [String])] -> Yaml [String]
forall a b. (a -> b) -> a -> b
$ ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])]
forall x. ListBuilder x () -> [x]
buildList (ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])])
-> ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])]
forall a b. (a -> b) -> a -> b
$ do
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"name" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
ghjName
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"runs-on" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
ghjRunsOn
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"needs" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> [Yaml [String]] -> Yaml [String]
forall ann. ann -> [Yaml ann] -> Yaml ann
ylistFilt [] ((String -> Yaml [String]) -> [String] -> [Yaml [String]]
forall a b. (a -> b) -> [a] -> [b]
map String -> Yaml [String]
forall a. IsString a => String -> a
fromString [String]
ghjNeeds)
Maybe String
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ Maybe String
ghjIf ((String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ())
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ \String
if_ ->
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"if" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
if_
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"timeout-minutes" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> Integer -> Yaml [String]
forall ann. ann -> Integer -> Yaml ann
YNumber [] (Natural -> Integer
forall a. Integral a => a -> Integer
toInteger Natural
ghjTimeout)
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"container" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt [] (ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])]
forall x. ListBuilder x () -> [x]
buildList (ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])])
-> ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])]
forall a b. (a -> b) -> a -> b
$
Maybe String
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ Maybe String
ghjContainer ((String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ())
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ \String
image -> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"image" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
image)
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"services" String -> Yaml [String] -> ([String], String, Yaml [String])
~> Map String GitHubService -> Yaml [String]
forall a. ToYaml a => a -> Yaml [String]
toYaml Map String GitHubService
ghjServices
Maybe String
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ Maybe String
ghjContinueOnError ((String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ())
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ \String
continueOnError ->
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"continue-on-error" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
continueOnError
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"strategy" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt []
[ String
"matrix" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt []
[ String
"include" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> [Yaml [String]] -> Yaml [String]
forall ann. ann -> [Yaml ann] -> Yaml ann
ylistFilt [] ((GitHubMatrixEntry -> Yaml [String])
-> [GitHubMatrixEntry] -> [Yaml [String]]
forall a b. (a -> b) -> [a] -> [b]
map GitHubMatrixEntry -> Yaml [String]
forall a. ToYaml a => a -> Yaml [String]
toYaml [GitHubMatrixEntry]
ghjMatrix)
]
, String
"fail-fast" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> Bool -> Yaml [String]
forall ann. ann -> Bool -> Yaml ann
YBool [] Bool
False
]
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"steps" String -> Yaml [String] -> ([String], String, Yaml [String])
~> [String] -> [Yaml [String]] -> Yaml [String]
forall ann. ann -> [Yaml ann] -> Yaml ann
ylistFilt [] ((GitHubStep -> Yaml [String]) -> [GitHubStep] -> [Yaml [String]]
forall a b. (a -> b) -> [a] -> [b]
map GitHubStep -> Yaml [String]
forall a. ToYaml a => a -> Yaml [String]
toYaml ([GitHubStep] -> [Yaml [String]])
-> [GitHubStep] -> [Yaml [String]]
forall a b. (a -> b) -> a -> b
$ (GitHubStep -> Bool) -> [GitHubStep] -> [GitHubStep]
forall a. (a -> Bool) -> [a] -> [a]
filter GitHubStep -> Bool
notEmptyStep [GitHubStep]
ghjSteps)
instance ToYaml SetupMethod where
toYaml :: SetupMethod -> Yaml [String]
toYaml SetupMethod
HVRPPA = Yaml [String]
"hvr-ppa"
toYaml SetupMethod
GHCUP = Yaml [String]
"ghcup"
instance ToYaml GitHubMatrixEntry where
toYaml :: GitHubMatrixEntry -> Yaml [String]
toYaml GitHubMatrixEntry {Bool
CompilerVersion
SetupMethod
ghmeCompiler :: GitHubMatrixEntry -> CompilerVersion
ghmeAllowFailure :: GitHubMatrixEntry -> Bool
ghmeSetupMethod :: GitHubMatrixEntry -> SetupMethod
ghmeCompiler :: CompilerVersion
ghmeAllowFailure :: Bool
ghmeSetupMethod :: SetupMethod
..} = [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt []
[ String
"compiler" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString (CompilerVersion -> String
dispGhcVersion CompilerVersion
ghmeCompiler)
, String
"compilerKind" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString (CompilerVersion -> String
compilerKind CompilerVersion
ghmeCompiler)
, String
"compilerVersion" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString (CompilerVersion -> String
compilerVersion CompilerVersion
ghmeCompiler)
, String
"setup-method" String -> Yaml [String] -> ([String], String, Yaml [String])
~> SetupMethod -> Yaml [String]
forall a. ToYaml a => a -> Yaml [String]
toYaml SetupMethod
ghmeSetupMethod
, String
"allow-failure" String -> Yaml [String] -> ([String], String, Yaml [String])
~> Bool -> Yaml [String]
forall a. ToYaml a => a -> Yaml [String]
toYaml Bool
ghmeAllowFailure
]
instance ToYaml GitHubStep where
toYaml :: GitHubStep -> Yaml [String]
toYaml GitHubStep {String
Either GitHubRun GitHubUses
ghsName :: GitHubStep -> String
ghsStep :: GitHubStep -> Either GitHubRun GitHubUses
ghsName :: String
ghsStep :: Either GitHubRun GitHubUses
..} = [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt [] ([([String], String, Yaml [String])] -> Yaml [String])
-> [([String], String, Yaml [String])] -> Yaml [String]
forall a b. (a -> b) -> a -> b
$
[ String
"name" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
ghsName
] [([String], String, Yaml [String])]
-> [([String], String, Yaml [String])]
-> [([String], String, Yaml [String])]
forall a. [a] -> [a] -> [a]
++ case Either GitHubRun GitHubUses
ghsStep of
Left GitHubRun {[Sh]
Map String String
ghsRun :: GitHubRun -> [Sh]
ghsEnv :: GitHubRun -> Map String String
ghsRun :: [Sh]
ghsEnv :: Map String String
..} ->
[ String
"run" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString ([Sh] -> String
shlistToString [Sh]
ghsRun)
, String
"env" String -> Yaml [String] -> ([String], String, Yaml [String])
~> Map String String -> Yaml [String]
mapToYaml Map String String
ghsEnv
]
Right GitHubUses {String
Maybe String
Map String String
ghsAction :: GitHubUses -> String
ghsIf :: GitHubUses -> Maybe String
ghsWith :: GitHubUses -> Map String String
ghsAction :: String
ghsIf :: Maybe String
ghsWith :: Map String String
..} -> ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])]
forall x. ListBuilder x () -> [x]
buildList (ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])])
-> ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])]
forall a b. (a -> b) -> a -> b
$ do
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"uses" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
ghsAction
Maybe String
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ Maybe String
ghsIf ((String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ())
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ \String
if_ -> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"if" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
if_
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"with" String -> Yaml [String] -> ([String], String, Yaml [String])
~> Map String String -> Yaml [String]
mapToYaml Map String String
ghsWith
notEmptyStep :: GitHubStep -> Bool
notEmptyStep :: GitHubStep -> Bool
notEmptyStep (GitHubStep String
_ (Left (GitHubRun [] Map String String
_))) = Bool
False
notEmptyStep GitHubStep
_ = Bool
True
instance ToYaml GitHubService where
toYaml :: GitHubService -> Yaml [String]
toYaml GitHubService {String
Maybe String
Map String String
ghServImage :: GitHubService -> String
ghServEnv :: GitHubService -> Map String String
ghServOptions :: GitHubService -> Maybe String
ghServImage :: String
ghServEnv :: Map String String
ghServOptions :: Maybe String
..} = [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt [] ([([String], String, Yaml [String])] -> Yaml [String])
-> [([String], String, Yaml [String])] -> Yaml [String]
forall a b. (a -> b) -> a -> b
$ ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])]
forall x. ListBuilder x () -> [x]
buildList (ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])])
-> ListBuilder ([String], String, Yaml [String]) ()
-> [([String], String, Yaml [String])]
forall a b. (a -> b) -> a -> b
$ do
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"image" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
ghServImage
([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"env" String -> Yaml [String] -> ([String], String, Yaml [String])
~> Map String (Yaml [String]) -> Yaml [String]
forall a. ToYaml a => a -> Yaml [String]
toYaml ([String] -> String -> Yaml [String]
forall ann. ann -> String -> Yaml ann
YString [] (String -> Yaml [String])
-> Map String String -> Map String (Yaml [String])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Map String String
ghServEnv)
Maybe String
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall (t :: * -> *) (f :: * -> *) a b.
(Foldable t, Applicative f) =>
t a -> (a -> f b) -> f ()
for_ Maybe String
ghServOptions ((String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ())
-> (String -> ListBuilder ([String], String, Yaml [String]) ())
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ \String
opt -> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall x. x -> ListBuilder x ()
item (([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ())
-> ([String], String, Yaml [String])
-> ListBuilder ([String], String, Yaml [String]) ()
forall a b. (a -> b) -> a -> b
$ String
"options" String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
opt
mapToYaml :: M.Map String String -> Yaml [String]
mapToYaml :: Map String String -> Yaml [String]
mapToYaml Map String String
m = [String] -> [([String], String, Yaml [String])] -> Yaml [String]
forall ann. ann -> [(ann, String, Yaml ann)] -> Yaml ann
ykeyValuesFilt []
[ String
k String -> Yaml [String] -> ([String], String, Yaml [String])
~> String -> Yaml [String]
forall a. IsString a => String -> a
fromString String
v
| (String
k, String
v) <- Map String String -> [(String, String)]
forall k a. Map k a -> [(k, a)]
M.toList Map String String
m
]