Search 1.9 billion lines of Odoo code on GitHub

runbot_merge

Author:
License: LGPL-3
Branch: 15.0-runbot-pip-no-warn-moc
Repository: brain-tec/runbot
Dependencies: base, contacts, and website
Languages: JavaScript (42, 0.5%), Markdown (53, 0.6%), Python (7713, 84.0%), Sass (102, 1.1%), XML (1103, 12.0%), and reStructuredText (173, 1.9%)
Other branches: 11.0, 11.0-f-runbot11-moc, 11.0-psrunbot, 13.0, 13.0-add-branch-latest-builds-xdo, 13.0-avoid-hooktime-update-moc, 13.0-batch-dependant-trigger-xdo, 13.0-better-base-computation-xdo, 13.0-better-docker-tree-moc, 13.0-better-local-gc-moc, 13.0-black-nim, 13.0-branch-group-moc, 13.0-bump-postgresql-client-moc, 13.0-bunch-of-improvements-xmo, 13.0-bunch-of-imps-xdo, 13.0-choose-chrome-source-moc, 13.0-cleanup-hook-xdo, 13.0-commit-export-xdo, 13.0-config-datata-db-name-xdo, 13.0-data-and-views-cleanup-xdo, 13.0-data-tags-support-xdo, 13.0-default-docker-focal-moc, 13.0-default-docker-project-moc, 13.0-dict-fields-widget-xdo, 13.0-do-upgrade-xdo, 13.0-docker-file-cols-xdo, 13.0-docker-lib-moc, 13.0-docker-run-outside-step-xdo, 13.0-draft-pr-xdo, 13.0-dynamic-multi-build-xdo, 13.0-empty-trigger-config-moc, 13.0-error-manager-moc, 13.0-feedback-improvement-xmo, 13.0-fix-batch-ref-xdo, 13.0-fix-build-schedule-order-xdo, 13.0-fix-chart-xdo, 13.0-fix-concurrency, 13.0-fix-connect-links-moc, 13.0-fix-coverage-links-xdo, 13.0-fix-error-frontend-moc, 13.0-fix-git-archive-faiure-moc, 13.0-fix-log-list-xdo, 13.0-fix-log-url-moc, 13.0-fix-markdown-code-xdo, 13.0-fix-missing-keys-stats-xdo, 13.0-fix-run-xdo, 13.0-fix-stats-missing-chart-xdo, 13.0-fix-status-xdo, 13.0-fix-team-errors-moc, 13.0-fix-to-upgrade, 13.0-fix-warning-singleton-xdo, 13.0-fp-skipci-xmo, 13.0-fw-bot-nicer-message-xdo, 13.0-fw-freeze-xmo, 13.0-gitarchive-failure-moc, 13.0-github-labels-moc, 13.0-githubloginifreviewer-dle, 13.0-group-tweaks-xdo, 13.0-hook-queue-moc, 13.0-imp-stats-display-xdo, 13.0-imp-typso-mat, 13.0-linting-and-fix-xdo, 13.0-manual-host-xdo, 13.0-matplotlib-focal-moc, 13.0-mergbot-fix-wiki-link-moc, 13.0-mergebot-linked-url-mat, 13.0-mergebot-qol-xmo, 13.0-missing-licenses-xdo, 13.0-mutliple-fetch-tries-moc, 13.0-new-stats-xdo, 13.0-organize-menus-xdo, 13.0-pr-state-moc, 13.0-ps-xdo, 13.0-rebase-button-moc, 13.0-rebuild-wizard-xdo, 13.0-remove-patch-filter-moc, 13.0-run-choose-better-db-moc, 13.0-run-in-proxy-mode-moc, 13.0-runbot-add-commit-form-moc, 13.0-runbot-add-pdf417-moc, 13.0-runbot-allow-config-copy-moc, 13.0-runbot-batch-log-moc, 13.0-runbot-bump-nginx-upload-moc, 13.0-runbot-chrome-80-moc, 13.0-runbot-coverage-xml-moc, 13.0-runbot-custom-template-moc, 13.0-runbot-docker-memory-moc, 13.0-runbot-dockerfile-model-moc, 13.0-runbot-error-log-bundles-moc, 13.0-runbot-error-teams-moc, 13.0-runbot-errors-improve-moc, 13.0-runbot-fix-kill-logs-moc, 13.0-runbot-fix-logmenu-moc, 13.0-runbot-fix-precise-chrome-version-moc, 13.0-runbot-fix-test-warning-moc, 13.0-runbot-fixes-xdo, 13.0-runbot-focal-dockerfile-moc, 13.0-runbot-handle-fetch-failure-moc, 13.0-runbot-handle-pr-retarget-moc, 13.0-runbot-ignore-runbot-template-moc, 13.0-runbot-markdown-moc, 13.0-runbot-ocr-mypdf-moc, 13.0-runbot-projects-xdo, 13.0-runbot-remdead-moc, 13.0-runbot-remove-indirect-feature-moc, 13.0-runbot-resend_failed_status-moc, 13.0-runbot-result-data-field-moc, 13.0-runbot-reviewers-moc, 13.0-runbot-sanitize-container-name-moc, 13.0-runbot-sanitize-dest-too-moc, 13.0-runbot-stats-pages-moc, 13.0-screencast-cdo, 13.0-show-red-triggers-moc, 13.0-similar-build-history-xdo, 13.0-single-version-xdo, 13.0-split-frontend-and-scheduler-xdo, 13.0-staging-xdo, 13.0-static-run-xdo, 13.0-stats-parents-xdo, 13.0-stats-sum-xdo, 13.0-sub-command-xdo, 13.0-unaccent-in-config-moc, 13.0-use-build-domain-xdo, 13.0-use-unaccent-when-running-xmo, 13.0-valueerror-xdo, 13.0-various-fixes-xmo, 13.0-zonedates-moc, 14.0, 14.0-adapt-xdo, 15.0, 15.0-adapt-xdo, 15.0-add-diff-buttons-xdo, 15.0-add-draft-from-title-xdo, 15.0-add-python-code-filter-xdo, 15.0-add-trigger-team-xdo, 15.0-advanced-user-xdo, 15.0-allow-specify-config-tuple-section-xal, 15.0-assign-team-xdo, 15.0-automatic-master-bunbdle-xdo, 15.0-avoid-infinite-recursion-xdo, 15.0-better-base-computation-xdo, 15.0-boolean-toggle-moc, 15.0-build-error-management-imp-xdo, 15.0-bundle-name-in-title-xdo, 15.0-bundle-priority-slot-overflow-xdo, 15.0-codeowner-xdo, 15.0-commit-status-ref-xdo, 15.0-computations-ref-xdo, 15.0-cross-project-trigger-xdo, 15.0-disable-forwardport-ping-xdo, 15.0-display-critical-warn-error-xdo, 15.0-display-more-stats, 15.0-dropdb-privileges-moc, 15.0-fix-cleanup-xdo, 15.0-fix-codeowner-xdo, 15.0-fix-custom-trigger-xdo, 15.0-fix-export-timestamp-moc, 15.0-fix-force-preparing-batch-moc, 15.0-fix-frontend-url-widget-xdo, 15.0-fix-get_module-prefix-removal-xdo, 15.0-fix-local-logs-xdo, 15.0-fix-nginx-reload-moc, 15.0-fix-numeric-branch-name-xdo, 15.0-fix-pip-moc, 15.0-fix-stats-xdo, 15.0-fixes-codowner-xdo, 15.0-fixes-xdo, 15.0-freeze-list-xdo, 15.0-get-refs-perfs-xdo, 15.0-get-refs-test-moc, 15.0-git-gc-once-a-day-moc, 15.0-gitgc-repos-moc, 15.0-host-infos-moc, 15.0-https-xdo, 15.0-imp-filter-sort-build-error-rde, 15.0-improve-gc-warning-moc, 15.0-improve-upgrade-logs-xdo, 15.0-json-api-moc, 15.0-less-concurrency-xdo, 15.0-less-concurrent-update-xdo, 15.0-less-load-on-idle-xdo, 15.0-load-info-xdo, 15.0-log-create-and-redirect-xdo, 15.0-log-local-moc, 15.0-login-redirect-back-xmo, 15.0-make-build-gc-fast-again-moc, 15.0-markdown-imp-moc, 15.0-mitigate-ghosts-moc, 15.0-multi-versions-builds-xal, 15.0-nightly-phantom-moc, 15.0-no-wakeup-after-gc-xdo, 15.0-no_prefetch_ids-xdo, 15.0-nono-tags-moc, 15.0-optionale-disable-host-xdo, 15.0-runbot-blacklist-moc, 15.0-runbot-bundle-tags-moc, 15.0-runbot-close-errors-wizard-moc, 15.0-runbot-conditional-wkhtml-moc, 15.0-runbot-cpus-quota-moc, 15.0-runbot-memory-monitoring-moc, 15.0-runbot-reattribute-wizard-moc, 15.0-runbot-show-assigned-error-moc, 15.0-runbot-team-exceptions-moc, 15.0-runbot-update-chrome-moc, 15.0-runbot-varfixes-moc, 15.0-small-aownership-imps-xdo, 15.0-step-description-xdo, 15.0-stop-build-on-error-xdo, 15.0-team-review-strategy-xdo, 15.0-test-fix-nginx-xdo, 15.0-transfer-assignments-xdo, 15.0-trigger-imps-xdo, 15.0-trigger-teams-xdo, 15.0-upgrade-exception-message-xdo, 15.0-upgrade-stiky-only-xdo, 15.0-user-doc-and-view-imps-xdo, 15.0-various-fixes-xal, 15.0-various-quick-imps-moc, 15.0-websocket-xdo, 15.0.staging, 16.0, 16.0-adapt-xdo, co-authored-by-mat, commit-date-update, fix-common-ancestor-search-chs, forward-messages-mat, forwardport, freeze-wizard-fixes, fw-checks-chs, mart-e-patch-1, master, master-add-branch-relations-xdo, master-add-copy-to-clipboard-moc, master-add-env-xdo, master-auto-tags-xdo, master-black-list-regex-moc, master-build-config-python-more-moc, master-cancel-split-xmo, master-clean-sources-xdo, master-cleaup-xdo, master-clenaup-xdo, master-commits-mapping-xmo, master-config-in-views-xdo, master-create-build-if-old-head-xdo, master-cron-cron-cron-xdo, master-custom-jobs-migration-moc, master-custom-jobs-xdo, master-debug-add-logging-moc, master-do-upgrade-xdo, master-docker-status-xdo, master-environ-fqdn-moc, master-f-runbot_x-xdo, master-feedback-approved-failed-ci-xmo, master-fix-avoid-create-build-job-type-none-moc, master-fix-build-redirections-xmo, master-fix-children-build-ids-moc, master-fix-cla-status-duplicate-moc, master-fix-container-tests-moc, master-fix-coverage-xdo, master-fix-docker-ports-xdo, master-fix-enterprise-pr-duplicate-xdo-moc, master-fix-fetch-when-necessary-moc, master-fix-find-duplicate-mod, master-fix-get-closest-moc, master-fix-github-status-moc, master-fix-indirect-xdo, master-fix-killed-doxker-xdo, master-fix-limit-build-logs-moc, master-fix-log-no-docker-xdo, master-fix-mount-rcfile-moc, master-fix-onchange-active-error-moc, master-fix-onchange-multibuild-moc, master-fix-reduce-github-status-moc, master-fix-repo-order-xal, master-fix-run-xdo, master-fix-runbot-cleanup-moc, master-fix-skipped-job30-status-moc, master-fix-speedup-build-search-moc, master-fix-test-build-moc, master-fix-update-depency-repo-moc, master-flamegraph-xdo, master-from-staging-xdo, master-get-ref-time-fix-xdo, master-hosts-xdo, master-imp-add-build-priority-moc, master-imp-add-small-local-pg-tests-moc, master-imp-add-test-dependency-duplicate-moc, master-imp-archive-more-logs-moc, master-imp-branch_builds_sort-moc, master-imp-clear-docker-run-moc, master-imp-containerize-moc, master-imp-feedback-merge-method-moc, master-imp-remove-test-base-moc, master-imp-transifex-config-moc, master-improve-dump-xdo, master-improve-flamegraph-xdo, master-increase-p1-over-split-xmo, master-keep-history-xdo, master-kill-query-before-dropdb-chs, master-limit-log-per-build-moc, master-make-odoo-happy-xdo, master-manual-hook-xdo, master-mergebot-migration, master-migrabot-moc, master-minimise-missing-server-xdo, master-minor-fixes-xmo, master-more-human-time-chs, master-nb-count-ref-xdo, master-nb-count-ref-xdo-save, master-odoo-config-file-moc, master-propagate-build-end-xdo, master-ref-add-target-branch-moc, master-ref-split-cron-jobs-moc, master-remove-pending-skip-moc, master-repo-level-customisations-xmo, master-restore-db-sts, master-restore-db2-sts, master-reviewer-deprovisioning-dle, master-runbot-add-es-check-moc, master-runbot-allow-innefective-step-moc, master-runbot-avoid-old-refs-moc, master-runbot-cla-multiple-tries-moc, master-runbot-classify-errors-moc, master-runbot-data-field-moc-xdo, master-runbot-docker-detach-moc, master-runbot-dump-step-moc, master-runbot-fetch-update-method-moc, master-runbot-fix-container-cli-moc, master-runbot-fix-coverage-moc, master-runbot-fix-docker-icc-moc, master-runbot-fix-grep-cpu-limit-xdo-moc, master-runbot-fix-logging-moc, master-runbot-fix-modules-loaded-moc, master-runbot-fix-no-build-modules-moc, master-runbot-fix-singleton-error-moc, master-runbot-fix-standalone-moc, master-runbot-fix-sticky-onchange-moc, master-runbot-fix-test-tags-moc, master-runbot-fix-update-moc, master-runbot-gc-old-containers-moc, master-runbot-git-gc-moc, master-runbot-grant-buildloguser-moc, master-runbot-handle-new-fixed-error-moc, master-runbot-imp-cleanup-moc, master-runbot-keep-tests-dir-moc, master-runbot-keep-txt-moc, master-runbot-migration-link-moc, master-runbot-quickconnect-same-config-moc, master-runbot-rebuild-branch-moc, master-runbot-split-branch-creation-moc, master-runbot-tmpdir-moc, master-runbot-warning-message-moc, master-runbot-workers-per-host-moc, master-share-sources-overlay-xdo, master-share-sources-xdo, master-stand-alone-client-poc-moc, master-stand-alone-client-xdo, master-sticky-sort-chs, master-test-xdo, master-various-imp-moc, master-various-imps-xdo, master-waiting-job-xdo, master-wakeup-xdo, master-weak-slot-xdo, mergebot, mergebot-october-surprise, mergebot-sentry, mergebot-sign-off-chs, merged-pedro, pre-commit, runbot-dump-db-in-logdir-moc, runbot-fix-odoo-database-user-moc, runbot-list-builds-on-host-moc, runbot-multi-wizard-moc, staging-master, staging-master-limit-connections-moc, and wakeup-button
Other repositories: Anjanac4/runbot, C0d3xmA4ia/runbot, Faha4/runbot, ForgeFlow/runbot, ICTSTUDIO/runbot, JohnXi001/runbot, JordiBForgeFlow/runbot, LiteraryProgrammer/runbot, LourenzoH/runbot-odoo, Mark952700/runbot, Medprogress/runbot, Spearhead-Odoo/runbot, Studio73/runbot, TRESCLOUD/runbot, Therp/runbot, Vauxoo/runbot, abhinavvaidya90/runbot, ajepe/runbot, ap-wtioit/runbot, bizzappdev/runbot, claro5/runbot, dalhyncarrillo/runbot, daramousk/runbot, gaanto/runbot, grap/runbot, great-it-be/runbot, gurneyalex/runbot, gustotc/runbot, hbrunn/runbot, hiren-serpentcs/runbot, honorarac/runbot, ideaspositivas-group/runbot, ip-candres/runbot, knowater521/runbot, madprog/runbot, ml-nic/runbot, mmalewski/runbot, mohamedhagag/runbot, moylop260/runbot, msh-odoo/runbot, nomadic-coding/runbot, odoo/runbot, prasadchaitu766/runbot, presenceverte/runbot, qchojr/runbot, quoccuong94/runbot, richar-osse/runbot, rosessp/runbot, ryanc-me/runbot, sisihitam/runbot, vauxoo-dev/runbot, and wayneburlingame/runbot

