commit 073dfa5f7402b54cfe7772d71a1c931552908463
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Mon Dec 16 20:52:54 2019 +0100
Bug 25101: Add the prune-old-builds script
Previously we were using the prune-old-builds script which was located
in the testsuite repository in tools/prune-old-builds, as a git submodule.
As this script is not used anywhere other than here, it doesn't make
much sense to keep it as a separate git submodule. To simplify
modification of this script, we move it here.
---
.../roles/tbb-nightly-build/files/prune-old-builds | 74 ++++++++++++++++++++++
.../ansible/roles/tbb-nightly-build/tasks/main.yml | 7 ++
.../tbb-nightly-build/templates/start-tbb-nightly | 2 +-
3 files changed, 82 insertions(+), 1 deletion(-)
diff --git a/tools/ansible/roles/tbb-nightly-build/files/prune-old-builds b/tools/ansible/roles/tbb-nightly-build/files/prune-old-builds
new file mode 100755
index 0000000..5d54229
--- /dev/null
+++ b/tools/ansible/roles/tbb-nightly-build/files/prune-old-builds
@@ -0,0 +1,74 @@
+#!/usr/bin/perl -w
+use strict;
+use Getopt::Long;
+use DateTime;
+use DateTime::Duration;
+use File::Path qw(remove_tree);
+
+my %options = (
+ days => 6,
+ weeks => 3,
+ months => 3,
+ prefix => 'tbb-nightly-',
+);
+
+sub keep_builds {
+ my %res;
+
+ my $day = DateTime::Duration->new(days => 1);
+ my $week = DateTime::Duration->new(weeks => 1);
+ my $month = DateTime::Duration->new(months => 1);
+
+ my $n = $options{days};
+ my $dt = DateTime->now;
+ while ($n) {
+ $res{ $options{prefix} . $dt->ymd } = 1;
+ $dt = $dt - $day;
+ $n--;
+ }
+
+ my $w = $options{weeks};
+ while ($dt->day_of_week != 1) {
+ $dt = $dt - $day;
+ }
+ while ($w) {
+ $res{ $options{prefix} . $dt->ymd } = 1;
+ $dt = $dt - $week;
+ $w--;
+ }
+
+ my $m = $options{months};
+ $dt = DateTime->now;
+ while ($dt->day != 1) {
+ $dt = $dt - $day;
+ }
+ while ($m) {
+ $res{ $options{prefix} . $dt->ymd } = 1;
+ $dt = $dt - $month;
+ $m--;
+ }
+
+ return \%res;
+}
+
+sub clean_directory {
+ my ($directory) = @_;
+ my $k = keep_builds;
+ chdir $directory || die "Error entering $directory";
+ foreach my $file (glob "$options{prefix}*") {
+ next unless $file =~ m/^$options{prefix}\d{4}-\d{2}-\d{2}$/;
+ next if $k->{$file};
+ if ($options{'dry-run'}) {
+ print "Would remove $file\n";
+ } else {
+ remove_tree($file);
+ }
+ }
+}
+
+my @opts = qw(days=i weeks=i months=i prefix=s dry-run!);
+Getopt::Long::GetOptions(\%options, @opts);
+die "Missing argument: directory to clean" unless @ARGV;
+foreach my $dir (@ARGV) {
+ clean_directory($dir);
+}
diff --git a/tools/ansible/roles/tbb-nightly-build/tasks/main.yml b/tools/ansible/roles/tbb-nightly-build/tasks/main.yml
index 64d31a9..2c795b8 100644
--- a/tools/ansible/roles/tbb-nightly-build/tasks/main.yml
+++ b/tools/ansible/roles/tbb-nightly-build/tasks/main.yml
@@ -39,6 +39,13 @@
mode: 0644
owner: "{{ nightly_build_user }}"
+- name: prune-old-builds
+ copy:
+ src: prune-old-builds
+ dest: "/home/{{ nightly_build_user }}/prune-old-builds"
+ mode: 0755
+ owner: "{{ nightly_build_user }}"
+
- name: add start-tbb-nightly script
template:
src: start-tbb-nightly
diff --git a/tools/ansible/roles/tbb-nightly-build/templates/start-tbb-nightly b/tools/ansible/roles/tbb-nightly-build/templates/start-tbb-nightly
index 3c1847d..c93bc94 100644
--- a/tools/ansible/roles/tbb-nightly-build/templates/start-tbb-nightly
+++ b/tools/ansible/roles/tbb-nightly-build/templates/start-tbb-nightly
@@ -2,4 +2,4 @@
cd {{ testsuite_dir }}
export RBM_NO_DEBUG=1
./tbb-testsuite --config=tbb-nightly "$@"
-./tools/prune-old-builds/prune-old-builds --prefix '' --days {{ nightly_build_keep_builds }} ./tor-browser-builds
+/home/{{ nightly_build_user }}/prune-old-builds --prefix '' --days {{ nightly_build_keep_builds }} ./tor-browser-builds