mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-01-11 23:08:30 +01:00
196 lines
6.2 KiB
Haskell
196 lines
6.2 KiB
Haskell
{-# LANGUAGE TupleSections #-}
|
|
|
|
module Main where
|
|
|
|
import Control.Monad
|
|
import Data.Monoid
|
|
import Data.String (fromString)
|
|
import Data.Version
|
|
import Options.Applicative
|
|
import Filesystem.Path.CurrentOS (decodeString)
|
|
import Paths_stackage (version)
|
|
import Stackage.CompleteBuild
|
|
import Stackage.Upload
|
|
import Stackage.InstallBuild
|
|
import Network.HTTP.Client (withManager)
|
|
import Network.HTTP.Client.TLS (tlsManagerSettings)
|
|
import qualified Data.Text as T
|
|
|
|
main :: IO ()
|
|
main =
|
|
join $
|
|
execParser $
|
|
info
|
|
(helpOption <*> versionOption <*> config)
|
|
(header "Stackage" <>
|
|
fullDesc)
|
|
where
|
|
helpOption =
|
|
abortOption ShowHelpText $
|
|
long "help" <>
|
|
help "Show this help text"
|
|
versionOption =
|
|
infoOption
|
|
("stackage version " ++ showVersion version)
|
|
(long "version" <>
|
|
help "Show stackage version")
|
|
config =
|
|
subparser $
|
|
mconcat
|
|
[ cmnd
|
|
(uncurry completeBuild)
|
|
(fmap (Nightly, ) buildFlags)
|
|
"nightly"
|
|
"Build, test and upload the Nightly snapshot"
|
|
, cmnd
|
|
(uncurry completeBuild)
|
|
(fmap (LTS Major, ) buildFlags)
|
|
"lts-major"
|
|
"Build, test and upload the LTS (major) snapshot"
|
|
, cmnd
|
|
(uncurry completeBuild)
|
|
(fmap (LTS Minor, ) buildFlags)
|
|
"lts-minor"
|
|
"Build, test and upload the LTS (minor) snapshot"
|
|
, cmnd
|
|
justUploadNightly
|
|
nightlyUploadFlags
|
|
"upload-nightly"
|
|
"Upload an already-built nightly snapshot"
|
|
, cmnd
|
|
(const justCheck)
|
|
(pure ())
|
|
"check"
|
|
"Just check that the build plan is ok"
|
|
, cmnd
|
|
installBuild
|
|
installFlags
|
|
"install"
|
|
"Install a snapshot from an existing build plan"
|
|
, cmnd
|
|
uploadv2
|
|
uploadv2Flags
|
|
"upload2"
|
|
"Upload a pre-existing v2 bundle"
|
|
]
|
|
|
|
cmnd exec parse name desc =
|
|
command name $
|
|
info
|
|
(fmap exec (parse <**> helpOption))
|
|
(progDesc desc)
|
|
|
|
buildFlags =
|
|
BuildFlags <$>
|
|
fmap
|
|
not
|
|
(switch
|
|
(long "skip-tests" <>
|
|
help "Skip build and running the test suites")) <*>
|
|
fmap
|
|
not
|
|
(switch
|
|
(long "skip-haddock" <>
|
|
help "Skip generating haddock documentation")) <*>
|
|
fmap
|
|
not
|
|
(switch
|
|
(long "skip-upload" <>
|
|
help "Skip uploading bundle, docs, etc.")) <*>
|
|
switch
|
|
(long "enable-library-profiling" <>
|
|
help "Enable profiling when building") <*>
|
|
switch
|
|
(long "enable-executable-dynamic" <>
|
|
help "Enable dynamic executables when building") <*>
|
|
switch
|
|
(long "verbose" <> short 'v' <>
|
|
help "Output verbose detail about the build steps") <*>
|
|
switch
|
|
(long "skip-check" <>
|
|
help "Skip the check phase, and pass --allow-newer to cabal configure") <*>
|
|
switch
|
|
(long "upload-v2" <>
|
|
help "Use the V2 upload code")
|
|
|
|
nightlyUploadFlags = fromString <$> strArgument
|
|
(metavar "DATE" <>
|
|
help "Date, in YYYY-MM-DD format")
|
|
|
|
installFlags =
|
|
InstallFlags <$>
|
|
(fmap
|
|
BPSBundleWeb
|
|
(strOption
|
|
(long "bundle" <>
|
|
metavar "URL" <>
|
|
help "Stackage bundle containing build plan")) <|>
|
|
fmap
|
|
(BPSFile . decodeString)
|
|
(strOption
|
|
(long "build-plan" <>
|
|
metavar "PATH" <>
|
|
help "Build-plan YAML file"))) <*>
|
|
fmap
|
|
decodeString
|
|
(strArgument
|
|
(metavar "DESTINATION-PATH" <>
|
|
help "Destination directory path")) <*>
|
|
(fmap
|
|
(Just . decodeString)
|
|
(strOption
|
|
(long "log-dir" <>
|
|
metavar "PATH" <>
|
|
help "Location of log files (default DESTINATION-PATH/logs)")) <|>
|
|
pure Nothing) <*>
|
|
option
|
|
auto
|
|
(long "jobs" <>
|
|
metavar "NUMBER" <>
|
|
showDefault <> value 8 <>
|
|
help "Number of threads") <*>
|
|
switch
|
|
(long "global" <>
|
|
help "Install in global package database") <*>
|
|
fmap
|
|
not
|
|
(switch
|
|
(long "skip-tests" <>
|
|
help "Skip build and running the test suites")) <*>
|
|
fmap
|
|
not
|
|
(switch
|
|
(long "skip-haddock" <>
|
|
help "Skip generating haddock documentation")) <*>
|
|
switch
|
|
(long "enable-library-profiling" <>
|
|
help "Enable profiling when building") <*>
|
|
switch
|
|
(long "enable-executable-dynamic" <>
|
|
help "Enable dynamic executables when building") <*>
|
|
switch
|
|
(long "verbose" <> short 'v' <>
|
|
help "Output verbose detail about the build steps") <*>
|
|
switch
|
|
(long "skip-check" <>
|
|
help "Skip the check phase, and pass --allow-newer to cabal configure")
|
|
|
|
uploadv2 (path, url) = withManager tlsManagerSettings $ \man -> do
|
|
token <- getStackageAuthToken
|
|
res <- flip uploadBundleV2 man UploadBundleV2
|
|
{ ub2AuthToken = token
|
|
, ub2Server = fromString url
|
|
, ub2Bundle = decodeString path
|
|
}
|
|
putStrLn $ "New URL: " ++ T.unpack res
|
|
|
|
uploadv2Flags = (,)
|
|
<$> (strArgument
|
|
(metavar "BUNDLE-PATH" <>
|
|
help "Bundle path"))
|
|
<*> strOption
|
|
(long "server-url" <>
|
|
metavar "SERVER-URL" <>
|
|
showDefault <> value (T.unpack $ unStackageServer def) <>
|
|
help "Server to upload bundle to")
|