roll_commenter: Add link to stuck comment

Bug: b/369718402
Change-Id: I537b23394a5d4fd7b7c1339d429e33aab8d5e2aa
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/259272
Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com>
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
Presubmit-Verified: CQ Bot Account <pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/recipes/roll_commenter.expected/no_forward_progress.json b/recipes/roll_commenter.expected/no_forward_progress.json
index abf899c..0e9f73a 100644
--- a/recipes/roll_commenter.expected/no_forward_progress.json
+++ b/recipes/roll_commenter.expected/no_forward_progress.json
@@ -746,7 +746,7 @@
       "-host",
       "https://pigweed-review.googlesource.com",
       "-input",
-      "{\"change_id\": \"1234\", \"input\": {\"message\": \"builder:\\n1 roller failing:\\n\\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\\n\\nIgnored 1 broken roller:\\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)\", \"notify\": \"OWNER_REVIEWERS\", \"tag\": \"autogenerated:project:builder:bbid=8945511751514863184\"}, \"revision_id\": \"current\"}",
+      "{\"change_id\": \"1234\", \"input\": {\"message\": \"[builder](https://cr-buildbucket.appspot.com/build/8945511751514863184): 1 roller failing:\\n\\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\\n\\nIgnored 1 broken roller:\\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)\", \"notify\": \"OWNER_REVIEWERS\", \"tag\": \"autogenerated:project:builder:bbid=8945511751514863184\"}, \"revision_id\": \"current\"}",
       "-output",
       "/path/to/tmp/json"
     ],
@@ -767,14 +767,14 @@
     "timeout": 600,
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@builder:\n1 roller failing:\n\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\n\nIgnored 1 broken roller:\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)@@@",
+      "@@@STEP_SUMMARY_TEXT@[builder](https://cr-buildbucket.appspot.com/build/8945511751514863184): 1 roller failing:\n\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\n\nIgnored 1 broken roller:\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)@@@",
       "@@@STEP_LOG_END@json.output (invalid)@@@",
       "@@@STEP_LOG_LINE@json.output (exception)@Expecting value: line 1 column 1 (char 0)@@@",
       "@@@STEP_LOG_END@json.output (exception)@@@",
       "@@@STEP_LOG_LINE@json.input@{@@@",
       "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"1234\",@@@",
       "@@@STEP_LOG_LINE@json.input@  \"input\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"message\": \"builder:\\n1 roller failing:\\n\\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\\n\\nIgnored 1 broken roller:\\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)\",@@@",
+      "@@@STEP_LOG_LINE@json.input@    \"message\": \"[builder](https://cr-buildbucket.appspot.com/build/8945511751514863184): 1 roller failing:\\n\\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\\n\\nIgnored 1 broken roller:\\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)\",@@@",
       "@@@STEP_LOG_LINE@json.input@    \"notify\": \"OWNER_REVIEWERS\",@@@",
       "@@@STEP_LOG_LINE@json.input@    \"tag\": \"autogenerated:project:builder:bbid=8945511751514863184\"@@@",
       "@@@STEP_LOG_LINE@json.input@  },@@@",
@@ -898,7 +898,7 @@
       "-host",
       "https://pigweed-review.googlesource.com",
       "-input",
-      "{\"change_id\": \"1234\", \"input\": {\"message\": \"builder:\\n1 roller failing:\\n\\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\\n\\nIgnored 1 broken roller:\\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)\", \"notify\": \"OWNER_REVIEWERS\", \"tag\": \"autogenerated:project:builder:bbid=8945511751514863184\"}, \"revision_id\": \"current\"}",
+      "{\"change_id\": \"1234\", \"input\": {\"message\": \"[builder](https://cr-buildbucket.appspot.com/build/8945511751514863184): 1 roller failing:\\n\\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\\n\\nIgnored 1 broken roller:\\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)\", \"notify\": \"OWNER_REVIEWERS\", \"tag\": \"autogenerated:project:builder:bbid=8945511751514863184\"}, \"revision_id\": \"current\"}",
       "-output",
       "/path/to/tmp/json"
     ],
