[Concept,00/16] pickman: Support monitoring and fixing pipeline failures

Message ID 20260222154303.2851319-1-sjg@u-boot.org
Headers
Series pickman: Support monitoring and fixing pipeline failures |

Message

Simon Glass Feb. 22, 2026, 3:42 p.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

This series contains three groups of improvements to pickman:

Refactoring (patches 1-8): Clean up the codebase by splitting large
functions into smaller helpers, adding test coverage for
prepare_apply(), extracting a run_agent_collect() helper to remove
duplicated agent-streaming code, and switching to
tools.read/write_file() for file I/O.

Subtree handling (patches 9-10): Teach pickman to detect and handle
dts/upstream subtree merges, and process subtree updates even when the
maximum number of MRs is reached.

Pipeline fixes (patches 11-16): Add infrastructure and logic for
automatically diagnosing and fixing CI pipeline failures using a Claude
agent, including GitLab API helpers, database tracking, null-byte
stripping in job logs, and a retry/comment system.


Simon Glass (16):
  pickman: Drop unnecessary f-string prefixes in do_rewind()
  pickman: Refactor do_rewind() into smaller helpers
  pickman: Refactor do_next_merges() into smaller helpers
  pickman: Refactor decompose_mega_merge() into smaller helpers
  pickman: Refactor handle_already_applied() into smaller helpers
  pickman: Add tests for prepare_apply()
  pickman: Refactor the initial part of prepare_apply()
  pickman: Handle dts/upstream subtree merges automatically
  pickman: Create a function to run an agent
  pickman: Use tools for file I/O
  pickman: Use tools for file I/O in tests
  pickman: Add a database table to track pipeline fixes
  pickman: Add pipeline helpers to gitlab_api
  pickman: Support automatically fixing pipeline failures
  pickman: Process subtree updates even at max MRs
  pickman: Strip null bytes from CI job logs

 tools/pickman/README.rst    |   81 ++
 tools/pickman/__main__.py   |    6 +
 tools/pickman/agent.py      |  237 ++++-
 tools/pickman/control.py    |  972 +++++++++++++++-----
 tools/pickman/database.py   |   65 +-
 tools/pickman/ftest.py      | 1661 ++++++++++++++++++++++++++++++++---
 tools/pickman/gitlab_api.py |   78 +-
 7 files changed, 2744 insertions(+), 356 deletions(-)