Upkeep runs the whole triage loop from your terminal: every open merge request across every module, checked in an isolated environment, reviewed in a real browser, merged one deliberate approval at a time.
composer global require owenbush/upkeep
upkeep dashboard
Every open MR across every registered module, in one table: CI status, local check results, the linked drupal.org issue state, and the fast-lane gate verdict. Cached so it returns instantly; --refresh when you want fresh data.
upkeep check entity_clone 142 --version=11
Provisions a fully isolated environment (ddev + ddev-drupal-contrib), applies the MR, then runs PHPUnit, PHPStan, PHPCS, install and smoke checks. Results are cached; the exit code is a 0/1/2 contract you can script against.
upkeep review entity_clone 142
Applies the MR to a running site and hands back a browser URL with a one-time login. Green checks are not the same as looking at the thing.
upkeep issue entity_clone 142
Shows the linked drupal.org issue and opens it in the browser so you can set RTBC, needs work, or fixed without hunting for the node.
upkeep merge --fast-lane
Bot MRs that cleared every gate: one prompt, one approval, one merge. There is no batch mode, deliberately — merges stay human-approved to comply with Drupal Association policy.
A fixture is a gzipped, sanitised SQL dump — tests/fixtures/smoke.sql.gz — that captures a database state worth testing against: configured entities, test users, sample content. Capture it once, commit it, and every check from then on runs against the site your module actually lives in.
ddev upkeep-fixture-create smoke
--fixture=smoke
When your module can’t be meaningfully exercised against a bare Drupal install. If it manages vocabulary terms, you need terms. If it configures form displays, you need content types with fields. The fixture captures that setup once instead of every time.
Gzipped SQL, sanitised, lean, living in the module repo at tests/fixtures/. Upkeep promotes this for all contrib modules, whether or not they use Upkeep — anyone can load one with or without the add-on.
composer global require owenbush/upkeep
~/.config/upkeep/drupal-pat
upkeep init ~/my-cockpit
upkeep dashboard and you’re in.
dashboardAll open MRs with CI, local check, issue status and fast-lane gatecheckFull isolated check flow for one MR — PHPUnit, PHPStan, PHPCS, install, smokereviewApply an MR to a running site and get a browser URLissueShow and open the linked drupal.org issuemerge --fast-laneHuman-approved merge of gate-passing MRs, one at a timeexecRun a command inside a module’s environmentnotesDraft release notes from MRs merged since the last tagstatus / pruneDisk inventory and cleanup