@@ -919,14 +919,14 @@
     "timeout": 600,
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@builder:\n1 roller failing:\n\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\n\nIgnored 1 broken roller:\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)@@@",
+      "@@@STEP_SUMMARY_TEXT@[builder](https://cr-buildbucket.appspot.com/build/8945511751514863184): 1 roller failing:\n\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\n\nIgnored 1 broken roller:\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)@@@",
       "@@@STEP_LOG_END@json.output (invalid)@@@",
       "@@@STEP_LOG_LINE@json.output (exception)@Expecting value: line 1 column 1 (char 0)@@@",
       "@@@STEP_LOG_END@json.output (exception)@@@",
       "@@@STEP_LOG_LINE@json.input@{@@@",
       "@@@STEP_LOG_LINE@json.input@  \"change_id\": \"1234\",@@@",
       "@@@STEP_LOG_LINE@json.input@  \"input\": {@@@",
-      "@@@STEP_LOG_LINE@json.input@    \"message\": \"builder:\\n1 roller failing:\\n\\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\\n\\nIgnored 1 broken roller:\\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)\",@@@",
+      "@@@STEP_LOG_LINE@json.input@    \"message\": \"[builder](https://cr-buildbucket.appspot.com/build/8945511751514863184): 1 roller failing:\\n\\n* [project/roll/foo-roller](https://cr-buildbucket.appspot.com/builder/project/roll/foo-roller)\\n\\nIgnored 1 broken roller:\\n* [project/roll/fail-roller](https://cr-buildbucket.appspot.com/builder/project/roll/fail-roller)\",@@@",
       "@@@STEP_LOG_LINE@json.input@    \"notify\": \"OWNER_REVIEWERS\",@@@",
       "@@@STEP_LOG_LINE@json.input@    \"tag\": \"autogenerated:project:builder:bbid=8945511751514863184\"@@@",
       "@@@STEP_LOG_LINE@json.input@  },@@@",
diff --git a/recipes/roll_commenter.expected/no_forward_progress_dry_run_already_warned_suppress.json b/recipes/roll_commenter.expected/no_forward_progress_dry_run_already_warned_suppress.json
index c9d7f3e..fd50bbc 100644
--- a/recipes/roll_commenter.expected/no_forward_progress_dry_run_already_warned_suppress.json
+++ b/recipes/roll_commenter.expected/no_forward_progress_dry_run_already_warned_suppress.json
@@ -744,7 +744,7 @@
     "name": "c000011.warning",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@builder:\n1 roller failing:\n\n* [88001](https://cr-buildbucket.appspot.com/build/88001)\n\nIgnored 1 broken roller:\n* [88007](https://cr-buildbucket.appspot.com/build/88007)@@@"
+      "@@@STEP_SUMMARY_TEXT@[builder](https://cr-buildbucket.appspot.com/build/8945511751514863184): 1 roller failing:\n\n* [88001](https://cr-buildbucket.appspot.com/build/88001)\n\nIgnored 1 broken roller:\n* [88007](https://cr-buildbucket.appspot.com/build/88007)@@@"
     ]
   },
   {
@@ -880,7 +880,7 @@
     "name": "c000009.warning",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_SUMMARY_TEXT@builder:\n1 roller failing:\n\n* [88001](https://cr-buildbucket.appspot.com/build/88001)\n\nIgnored 1 broken roller:\n* [88007](https://cr-buildbucket.appspot.com/build/88007)@@@"
+      "@@@STEP_SUMMARY_TEXT@[builder](https://cr-buildbucket.appspot.com/build/8945511751514863184): 1 roller failing:\n\n* [88001](https://cr-buildbucket.appspot.com/build/88001)\n\nIgnored 1 broken roller:\n* [88007](https://cr-buildbucket.appspot.com/build/88007)@@@"
     ]
   },
   {
diff --git a/recipes/roll_commenter.py b/recipes/roll_commenter.py
index 3579314..072fc1e 100644
--- a/recipes/roll_commenter.py
+++ b/recipes/roll_commenter.py
@@ -455,7 +455,8 @@
 
     num_failing = len(trailing_failing_rollers)
     comment = [
-        f'{api.buildbucket.build.builder.builder}:',
+        f'[{api.buildbucket.build.builder.builder}]'
+        f'({api.buildbucket.build_url()}): '
         f'{num_failing} roller{"" if num_failing == 1 else "s"} failing:',
         '',
     ]