* hydra: added variant of build input type, 'build output (same system)' to allow better continous integration in one jobset for multiple system. it makes sure that the system of the build that is passed as input for a job has the same system as the job.

[?]
Jan 19, 2010, 2:15 PM
YFPZ46YK4BOI6VH2H3F757UEGEYONURUAEDAYEIBLRY33PLSSO4AC

Dependencies

  • [2] CXRCPDSQ * added support for twitter notification
  • [3] ZDENAYQI * email notification of evaluation errors to project owner (if desired)
  • [4] CS2CB4EQ fix for clone build with build as input
  • [5] ZDNXMJ3J * Typo.
  • [6] 6KCP6ODP * Get the URI for use in notification mails from the Hydra config
  • [7] 3XTHEUMP * Implemented the clone feature.
  • [8] 6BLUKEQ2 * Caching of "path" inputs, and fake a revision number for those.
  • [9] RWIBJ5L4 * Autoflush stdout.
  • [10] 7ZHHVD6Q * Inputs of type "build" must now be declared explicitly.
  • [11] BVOPAMLS
  • [12] TULPZ62Y * Perform builds in parallel.
  • [13] KA45EBF5 * Send email if a build fails.
  • [14] JTRG7RDQ add support for git as jobinput
  • [15] ODNCGFQ5 * Improved the navigation bar: don't include all projects (since that
  • [16] 7YBYT2LQ
  • [17] 67P45PY4
  • [18] S5PV6IIM * Represent jobs explicitly in the DB.
  • [19] WRIU3S5E * UI for cloning builds (not functional yet).
  • [20] POPU2ATH * hydra_scheduler: use eval-jobs.
  • [21] YAPITGB3 * Boolean inputs.
  • [22] JK2QWPH6
  • [23] QUTWJR7P * Include more info in notification emails.
  • [24] OOQ2D3KC * Refactoring: move fetchInput out of hydra_scheduler into a separate
  • [25] 5SHCWE7X * Prevent repeated evaluation of a jobset with the same inputs. This
  • [26] H7CNGK4O * Log evaluation errors etc. in the DB.
  • [27] IK53RV4V
  • [28] UMBR3VG3
  • [29] GWCV3TQV * BuildInputs table: link to dependencies, include store paths.
  • [30] AFTXA575 * $HYDRA_DATA environment variable.
  • [31] X27GNHDV * Basic job info in the database.
  • [32] ABEOQU7T
  • [33] N22GPKYT * Put info about logs / build products in the DB.
  • [34] 7Z3YOKCV * PROCESS -> INCLUDE in most cases. INCLUDE does proper scoping of
  • [35] BOFOHCPK removed debug print, added last 50 lines in failure emails
  • [36] 3E6IP3R3 * Add the name of the jobset to ReleaseSetJobs, otherwise we can't
  • [37] OG7BEM57
  • [*] SAFVRDTK * Put Hydra's dependencies so that they can easily be installed in a
  • [*] 3HZY24CX * Make jobsets viewable under
  • [*] J5UVLXOK * Start of a basic Catalyst web interface.

Change contents

  • edit in deps.nix at line 22
    [2.30]
    [39.497]
    perlPackages.PadWalker
    perlPackages.DataDump
  • replacement in src/lib/Hydra/Controller/Jobset.pm at line 123
    [5.1858][5.101:155]()
    $inputType eq "git" || $inputType eq "build";
    [5.1858]
    [5.1889]
    $inputType eq "git" || $inputType eq "build" || $inputType eq "sysbuild" ;
  • edit in src/lib/Hydra/Helper/AddBuilds.pm at line 216
    [5.10008]
    [5.348]
    }
    sub fetchInputSystemBuild {
    my ($db, $project, $jobset, $name, $type, $value) = @_;
    my ($projectName, $jobsetName, $jobName, $attrs) = parseJobName($value);
    $projectName ||= $project->name;
    $jobsetName ||= $jobset->name;
    my @latestBuilds = $db->resultset('LatestSucceededForJob')
    ->search({}, {bind => [$projectName, $jobsetName, $jobName]});
    my @validBuilds = ();
    foreach my $build (@latestBuilds) {
    if(isValidPath($build->outpath)) {
    push(@validBuilds,$build);
    }
    }
    if (scalar(@validBuilds) == 0) {
    print STDERR "input `", $name, "': no previous build available\n";
    return undef;
    }
    my @inputs = ();
    foreach my $prevBuild (@validBuilds) {
    my $pkgNameRE = "(?:(?:[A-Za-z0-9]|(?:-[^0-9]))+)";
    my $versionRE = "(?:[A-Za-z0-9\.\-]+)";
    my $relName = ($prevBuild->resultInfo->releasename or $prevBuild->nixname);
    my $version = $2 if $relName =~ /^($pkgNameRE)-($versionRE)$/;
    my $input =
    { type => "sysbuild"
    , storePath => $prevBuild->outpath
    , id => $prevBuild->id
    , version => $version
    , system => $prevBuild->system
    };
    push(@inputs, $input);
    }
    return @inputs;
  • edit in src/lib/Hydra/Helper/AddBuilds.pm at line 362
    [5.2591]
    [5.2591]
    }
    elsif ($type eq "sysbuild") {
    return fetchInputSystemBuild($db, $project, $jobset, $name, $type, $value);
  • replacement in src/lib/Hydra/Helper/AddBuilds.pm at line 399
    [5.1790][5.2702:2766]()
    when (["svn", "path", "build", "git", "cvs"]) {
    [5.1790]
    [5.1840]
    when (["svn", "path", "build", "git", "cvs", "sysbuild"]) {
  • edit in src/lib/Hydra/Helper/AddBuilds.pm at line 445
    [5.3393]
    [5.3393]
    my @filteredJobs = ();
    foreach my $job (@{$jobs->{job}}) {
    my $validJob = 1;
    foreach my $arg (@{$job->{arg}}) {
    my $input = $inputInfo->{$arg->{name}}->[$arg->{altnr}] ;
    if($input->{type} eq "sysbuild" && ! ($input->{system} eq $job->{system}) ) {
    $validJob = 0 ;
    }
    }
    if($validJob) {
    push(@filteredJobs, $job);
    }
    }
    $jobs->{job} = \@filteredJobs;
  • replacement in src/root/build.tt at line 258
    [5.1542][5.1542:1583]()
    [% IF input.type == "build" %]
    [5.1542]
    [5.642]
    [% IF input.type == "build" || input.type == "sysbuild" %]
  • replacement in src/root/clone-build.tt at line 37
    [5.1922][4.0:45]()
    [% IF input.type == "build" %]
    [5.1922]
    [4.45]
    [% IF input.type == "build" || input.type == "sysbuild" %]
  • edit in src/root/common.tt at line 14
    [5.3018]
    [5.3018]
    , "sysbuild" = "Build output (same system)"
  • replacement in src/script/hydra_build.pl at line 17
    [5.21][5.0:1](),[5.25][5.0:1](),[2.55][5.0:1](),[5.69][5.0:1](),[5.399][5.0:1](),[5.1070][5.0:1]()
    [2.55]
    [5.2987]
    use Data::Dump qw(dump);
  • replacement in src/script/hydra_build.pl at line 141
    [5.1425][5.1425:1463]()
    , $input->type eq "build"
    [5.1425]
    [5.1463]
    , ( $input->type eq "build" || $input->type eq "sysbuild")
  • replacement in src/script/hydra_scheduler.pl at line 16
    [5.48][5.1392:1393](),[3.417][5.1392:1393](),[5.492][5.1392:1393](),[5.1597][5.1392:1393](),[5.1994][5.1392:1393](),[5.5673][5.1392:1393](),[5.1392][5.1392:1393]()
    [3.417]
    [3.418]
    use Data::Dump qw(dump);
  • replacement in src/script/hydra_scheduler.pl at line 27
    [5.646][5.10947:11047](),[5.11047][5.1340:1411](),[5.1340][5.1340:1411]()
    my $info = fetchInput($db, $project, $jobset, $input->name, $input->type, $alt->value);
    push @{$$inputInfo{$input->name}}, $info if defined $info;
    [5.646]
    [5.722]
    if($input->type eq "sysbuild") {
    my @info = fetchInput($db, $project, $jobset, $input->name, $input->type, $alt->value);
    foreach my $info_el (@info) {
    push @{$$inputInfo{$input->name}}, $info_el if defined $info_el;
    }
    } else {
    my $info = fetchInput($db, $project, $jobset, $input->name, $input->type, $alt->value);
    push @{$$inputInfo{$input->name}}, $info if defined $info;
    }