diff --git a/src/Niv/GitHub.hs b/src/Niv/GitHub.hs index dab3ae0..5a4f661 100644 --- a/src/Niv/GitHub.hs +++ b/src/Niv/GitHub.hs @@ -13,9 +13,11 @@ import Data.Maybe import Data.String.QQ (s) import GHC.Exts (toList) import Niv.Update +import Data.Text.Encoding (encodeUtf8) import qualified Data.Text as T import qualified GitHub as GH import qualified GitHub.Data.Name as GH +import System.Environment (lookupEnv) data GithubRepo = GithubRepo { repoDescription :: Maybe T.Text @@ -24,13 +26,20 @@ data GithubRepo = GithubRepo } githubRepo :: T.Text -> T.Text -> IO GithubRepo -githubRepo owner repo = fmap translate <$> - GH.executeRequest' (GH.repositoryR (GH.N owner) (GH.N repo)) >>= \case +githubRepo owner repo = executeRequest >>= pickResponse >>= return . translate + where + pickResponse :: Either GH.Error GH.Repo -> IO GH.Repo + pickResponse = \case Left e -> do warnCouldNotFetchGitHubRepo e (owner, repo) error (show e) - Right x -> pure x - where + Right x -> return x + resolveRequestExecutionFn = do + token <- fmap (GH.OAuth . encodeUtf8 . T.pack) <$> lookupEnv "GITHUB_TOKEN" + return $ maybe GH.executeRequest' GH.executeRequest token + executeRequest :: IO (Either GH.Error GH.Repo) + executeRequest = resolveRequestExecutionFn >>= \fn -> fn (GH.repositoryR (GH.N owner) (GH.N repo)) + translate :: GH.Repo -> GithubRepo translate r = GithubRepo { repoDescription = GH.repoDescription r , repoHomepage = GH.repoHomepage r diff --git a/tests/default.nix b/tests/default.nix index 3eff935..e692b2d 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -22,7 +22,7 @@ let # TODO: Remove this patch by adding an argument to the github # subcommand to support GitHub entreprise. prePatch = '' - sed "s|GH.executeRequest'|GH.executeRequest (GH.EnterpriseOAuth \"http://localhost:3333\" \"\")|" -i src/Niv/GitHub.hs + sed "s|GH.executeRequest'|(GH.executeRequest (GH.EnterpriseOAuth \"http://localhost:3333\" \"\"))|" -i src/Niv/GitHub.hs sed "s|https://github.com|http://localhost:3333|" -i src/Niv/GitHub.hs ''; });