summaryrefslogtreecommitdiff
path: root/scripts/builder.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/builder.pl')
-rw-r--r--scripts/builder.pl74
1 files changed, 74 insertions, 0 deletions
diff --git a/scripts/builder.pl b/scripts/builder.pl
new file mode 100644
index 0000000..d65ace8
--- /dev/null
+++ b/scripts/builder.pl
@@ -0,0 +1,74 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use Redis;
+use JSON;
+use YAML qw/LoadFile Dump/;
+use File::Spec;
+use File::Path qw/rmtree/;
+use File::Basename;
+use Git::Repository;
+
+$|++;
+
+my $conf = LoadFile('config.yml');
+my $redis = Redis->new(server => $conf->{redis});
+my $key = join(':', 'jitterbug', 'tasks');
+
+while (1) {
+ my $task_key = $redis->spop($key);
+ if ($task_key) {
+ my $task = $redis->get($task_key);
+ my $desc = JSON::decode_json($task);
+ my $repo = $desc->{repo} . '.git';
+ my $commit = delete $desc->{id};
+ my $project = delete $desc->{project};
+
+ my $report_path =
+ File::Spec->catdir( $conf->{jitterbug}->{reports}->{dir},
+ $project, $commit );
+
+ my $build_dir =
+ File::Spec->catdir( $conf->{jitterbug}->{build}->{dir}, $project );
+
+ # my $r = Git::Repository->create( clone => $repo => $build_dir );
+ # $r->run('checkout', $commit);
+
+ # my $res = `./scripts/capsule.sh $build_dir $report_path`;
+
+ # rmtree($build_dir);
+
+ $redis->del($task_key);
+
+ my $build = {
+ project => $project,
+ repo => $repo,
+ commit => $commit,
+ status => 1,
+ time => time(),
+ %$desc,
+ };
+
+ my @versions = glob($report_path.'/*');
+ foreach my $version (@versions) {
+ open my $fh, '<', $version;
+ my @lines = <$fh>;
+ my $result = pop @lines;
+ chomp $result;
+ $result =~ s/Result:\s//;
+ my ($name, ) = basename($version);
+ $name =~ s/\.txt//;
+ $build->{version}->{$name} = $result;
+ }
+
+ my $build_key = join( ':', 'jitterbug', 'build', $commit );
+ $redis->set( $build_key, JSON::encode_json($build) );
+
+ my $project_build = join( ':', 'jitterbug', 'builds', $project );
+ $redis->sadd( $project_build, $build_key );
+ warn "done, next\n";
+ }
+ sleep 5;
+}