packages feed

nixpkgs-update-0.2.0: src/Main.hs

{-# 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