summaryrefslogtreecommitdiff
path: root/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
diff options
context:
space:
mode:
authorJoey Hess2014-04-01 16:58:11 -0400
committerJoey Hess2014-04-01 16:58:11 -0400
commite6d24b49b87de312776bee71a2a6f009f7f397a9 (patch)
treeceba3045f23ee1d3cf36bfe8e8ffa9cb090b9e54 /Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
parent6a82cdc41c89cc249da4d941a32920ebfd14cb92 (diff)
various improvements
Diffstat (limited to 'Propellor/Property/SiteSpecific/GitAnnexBuilder.hs')
-rw-r--r--Propellor/Property/SiteSpecific/GitAnnexBuilder.hs45
1 files changed, 45 insertions, 0 deletions
diff --git a/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
new file mode 100644
index 00000000..6c0ece40
--- /dev/null
+++ b/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
@@ -0,0 +1,45 @@
+module Propellor.Property.SiteSpecific.GitAnnexBuilder where
+
+import Propellor
+import qualified Propellor.Property.Apt as Apt
+import qualified Propellor.Property.User as User
+import Propellor.Property.Cron (CronTimes)
+
+type Arch = String
+
+builduser :: UserName
+builduser = "builder"
+
+builddir :: FilePath
+builddir = "gitbuilder"
+
+builder :: Arch -> CronTimes -> Property
+builder arch crontimes = combineProperties
+ [ Apt.buildDep ["git-annex"]
+ , Apt.installed ["git", "rsync", "liblockfile-simple-perl"]
+ , serviceRunning "cron" `requires` Apt.installed ["cron"]
+ , User.accountFor builduser
+ , check (not <$> hasbuilddir) $ userScriptProperty builduser
+ [ "cabal update"
+ , "git clone https://github.com/joeyh/gitbuilder/"
+ , "cd gitbuilder && git checkout " ++ arch
+ , "echo '"++crontimes++" cd gitbuilder/autobuild' | crontab -"
+ ]
+ `describe` "gitbuilder setup"
+ -- 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
+ d <- homedir
+ let f = d </> "rsyncpassword"
+ withPrivData (Password builduser) $ \p -> do
+ oldp <- catchDefaultIO "" $ readFileStrict f
+ if p /= oldp
+ then makeChange $ writeFile f p
+ else noChange
+ ]
+ where
+ homedir = fromMaybe ("/home/" ++ builduser) <$> User.homedir builduser
+ hasbuilddir = do
+ d <- homedir
+ doesDirectoryExist (d </> builddir)