<h1 class="title">Merge Bot</h1> <a name="odoo-workflow"></a> <h2>Odoo workflow</h2> <p>The sticky branches are protected on the github odoo project to restrict push for the Merge Bot (MB) only.</p> <p>The MB only works with PR's using the github API.</p> <ol class="arabic simple"> <li>When a PR is created the github notifies the MB. The MB labels the PR as 'seen 🙂' on github <a class="footnote-reference" href="#id4" id="id1">[1]</a>.</li> <li>Once the PR github statuses are green <a class="footnote-reference" href="#id5" id="id2">[2]</a> , the MB labels the PR as 'CI 🤖'.</li> <li>When a reviewer, known by the MB, approves the PR, the MB labels that PR as 'r+ 👌'.</li> <li>At this moment, MB tries to merge the PR and labels the PR with 'merging 👷'.</li> <li>If the merge is successfull, MB labels it 'merged 🎉', removes the label 'merging 👷' and closes the PR. A message from MB gives a link to the merge's commit <a class="footnote-reference" href="#id6" id="id3">[3]</a>.</li> </ol> <p>If an error occurs during the step 4, MB labels the PR with 'error 🙅' and adds a message in the conversion stating what kind of error. For example 'Unable to stage PR (merge conflict)'.</p> <p>If a new commit is pushed in the PR, the process starts again from the begining.</p> <p>It's possible to interact with the MB by the way of github messages containing <a class="reference internal" href="#commands">Commands</a>. The message must start with the MB name (for instance 'robodoo').</p> <table class="docutils footnote" frame="void" id="id4" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Any activity on a PR the MB hasn't seen yet will bring it to the MB's attention. e.g a comment on a PR.</td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id5" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td>At this moment the statuses are: Runbot build is green and CLA is signed if needed. The expected statuses may change in the future.</td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id6" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id3">[3]</a></td><td>If a PR contains only one commit, the PR is rebased and the commit is fast forwarded. With more than one commit, the PR is rebased and the commits are merged with a merge commit. When one wants to avoid the rebase, 'rebase-' command should be used.</td></tr> </tbody> </table> <a name="setup"></a> <h2>Setup</h2> <ul> <li><p class="first">Setup a project with relevant repositories and branches the bot should manage (e.g. odoo/odoo and 10.0).</p> </li> <li><p class="first">Set up reviewers (github_login + boolean flag on partners).</p> </li> <li><p class="first">Add &quot;Issue comments&quot;, &quot;Pull request reviews&quot;, &quot;Pull requests&quot; and &quot;Statuses&quot; webhooks to managed repositories.</p> </li> <li><p class="first">If applicable, add &quot;Statuses&quot; webhook to the <em>source</em> repositories.</p> <p>Github does not seem to send statuses cross-repository when commits get transmigrated so if a user creates a branch in odoo-dev/odoo, waits for CI to run then creates a PR targeted to odoo/odoo the PR will never get status-checked (unless we modify runbot to re-send statuses on pull_request webhook).</p> </li> </ul> <a name="working-principles"></a> <h2>Working Principles</h2> <p>Useful information (new PRs, CI, comments, ...) is pushed to the MB via webhooks. Most of the staging work is performed via a cron job:</p> <ol class="arabic"> <li><p class="first">for each active staging, check if they are done</p> <ol class="arabic"> <li><p class="first">if successful</p> <ul class="simple"> <li><code>push --ff</code> to target branches</li> <li>close PRs</li> </ul> </li> <li><p class="first">if only one batch, mark as failed</p> <p>for batches of multiple PRs, the MB attempts to infer which specific PR failed</p> </li> <li><p class="first">otherwise split staging in 2 (bisection search of problematic batch)</p> </li> </ol> </li> <li><p class="first">for each branch with no active staging</p> <ul class="simple"> <li>if there are inactive stagings, stage one of them</li> <li>otherwise look for batches targeted to that PR (PRs grouped by label with branch as target)</li> <li>attempt staging<ol class="arabic"> <li>reset temp branches (one per repo) to corresponding targets</li> <li>merge each batch's PR into the relevant temp branch<ul> <li>on merge failure, mark PRs as failed</li> </ul> </li> <li>once no more batch or limit reached, reset staging branches to tmp</li> <li>mark staging as active</li> </ol> </li> </ul> </li> </ol> <a name="commands"></a> <h2>Commands</h2> <p>A command string is a line starting with the mergebot's name and followed by various commands. Self-reviewers count as reviewers for the purpose of their own PRs, but delegate reviewers don't.</p> <dl class="docutils"> <dt>retry</dt> <dd><p class="first">resets a PR in error mode to ready for staging</p> <p class="last">can be used by a reviewer or the PR author to re-stage the PR after it's been updated or the target has been updated &amp; fixed.</p> </dd> <dt>r(review)+</dt> <dd><p class="first">approves a PR, can be used by a reviewer or delegate reviewer</p> <p class="last">submitting an &quot;approve&quot; review implicitly r+'s the PR</p> </dd> <dt>r(eview)-</dt> <dd>removes approval from a PR, allows un-reviewing a PR in error (staging failed) so it can be updated and re-submitted</dd> </dl> <dl class="docutils"> <dt>delegate+/delegate=&lt;users&gt;</dt> <dd>adds either PR author or the specified (github) users as authorised reviewers for this PR. <code>&lt;users&gt;</code> is a comma-separated list of github usernames (no &#64;), can be used by reviewers</dd> <dt>p(riority)=2|1|0</dt> <dd>sets the priority to normal (2), pressing (1) or urgent (0), lower-priority PRs are selected first and batched together, can be used by reviewers</dd> <dt>rebase-</dt> <dd>the default merge mode is to rebase and merge the PR into the target, however for some situations this is not suitable and a regular merge is necessary; this command toggles rebasing mode off (and thus back to a regular merge)</dd> </dl> <a name="structure"></a> <h2>Structure</h2> <p>A <em>project</em> is used to manage multiple <em>repositories</em> across many <em>branches</em>.</p> <p>Each <em>PR</em> targets a specific branch in a specific repository.</p> <p>A <em>batch</em> is a number of co-dependent PRs, PRs which are assumed to depend on one another (the exact relationship is irrelevant) and thus always need to be batched together. Batches are normally created on the fly during staging.</p> <p>A <em>staging</em> is a number of batches (up to 8 by default) which will be tested together, and split if CI fails. Each staging applies to a single <em>branch</em> the target) across all managed repositories. Stagings can be active (currently live on the various staging branches) or inactive (to be staged later, generally as a result of splitting a failed staging).</p> <a name="notes"></a> <h2>Notes</h2> <ul class="simple"> <li>When looking for stageable batches, priority is taken in account and isolating e.g. if there's a single high-priority PR, low-priority PRs are ignored completely and only that will be staged on its own</li> <li>Reviewers are set up on partners so we can e.g. have author-tracking &amp; delegate reviewers without needing to create proper users for every contributor.</li> <li>MB collates statuses on commits independently from other objects, so a commit getting CI'd in odoo-dev/odoo then made into a PR on odoo/odoo should be correctly interpreted assuming odoo-dev/odoo sent its statuses to the MB.</li> <li>Github does not support transactional sequences of API calls, so it's possible that &quot;intermediate&quot; staging states are visible &amp; have to be rollbacked e.g. a staging succeeds in a 2-repo scenario, A.{target} is ff-d to A.{staging}, then B.{target}'s ff to B.{staging} fails, we have to rollback A.{target}.</li> <li>Co-dependence is currently inferred through <em>labels</em>, which is a pair of <code>{repo}:{branchname}</code> e.g. odoo-dev:11.0-pr-flanker-jke. If this label is present in a PR to A and a PR to B, these two PRs will be collected into a single batch to ensure they always get batched (and failed) together.</li> </ul> <a name="previous-work"></a> <h2>Previous Work</h2> <a name="bors-ng"></a> <h3>bors-ng</h3> <ul class="simple"> <li>r+: accept (only for trusted reviewers)</li> <li>r-: unaccept</li> <li>r=users...: accept on behalf of users</li> <li>delegate+: allows author to self-review</li> <li>delegate=users...: allow non-reviewers users to review</li> <li>try: stage build (to separate branch) but don't merge on succes</li> </ul> <a name="why-not-bors-ng"></a> <h4>Why not bors-ng</h4> <ul class="simple"> <li>no concurrent staging (can only stage one target at a time)</li> <li>can't do co-dependent repositories/multi-repo staging</li> <li>cancels/forgets r+'d branches on FF failure (emergency pushes) instead of re-staging</li> </ul> <a name="homu"></a> <h3>homu</h3> <p>Additionally to bors-ng's:</p> <ul class="simple"> <li>SHA option on r+/r=, guards</li> <li>p=NUMBER: set priority (unclear if best = low/high)</li> <li>rollup/rollup-: should be default</li> <li>retry: re-attempt PR (flaky?)</li> <li>delegate-: remove delegate+/delegate=</li> <li>force: ???</li> <li>clean: ???</li> </ul>