packages feed

arch-hs-0.9.0.0: sync/Args.hs

module Args
  ( CommonOptions (..),
    SubmitOptions (..),
    CheckOptions (..),
    Mode (..),
    runArgsParser,
  )
where

import Distribution.ArchHs.Options
import Distribution.ArchHs.Utils (archHsVersion)

-----------------------------------------------------------------------------

data CommonOptions = CommonOptions
  { optHackage :: HackageDBOptions,
    optCommunityDB :: CommunityDBOptions
  }

commonOptionsParser :: Parser CommonOptions
commonOptionsParser =
  CommonOptions <$> hackageDBOptionsParser <*> communityDBOptionsParser

-----------------------------------------------------------------------------

data SubmitOptions = SubmitOptions
  { optOutput :: FilePath,
    optUpload :: Bool
  }

submitOptionsParser :: Parser SubmitOptions
submitOptionsParser =
  SubmitOptions
    <$> option
      str
      ( long "output"
          <> metavar "PATH"
          <> short 'o'
          <> help "Output path of generated .csv file"
          <> value ""
      )
    <*> switch
      ( long "upload"
          <> short 'u'
          <> help "Upload to hackage"
      )

-----------------------------------------------------------------------------

newtype CheckOptions = CheckOptions
  { optShowGHCLibs :: Bool
  }

checkOptionsParser :: Parser CheckOptions
checkOptionsParser =
  CheckOptions
    <$> switch (long "show-ghc-libs" <> help "Include GHC and GHC libs")

-----------------------------------------------------------------------------

data Mode = Submit CommonOptions SubmitOptions | Check CommonOptions CheckOptions

runArgsParser :: IO Mode
runArgsParser =
  snd <$> do
    simpleOptions
      archHsVersion
      "arch-hs-sync - sync metadata of Haskell packages between [community] and Hackage"
      "arch-hs-sync is designed to be used by Hackage distribution maintainers"
      (pure ())
      $ do
        addCommand
          "submit"
          "submit distribution information to Hackage"
          id
          (Submit <$> commonOptionsParser <*> submitOptionsParser)
        addCommand
          "check"
          "check inconsistencies of Haskell packages version"
          id
          (Check <$> commonOptionsParser <*> checkOptionsParser)