@@ -8,6 +8,7 @@ import Control.Monad (forM_, unless)
88import Data.List (foldl')
99import qualified Data.Map as Map
1010import qualified Data.Set as Set
11+import Data.Time (getCurrentTime, formatTime)
1112import Data.Version (showVersion)
1213import qualified Distribution.Text
1314import Distribution.Version (simplifyVersionRange, withinRange)
@@ -15,9 +16,12 @@ import Stackage.GhcPkg
1516import Stackage.HaskellPlatform
1617import Stackage.LoadDatabase
1718import Stackage.NarrowDatabase
19+import Stackage.ServerFiles
1820import Stackage.Types
1921import Stackage.Util
22+import qualified System.IO as IO
2023import qualified System.IO.UTF8
24+import System.Locale (defaultTimeLocale)
2125import System.Exit (exitFailure)
2226
2327dropExcluded :: SelectSettings
@@ -87,15 +91,32 @@ getInstallInfo settings = do
8791
8892 error "Conflicting build plan, exiting"
8993
90− return InstallInfo
91− { iiCore = totalCore
92− , iiPackages = Map.map biToSPI final
93− , iiOptionalCore = maybe
94− Map.empty
95− (Map.fromList . map (\(PackageIdentifier p v) -> (p, v)) . Set.toList . hplibs)
96− mhp
97− , iiPackageDB = pdb
98− }
94+ let ii = InstallInfo
95+ { iiCore = totalCore
96+ , iiPackages = Map.map biToSPI final
97+ , iiOptionalCore = maybe
98+ Map.empty
99+ (Map.fromList . map (\(PackageIdentifier p v) -> (p, v)) . Set.toList . hplibs)
100+ mhp
101+ , iiPackageDB = pdb
102+ }
103+
104+ putStrLn "Creating hackage file (for publishing to Stackage server)"
105+ IO.withBinaryFile "hackage" IO.WriteMode $ createHackageFile ii
106+
107+ putStrLn "Creating desc file (for publishing to Stackage server)"
108+ now <- getCurrentTime
109+ System.IO.UTF8.writeFile "desc" $ concat
110+ [ "Stackage build for GHC "
111+ , let GhcMajorVersion x y = selectGhcVersion settings
112+ in show x ++ "." ++ show y
113+ , ", "
114+ , formatTime defaultTimeLocale "%Y-%m-%d\n" now
115+ , "Generated on "
116+ , show now
117+ ]
118+
119+ return ii
99120
100121biToSPI :: BuildInfo -> SelectedPackageInfo
101122biToSPI BuildInfo {..} = SelectedPackageInfo