Skip to content

Commit

Permalink
Cleanup enviromnent variable handling
Browse files Browse the repository at this point in the history
Signed-off-by: Sascha Grunert <mail@saschagrunert.de>
  • Loading branch information
saschagrunert committed Jun 15, 2019
1 parent 4045bb5 commit 3f1e93d
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 31 deletions.
35 changes: 15 additions & 20 deletions src/Environment.hs
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
-- | System Environment handling
--
-- @since 0.1.0
module Environment ( fillEnvironment ) where
module Environment
( branchEnvVars
, commitEnvVars
, fillEnvironment
, pullRequestEnvVars
, tokenEnvVars
) where

import Control.Lens ( (.~), (^.) )
import Control.Monad ( mapM, msum )
Expand All @@ -26,7 +32,7 @@ fillEnvironment e d = do
b <- getEnv (e ^. environmentBranch) "branch" branchEnvVars
c <- getEnv (e ^. environmentCommit) "commit" commitEnvVars
p <- getEnv (e ^. environmentPullRequest) "pull request" pullRequestEnvVars
t <- getToken (e ^. environmentToken)
t <- getEnv (e ^. environmentToken) "token" tokenEnvVars
if not d && any T.null [ b, c, p, t ]
then exitFailure
else return $ environmentToken .~ t $ environmentPullRequest .~ p $
Expand All @@ -37,8 +43,8 @@ prefix :: String -> String
prefix = (++) "PB_"

-- | Possible token environment variables sorted by priority
tokenEnvVar :: String
tokenEnvVar = prefix "TOKEN"
tokenEnvVars :: [String]
tokenEnvVars = [ prefix "TOKEN" ]

-- | Possible branch environment variables sorted by priority
branchEnvVars :: [String]
Expand All @@ -53,29 +59,18 @@ pullRequestEnvVars :: [String]
pullRequestEnvVars =
[ prefix "PULL_REQUEST", "CIRCLE_PR_NUMBER", "TRAVIS_PULL_REQUEST" ]

-- | Retrieve the token environment value
getToken :: Text -> IO Text
getToken "" = do
e <- lookupEnv tokenEnvVar
case e of
Just t -> return $ pack t
_ -> do
err $ printf "No token found via $%s environment variable"
tokenEnvVar
return ""

getToken x = return x

-- | Generic environment variable retrieval
getEnv :: Text -> String -> [String] -> IO Text
getEnv "" t v = do
e <- mapM lookupEnv v
case msum e of
Just b -> return $ pack b
_ -> do
err . printf ("No %s found via the $%s environment "
++ "variables or the command line")
t $ intercalate "/$" v
err $ printf ("No %s found via the $%s environment "
++ "variable%s or the command line")
t
(intercalate ", $" v)
(if length v == 1 then "" else "s" :: String)
return ""

getEnv x _ _ = return x
33 changes: 22 additions & 11 deletions src/cmd/client/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ module Main ( main ) where
import Control.Lens ( (^.) )
import Control.Monad ( foldM )

import Environment ( fillEnvironment )
import Data.List ( intercalate )

import Environment
( branchEnvVars, commitEnvVars, fillEnvironment
, pullRequestEnvVars, tokenEnvVars )

import Log as L ( info )
import Log ( initLogger, notice, warn )
Expand Down Expand Up @@ -63,16 +67,22 @@ arguments :: Parser Args
arguments = Args <$> environment <*> verbosity <*> apiUrl <*> devel

environment :: Parser Environment
environment = Environment
<$> strOption (long "branch" <> short 'b' <> help "Branch name"
<> metavar "BRANCH" <> value "")
<*> strOption (long "commit" <> short 'c' <> help "Commit hash"
<> metavar "COMMIT" <> showDefault <> value "")
environment = Environment <$> strOption (long "branch" <> short 'b'
<> envHelp "Branch name" branchEnvVars
<> metavar "BRANCH" <> value "")
<*> strOption (long "commit" <> short 'c'
<> envHelp "Commit hash" commitEnvVars <> metavar "COMMIT"
<> value "")
<*> strOption (long "pull-request" <> short 'p'
<> help "Pull request number" <> metavar "PULL_REQUEST"
<> showDefault <> value "")
<*> strOption (long "token" <> short 't' <> help "Token to be used"
<> metavar "TOKEN" <> showDefault <> value "") <**> helper
<> envHelp "Pull request number" pullRequestEnvVars
<> metavar "PULL_REQUEST" <> value "")
<*> strOption (long "token" <> short 't' <> envHelp "Token" tokenEnvVars
<> metavar "TOKEN" <> value "") <**> helper
where
envHelp x y = help $ printf "%s - fallback environment variable%s: $%s"
(x :: String)
(if length y == 1 then "" else "s" :: String)
(intercalate ", $" y)

verbosity :: Parser Priority
verbosity = priority . length
Expand All @@ -88,7 +98,8 @@ verbosity = priority . length

apiUrl :: Parser String
apiUrl = strOption (long "url" <> short 'u' <> help "API url for sending data"
<> metavar "URL" <> value "http://localhost:3000/api")
<> metavar "URL" <> showDefault
<> value "http://localhost:3000/api")

devel :: Parser Bool
devel = switch (internal <> long "devel" <> short 'd')
Expand Down

0 comments on commit 3f1e93d

Please sign in to comment.