{-# LANGUAGE TemplateHaskell #-}
module Development.GitRev.Extras
( gitBranch
, gitHash
, gitCommitDate
, gitCommitCount
) where
import Development.GitRev qualified as GitRev
import Language.Haskell.TH qualified as TH
import System.Environment qualified as System.Environment
data VersionVariable
= GitBranch
| GitHash
| GitCommitDate
| GitCommitCount
deriving stock (Int -> VersionVariable -> ShowS
[VersionVariable] -> ShowS
VersionVariable -> String
(Int -> VersionVariable -> ShowS)
-> (VersionVariable -> String)
-> ([VersionVariable] -> ShowS)
-> Show VersionVariable
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VersionVariable -> ShowS
showsPrec :: Int -> VersionVariable -> ShowS
$cshow :: VersionVariable -> String
show :: VersionVariable -> String
$cshowList :: [VersionVariable] -> ShowS
showList :: [VersionVariable] -> ShowS
Show, VersionVariable -> VersionVariable -> Bool
(VersionVariable -> VersionVariable -> Bool)
-> (VersionVariable -> VersionVariable -> Bool)
-> Eq VersionVariable
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VersionVariable -> VersionVariable -> Bool
== :: VersionVariable -> VersionVariable -> Bool
$c/= :: VersionVariable -> VersionVariable -> Bool
/= :: VersionVariable -> VersionVariable -> Bool
Eq)
gitBranch :: TH.ExpQ
gitBranch :: ExpQ
gitBranch = String -> ExpQ
forall (m :: * -> *). Quote m => String -> m Exp
TH.stringE (String -> ExpQ) -> Q String -> ExpQ
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< VersionVariable -> Q String
getVersionVariable VersionVariable
GitBranch
gitHash :: TH.ExpQ
gitHash :: ExpQ
gitHash = String -> ExpQ
forall (m :: * -> *). Quote m => String -> m Exp
TH.stringE (String -> ExpQ) -> Q String -> ExpQ
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< VersionVariable -> Q String
getVersionVariable VersionVariable
GitHash
gitCommitDate :: TH.ExpQ
gitCommitDate :: ExpQ
gitCommitDate = String -> ExpQ
forall (m :: * -> *). Quote m => String -> m Exp
TH.stringE (String -> ExpQ) -> Q String -> ExpQ
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< VersionVariable -> Q String
getVersionVariable VersionVariable
GitCommitDate
gitCommitCount :: TH.ExpQ
gitCommitCount :: ExpQ
gitCommitCount = String -> ExpQ
forall (m :: * -> *). Quote m => String -> m Exp
TH.stringE (String -> ExpQ) -> Q String -> ExpQ
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< VersionVariable -> Q String
getVersionVariable VersionVariable
GitCommitCount
getVersionVariable :: VersionVariable -> TH.Q String
getVersionVariable :: VersionVariable -> Q String
getVersionVariable VersionVariable
verVar = do
Maybe String
valueFromEnv <- Q (Maybe String)
getValueFromEnv
case (String
valueFromGit, Maybe String
valueFromEnv) of
(String
"UNKNOWN", Just String
v) ->
String -> Q String
forall a. a -> Q a
forall (m :: * -> *) a. Monad m => a -> m a
return String
v
(String
"UNKNOWN", Maybe String
Nothing) ->
String -> Q String
forall a. a -> Q a
forall (m :: * -> *) a. Monad m => a -> m a
return String
""
(String
_, Just String
v) ->
String -> Q String
forall a. a -> Q a
forall (m :: * -> *) a. Monad m => a -> m a
return String
v
(String
v, Maybe String
_) ->
String -> Q String
forall a. a -> Q a
forall (m :: * -> *) a. Monad m => a -> m a
return String
v
where
valueFromGit :: String
valueFromGit :: String
valueFromGit = case VersionVariable
verVar of
VersionVariable
GitBranch -> $(GitRev.gitBranch)
VersionVariable
GitHash -> $(GitRev.gitHash)
VersionVariable
GitCommitDate -> $(GitRev.gitCommitDate)
VersionVariable
GitCommitCount -> $(GitRev.gitCommitCount)
getValueFromEnv :: TH.Q (Maybe String)
getValueFromEnv :: Q (Maybe String)
getValueFromEnv = String -> Q (Maybe String)
lookupEnvQ String
envVarName
envVarName :: String
envVarName :: String
envVarName = case VersionVariable
verVar of
VersionVariable
GitBranch -> String
"GIT_BRANCH"
VersionVariable
GitHash -> String
"GIT_HASH"
VersionVariable
GitCommitDate -> String
"GIT_COMMIT_DATE"
VersionVariable
GitCommitCount -> String
"GIT_COMMIT_COUNT"
lookupEnvQ :: String -> TH.Q (Maybe String)
lookupEnvQ :: String -> Q (Maybe String)
lookupEnvQ = IO (Maybe String) -> Q (Maybe String)
forall a. IO a -> Q a
TH.runIO (IO (Maybe String) -> Q (Maybe String))
-> (String -> IO (Maybe String)) -> String -> Q (Maybe String)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO (Maybe String)
System.Environment.lookupEnv