summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-x[-rw-r--r--]scripts/build-failed.sh0
-rw-r--r--scripts/builder.pl113
2 files changed, 52 insertions, 61 deletions
diff --git a/scripts/build-failed.sh b/scripts/build-failed.sh
index bddf4d0..bddf4d0 100644..100755
--- a/scripts/build-failed.sh
+++ b/scripts/build-failed.sh
diff --git a/scripts/builder.pl b/scripts/builder.pl
index e8fa87d..646037a 100644
--- a/scripts/builder.pl
+++ b/scripts/builder.pl
@@ -3,87 +3,78 @@
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;
+use jitterbug::Schema;
$|++;
-my $conf = LoadFile('config.yml');
-my $redis = Redis->new( server => $conf->{redis} );
-my $key = join( ':', 'jitterbug', 'tasks' );
+my $conf = LoadFile('config.yml');
+my $dbix_conf = $conf->{plugins}->{DBIC}->{schema};
+my $schema =
+ jitterbug::Schema->connect( $dbix_conf->{dsn}, $dbix_conf->{user},
+ $dbix_conf->{pass} );
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 $task = $schema->resultset('Task')->search()->single();
- my $report_path =
- File::Spec->catdir( $conf->{jitterbug}->{reports}->{dir},
- $project, $commit );
-
- my $build_dir =
- File::Spec->catdir( $conf->{jitterbug}->{build}->{dir}, $project );
+ unless ($task) {
+ sleep 5;
+ next;
+ }
- my $r = Git::Repository->create( clone => $repo => $build_dir );
- $r->run( 'checkout', $commit );
+ my $desc = JSON::decode_json($task->commit->content);
+ $desc->{build}->{start_time} = time();
- my $builder = $conf->{jitterbug}->{build_process}->{builder};
- my $res = `$builder $build_dir $report_path`;
+ my $report_path = File::Spec->catdir( $conf->{jitterbug}->{reports}->{dir},
+ $task->project->name, $task->commit->sha256 );
+ my $build_dir = File::Spec->catdir( $conf->{jitterbug}->{build}->{dir},
+ $task->project->name );
- rmtree($build_dir);
+ my $repo = $task->project->url . '.git';
+ my $r = Git::Repository->create( clone => $repo => $build_dir );
+ $r->run( 'checkout', $task->commit->sha256 );
- $redis->del($task_key);
+ my $builder = $conf->{jitterbug}->{build_process}->{builder};
+ my $res = `$builder $build_dir $report_path`;
- my $build = {
- project => $project,
- repo => $repo,
- commit => $commit,
- time => time(),
- %$desc,
- };
+ rmtree($build_dir);
- my @versions = glob( $report_path . '/*' );
- foreach my $version (@versions) {
- open my $fh, '<', $version;
- my @lines = <$fh>;
- my $result = pop @lines;
- while ( $result !~ /^Result/ ) {
- $result = pop @lines;
- }
- chomp $result;
- $result =~ s/Result:\s//;
- my ( $name, ) = basename($version);
- $name =~ s/\.txt//;
- if ( $result !~ /PASS/ ) {
+ $desc->{build}->{end_time} = time();
- # mail author of the commit
- my $message = $desc->{message};
- my $commiter = $desc->{author}->{email};
- my $output = "Build failed";
- my $sha = $desc->{commit};
- my $on_failure =
- $conf->{jitterbug}->{build_process}->{on_failure};
- `$on_failure $commiter $message $output $sha`;
- }
- $build->{version}->{$name} = $result;
- close $fh;
+ my @versions = glob( $report_path . '/*' );
+ foreach my $version (@versions) {
+ open my $fh, '<', $version;
+ my ($result, $lines);
+ while (<$fh>){
+ $lines .= $_;
}
-
- 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";
+ ($result) = $lines =~ /^Result:\s(.*)$/;
+ my ( $name, ) = basename($version);
+ $name =~ s/\.txt//;
+ if ( !$result || ($result && $result !~ /PASS/ )) {
+ # mail author of the commit
+ $result = "FAIL";
+ my $message = $desc->{message};
+ my $commiter = $desc->{author}->{email};
+ my $output = "Build failed";
+ my $sha = $desc->{id};
+ my $on_failure =
+ $conf->{jitterbug}->{build_process}->{on_failure};
+ `$on_failure $commiter $message $output $sha`;
+ }
+ $desc->{build}->{version}->{$name} = $result;
+ close $fh;
}
+
+ $task->commit->update({
+ content => JSON::encode_json($desc),
+ });
+ $task->delete();
+ warn "done\n";
sleep 5;
}