Skip to content

Marvin v3: Tracking a PR's lifecycle #371069

@SigmaSquadron

Description

@SigmaSquadron

Issue description

In 2022-04-16 at 12:48:13 UTC, Marvin was declared dead. For those unaware, Marvin was an experimental GitHub app that tagged Nixpkgs PRs and was used by maintainers and committers to triage PRs. New PRs would be tagged with awaiting_reviewer, then awaiting_changes after a review has been posted, and finally awaiting_merger after an approval.

Last year, the old Marvin labels began to be manually used in PRs. This somewhat polluted Marvin's historical log, and isn't an ideal solution, considering how the labels are undocumented and using the default #FFFFFF scheme, which is usually reserved for 5.scope labels. This clearly shows the need for a new version of Marvin: a PR lifecycle tracker that clearly displays which PRs need reviewers, have been awaiting reviewers, or are waiting on the PR author for changes.

Thanks to the power of hindsight, we can avoid Marvin v2's biggest issue: the spam. Marvin would request reviews, ping maintainers, and leave superfluous comments in the PRs it managed. I propose a simple labeler that does nothing but automate the work that @FliegendeWurst has been doing, which will allow us to filter PRs more effectively. This also allows us to design a much more simple solution with far less features.

Proposed solution

Leverage GitHub Actions or an App to add the following labels to PRs:

4.stage: awaiting reviewers, for when a PR has no reviewers after nix-owners runs.
4.stage: awaiting review, for when a PR has review requests, but no published reviews yet.
4.stage: awaiting changes, for when there is any published review with unresolved comments. (TODO: can we track resolved/unresolved review comments?)
4.stage: awaiting merger, for approved PRs which have not been interacted with by a committer.
4.stage: awaiting merge, for approved PRs which have been reviewed by a committer or have requested the review from a committer. Both of these will mimic the 12.approvals series of labels.

Extra: move unresolved_build_failure to 2.status or 9.needs. I'm not sure if that's Marvin-related, but it sure looks like it, and it could do with a touch-up.

This list is not final and is always up for discussion and improvement. It's a more-or-less 1:1 replacement for Marvin, but it could be argued that awaiting merge(r) doesn't need to exist now that 12.approvals is a thing. I'd also be up for adding more labels for more PR states, such as when the changes were addressed but no approval was given yet.

There should also be a way to opt-out from labeling, and another label from when the usual lifecycle is skipped. For instance, a PR like this could be given a 4.stage: reviews skipped label, which would allow us to track trivial, tested PRs from package maintainers, and perhaps slightly improve breakage tracking if someone has been reckless.


Add a 👍 reaction to issues you find important.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions