Project: rakubug

Configuration

configuration not found

Job

#!raku

use Sparky::JobApi;

sub wait-jobs(@q) {

    my @jobs;

    for @q -> $j {

      my $supply = supply {

        while True {

          my %info = $j.info;

          my $status = $j.status;

          %info<status> = $status;

          emit %info;

          done if $status eq "FAIL" or $status eq "OK";

          sleep(1);

        }

      }

      $supply.tap( -> $v {
        push @jobs, $v if $v<status> eq "FAIL" or $v<status> eq "OK";
        # say $v;
      });

    }

    say @jobs.grep({$_<status> eq "OK"}).elems, " jobs finished successfully";
    say @jobs.grep({$_<status> eq "FAIL"}).elems, " jobs failed";
    say @jobs.grep({$_<status> eq "TIMEOUT"}).elems, " jobs timeouted";

}


if (tags()<stage> || "main") eq "main" {
  
    my @jobs;

    say "code: ", tags()<code>;

    # ["2023.12", "2023.11", "2023.10", "2023.08", "2023.06", "2023.05", "2023.04", "2023.02", "2022.12"]

    for <2023.12 2023.11 2023.10 2023.08 2023.06 2023.05 2023.04 2023.02 2022.12> -> $v {

      my $j = Sparky::JobApi.new: :project<rakubug_run>;

      $j.queue({
        description => "rakubug run", 
        tags => %(
          stage => "child",
          code => tags()<code>,
          version => $v,
        ),
        sparrowdo => %(
          docker => "rakubug",
          no_sudo => True,
          image => "melezhik/sparrow:alpine_arm_{$v}"
        ),	
      });

      push @jobs, $j;

    }

    wait-jobs @jobs;

    for @jobs -> $j {
      my $st = $j.get-stash();
      say "=========";
      say "version: ", $st<version>;
      say "output:";
      say "=========";
      say $st<output>;
      say "=========";
    }

} elsif tags()<stage> eq "child" {
   task-run "load code from {tags()<code>}", "curl", %(
    args => [
      %( 
        #'-D' => '-',
        'output' => "{$*CWD}/code.raku"
      ),
      [
       'silent',
       '-f',
       'location'
      ],
      tags()<code>
    ]
   );

   bash "raku -v";

   say "executing code:";
   say "=======================";
   say "code.raku".IO.slurp();
   say "=======================";

   bash "rm -rf output.txt; raku code.raku 2>\&1 | tee output.txt; echo", %( cwd => "{$*CWD}" );

   my $j = Sparky::JobApi.new: :mine;

   # puts a data so that other jobs could read it

   $j.put-stash({ 
     output => "output.txt".IO.slurp,
     version => tags()<version>,
   });

}