about summary refs log tree commit diff
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;
+}