Copy final built distro to builds/

This commit is contained in:
Chris Done 2015-01-18 20:13:14 +01:00
parent eb734cb5d7
commit bb5952dbf9
3 changed files with 44 additions and 4 deletions

View File

@ -26,6 +26,7 @@ import Stackage.BuildConstraints
import Stackage.BuildPlan import Stackage.BuildPlan
import Stackage.CheckBuildPlan import Stackage.CheckBuildPlan
import Stackage.PerformBuild import Stackage.PerformBuild
import qualified Stackage.ShakeBuild as Shake
import Stackage.Prelude import Stackage.Prelude
import Stackage.ServerBundle import Stackage.ServerBundle
import Stackage.UpdateBuildPlan import Stackage.UpdateBuildPlan
@ -230,7 +231,7 @@ completeBuild buildType buildFlags = withManager tlsManagerSettings $ \man -> do
checkBuildPlan plan checkBuildPlan plan
putStrLn "Performing build" putStrLn "Performing build"
performBuild (getPerformBuild buildFlags settings) >>= mapM_ putStrLn Shake.performBuild (getPerformBuild buildFlags settings) -- >>= mapM_ putStrLn
when (bfDoUpload buildFlags) $ when (bfDoUpload buildFlags) $
finallyUpload settings man finallyUpload settings man

View File

@ -12,6 +12,7 @@ module Stackage.PerformBuild
, pbDocDir , pbDocDir
, copyBuiltInHaddocks , copyBuiltInHaddocks
, renameOrCopy , renameOrCopy
, copyDir
) where ) where
import Control.Concurrent.Async (async) import Control.Concurrent.Async (async)

View File

@ -4,12 +4,13 @@
module Stackage.ShakeBuild where module Stackage.ShakeBuild where
import Control.Concurrent
import Control.Monad import Control.Monad
import Stackage.BuildConstraints import Stackage.BuildConstraints
import Stackage.BuildPlan import Stackage.BuildPlan
import Stackage.CheckBuildPlan import Stackage.CheckBuildPlan
import Stackage.PackageDescription import Stackage.PackageDescription
import Stackage.PerformBuild (PerformBuild(..),copyBuiltInHaddocks,renameOrCopy) import Stackage.PerformBuild (PerformBuild(..),copyBuiltInHaddocks,renameOrCopy,copyDir)
import Stackage.Prelude (unFlagName) import Stackage.Prelude (unFlagName)
import Control.Concurrent.MVar import Control.Concurrent.MVar
@ -89,12 +90,28 @@ shakePlan haddockFiles registerLock pb shakeDir = do
target (targetForDocs shakeDir name (ppVersion plan)) $ target (targetForDocs shakeDir name (ppVersion plan)) $
do need [targetForPackage shakeDir name (ppVersion plan)] do need [targetForPackage shakeDir name (ppVersion plan)]
packageDocs haddockFiles shakeDir pb plan name packageDocs haddockFiles shakeDir pb plan name
want haddockTargets build <- target (targetForBuild pb)
(do need haddockTargets
copyToBuild pb shakeDir)
want [build]
where versionMappings = M.toList (M.map ppVersion (bpPackages (pbPlan pb))) where versionMappings = M.toList (M.map ppVersion (bpPackages (pbPlan pb)))
corePackages = M.keys $ siCorePackages $ bpSystemInfo $ pbPlan pb corePackages = M.keys $ siCorePackages $ bpSystemInfo $ pbPlan pb
normalPackages = filter (not . (`elem` corePackages) . fst) $ normalPackages = filter (not . (`elem` corePackages) . fst) $
M.toList $ bpPackages $ pbPlan pb M.toList $ bpPackages $ pbPlan pb
-- | Copy the build as a whole to builds/.
copyToBuild :: PerformBuild -> String -> Action ()
copyToBuild pb shakeDir = do
copy pbBinDir
copy pbLibDir
copy pbDataDir
copy pbDocDir
makeFile (targetForBuild pb)
where copy mkPath = liftIO $
copyDir
(FP.decodeString $ mkPath shakeDir)
(FP.decodeString $ mkPath $ FP.encodeString $ pbInstallDest pb)
-- | Generate haddock docs for the package. -- | Generate haddock docs for the package.
packageDocs :: TVar (Map String FilePath) packageDocs :: TVar (Map String FilePath)
-> FilePattern -> FilePattern
@ -328,6 +345,10 @@ targetForDocs :: FilePath -> PackageName -> Version -> FilePath
targetForDocs shakeDir name version = targetForDocs shakeDir name version =
shakeDir <//> "packages" <//> nameVer name version <//> "dist" <//> "shake-docs" shakeDir <//> "packages" <//> nameVer name version <//> "dist" <//> "shake-docs"
-- | Target for the complete, copied build under builds/date/.
targetForBuild :: PerformBuild -> FilePattern
targetForBuild pb = FP.encodeString (pbInstallDest pb) <//> "shake-built"
-- | Get a package database path. -- | Get a package database path.
targetForDb :: FilePath -> FilePath targetForDb :: FilePath -> FilePath
targetForDb shakeDir = targetForDb shakeDir =
@ -360,6 +381,24 @@ cleanOldPackages :: PerformBuild -> FilePath -> IO ()
cleanOldPackages pb shakeDir = do cleanOldPackages pb shakeDir = do
putStrLn "Collecting garbage" putStrLn "Collecting garbage"
pkgs <- getRegisteredPackages shakeDir pkgs <- getRegisteredPackages shakeDir
let toRemove = mapMaybe
(\(PackageIdentifier name version) ->
case M.lookup name versions of
Just version'
| version' == version ->
Nothing
Just newVersion -> Just
(name, version, (Replaced newVersion))
Nothing -> Just (name, version, NoLongerIncluded))
pkgs
broken <- getBrokenPackages shakeDir
unless (null toRemove)
(putStrLn ("There are " ++ show (length toRemove) ++ " packages to be purged."))
unless (null broken)
(putStrLn ("There are " ++ show (length broken) ++ " broken packages to be purged."))
when (length broken + length toRemove > 0)
(do putStrLn "Waiting 3 seconds before proceeding to remove ..."
threadDelay (1000 * 1000 * 3))
forM_ pkgs $ forM_ pkgs $
\(PackageIdentifier name version) -> \(PackageIdentifier name version) ->
case M.lookup name versions of case M.lookup name versions of
@ -372,7 +411,6 @@ cleanOldPackages pb shakeDir = do
version version
(Replaced newVersion) (Replaced newVersion)
Nothing -> purgePackage shakeDir name version NoLongerIncluded Nothing -> purgePackage shakeDir name version NoLongerIncluded
broken <- getBrokenPackages shakeDir
forM_ forM_
broken broken
(\(PackageIdentifier name version) -> (\(PackageIdentifier name version) ->