on master help sign in
Generate inclusive and exclusive snapshots
c766873Michael Snoyman
.gitignore+2−2
@@ -16,6 +16,6 @@ cabal-dev
16build-plan.txt
16build-plan.txt
17hackage-map.txt
17hackage-map.txt
18module-name-conflicts.txt
18module-name-conflicts.txt
19−/hackage
19+/exclusive
20−/desc
20+/inclusive
21*.stackage
21*.stackage
Stackage/InstallInfo.hs+29−14
@@ -20,6 +20,8 @@ import Stackage.NarrowDatabase
20import Stackage.ServerFiles
20import Stackage.ServerFiles
21import Stackage.Types
21import Stackage.Types
22import Stackage.Util
22import Stackage.Util
23+import System.Directory (createDirectoryIfMissing)
24+import System.FilePath ((</>))
23import qualified System.IO as IO
25import qualified System.IO as IO
24import qualified System.IO.UTF8
26import qualified System.IO.UTF8
25import System.Locale (defaultTimeLocale)
27import System.Locale (defaultTimeLocale)
@@ -103,20 +105,33 @@ getInstallInfo settings = do
103 , iiPackageDB = pdb
105 , iiPackageDB = pdb
104 }
106 }
105
107
106− putStrLn "Creating hackage file (for publishing to Stackage server)"
108+ forM_ [False, True] $ \isInc -> do
107− IO.withBinaryFile "hackage" IO.WriteMode $ createHackageFile ii
109+ let incexc = if isInc then "inclusive" else "exclusive"
108−
110+
109− putStrLn "Creating desc file (for publishing to Stackage server)"
110− now <- getCurrentTime
111+ now <- getCurrentTime
111− System.IO.UTF8.writeFile "desc" $ concat
112+ let ghcVer =
112− [ "Stackage build for GHC "
113− , let GhcMajorVersion x y = selectGhcVersion settings
113+ let GhcMajorVersion x y = selectGhcVersion settings
114− in show x ++ "." ++ show y
114+ in show x ++ "." ++ show y
115− , ", "
116− , formatTime defaultTimeLocale "%Y-%m-%d\n" now
115+ date = formatTime defaultTimeLocale "%Y-%m-%d" now
117− , "Generated on "
116+
117+ createDirectoryIfMissing True incexc
118+
119+ putStrLn $ "Inclusive/exclusive: " ++ incexc
120+
121+ putStrLn "Creating hackage file (for publishing to Stackage server)"
122+ IO.withBinaryFile (incexc </> "hackage") IO.WriteMode $ \hackageH ->
123+ IO.withBinaryFile (incexc </> "create-snapshot.sh") IO.WriteMode
124+ (createHackageFile isInc ii ghcVer date hackageH)
125+
126+ putStrLn "Creating desc file (for publishing to Stackage server)"
127+ System.IO.UTF8.writeFile (incexc </> "desc") $ concat
128+ [ "Stackage build for GHC "
129+ , ghcVer
130+ , ", "
131+ , date
132+ , "\nGenerated on "
118− , show now
133+ , show now
119− ]
134+ ]
120
135
121 return ii
136 return ii
122
137
Stackage/ServerFiles.hs+35−5
@@ -11,13 +11,30 @@ import qualified Codec.Archive.Tar as Tar
11import qualified Data.ByteString.Lazy as L
11import qualified Data.ByteString.Lazy as L
12import Control.Arrow (second)
12import Control.Arrow (second)
13import Distribution.Text (display)
13import Distribution.Text (display)
14+import System.Directory (doesFileExist)
15+import System.FilePath ((</>), (<.>))
14−import System.IO (Handle, hPutStrLn)
16+import System.IO (Handle, hPutStrLn, hPutStr)
15
17
16−createHackageFile :: InstallInfo -> Handle -> IO ()
18+createHackageFile :: Bool -- ^ inclusive?
19+ -> InstallInfo
20+ -> String -- ^ GHC version
21+ -> String -- ^ date
22+ -> Handle -- ^ hackage
23+ -> Handle -- ^ tarballs
24+ -> IO ()
17−createHackageFile ii h = do
25+createHackageFile isInc ii ghcVer date hackageH tarballH = do
26+ hPutStr tarballH $ concat
27+ [ "#!/bin/bash -ex\n\ntar czfv ../ghc-"
28+ , ghcVer
29+ , "-"
30+ , date
31+ , if isInc then "-inclusive" else "-exclusive"
32+ , ".stackage hackage desc"
33+ ]
18 indextargz <- getTarballName
34 indextargz <- getTarballName
19 indexLBS <- L.readFile indextargz
35 indexLBS <- L.readFile indextargz
20 loop $ Tar.read indexLBS
36 loop $ Tar.read indexLBS
37+ hPutStrLn tarballH ""
21 where
38 where
22 selected = Map.fromList . map toStrs . Map.toList $
39 selected = Map.fromList . map toStrs . Map.toList $
23 fmap spiVersion (iiPackages ii)
40 fmap spiVersion (iiPackages ii)
@@ -35,8 +52,21 @@ createHackageFile ii h = do
35 Nothing -> return ()
52 Nothing -> return ()
36 Just (name, version) ->
53 Just (name, version) ->
37 case Map.lookup name selected of
54 case Map.lookup name selected of
38− Just version' | version /= version' -> return ()
55+ Just version'
56+ | version == version' -> emit True name version
57+ | otherwise -> return ()
58+ Nothing
59+ | isInc -> emit False name version
60+ | otherwise -> return ()
61+
62+ emit usePatch name version = do
63+ exists <- if usePatch then doesFileExist tarball else return False
64+ if exists
65+ then hPutStr tarballH $ ' ' : ".." </> tarball
66+ else hPutStrLn hackageH base
67+ where
39− _ -> hPutStrLn h $ concat [name, "-", version]
68+ base = concat [name, "-", version]
69+ tarball = "patching" </> "tarballs" </> base <.> "tar" <.> "gz"
40
70
41parsePair :: String -> Maybe (String, String)
71parsePair :: String -> Maybe (String, String)
42parsePair s =
72parsePair s =
create-stackage-tarball.shdeleted−3
@@ -1,3 +0,0 @@
1−#!/bin/bash -ex
2−
3−tar czfv ghc-$(ghc --numeric-version)-$(date +%Y-%m-%d).stackage hackage desc patching/tarballs/
jenkins-build.sh+9−1
@@ -8,4 +8,12 @@ cabal install Cabal-$(cabal --version | sed -n 's@using version \(.*\) of the Ca
8./dist/build/stackage/stackage check
8./dist/build/stackage/stackage check
9./dist/build/stackage/stackage build
9./dist/build/stackage/stackage build
10./dist/build/stackage/stackage test
10./dist/build/stackage/stackage test
11−./create-stackage-tarball.sh
11+
12+for f in inclusive exclusive
13+do
14+ cd $f
15+
16+ bash create-snapshot.sh
17+
18+ cd ..
19+done