diff --git a/contrib/cirrus/logformatter b/contrib/cirrus/logformatter index f97638b6fe..2ab8aa1176 100755 --- a/contrib/cirrus/logformatter +++ b/contrib/cirrus/logformatter @@ -31,6 +31,12 @@ our $CSS = <<'END_CSS'; /* wrap long lines - don't require user to scroll right */ pre { line-break: normal; overflow-wrap: normal; white-space: pre-wrap; } +/* synopsis table at top */ +table.synopsis { border: none; border-collapse: collapse; margin-left: 2em; margin-top: 2ex; } +.synopsis th { font-weight: normal; font-size: 110%; text-align: right; } +.synopsis td { font-weight: bold; font-size: 120%; font-family: monospace; } + +/* test results */ .boring { color: #999; } .timestamp { color: #999; } .log-debug { color: #999; } @@ -171,9 +177,20 @@ window.addEventListener("load", scrollToBottom, false); -
 
 END_HTML
 
+    # Synopsis of this job: show job environment, links to PR and Cirrus
+    print { $out_fh } "

Synopsis

\n
\n", + job_synopsis($test_name), "
\n"; + + # FOR DEBUGGING: dump environment, but in HTML comments to not clutter + print { $out_fh } "\n"; + for my $e (sort keys %ENV) { + my $val = escapeHTML($ENV{$e}); + $val =~ s/--/--/g; # double dash not valid in comments + printf { $out_fh } "\n", $e, $val; + } + # State variables my $previous_timestamp = ''; # timestamp of previous line my $cirrus_task; # Cirrus task number, used for linking @@ -185,6 +202,8 @@ END_HTML my $looks_like_bats; # binary flag: for detecting BATS results my %bats_count; # For summary line: count of pass/fail/skip + print { $out_fh } "
 \n";
+
     # Main loop: read input, one line at a time, and write out reformatted
   LINE:
     while (my $line = ) {
@@ -232,8 +251,9 @@ END_HTML
             my $css;
 
             # Readability: /long/path/to/podman -> podman (hover for full path)
-            $line =~ s{^(#\s+(#|\$)\s+)(\S+/)(podman\S*)\s}
-                      {$1$4 };
+            # Also make it boldface, to make commands stand out
+            $line =~ s{^(#\s+(#|\$)\s+)(\S+/)(podman\S*)(\s.*)}
+                      {$1$4$5};
 
             if    ($line =~ /^ok\s.*\s# skip/) { $css = 'skipped' }
             elsif ($line =~ /^ok\s/)           { $css = 'passed'  }
@@ -470,6 +490,83 @@ sub make_id {
 }
 
 
+###############################################################################
+# BEGIN job_synopsis and related helpers
+
+##################
+#  job_synopsis  #  Job details, links to github/cirrus
+##################
+sub job_synopsis {
+    my $subtest_name = shift;           # e.g. integration_test
+
+    my $s = <<"END_SYNOPSIS";
+
+END_SYNOPSIS
+
+    # PR 1234 - title of the pr
+    my $pr_title = escapeHTML(_env_replace("{CIRRUS_CHANGE_TITLE}"));
+    $s .= _tr("Github PR", sprintf("%s - %s",
+                                   _a("{CIRRUS_PR}", "https://{CIRRUS_REPO_CLONE_HOST}/{CIRRUS_REPO_FULL_NAME}/pull/{CIRRUS_PR}"),
+                                   $pr_title));
+
+    # PR author, if signed-off-by
+    if (my $msg = _env_replace("{CIRRUS_COMMIT_MESSAGE}")) {
+        while ($msg =~ /^Signed-off-by:\s+(\S.*\S)$/gmi) {
+            $s .= _tr("Author", escapeHTML($1));
+        }
+    }
+
+    # eg "test fedora", "special_testing_rootless"
+    my $test_name = _env_replace("{CIRRUS_TASK_NAME}");
+    if (my $rcli = $ENV{RCLI}) {
+        $test_name .= " [remote]" if $rcli eq 'true';
+    }
+    else {
+        $test_name .= " [no RCLI; cannot determine remote/local]";
+    }
+    $s .= _tr("Test name", $test_name);
+
+    # Subtest, e.g. system_test
+    $s .= _tr("Subtest", $subtest_name);
+
+    # Link to further Cirrus results, e.g. other runs.
+    # Build is mostly boring, it's usually TASK that we want to see.
+    $s .= _tr("Cirrus Build ID", "" . _a("{CIRRUS_BUILD_ID}", "https://cirrus-ci.com/build/{CIRRUS_BUILD_ID}") . "");
+    $s .= _tr("Cirrus Task ID", _a("{CIRRUS_TASK_ID}", "https://cirrus-ci.com/task/{CIRRUS_TASK_ID}"));
+
+    # "none", "rootless"
+    $s .= _tr("Special mode", _env_replace("{SPECIALMODE}"));
+
+    $s .= "
\n"; + return $s; +} + + +sub _tr { + my ($th, $td) = @_; + return "$th:$td\n"; +} + +sub _a { + my ($name, $href) = map { _env_replace($_) } @_; + + if ($href =~ /UNDEFINED/) { + return "$name ($href)"; + } + return "$name"; +} + +sub _env_replace { + my $s_in = shift; + + $s_in =~ s[\{(.*?)\}][$ENV{$1} || "[$1 UNDEFINED]"]ge; + + return $s_in; +} + +# END job_synopsis and related helpers +############################################################################### +# BEGIN html-formatting helpers sub escapeHTML { my $s = shift; @@ -492,5 +589,7 @@ sub unescapeHTML { return $s; } +# END html-formatting helpers +############################################################################### 1; diff --git a/contrib/cirrus/logformatter.t b/contrib/cirrus/logformatter.t index 2075bff96a..bd4179b5ec 100755 --- a/contrib/cirrus/logformatter.t +++ b/contrib/cirrus/logformatter.t @@ -96,7 +96,7 @@ ok 4 blah ok 1 hi ok 2 bye # skip no reason not ok 3 fail -# $ podman foo -bar +# $ podman foo -bar # #| FAIL: exit code is 123; expected 321 ok 4 blah
Summary: 2 Passed, 1 Failed, 1 Skipped. Total tests: 4 @@ -147,11 +147,11 @@ $SCRIPT_BASE/integration_test.sh |& ${TIMESTAMP}
 [+0103s] Podman pod restart
          

podman pod restart single empty pod

- /var/tmp/go/src/github.com/containers/libpod/test/e2e/pod_restart_test.go:41 + /var/tmp/go/src/github.com/containers/podman/test/e2e/pod_restart_test.go:41 [BeforeEach] Podman pod restart - /var/tmp/go/src/github.com/containers/libpod/test/e2e/pod_restart_test.go:18 + /var/tmp/go/src/github.com/containers/podman/test/e2e/pod_restart_test.go:18 [It] podman pod restart single empty pod - /var/tmp/go/src/github.com/containers/libpod/test/e2e/pod_restart_test.go:41 + /var/tmp/go/src/github.com/containers/podman/test/e2e/pod_restart_test.go:41 Running: podman Error: no containers in pod 4810be0cfbd42241e349dbe7d50fbc54405cd320a6637c65fd5323f34d64af89 have no dependencies, cannot start pod: no such container output: [AfterEach] Podman pod restart - /var/tmp/go/src/github.com/containers/libpod/test/e2e/pod_restart_test.go:28 + /var/tmp/go/src/github.com/containers/podman/test/e2e/pod_restart_test.go:28 Running: podman