Skip to content

Bug 2086125 - [HACKBOT] Run status surfaced on the bug - #2829

Open
dklawren wants to merge 3 commits into
mozilla:masterfrom
dklawren:2086125
Open

dklawren wants to merge 3 commits into
mozilla:masterfrom
dklawren:2086125

Conversation

@dklawren

@dklawren dklawren commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

Adds a Hackbot module to the bug page that lists the bug's Hackbot runs: agent, status, origin, start time, and a "view run" link into the Hackbot UI. Until now a run gave no sign on the bug until it posted a comment, so nobody could tell whether Hackbot had picked up a needinfo request or was still working on it.

Screenshot

hackbot-runs-crop

Changes

  • New Hackbot extension. The bug page loads the table from GET /rest/hackbot/bug_runs/:bug_id, and BMO forwards that request to the Hackbot API (GET /runs?bug_id=N, Bug 2091030 - Add the ability to filter runs based on bug id in the hackbot API bugbug#7440) with an X-API-Key.
  • Origin is either needinfo or Hackbot UI, shown with the requester's BMO nick when Hackbot reports one. Anything else shows as "Hackbot".
  • Hidden when a bug has no runs, and when Hackbot is unreachable. Failures are logged on the server.
  • Access: editbugs only, and the user must be able to see the bug. Each run's bug_id must match the bug, so an API that ignores the filter can't leak runs from other bugs. Only nicks reach the browser, never emails.
  • Caching: per-bug memcached entry, fresh for 30 s, then revalidated with the ETag via If-None-Match (kept for a day). Failures are cached for 60 s.
  • Config: new "Hackbot" params panel with hackbot_runs_enabled, hackbot_api_url, hackbot_api_key and hackbot_ui_url. Test data turns the feature on.

Tests

  • extensions/Hackbot/t/bmo/bug-runs.t: client, trimming, origin mapping, ETag/304/error caching.
  • qa/t/rest_hackbot_runs.t: login, editbugs and private-bug access, response shape.

Depends on

mozilla/bugbug#7442 (the bug_id filter) being deployed.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The client passes charset-decoded characters to a JSON decoder expecting UTF-8 bytes, causing valid non-ASCII responses to fail parsing, caching the failure, and hiding the runs module.

1 open issue
What changed in this PR

Adds a Hackbot integration to BMO that displays run status on bug pages for authorized editbugs members.

Changes:

  • Adds a permission-checked REST endpoint backed by a cached Hackbot API client.
  • Adds an asynchronously loaded run table with status, origin, start time, and run links.
  • Adds configuration switches, development defaults, and backend and REST tests.
File Description
scripts/​generate_bmo_data.pl Enables Hackbot features in generated development data.
qa/​t/​rest_hackbot_runs.t Tests REST access controls and run responses.
extensions/​Hackbot/​web/​style/​hackbot_runs.css Styles the run table and status badges.
extensions/​Hackbot/​web/​js/​hackbot_runs.js Fetches and renders runs on bug pages.
extensions/​Hackbot/​template/​en/​default/​hook/​bug_modal/​header-end.html.tmpl Loads Hackbot styles and JavaScript conditionally.
extensions/​Hackbot/​template/​en/​default/​hook/​bug_modal/​edit-module.html.tmpl Adds the initially hidden Hackbot module.
extensions/​Hackbot/​template/​en/​default/​hackbot/​table.html.tmpl Defines the run table structure.
extensions/​Hackbot/​template/​en/​default/​admin/​params/​hackbot.html.tmpl Documents integration settings for administrators.
extensions/​Hackbot/​t/​bmo/​bug-runs.t Tests API handling, filtering, requester mapping, and caching.
extensions/​Hackbot/​lib/​Constants.pm Defines access, timeout, cache, and validation constants.
extensions/​Hackbot/​lib/​Config.pm Defines feature switches and connection settings.
extensions/​Hackbot/​lib/​Client.pm Implements Hackbot API requests and conditional fetching.
extensions/​Hackbot/​lib/​BugRuns.pm Caches, filters, and prepares runs for display.
extensions/​Hackbot/​lib/​API/​V1/​Runs.pm Exposes runs with authentication and bug-visibility checks.
extensions/​Hackbot/​Extension.pm Registers settings and enables bug-page integration.
extensions/​Hackbot/​Config.pm Declares the Hackbot extension identity.

Review effort: Balanced

return {ok => 0, status => $response->code, errmsg => $response->status_line};
}

my $data = eval { decode_json($response->decoded_content) };

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants