mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-01-22 20:21:57 +01:00
Upload as a Hackage distribution
This commit is contained in:
parent
bd6c3b57bb
commit
24d0c3b4d7
@ -4,6 +4,7 @@
|
|||||||
module Stackage.BuildPlan
|
module Stackage.BuildPlan
|
||||||
( readBuildPlan
|
( readBuildPlan
|
||||||
, writeBuildPlan
|
, writeBuildPlan
|
||||||
|
, writeBuildPlanCsv
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
@ -155,3 +156,26 @@ getSection title orig =
|
|||||||
if null z
|
if null z
|
||||||
then return y
|
then return y
|
||||||
else Left $ "Unconsumed input on line: " ++ x
|
else Left $ "Unconsumed input on line: " ++ x
|
||||||
|
|
||||||
|
-- | Used for Hackage distribution purposes.
|
||||||
|
writeBuildPlanCsv :: FilePath -> BuildPlan -> IO ()
|
||||||
|
writeBuildPlanCsv fp bp =
|
||||||
|
-- Obviously a proper CSV library should be used... but we're minimizing
|
||||||
|
-- deps
|
||||||
|
System.IO.UTF8.writeFile fp $ unlines $ map toRow $ Map.toList fullMap
|
||||||
|
where
|
||||||
|
fullMap = Map.unions
|
||||||
|
[ fmap spiVersion $ bpPackages bp
|
||||||
|
, Map.mapMaybe id $ bpCore bp
|
||||||
|
, bpOptionalCore bp
|
||||||
|
]
|
||||||
|
|
||||||
|
toRow (PackageName name, version) = concat
|
||||||
|
[ "\""
|
||||||
|
, name
|
||||||
|
, "\",\""
|
||||||
|
, display version
|
||||||
|
, "\",\"http://www.stackage.org/package/"
|
||||||
|
, name
|
||||||
|
, "\""
|
||||||
|
]
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
{-# LANGUAGE RecordWildCards #-}
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
import Data.Set (fromList)
|
import Data.Set (fromList)
|
||||||
import Stackage.Build (build, defaultBuildSettings)
|
import Stackage.Build (build, defaultBuildSettings)
|
||||||
import Stackage.BuildPlan (readBuildPlan, writeBuildPlan)
|
import Stackage.BuildPlan (readBuildPlan, writeBuildPlan, writeBuildPlanCsv)
|
||||||
import Stackage.CheckPlan (checkPlan)
|
import Stackage.CheckPlan (checkPlan)
|
||||||
import Stackage.GhcPkg (getGhcVersion)
|
import Stackage.GhcPkg (getGhcVersion)
|
||||||
import Stackage.Init (stackageInit)
|
import Stackage.Init (stackageInit)
|
||||||
@ -20,6 +20,7 @@ data SelectArgs = SelectArgs
|
|||||||
, onlyPermissive :: Bool
|
, onlyPermissive :: Bool
|
||||||
, allowed :: [String]
|
, allowed :: [String]
|
||||||
, buildPlanDest :: FilePath
|
, buildPlanDest :: FilePath
|
||||||
|
, buildPlanCsvDest :: FilePath
|
||||||
, globalDB :: Bool
|
, globalDB :: Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,6 +33,7 @@ parseSelectArgs =
|
|||||||
, onlyPermissive = False
|
, onlyPermissive = False
|
||||||
, allowed = []
|
, allowed = []
|
||||||
, buildPlanDest = defaultBuildPlan
|
, buildPlanDest = defaultBuildPlan
|
||||||
|
, buildPlanCsvDest = defaultBuildPlanCsv
|
||||||
, globalDB = False
|
, globalDB = False
|
||||||
}
|
}
|
||||||
where
|
where
|
||||||
@ -43,6 +45,7 @@ parseSelectArgs =
|
|||||||
loop x ("--only-permissive":rest) = loop x { onlyPermissive = True } rest
|
loop x ("--only-permissive":rest) = loop x { onlyPermissive = True } rest
|
||||||
loop x ("--allow":y:rest) = loop x { allowed = y : allowed x } rest
|
loop x ("--allow":y:rest) = loop x { allowed = y : allowed x } rest
|
||||||
loop x ("--build-plan":y:rest) = loop x { buildPlanDest = y } rest
|
loop x ("--build-plan":y:rest) = loop x { buildPlanDest = y } rest
|
||||||
|
loop x ("--build-plan-csv":y:rest) = loop x { buildPlanCsvDest = y } rest
|
||||||
loop x ("--use-global-db":rest) = loop x { globalDB = True } rest
|
loop x ("--use-global-db":rest) = loop x { globalDB = True } rest
|
||||||
loop _ (y:_) = error $ "Did not understand argument: " ++ y
|
loop _ (y:_) = error $ "Did not understand argument: " ++ y
|
||||||
|
|
||||||
@ -78,6 +81,9 @@ parseBuildArgs version =
|
|||||||
defaultBuildPlan :: FilePath
|
defaultBuildPlan :: FilePath
|
||||||
defaultBuildPlan = "build-plan.txt"
|
defaultBuildPlan = "build-plan.txt"
|
||||||
|
|
||||||
|
defaultBuildPlanCsv :: FilePath
|
||||||
|
defaultBuildPlanCsv = "build-plan.csv"
|
||||||
|
|
||||||
withBuildSettings :: [String] -> (BuildSettings -> BuildPlan -> IO a) -> IO a
|
withBuildSettings :: [String] -> (BuildSettings -> BuildPlan -> IO a) -> IO a
|
||||||
withBuildSettings args f = do
|
withBuildSettings args f = do
|
||||||
version <- getGhcVersion
|
version <- getGhcVersion
|
||||||
@ -114,6 +120,7 @@ main = do
|
|||||||
, useGlobalDatabase = globalDB
|
, useGlobalDatabase = globalDB
|
||||||
}
|
}
|
||||||
writeBuildPlan buildPlanDest bp
|
writeBuildPlan buildPlanDest bp
|
||||||
|
writeBuildPlanCsv buildPlanCsvDest bp
|
||||||
("check":rest) -> withBuildSettings rest checkPlan
|
("check":rest) -> withBuildSettings rest checkPlan
|
||||||
("build":rest) -> withBuildSettings rest build
|
("build":rest) -> withBuildSettings rest build
|
||||||
("test":rest) -> withBuildSettings rest runTestSuites
|
("test":rest) -> withBuildSettings rest runTestSuites
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
import Control.Monad (filterM, when)
|
import Control.Monad (filterM, when)
|
||||||
import qualified Data.ByteString.Char8 as S8
|
import qualified Data.ByteString.Char8 as S8
|
||||||
|
import qualified Data.ByteString.Lazy as L
|
||||||
import Data.List (isInfixOf, isPrefixOf,
|
import Data.List (isInfixOf, isPrefixOf,
|
||||||
sort)
|
sort)
|
||||||
import Network.HTTP.Client
|
import Network.HTTP.Client
|
||||||
@ -32,6 +33,7 @@ main = withManager defaultManagerSettings $ \m -> do
|
|||||||
exitFailure
|
exitFailure
|
||||||
|
|
||||||
let uploadDocs = "exclusive" `isInfixOf` alias
|
let uploadDocs = "exclusive" `isInfixOf` alias
|
||||||
|
uploadHackageDistro = alias == "unstable-ghc78-exclusive"
|
||||||
|
|
||||||
putStrLn $ concat
|
putStrLn $ concat
|
||||||
[ "Uploading "
|
[ "Uploading "
|
||||||
@ -103,6 +105,15 @@ main = withManager defaultManagerSettings $ \m -> do
|
|||||||
}
|
}
|
||||||
httpLbs req3 m >>= print
|
httpLbs req3 m >>= print
|
||||||
|
|
||||||
|
when uploadHackageDistro $ do
|
||||||
|
lbs <- L.readFile $ takeDirectory filepath </> "build-plan.csv"
|
||||||
|
let req = "http://hackage.haskell.org/distro/Stackage/packages.csv"
|
||||||
|
{ requestHeaders = [("Content-Type", "text/csv")]
|
||||||
|
, requestBody = RequestBodyLBS lbs
|
||||||
|
, checkStatus = \_ _ _ -> Nothing
|
||||||
|
}
|
||||||
|
httpLbs req m >>= print
|
||||||
|
|
||||||
mkIndex :: String -> [String] -> String
|
mkIndex :: String -> [String] -> String
|
||||||
mkIndex snapid dirs = concat
|
mkIndex snapid dirs = concat
|
||||||
[ "<!DOCTYPE html>\n<html lang='en'><head><title>Haddocks index</title>"
|
[ "<!DOCTYPE html>\n<html lang='en'><head><title>Haddocks index</title>"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user