From 1cbf6d517a1c69d4310ca12b1d6ac860dfabaaad Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 3 Oct 2010 11:40:25 +0200 Subject: update scripts to use dbic; chmod build-failed --- scripts/build-failed.sh | 0 scripts/builder.pl | 113 ++++++++++++++++++++++-------------------------- 2 files changed, 52 insertions(+), 61 deletions(-) mode change 100644 => 100755 scripts/build-failed.sh (limited to 'scripts') diff --git a/scripts/build-failed.sh b/scripts/build-failed.sh old mode 100644 new mode 100755 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; } -- cgit 1.4.1