@@ -7,6 +7,7 @@ module Stackage.CompleteBuild
7 , BuildFlags (..)
7 , BuildFlags (..)
8 , completeBuild
8 , completeBuild
9 , justCheck
9 , justCheck
12import Control.Concurrent (threadDelay)
13import Control.Concurrent (threadDelay)
@@ -53,28 +54,38 @@ data Settings = Settings
53 , postBuild :: IO ()
54 , postBuild :: IO ()
57+nightlyPlanFile :: Text -- ^ day
59+nightlyPlanFile day = fpFromText ("nightly-" ++ day) <.> "yaml"
61+nightlySettings :: Text -- ^ day
64+nightlySettings day plan' = Settings
65+ { planFile = nightlyPlanFile day
66+ , buildDir = fpFromText $ "builds/stackage-nightly-" ++ day
67+ , logDir = fpFromText $ "logs/stackage-nightly-" ++ day
68+ , title = \ghcVer -> concat
69+ [ "Stackage Nightly "
75+ , setArgs = \ghcVer ub -> ub { ubNightly = Just ghcVer }
77+ , postBuild = return ()
80+ slug' = "nightly-" ++ day
56getSettings :: Manager -> BuildType -> IO Settings
82getSettings :: Manager -> BuildType -> IO Settings
57getSettings man Nightly = do
83getSettings man Nightly = do
58 day <- tshow . utctDay <$> getCurrentTime
84 day <- tshow . utctDay <$> getCurrentTime
59− let slug' = "nightly-" ++ day
60 bc <- defaultBuildConstraints man
85 bc <- defaultBuildConstraints man
61 pkgs <- getLatestAllowedPlans bc
86 pkgs <- getLatestAllowedPlans bc
62 plan' <- newBuildPlan pkgs bc
87 plan' <- newBuildPlan pkgs bc
63− return Settings
88+ return $ nightlySettings day plan'
64− { planFile = fpFromText ("nightly-" ++ day) <.> "yaml"
65− , buildDir = fpFromText $ "builds/stackage-nightly-" ++ day
66− , logDir = fpFromText $ "logs/stackage-nightly-" ++ day
67− , title = \ghcVer -> concat
68− [ "Stackage Nightly "
74− , setArgs = \ghcVer ub -> ub { ubNightly = Just ghcVer }
76− , postBuild = return ()
78getSettings man (LTS bumpType) = do
89getSettings man (LTS bumpType) = do
79 Option mlts <- fmap (fmap getMax) $ runResourceT
90 Option mlts <- fmap (fmap getMax) $ runResourceT
80 $ sourceDirectory "."
91 $ sourceDirectory "."
@@ -178,6 +189,19 @@ justCheck = stillAlive $ withManager tlsManagerSettings $ \man -> do
179 putStrLn "Plan seems valid!"
190 putStrLn "Plan seems valid!"
192+getPerformBuild :: BuildFlags -> Settings -> PerformBuild
193+getPerformBuild buildFlags Settings {..} = PerformBuild
195+ , pbInstallDest = buildDir
197+ , pbLog = hPut stdout
199+ , pbGlobalInstall = False
200+ , pbEnableTests = bfEnableTests buildFlags
201+ , pbEnableLibProfiling = bfEnableLibProfile buildFlags
202+ , pbVerbose = bfVerbose buildFlags
181-- | Make a complete plan, build, test and upload bundle, docs and
205-- | Make a complete plan, build, test and upload bundle, docs and
182-- distro.
206-- distro.
183completeBuild :: BuildType -> BuildFlags -> IO ()
207completeBuild :: BuildType -> BuildFlags -> IO ()
@@ -194,26 +218,23 @@ completeBuild buildType buildFlags = withManager tlsManagerSettings $ \man -> do
194 checkBuildPlan plan
218 checkBuildPlan plan
196 putStrLn "Performing build"
220 putStrLn "Performing build"
197− let pb = PerformBuild
199− , pbInstallDest = buildDir
201− , pbLog = hPut stdout
203− , pbGlobalInstall = False
204− , pbEnableTests = bfEnableTests buildFlags
205− , pbEnableLibProfiling = bfEnableLibProfile buildFlags
206− , pbVerbose = bfVerbose buildFlags
208− performBuild pb >>= mapM_ putStrLn
221+ performBuild (getPerformBuild buildFlags settings) >>= mapM_ putStrLn
210 when (bfDoUpload buildFlags) $
223 when (bfDoUpload buildFlags) $
211− finallyUpload settings man pb
224+ finallyUpload settings man
227+ :: Text -- ^ nightly date
229+justUploadNightly day = do
230+ plan <- decodeFileEither (fpToString $ nightlyPlanFile day)
231+ >>= either throwM return
232+ withManager tlsManagerSettings $ finallyUpload $ nightlySettings day plan
213-- | The final part of the complete build process: uploading a bundle,
234-- | The final part of the complete build process: uploading a bundle,
214-- docs and a distro to hackage.
235-- docs and a distro to hackage.
215−finallyUpload :: Settings -> Manager -> PerformBuild -> IO ()
236+finallyUpload :: Settings -> Manager -> IO ()
216−finallyUpload Settings{..} man pb = do
237+finallyUpload settings@Settings{..} man = do
217 putStrLn "Uploading bundle to Stackage Server"
238 putStrLn "Uploading bundle to Stackage Server"
218 token <- readFile "/auth-token"
239 token <- readFile "/auth-token"
219 now <- epochTime
240 now <- epochTime
@@ -253,3 +274,5 @@ finallyUpload Settings{..} man pb = do
253 , udmDocDir = pbDocDir pb
274 , udmDocDir = pbDocDir pb
254 , udmPlan = plan
275 , udmPlan = plan
255 } man >>= print
276 } man >>= print
278+ pb = getPerformBuild (error "finallyUpload.buildFlags") settings