diff options
Diffstat (limited to 'scripts/builder.pl')
-rw-r--r-- | scripts/builder.pl | 74 |
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; +} |