mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-01-31 16:40:26 +01:00
stackage-nightly executable (lts-bump needs work)
This commit is contained in:
parent
461ed9d568
commit
bff71d5566
88
Stackage2/CompleteBuild.hs
Normal file
88
Stackage2/CompleteBuild.hs
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
{-# LANGUAGE NoImplicitPrelude #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
module Stackage2.CompleteBuild
|
||||||
|
( BuildType (..)
|
||||||
|
, completeBuild
|
||||||
|
) where
|
||||||
|
import Data.Default.Class (def)
|
||||||
|
import Data.Time
|
||||||
|
import Data.Yaml (encodeFile)
|
||||||
|
import Network.HTTP.Client
|
||||||
|
import Stackage2.BuildConstraints
|
||||||
|
import Stackage2.BuildPlan
|
||||||
|
import Stackage2.CheckBuildPlan
|
||||||
|
import Stackage2.PerformBuild
|
||||||
|
import Stackage2.Prelude
|
||||||
|
import Stackage2.ServerBundle
|
||||||
|
import Stackage2.UpdateBuildPlan
|
||||||
|
import Stackage2.Upload
|
||||||
|
import System.IO (BufferMode (LineBuffering), hSetBuffering)
|
||||||
|
|
||||||
|
data BuildType = Nightly | LTS
|
||||||
|
|
||||||
|
data Settings = Settings
|
||||||
|
{ plan :: BuildPlan
|
||||||
|
, planFile :: FilePath
|
||||||
|
, buildDir :: FilePath
|
||||||
|
, title :: Text -> Text -- ^ GHC version -> title
|
||||||
|
, slug :: Text
|
||||||
|
, setArgs :: Text -> UploadBundle -> UploadBundle
|
||||||
|
}
|
||||||
|
|
||||||
|
getSettings :: BuildType -> IO Settings
|
||||||
|
getSettings Nightly = do
|
||||||
|
day <- tshow . utctDay <$> getCurrentTime
|
||||||
|
let slug' = "nightly-" ++ day
|
||||||
|
plan' <- defaultBuildConstraints >>= newBuildPlan
|
||||||
|
return Settings
|
||||||
|
{ planFile = fpFromText ("nightly-" ++ day) <.> "yaml"
|
||||||
|
, buildDir = fpFromText $ "/tmp/stackage-nightly-" ++ day
|
||||||
|
, title = \ghcVer -> concat
|
||||||
|
[ "Stackage Nightly "
|
||||||
|
, day
|
||||||
|
, ", GHC "
|
||||||
|
, ghcVer
|
||||||
|
]
|
||||||
|
, slug = slug'
|
||||||
|
, setArgs = \ghcVer ub -> ub { ubNightly = Just ghcVer }
|
||||||
|
, plan = plan'
|
||||||
|
}
|
||||||
|
|
||||||
|
completeBuild :: BuildType -> IO ()
|
||||||
|
completeBuild buildType = withManager defaultManagerSettings $ \man -> do
|
||||||
|
hSetBuffering stdout LineBuffering
|
||||||
|
|
||||||
|
Settings {..} <- getSettings buildType
|
||||||
|
encodeFile (fpToString planFile) plan
|
||||||
|
checkBuildPlan plan
|
||||||
|
let pb = PerformBuild
|
||||||
|
{ pbPlan = plan
|
||||||
|
, pbInstallDest = buildDir
|
||||||
|
, pbLogDir = buildDir </> "logs"
|
||||||
|
, pbLog = hPut stdout
|
||||||
|
, pbJobs = 8
|
||||||
|
}
|
||||||
|
performBuild pb
|
||||||
|
|
||||||
|
token <- readFile "/auth-token"
|
||||||
|
now <- epochTime
|
||||||
|
let ghcVer = display $ siGhcVersion $ bpSystemInfo plan
|
||||||
|
ident <- flip uploadBundle man $ setArgs ghcVer def
|
||||||
|
{ ubContents = serverBundle now (title ghcVer) slug plan
|
||||||
|
, ubAuthToken = decodeUtf8 token
|
||||||
|
, ubAlias = Just slug
|
||||||
|
}
|
||||||
|
|
||||||
|
uploadDocs UploadDocs
|
||||||
|
{ udServer = def
|
||||||
|
, udAuthToken = decodeUtf8 token
|
||||||
|
, udDocs = pbDocDir pb
|
||||||
|
, udSnapshot = ident
|
||||||
|
} man >>= print
|
||||||
|
|
||||||
|
creds <- readFile "/hackage-creds"
|
||||||
|
case map encodeUtf8 $ words $ decodeUtf8 creds of
|
||||||
|
[username, password] ->
|
||||||
|
uploadHackageDistro plan username password man >>= print
|
||||||
|
_ -> return ()
|
||||||
@ -9,6 +9,7 @@ module Stackage2.PerformBuild
|
|||||||
( performBuild
|
( performBuild
|
||||||
, PerformBuild (..)
|
, PerformBuild (..)
|
||||||
, BuildException (..)
|
, BuildException (..)
|
||||||
|
, pbDocDir
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Stackage2.BuildConstraints
|
import Stackage2.BuildConstraints
|
||||||
|
|||||||
4
app/lts-bump.hs
Normal file
4
app/lts-bump.hs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import Stackage2.CompleteBuild
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = completeBuild LTS
|
||||||
4
app/stackage-nightly.hs
Normal file
4
app/stackage-nightly.hs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import Stackage2.CompleteBuild
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = completeBuild Nightly
|
||||||
@ -43,6 +43,7 @@ library
|
|||||||
Stackage2.ServerBundle
|
Stackage2.ServerBundle
|
||||||
Stackage2.Upload
|
Stackage2.Upload
|
||||||
Stackage2.PerformBuild
|
Stackage2.PerformBuild
|
||||||
|
Stackage2.CompleteBuild
|
||||||
build-depends: base >= 4 && < 5
|
build-depends: base >= 4 && < 5
|
||||||
, containers
|
, containers
|
||||||
, Cabal >= 1.14
|
, Cabal >= 1.14
|
||||||
@ -82,6 +83,20 @@ executable stackage
|
|||||||
, stackage
|
, stackage
|
||||||
, containers
|
, containers
|
||||||
|
|
||||||
|
executable stackage-nightly
|
||||||
|
default-language: Haskell2010
|
||||||
|
hs-source-dirs: app
|
||||||
|
main-is: stackage-nightly.hs
|
||||||
|
build-depends: base
|
||||||
|
, stackage
|
||||||
|
|
||||||
|
executable lts-bump
|
||||||
|
default-language: Haskell2010
|
||||||
|
hs-source-dirs: app
|
||||||
|
main-is: lts-bump.hs
|
||||||
|
build-depends: base
|
||||||
|
, stackage
|
||||||
|
|
||||||
test-suite spec
|
test-suite spec
|
||||||
type: exitcode-stdio-1.0
|
type: exitcode-stdio-1.0
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user