This weekend I dug into the Github API to build gitconsensus, which lets communities create truly democratic projects using Reactions as a voting mechanism. Projects can define consensus rules (minimum age of pull request, quorum for votes, threshold needed for passing) using a yaml file in their project root. Pull Requests that meet the consensus rules will get merged, and those that do not meet them after a certain amount of time will get closed.
The yaml file itself is pretty straightforward-
# .gitconsensus.yaml # Add extra labels for the vote counts and age when merging extra_labels: false # Do not count any vote from a user who votes for multiple options prevent_doubles: true # Minimum number of voters quorum: 5 # Required percentage of yes votes (ignoring abstentions) threshold: 0.65 # Only process votes by contributors contributors_only: false # Only process votes by collaborators collaborators_only: false # When defined only process votes from these github users whitelist: - alice - bob - carol # Number of days after last action (commit or opening the pull request) before issue can be merged mergedelay: 3 # Number of days after last action (commit or opening the pull request) before issue is autoclosed timeout: 30
The project is available now on pypi and can be installed using pip.