Here's some more patches to improve things. It adds the following:

  + require TAP::Harness::Archive 0.10 so we can add extra_properties to our TAP
    archives.
  + Collect Architecture, Compiler, DEVEL, Optimize, Perl Version, Platform, SVN
    Revision and Version data into our TAP archives as extra_properties.
  + Add tags to the upload so it's easy to search by architecture, compiler,
    version #, platform and perl version.
  + After the "make smolder_test" target completes successfully, print a URL
    that the user can visit to see the report

If everyone is happy with the way this is going then in the near future I can
remove the existing "make smoke" target and replace it with what "make
smolder_test" does now.

Also, if we want to expand to having smolder tests for other parrot projects
(like rakudo, rakudo spec-tests, pipp, cardinal, etc) we might think about
having just a separate Smolder install at smolder.parrotcode.org (which I can
still host on the same server at my $work).

BTW chromatic: You had asked to be able to see individual TAP streams for test
files in Smolder. I've added that feature and you can see it at:
http://smolder.plusthree.com/app/developer_projects/report_details/1396
Just click on one of the "Ok" or "Failed" boxes and there should be a "TAP" link
that will popup with the raw TAP stream for that file.

-- 
Michael Peters
Plus Three, LP

Index: lib/Parrot/Harness/Smoke.pm
===================================================================
--- lib/Parrot/Harness/Smoke.pm	(revision 29090)
+++ lib/Parrot/Harness/Smoke.pm	(working copy)
@@ -31,6 +31,8 @@
 our @EXPORT_OK = qw(
     generate_html_smoke_report
     send_archive_to_smolder
+    smolder_url
+    collect_test_environment_data
 );
 
 my %SMOLDER_CONFIG = (
@@ -41,41 +43,77 @@
 );
 
 sub send_archive_to_smolder {
+    my %test_env_data = @_;
     eval { require LWP::UserAgent };
     if( $@ ) {
         die "\n" . ('-' x 55) . "\nCould not load LWP::UserAgent."
-            . "\nPlease install it if you want to send TAP archives smolder.\n"
+            . "\nPlease install it if you want to send TAP archives Smolder.\n"
             . ('-' x 55) . "[EMAIL PROTECTED]";
     }
 
-    # get the comments from svn
-    my @lines = grep { $_ =~ /URL|Revision|LastChanged/ } `svn info`;
-    push @lines, `$^X -v | grep -i 'this is perl'`;
-    chomp @lines;
-    my $comments = join("\n", @lines);
+    my $url = $SMOLDER_CONFIG{server}
+      . '/app/developer_projects/process_add_report/'
+      . $SMOLDER_CONFIG{project_id};
+    my $ua = LWP::UserAgent->new();
 
-    my $url = "$SMOLDER_CONFIG{server}/app/developer_projects/process_add_report/$SMOLDER_CONFIG{project_id}";
-    my $ua = LWP::UserAgent->new();
+    # create our tags based off the test environment information
+    my $tags = join(',',
+        (map { $test_env_data{$_} } qw(Architecture Compiler Platform Version)),
+        'Perl ' . $test_env_data{'Perl Version'});
     my $response = $ua->post(
         $url,
         Content_Type => 'form-data',
         Content      => [
-            architecture => $PConfig{cpuarch},
-            platform     => $PConfig{osname},
-            comments     => $comments,
             username     => $SMOLDER_CONFIG{username},
             password     => $SMOLDER_CONFIG{password},
+            tags         => $tags,
             report_file  => ['parrot_test_run.tar.gz'],
         ]
     );
 
-    if ($response->code != 302) {
+    if ($response->code == 302) {
+        print "Test report successfully sent to Smolder at\n"
+          . $SMOLDER_CONFIG{server}
+          . '/app/public_projects/smoke_reports/'
+          . $SMOLDER_CONFIG{project_id} . "\n";
+    } 
+    else {
         die "Could not upload report to Smolder at $SMOLDER_CONFIG{server}"
             . "\nHTTP CODE: " . $response->code . " ("
             .  $response->message . ")\n";
     }
 }
 
+sub collect_test_environment_data {
+    return (
+        'Architecture' => $PConfig{cpuarch},
+        'Compiler'     => _get_compiler_version(),
+        'DEVEL'        => $PConfig{DEVEL},
+        'Optimize'     => ($PConfig{optimize} || 'none'),
+        'Perl Version' => (sprintf('%vd', $^V) . " $PConfig{archname}"),
+        'Platform'     => $PConfig{osname},
+        'SVN Revision' => _get_svn_revision(),
+        'Version'      => $PConfig{VERSION},
+    );
+}
+
+# TODO expand this to handle svk and/or git checkouts too
+sub _get_svn_revision {
+    foreach my $line (`svn info`) {
+        return $1 if $line =~ /^Revision:\s*(\d+)/;
+    }
+    return 'unknown';
+}
+
+# TODO expand this to more than just GCC
+sub _get_compiler_version {
+    my $compiler = $PConfig{cc};
+    if($compiler eq 'gcc') {
+        $compiler .= " $PConfig{gccversion}";
+    }
+    return $compiler;
+}
+
 sub generate_html_smoke_report {
     my $argsref = shift;
     my $html_fn = $argsref->{file};
Index: t/harness
===================================================================
--- t/harness	(revision 29090)
+++ t/harness	(working copy)
@@ -24,6 +24,7 @@
 use Parrot::Harness::Smoke qw(
     generate_html_smoke_report
     send_archive_to_smolder
+    collect_test_environment_data
 );
 
 local @ARGV = @ARGV;
@@ -80,31 +81,37 @@
                 . "\nPlease install it if you want to create TAP archives.\n"
                 . ('-' x 55) . "[EMAIL PROTECTED]";
         }
+        # for extra_properties we need TAP::Harness::Archive >= .10
+        if ($TAP::Harness::Archive::VERSION < .10) {
+            die "\n" . ('-' x 55) . "\nWe need TAP::Harness::Archive >= .10."
+                . "\nPlease install it if you want to create TAP archives.\n"
+                . ('-' x 55) . "\n";
+        }
+
+        my %env_data = collect_test_environment_data();
         $harness = TAP::Harness::Archive->new(
             {
-                verbosity => $ENV{HARNESS_VERBOSE},
-                archive   => 'parrot_test_run.tar.gz',
-                merge     => 1,
+                verbosity        => $ENV{HARNESS_VERBOSE},
+                archive          => 'parrot_test_run.tar.gz',
+                merge            => 1,
+                extra_properties => \%env_data,
             }
         );
+        $harness->runtests(@tests);
+        send_archive_to_smolder(%env_data) if $longopts->{send_to_smolder};
+        
     } else {
         eval { require TAP::Harness };
         if ($@) {
             Test::Harness::runtests(@tests);
             exit;
-        }
-        else {
+        } else {
             $harness = TAP::Harness->new({
                 verbosity => $ENV{HARNESS_VERBOSE}, merge => 0
             });
         }
+        $harness->runtests(@tests);
     }
-
-    $harness->runtests(@tests);
-
-    if ($longopts->{send_to_smolder}) {
-        send_archive_to_smolder();
-    }
 }
 
 =head1 NAME

Reply via email to