summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Propellor/Property/SiteSpecific/GitAnnexBuilder.hs33
-rw-r--r--config-joey.hs21
2 files changed, 35 insertions, 19 deletions
diff --git a/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs b/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
index f4e13149..149c8e6c 100644
--- a/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
+++ b/Propellor/Property/SiteSpecific/GitAnnexBuilder.hs
@@ -9,8 +9,14 @@ import Propellor.Property.Cron (CronTimes)
builduser :: UserName
builduser = "builder"
+homedir :: FilePath
+homedir = "/home/builder"
+
+gitbuilderdir :: FilePath
+gitbuilderdir = homedir </> "gitbuilder"
+
builddir :: FilePath
-builddir = "gitbuilder"
+builddir = gitbuilderdir </> "build"
builder :: Architecture -> CronTimes -> Bool -> Property
builder arch crontimes rsyncupload = combineProperties "gitannexbuilder"
@@ -20,26 +26,22 @@ builder arch crontimes rsyncupload = combineProperties "gitannexbuilder"
"liblockfile-simple-perl", "cabal-install", "vim", "less"]
, serviceRunning "cron" `requires` Apt.installed ["cron"]
, User.accountFor builduser
- , check (lacksdir builddir) $ userScriptProperty builduser
- [ "git clone git://git.kitenet.net/gitannexbuilder " ++ builddir
- , "cd " ++ builddir
+ , check (not <$> doesDirectoryExist gitbuilderdir) $ userScriptProperty builduser
+ [ "git clone git://git.kitenet.net/gitannexbuilder " ++ gitbuilderdir
+ , "cd " ++ gitbuilderdir
, "git checkout " ++ arch
]
`describe` "gitbuilder setup"
- , check (lacksdir $ builddir </> "build") $ userScriptProperty builduser
- [ "cd " ++ builddir
- , "git clone git://git-annex.branchable.com/ build"
+ , check (not <$> doesDirectoryExist builddir) $ userScriptProperty builduser
+ [ "git clone git://git-annex.branchable.com/ " ++ builddir
]
- , Property "git-annex source build deps installed" $ do
- d <- homedir
- ensureProperty $ Apt.buildDepIn (d </> builddir </> "build")
- , Cron.niceJob "gitannexbuilder" crontimes builduser ("~/" ++ builddir) "git pull ; ./autobuild"
+ , "git-annex source build deps installed" ==> Apt.buildDepIn builddir
+ , Cron.niceJob "gitannexbuilder" crontimes builduser gitbuilderdir "git pull ; ./autobuild"
-- 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"
+ let f = homedir </> "rsyncpassword"
if rsyncupload
then withPrivData (Password builduser) $ \p -> do
oldp <- catchDefaultIO "" $ readFileStrict f
@@ -52,8 +54,3 @@ builder arch crontimes rsyncupload = combineProperties "gitannexbuilder"
, makeChange $ writeFile f "no password configured"
)
]
- where
- homedir = fromMaybe ("/home/" ++ builduser) <$> User.homedir builduser
- lacksdir d = do
- h <- homedir
- not <$> doesDirectoryExist (h </> d)
diff --git a/config-joey.hs b/config-joey.hs
index 0bc948b9..f2cc5e78 100644
--- a/config-joey.hs
+++ b/config-joey.hs
@@ -45,7 +45,8 @@ host hostname@"orca.kitenet.net" = standardSystem Unstable $ props
& Apt.buildDep ["git-annex"]
& Docker.docked container hostname "amd64-git-annex-builder"
& Docker.docked container hostname "i386-git-annex-builder"
- -- ! Docker.docked container hostname "armel-git-annex-builder"
+ & Docker.docked container hostname "armel-git-annex-builder-companion"
+ & Docker.docked container hostname "armel-git-annex-builder"
& Docker.garbageCollected
-- My laptop
host _hostname@"darkstar.kitenet.net" = Just $ props
@@ -67,11 +68,29 @@ container _host name
& serviceRunning "apache2"
`requires` Apt.installed ["apache2"]
]
+
+ -- armel builder has a companion container that run amd64 and
+ -- runs the build first to get TH splices. They share a home
+ -- directory, and need to have the same versions of all haskell
+ -- libraries installed.
+ | name == "armel-git-annex-builder-companion" = Just $ Docker.containerFrom
+ (image $ System (Debian Unstable) "amd64")
+ [ Docker.volume GitAnnexBuilder.homedir
+ ]
+ | name == "armel-git-annex-builder" = Just $ Docker.containerFrom
+ (image $ System (Debian Unstable) "armel")
+ [ Docker.link (name ++ "-companion") "companion"
+ , Docker.volumes_from (name ++ "-companion")
+ , Docker.inside $ props
+-- & GitAnnexBuilder.builder "armel" "15 * * * *" True
+ ]
+
| "-git-annex-builder" `isSuffixOf` name =
let arch = takeWhile (/= '-') name
in Just $ Docker.containerFrom
(image $ System (Debian Unstable) arch)
[ Docker.inside $ props & GitAnnexBuilder.builder arch "15 * * * *" True ]
+
| otherwise = Nothing
-- | Docker images I prefer to use.