diff --git a/Stackage/InstallInfo.hs b/Stackage/InstallInfo.hs index d1618abe..336b93a7 100644 --- a/Stackage/InstallInfo.hs +++ b/Stackage/InstallInfo.hs @@ -129,6 +129,8 @@ getInstallInfo settings = do , ghcVer , ", " , date + , ", " + , incexc , "\nGenerated on " , show now ] diff --git a/Stackage/ServerFiles.hs b/Stackage/ServerFiles.hs index ad4fe20e..fa1b08fa 100644 --- a/Stackage/ServerFiles.hs +++ b/Stackage/ServerFiles.hs @@ -23,18 +23,29 @@ createHackageFile :: Bool -- ^ inclusive? -> Handle -- ^ tarballs -> IO () createHackageFile isInc ii ghcVer date hackageH tarballH = do + let stackageFP = concat + [ "../ghc-" + , ghcVer + , "-" + , date + , if isInc then "-inclusive" else "-exclusive" + , ".stackage" hPutStr tarballH $ concat - [ "#!/bin/bash -ex\n\ntar czfv ../ghc-" - , ghcVer - , "-" - , date - , if isInc then "-inclusive" else "-exclusive" - , ".stackage hackage desc" + [ "#!/bin/bash -ex\n\ntar czfv " + , stackageFP + , " hackage desc" ] indextargz <- getTarballName indexLBS <- L.readFile indextargz loop $ Tar.read indexLBS hPutStrLn tarballH "" + hPutStrLn tarballH $ concat + [ "runghc ../stackage-upload.hs " + , stackageFP + , " unstable-ghc" + , filter (/= '.') ghcVer + , if isInc then "-inclusive" else "-exclusive" + ] where selected = Map.fromList . map toStrs . Map.toList $ fmap spiVersion (iiPackages ii) diff --git a/jenkins-build.sh b/jenkins-build.sh index 06abd0ba..da8a3416 100755 --- a/jenkins-build.sh +++ b/jenkins-build.sh @@ -9,6 +9,8 @@ cabal install Cabal-$(cabal --version | sed -n 's@using version \(.*\) of the Ca ./dist/build/stackage/stackage build ./dist/build/stackage/stackage test +cabal install http-client + for f in inclusive exclusive do cd $f diff --git a/stackage-upload.hs b/stackage-upload.hs new file mode 100644 index 00000000..9e97da32 --- /dev/null +++ b/stackage-upload.hs @@ -0,0 +1,45 @@ +{-# LANGUAGE OverloadedStrings #-} +import qualified Data.ByteString.Char8 as S8 +import Network.HTTP.Client +import Network.HTTP.Client.MultipartFormData +import System.Environment (getArgs, getEnv, + getProgName) +import System.Exit (exitFailure) + +main :: IO () +main = withManager defaultManagerSettings $ \m -> do + args <- getArgs + token <- getEnv "STACKAGE_AUTH_TOKEN" + (filepath, alias) <- + case args of + [x, y] -> return (x, y) + _ -> do + pn <- getProgName + putStrLn $ concat + [ "Usage: " + , pn + , " " + ] + exitFailure + + putStrLn $ concat + [ "Uploading " + , filepath + , " as " + , alias + ] + + req1 <- parseUrl "http://www.stackage.org/upload" + let formData = + [ partBS "alias" $ S8.pack alias + , partFileSource "stackage" filepath + ] + req2 <- formDataBody formData req1 + let req3 = req2 + { method = "PUT" + , requestHeaders = + [ ("Authorization", S8.pack token) + , ("Accept", "application/json") + ] ++ requestHeaders req2 + } + httpLbs req3 m >>= print