phase1: add logic to purge trees after maximum lifetime
authorJo-Philipp Wich <jo@mein.io>
Fri, 4 Nov 2016 11:47:31 +0000 (12:47 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 4 Nov 2016 11:47:31 +0000 (12:47 +0100)
Add logic to the phase1 build config to purge persistent build trees if a
configurable maximum age in seconds is reached.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
phase1/config.ini.example
phase1/expire.sh [new file with mode: 0755]
phase1/master.cfg

index 5c109fb4ccad38c633cfe41da0a4939e8e11fd20..288b90aaef00270f619bb4490ba745cacea56a8e 100644 (file)
@@ -3,6 +3,7 @@ title = LEDE Project
 title_url = http://lede-project.org/
 buildbot_url = http://phase1.builds.lede-project.org/
 homedir = .
+expire = 1209600
 
 [status]
 bind = tcp:8010:interface=127.0.0.1
diff --git a/phase1/expire.sh b/phase1/expire.sh
new file mode 100755 (executable)
index 0000000..eeba668
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+max_lifetime="$1"
+
+tree_birth="$(date --reference=tree.timestamp +%s 2>/dev/null)"
+tree_age="$(( $(date +%s) - ${tree_birth:-0} ))"
+
+if [ $max_lifetime -le 0 ]; then
+       echo "No tree expiry set."
+
+elif [ $tree_age -ge $max_lifetime ]; then
+       echo "The build tree reached its maximum lifetime, cleaning up."
+       find . -mindepth 1 -maxdepth 1 -print0 | xargs -r -0 rm -vrf | while read entry do
+               printf "."
+       done
+
+       echo ""
+       echo "Writing new timestamp"
+       date +%s > tree.timestamp
+
+else
+       echo "The build tree is not expired."
+fi
+
+exit 0
index 5eb70f4411a400c544e2ac112f476b35178796ef..1389ae5216c227328f7c1e6c0919dcce6939c136 100644 (file)
@@ -48,6 +48,10 @@ c['mergeRequests'] = True
 ####### CHANGESOURCES
 
 home_dir = os.path.abspath(ini.get("general", "homedir"))
+tree_expire = 0
+
+if ini.has_option("general", "expire"):
+       tree_expire = ini.getint("general", "expire")
 
 repo_url = ini.get("repo", "url")
 
@@ -271,6 +275,21 @@ for target in targets:
                description = "Finding number of CPUs",
                command = ["nproc"]))
 
+       # expire tree if needed
+       if tree_expire > 0:
+               factory.addStep(FileDownload(
+                       mastersrc = "expire.sh",
+                       slavedest = "expire.sh",
+                       mode = 0755))
+
+               factory.addStep(ShellCommand(
+                       name = "expire",
+                       description = "Checking for build tree expiry",
+                       command = ["./expire.sh", tree_expire],
+                       workdir = ".",
+                       haltOnFailure = True,
+                       timeout = 2400))
+
        # check out the source
        factory.addStep(Git(repourl=repo_url, mode='update'))