Add better link to results feed for this builder's configurations

Replace old link with broken anchor to commit.

Change-Id: I72cb0379f8dc96c9a60e7548dc8160fbfe22cd8f
Reviewed-on: https://dart-review.googlesource.com/c/recipes/+/142241
Reviewed-by: Karl Klose <karlklose@google.com>
diff --git a/README.recipes.md b/README.recipes.md
index e2ec503..063d5a1 100644
--- a/README.recipes.md
+++ b/README.recipes.md
@@ -60,11 +60,11 @@
 
 Returns the path to the checked-in SDK dart executable.
 
-&mdash; **def [delete\_debug\_log](/recipe_modules/dart/api.py#565)(self):**
+&mdash; **def [delete\_debug\_log](/recipe_modules/dart/api.py#573)(self):**
 
 Deletes the debug log file
 
-&mdash; **def [download\_browser](/recipe_modules/dart/api.py#836)(self, runtime, version):**
+&mdash; **def [download\_browser](/recipe_modules/dart/api.py#844)(self, runtime, version):**
 
 &mdash; **def [download\_parent\_isolate](/recipe_modules/dart/api.py#155)(self):**
 
@@ -76,7 +76,7 @@
 
 Kills leftover tasks from previous runs or steps.
 
-&mdash; **def [read\_debug\_log](/recipe_modules/dart/api.py#553)(self):**
+&mdash; **def [read\_debug\_log](/recipe_modules/dart/api.py#561)(self):**
 
 Reads the debug log file
 
@@ -85,7 +85,7 @@
 Runs test.py in the given isolate, sharded over several swarming tasks.
 Returns the created tasks, which can be collected with collect_all().
 
-&mdash; **def [test](/recipe_modules/dart/api.py#571)(self, test_data):**
+&mdash; **def [test](/recipe_modules/dart/api.py#579)(self, test_data):**
 
 Reads the test-matrix.json file in checkout and runs each step listed
 in the file.
diff --git a/recipe_modules/dart/api.py b/recipe_modules/dart/api.py
index ba7f65c..c392f9b 100644
--- a/recipe_modules/dart/api.py
+++ b/recipe_modules/dart/api.py
@@ -538,8 +538,7 @@
         patchset = self.commit_id().replace('refs/changes/', '')
         log_url = 'https://dart-ci.firebaseapp.com/cl/%s' % patchset
       else:
-        log_url = (
-            'https://dart-ci.firebaseapp.com/#commit=%s' % self.commit_id())
+        log_url = self._results_feed_url(results_str)
       self.m.step.active_result.presentation.links['Test Results'] = log_url
       doc_url = 'https://goto.google.com/dart-status-file-free-workflow'
       self.m.step.active_result.presentation.links['Documentation'] = doc_url
@@ -550,6 +549,15 @@
       self.m.step.active_result.presentation.logs['results.json'] = [
           results_str]
 
+  def _results_feed_url(self, results_str):
+    configurations = {
+        json.loads(line)['configuration']
+        for line in (results_str or '').splitlines()
+    }
+    results_feed_url = 'https://dart-ci.firebaseapp.com/'
+    return '%s#showLatestFailures=true&configurations=%s' % (
+        results_feed_url, ','.join(configurations))
+
   def read_debug_log(self):
     """Reads the debug log file"""
     if self.m.platform.name == 'win':
diff --git a/recipe_modules/dart/examples/example.expected/analyzer-linux-release.json b/recipe_modules/dart/examples/example.expected/analyzer-linux-release.json
index ee33d91..7ca7a09 100644
--- a/recipe_modules/dart/examples/example.expected/analyzer-linux-release.json
+++ b/recipe_modules/dart/examples/example.expected/analyzer-linux-release.json
@@ -2659,7 +2659,7 @@
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t01\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t01\",\"time_ms\":451,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t02\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t02\",\"time_ms\":496,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_END@results.json@@@",
-      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#commit=3456abce78ef@@@",
+      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#showLatestFailures=true&configurations=dartk-linux-product-x64@@@",
       "@@@STEP_LINK@Documentation@https://goto.google.com/dart-status-file-free-workflow@@@"
     ]
   },
diff --git a/recipe_modules/dart/examples/example.expected/basic-mac.json b/recipe_modules/dart/examples/example.expected/basic-mac.json
index fe9446c..a722468 100644
--- a/recipe_modules/dart/examples/example.expected/basic-mac.json
+++ b/recipe_modules/dart/examples/example.expected/basic-mac.json
@@ -1728,7 +1728,7 @@
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t01\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t01\",\"time_ms\":451,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t02\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t02\",\"time_ms\":496,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_END@results.json@@@",
-      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#commit=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@@@",
+      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#showLatestFailures=true&configurations=dartk-linux-product-x64@@@",
       "@@@STEP_LINK@Documentation@https://goto.google.com/dart-status-file-free-workflow@@@"
     ]
   },
diff --git a/recipe_modules/dart/examples/example.expected/example-android.json b/recipe_modules/dart/examples/example.expected/example-android.json
index 65cdbca..506200a 100644
--- a/recipe_modules/dart/examples/example.expected/example-android.json
+++ b/recipe_modules/dart/examples/example.expected/example-android.json
@@ -1581,7 +1581,7 @@
       "@@@STEP_LOG_END@raw_io.output_text@@@",
       "@@@STEP_LOG_LINE@results.json@@@@",
       "@@@STEP_LOG_END@results.json@@@",
-      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#commit=2d72510e447ab60a9728aeea2362d8be2cbd7789@@@",
+      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#showLatestFailures=true&configurations=@@@",
       "@@@STEP_LINK@Documentation@https://goto.google.com/dart-status-file-free-workflow@@@"
     ]
   },
diff --git a/recipe_modules/dart/examples/example.expected/failed-tests.json b/recipe_modules/dart/examples/example.expected/failed-tests.json
index 5a55c20..bca4602 100644
--- a/recipe_modules/dart/examples/example.expected/failed-tests.json
+++ b/recipe_modules/dart/examples/example.expected/failed-tests.json
@@ -16,7 +16,7 @@
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t01\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t01\",\"time_ms\":451,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t02\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t02\",\"time_ms\":496,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_END@results.json@@@",
-      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#commit=3456abce78ef@@@",
+      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#showLatestFailures=true&configurations=dartk-linux-product-x64@@@",
       "@@@STEP_LINK@Documentation@https://goto.google.com/dart-status-file-free-workflow@@@",
       "@@@STEP_FAILURE@@@"
     ]
diff --git a/recipe_modules/dart/examples/example.expected/failed-to-get-test-results.json b/recipe_modules/dart/examples/example.expected/failed-to-get-test-results.json
index 7998781..04fb770 100644
--- a/recipe_modules/dart/examples/example.expected/failed-to-get-test-results.json
+++ b/recipe_modules/dart/examples/example.expected/failed-to-get-test-results.json
@@ -16,7 +16,7 @@
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t01\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t01\",\"time_ms\":451,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t02\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t02\",\"time_ms\":496,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_END@results.json@@@",
-      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#commit=3456abce78ef@@@",
+      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#showLatestFailures=true&configurations=dartk-linux-product-x64@@@",
       "@@@STEP_LINK@Documentation@https://goto.google.com/dart-status-file-free-workflow@@@",
       "@@@STEP_EXCEPTION@@@"
     ]
diff --git a/recipe_modules/dart/examples/example.expected/vm-win.json b/recipe_modules/dart/examples/example.expected/vm-win.json
index 6cf0947..b43edfb 100644
--- a/recipe_modules/dart/examples/example.expected/vm-win.json
+++ b/recipe_modules/dart/examples/example.expected/vm-win.json
@@ -2381,7 +2381,7 @@
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t01\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t01\",\"time_ms\":451,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_LINE@results.json@{\"name\":\"co19_2/Language/Classes/Abstract_Instance_Members/inherited_t02\",\"configuration\":\"dartk-linux-product-x64\",\"suite\":\"co19_2\",\"test_name\":\"Language/Classes/Abstract_Instance_Members/inherited_t02\",\"time_ms\":496,\"result\":\"CompileTimeError\",\"expected\":\"CompileTimeError\",\"matches\":true,\"commit_time\":1551185312,\"commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"build_number\":\"2404\",\"builder_name\":\"vm-kernel-linux-product-x64\",\"bot_name\":\"trusty-dart-68765ebb-us-central1-b-2ls0\",\"flaky\":false,\"previous_flaky\":false,\"previous_result\":\"CompileTimeError\",\"previous_commit_hash\":\"f0042a32250a8a6193e6d07e2b6508b13f43c864\",\"previous_commit_time\":1551185312,\"previous_build_number\":2403,\"changed\":false}@@@",
       "@@@STEP_LOG_END@results.json@@@",
-      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#commit=3456abce78ef@@@",
+      "@@@STEP_LINK@Test Results@https://dart-ci.firebaseapp.com/#showLatestFailures=true&configurations=dartk-linux-product-x64@@@",
       "@@@STEP_LINK@Documentation@https://goto.google.com/dart-status-file-free-workflow@@@"
     ]
   },