{-# LANGUAGE ExtendedDefaultRules #-} {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -fno-warn-type-defaults #-} import Control.Applicative ((<**>), (<|>)) import Control.Exception import Data.Maybe (isJust) import Data.Semigroup ((<>)) import qualified Data.Text as T import Data.Text (Text) import qualified Data.Text.IO as T import DeleteMerged (deleteDone) import qualified Options.Applicative as Opt import System.Directory (getHomeDirectory) import System.Posix.Env (getEnv) import Update (updateAll) import Utils (Options(..)) default (T.Text) data Mode = Update | DeleteDone modeParser :: Opt.Parser Mode modeParser = Opt.flag' Update (Opt.long "update" <> Opt.help "Update packages (default mode)") <|> Opt.flag' DeleteDone (Opt.long "delete-done" <> Opt.help "Delete branches from PRs that were merged or closed") programInfo :: Opt.ParserInfo Mode programInfo = Opt.info (modeParser <**> Opt.helper) (Opt.fullDesc <> Opt.progDesc "Update packages in nixpkgs repository" <> Opt.header "nixpkgs-update") makeOptions :: IO Options makeOptions = do dryRun <- isJust <$> getEnv "DRY_RUN" homeDir <- T.pack <$> getHomeDirectory githubToken <- T.strip <$> T.readFile "github_token.txt" return $ Options dryRun (homeDir <> "/.nixpkgs-update") githubToken main :: IO () main = do mode <- Opt.execParser programInfo options <- makeOptions case mode of DeleteDone -> deleteDone options Update -> updateAll options