on master help sign in
stackage-nightly executable (lts-bump needs work)
bff71d5Michael Snoyman
Stackage2/CompleteBuild.hsnew file+88
@@ -0,0 +1,88 @@
1+{-# LANGUAGE NoImplicitPrelude #-}
2+{-# LANGUAGE OverloadedStrings #-}
3+{-# LANGUAGE RecordWildCards #-}
4+module Stackage2.CompleteBuild
5+ ( BuildType (..)
6+ , completeBuild
7+ ) where
8+import Data.Default.Class (def)
9+import Data.Time
10+import Data.Yaml (encodeFile)
11+import Network.HTTP.Client
12+import Stackage2.BuildConstraints
13+import Stackage2.BuildPlan
14+import Stackage2.CheckBuildPlan
15+import Stackage2.PerformBuild
16+import Stackage2.Prelude
17+import Stackage2.ServerBundle
18+import Stackage2.UpdateBuildPlan
19+import Stackage2.Upload
20+import System.IO (BufferMode (LineBuffering), hSetBuffering)
21+
22+data BuildType = Nightly | LTS
23+
24+data Settings = Settings
25+ { plan :: BuildPlan
26+ , planFile :: FilePath
27+ , buildDir :: FilePath
28+ , title :: Text -> Text -- ^ GHC version -> title
29+ , slug :: Text
30+ , setArgs :: Text -> UploadBundle -> UploadBundle
31+ }
32+
33+getSettings :: BuildType -> IO Settings
34+getSettings Nightly = do
35+ day <- tshow . utctDay <$> getCurrentTime
36+ let slug' = "nightly-" ++ day
37+ plan' <- defaultBuildConstraints >>= newBuildPlan
38+ return Settings
39+ { planFile = fpFromText ("nightly-" ++ day) <.> "yaml"
40+ , buildDir = fpFromText $ "/tmp/stackage-nightly-" ++ day
41+ , title = \ghcVer -> concat
42+ [ "Stackage Nightly "
43+ , day
44+ , ", GHC "
45+ , ghcVer
46+ ]
47+ , slug = slug'
48+ , setArgs = \ghcVer ub -> ub { ubNightly = Just ghcVer }
49+ , plan = plan'
50+ }
51+
52+completeBuild :: BuildType -> IO ()
53+completeBuild buildType = withManager defaultManagerSettings $ \man -> do
54+ hSetBuffering stdout LineBuffering
55+
56+ Settings {..} <- getSettings buildType
57+ encodeFile (fpToString planFile) plan
58+ checkBuildPlan plan
59+ let pb = PerformBuild
60+ { pbPlan = plan
61+ , pbInstallDest = buildDir
62+ , pbLogDir = buildDir </> "logs"
63+ , pbLog = hPut stdout
64+ , pbJobs = 8
65+ }
66+ performBuild pb
67+
68+ token <- readFile "/auth-token"
69+ now <- epochTime
70+ let ghcVer = display $ siGhcVersion $ bpSystemInfo plan
71+ ident <- flip uploadBundle man $ setArgs ghcVer def
72+ { ubContents = serverBundle now (title ghcVer) slug plan
73+ , ubAuthToken = decodeUtf8 token
74+ , ubAlias = Just slug
75+ }
76+
77+ uploadDocs UploadDocs
78+ { udServer = def
79+ , udAuthToken = decodeUtf8 token
80+ , udDocs = pbDocDir pb
81+ , udSnapshot = ident
82+ } man >>= print
83+
84+ creds <- readFile "/hackage-creds"
85+ case map encodeUtf8 $ words $ decodeUtf8 creds of
86+ [username, password] ->
87+ uploadHackageDistro plan username password man >>= print
88+ _ -> return ()
Stackage2/PerformBuild.hs+1
@@ -9,6 +9,7 @@ module Stackage2.PerformBuild
9 ( performBuild
9 ( performBuild
10 , PerformBuild (..)
10 , PerformBuild (..)
11 , BuildException (..)
11 , BuildException (..)
12+ , pbDocDir
12 ) where
13 ) where
13
14
14import Stackage2.BuildConstraints
15import Stackage2.BuildConstraints
app/lts-bump.hsnew file+4
@@ -0,0 +1,4 @@
1+import Stackage2.CompleteBuild
2+
3+main :: IO ()
4+main = completeBuild LTS
app/stackage-nightly.hsnew file+4
@@ -0,0 +1,4 @@
1+import Stackage2.CompleteBuild
2+
3+main :: IO ()
4+main = completeBuild Nightly
stackage.cabal+15
@@ -43,6 +43,7 @@ library
43 Stackage2.ServerBundle
43 Stackage2.ServerBundle
44 Stackage2.Upload
44 Stackage2.Upload
45 Stackage2.PerformBuild
45 Stackage2.PerformBuild
46+ Stackage2.CompleteBuild
46 build-depends: base >= 4 && < 5
47 build-depends: base >= 4 && < 5
47 , containers
48 , containers
48 , Cabal >= 1.14
49 , Cabal >= 1.14
@@ -82,6 +83,20 @@ executable stackage
82 , stackage
83 , stackage
83 , containers
84 , containers
84
85
86+executable stackage-nightly
87+ default-language: Haskell2010
88+ hs-source-dirs: app
89+ main-is: stackage-nightly.hs
90+ build-depends: base
91+ , stackage
92+
93+executable lts-bump
94+ default-language: Haskell2010
95+ hs-source-dirs: app
96+ main-is: lts-bump.hs
97+ build-depends: base
98+ , stackage
99+
85test-suite spec
100test-suite spec
86 type: exitcode-stdio-1.0
101 type: exitcode-stdio-1.0
87 default-language: Haskell2010
102 default-language: Haskell2010