packages feed

compaREST-0.1.0.0: github-action/CompaREST/GitHub/Action/Config.hs

module CompaREST.GitHub.Action.Config
  ( Config (..),
  )
where

import Data.Proxy
import Data.Text (Text)
import qualified Data.Text as T
import qualified GitHub as GH

import Data.Functor
import System.Envy

data Config = Config
  { githubToken :: GH.Auth
  , repoOwner :: GH.Name GH.Owner
  , repoName :: GH.Name GH.Repo
  , checkName :: Text
  , footerText :: Text
  , root :: FilePath
  , sha :: GH.Name GH.Commit
  }

instance FromEnv Config where
  fromEnv _ = do
    token <- GH.OAuth <$> env "GITHUB_TOKEN"
    (owner, repo) <-
      T.split (== '/') <$> env "REPO" >>= \case
        [owner, name] -> pure (owner, name)
        _ -> fail "malformed repo"
    checkName <-
      envMaybe "PROJECT_NAME" <&> \case
        Just pName | not . T.null . T.strip $ pName -> "compaREST – " <> pName
        _ -> "compaREST"
    footerText <- env "FOOTER"
    root <- envMaybe "ROOT" .!= "."
    sha <- env "SHA"
    pure $
      Config
        { githubToken = token
        , repoOwner = GH.mkName Proxy owner
        , repoName = GH.mkName Proxy repo
        , checkName = checkName
        , footerText = footerText
        , root = root
        , sha = GH.mkName Proxy sha
        }