propellor/src/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs

58 lines
2.0 KiB
Haskell
Raw Normal View History

2014-04-01 20:58:11 +00:00
module Propellor.Property.SiteSpecific.GitAnnexBuilder where
import Propellor
import qualified Propellor.Property.Apt as Apt
import qualified Propellor.Property.User as User
2014-04-01 22:06:02 +00:00
import qualified Propellor.Property.Cron as Cron
2014-04-01 20:58:11 +00:00
import Propellor.Property.Cron (CronTimes)
builduser :: UserName
builduser = "builder"
2014-04-08 05:42:59 +00:00
homedir :: FilePath
homedir = "/home/builder"
gitbuilderdir :: FilePath
gitbuilderdir = homedir </> "gitbuilder"
2014-04-01 20:58:11 +00:00
builddir :: FilePath
2014-04-08 05:42:59 +00:00
builddir = gitbuilderdir </> "build"
2014-04-01 20:58:11 +00:00
builder :: Architecture -> CronTimes -> Bool -> Property
builder arch crontimes rsyncupload = combineProperties "gitannexbuilder"
2014-04-01 21:08:48 +00:00
[ Apt.stdSourcesList Unstable
, Apt.buildDep ["git-annex"]
2014-04-01 22:15:21 +00:00
, Apt.installed ["git", "rsync", "moreutils", "ca-certificates",
2014-04-03 00:26:38 +00:00
"liblockfile-simple-perl", "cabal-install", "vim", "less"]
2014-04-08 23:31:03 +00:00
, Apt.serviceInstalledRunning "cron"
2014-04-01 20:58:11 +00:00
, User.accountFor builduser
2014-04-08 05:42:59 +00:00
, check (not <$> doesDirectoryExist gitbuilderdir) $ userScriptProperty builduser
[ "git clone git://git.kitenet.net/gitannexbuilder " ++ gitbuilderdir
, "cd " ++ gitbuilderdir
2014-04-02 03:49:15 +00:00
, "git checkout " ++ arch
2014-04-01 20:58:11 +00:00
]
`describe` "gitbuilder setup"
2014-04-08 05:42:59 +00:00
, check (not <$> doesDirectoryExist builddir) $ userScriptProperty builduser
[ "git clone git://git-annex.branchable.com/ " ++ builddir
2014-04-01 21:08:48 +00:00
]
2014-04-08 05:42:59 +00:00
, "git-annex source build deps installed" ==> Apt.buildDepIn builddir
, Cron.niceJob "gitannexbuilder" crontimes builduser gitbuilderdir "git pull ; ./autobuild"
2014-04-01 20:58:11 +00:00
-- The builduser account does not have a password set,
-- instead use the password privdata to hold the rsync server
-- password used to upload the built image.
, property "rsync password" $ do
2014-04-08 05:42:59 +00:00
let f = homedir </> "rsyncpassword"
if rsyncupload
then withPrivData (Password builduser) $ \p -> do
oldp <- liftIO $ catchDefaultIO "" $
readFileStrict f
if p /= oldp
then makeChange $ writeFile f p
else noChange
else do
ifM (liftIO $ doesFileExist f)
( noChange
, makeChange $ writeFile f "no password configured"
)
2014-04-01 20:58:11 +00:00
]