{ "info": { "author": "Robert Hafner", "author_email": "tedivm@tedivm.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Topic :: Software Development :: Version Control" ], "description": "# GitConsensus\n\nThis simple project allows github projects to be automated. It uses \"reaction\" as a voting mechanism to automatically\nmerge (or close) pull requests.\n\n## Consensus Rules\n\nThe file `.gitconsensus.yaml` needs to be placed in the repository to be managed. Any rule set to `false` or ommitted\nwill be skipped.\n\nYou can run `gitconsensus init` to start with a template configuration in the current working directory.\n\n```yaml\n# Which version of the consensus rules to use\nversion: 3\n\n# Add extra labels for the vote counts and age when merging\nextra_labels: false\n\n# Don't count any vote from a user who votes for multiple options\nprevent_doubles: true\n\n# The following only applies to pull requests\npull_requests:\n\n # Minimum number of voters\n quorum: 5\n\n # Required percentage of \"yes\" votes (ignoring abstentions)\n threshold: 0.65\n\n # Only process votes by contributors\n contributors_only: false\n\n # Only process votes by collaborators\n collaborators_only: false\n\n # When defined only process votes from these github users\n whitelist:\n - alice\n - carol\n\n # When defined votes from these users will be ignored\n blacklist:\n - bob\n - dan\n\n # Number of hours after last action (commit or opening the pull request) before issue can be merged\n merge_delay: 24\n\n # Number of votes from contributors at which the mergedelay gets ignored, assuming no negative votes.\n delay_override: 10\n\n # When `delayoverride` is set this value is the minimum hours without changes before the PR will be merged\n merge_delay_min: 1\n\n # Require this amount of time in hours before a PR with a license change will be merged.\n licensed_delay: 72\n\n # Require this amount of time in hours before a PR with a consensus change will be merged.\n consensus_delay: 72\n\n # Do not allow license changes to be merged.\n license_lock: true\n\n # Do not allow consensus changes to be merged.\n consensus_lock: true\n\n # Number of hours after last action (commit or opening the pull request) before issue is autoclosed\n timeout: 720\n```\n\n## Voting\n\nVotes are made by using reactions on the top level comment of the Pull Request.\n\n| Reaction | Vote |\n|----------|---------|\n| ![+1](https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png \"+1\") | Yes |\n| ![-1](https://github.githubassets.com/images/icons/emoji/unicode/1f44e.png \"-1\") | No |\n| ![confused](https://github.githubassets.com/images/icons/emoji/unicode/1f615.png \"confused\") | Abstain |\n\n\n## Label Overrides\n\nAny Pull Request with a `WIP` or `DONTMERGE` label (case insensitive) will be skipped over.\n\n\n## Commands\n\n### Authentication\n\n```shell\ngitconsensus auth\n```\n\nYou will be asked for your username, password, and 2fa token (if configured). This will be used to get an authentication\ntoken from Github that will be used in place of your username and password (which are never saved).\n\n### Initialization\n\nInitialize the configuration for a specific project. If no template is provided the `recommended` settings will be used.\nAll settings come from the [gitconsensus_examples](https://github.com/gitconsensus/gitconsensus_examples) project.\n\n```shell\ngitconsensus init [TEMPLATE]\n```\n\n### Merge\n\nMerge all pull requests that meet consensus rules.\n\n```shell\ngitconsensus merge USERNAME REPOSITORY\n```\n\n### Close\n\nClose all pull requests that have passed the \"timeout\" date (if it is set).\n\n```shell\ngitconsensus close USERNAME REPOSITORY\n```\n\n### Info\n\nGet detailed infromation about a specific pull request and what rules it passes.\n\n```shell\ngitconsensus info USERNAME REPOSITORY PR_NUMBER\n```\n\n### Force Close\n\nClose specific pull request, including any labels and comments that normally would be sent.\n\n```shell\ngitconsensus forceclose USERNAME REPOSITORY PR_NUMBER\n```\n\n### Force Merge\n\nMerge specific pull request, including any labels and comments that normally would be sent.\n\n```shell\ngitconsensus forcemerge USERNAME REPOSITORY PR_NUMBER\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/gitconsensus/gitconsensuscli/archive/v0.8.0.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gitconsensus/gitconsensuscli", "keywords": "automation github consensus git", "license": "", "maintainer": "", "maintainer_email": "", "name": "gitconsensus", "package_url": "https://pypi.org/project/gitconsensus/", "platform": "", "project_url": "https://pypi.org/project/gitconsensus/", "project_urls": { "Download": "https://github.com/gitconsensus/gitconsensuscli/archive/v0.8.0.tar.gz", "Homepage": "https://github.com/gitconsensus/gitconsensuscli" }, "release_url": "https://pypi.org/project/gitconsensus/0.8.0/", "requires_dist": [ "click (<8.0,>=6.0)", "github3.py (<2,>=1)", "PyYAML (<6,>=3.12)", "requests (<3,>=2.18.0)", "semantic-version (<3,>=2.6.0)", "twine ; extra == 'dev'", "wheel ; extra == 'dev'" ], "requires_python": ">=3", "summary": "Automate Github Pull Requests using Reactions", "version": "0.8.0" }, "last_serial": 5833129, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "253749ff231126e9e58af3f832453e3c", "sha256": "f7e5bade420bcad972e1b2b70403f8445e19849d4b110c0d40f8142569171e92" }, "downloads": -1, "filename": "gitconsensus-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "253749ff231126e9e58af3f832453e3c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9114, "upload_time": "2017-08-22T06:53:21", "url": "https://files.pythonhosted.org/packages/07/fc/70f15a4443878b3bf15ff39e1e8048fc2f9a0811d0d487d18e7815b70b38/gitconsensus-0.1.0-py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f12d4002ddc69337b86bf24af51d4715", "sha256": "03ad1e4e46e153e15fe2c63306a37f935af3a5a466e1d6684ba225e26dcd374b" }, "downloads": -1, "filename": "gitconsensus-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f12d4002ddc69337b86bf24af51d4715", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9241, "upload_time": "2017-08-23T02:23:21", "url": "https://files.pythonhosted.org/packages/be/ef/b09a8ff6d727d4a051a95550a2fb0e4ff46f6cc2acab9d969ccca81828ab/gitconsensus-0.2.0-py3-none-any.whl" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "121040b5c75b947934652f6146976ecd", "sha256": "544f292d517ce58a7642f2d1ce96e110a303ef54b60bb8f6eba9b95361135d7d" }, "downloads": -1, "filename": "gitconsensus-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "121040b5c75b947934652f6146976ecd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9562, "upload_time": "2017-08-23T03:24:35", "url": "https://files.pythonhosted.org/packages/28/9f/515361f224a6c4cf3cf859e7c70bd88f97d244cb5c8091e08d46bd7fa8af/gitconsensus-0.3.0-py3-none-any.whl" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d2a41153dc307870a7a13ce8e2f5973f", "sha256": "3a1e437dff27e7ac3eb5feb2a04ce7f1506406d6a0a114f2a04f32599f61f05e" }, "downloads": -1, "filename": "gitconsensus-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d2a41153dc307870a7a13ce8e2f5973f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11038, "upload_time": "2018-01-21T05:15:16", "url": "https://files.pythonhosted.org/packages/a8/19/ac7c8937c21a05018e2ec29f26d318957460c2316546a5a8e1a52ae5ed0a/gitconsensus-0.4.0-py3-none-any.whl" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "baf72ed7d305bca07319cd0d1b8b7bc7", "sha256": "943b45c375218992588062a973186621ed9b47e8422415d2bc9b2b2463e0f02d" }, "downloads": -1, "filename": "gitconsensus-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "baf72ed7d305bca07319cd0d1b8b7bc7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11075, "upload_time": "2018-02-22T07:52:35", "url": "https://files.pythonhosted.org/packages/22/9b/b801788c3fdf3abb9af7f9f4953595c2a2a9f1710a8e7f4d8bd097568493/gitconsensus-0.5.0-py3-none-any.whl" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "1674c6b78cefd5ddcd7098aa1118d750", "sha256": "34ec8c34b522e09869db624002c531ad0041745fe2054ab175a55897004dada5" }, "downloads": -1, "filename": "gitconsensus-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1674c6b78cefd5ddcd7098aa1118d750", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11910, "upload_time": "2018-02-25T18:09:38", "url": "https://files.pythonhosted.org/packages/00/62/d323b5f890fc4026fec90ff5009d8ec374bab69a4544129b92b1ad1d7c64/gitconsensus-0.6.0-py3-none-any.whl" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "8c4ae6a9b7ecb8f09625375c3831cf6c", "sha256": "5cd30aad3dcd1b8dcf85a0d0266b0a710f0ac456711e041b4e7c7ccd53b48a88" }, "downloads": -1, "filename": "gitconsensus-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8c4ae6a9b7ecb8f09625375c3831cf6c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9198, "upload_time": "2018-04-01T21:10:44", "url": "https://files.pythonhosted.org/packages/bf/da/fb18b09e94d291ec4ab7e7cc9d109cd0d199fa377355f0448d3261520376/gitconsensus-0.6.1-py3-none-any.whl" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "c9a32977d435cf6fc0d0cb1b9a3e23f7", "sha256": "c8c6f65aac841ee14ca498ed4311e034516ef2ef1e2c5c1b220ddcf9ecd2d6a5" }, "downloads": -1, "filename": "gitconsensus-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c9a32977d435cf6fc0d0cb1b9a3e23f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9247, "upload_time": "2018-04-02T03:06:39", "url": "https://files.pythonhosted.org/packages/93/e1/f3b81c023d4dd7ecac8048669c83caeb6f4d13ad2311b3b0081512aee106/gitconsensus-0.7.0-py3-none-any.whl" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "5c47f20e1e7fec81f63a1e8b9bdc4083", "sha256": "0468e95b79e05ca609c47ed25ff13faf6290c0a8a4f539d6c94a997e1a626e43" }, "downloads": -1, "filename": "gitconsensus-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5c47f20e1e7fec81f63a1e8b9bdc4083", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9266, "upload_time": "2018-04-08T05:48:05", "url": "https://files.pythonhosted.org/packages/6c/13/bfa2d602baf46258e3b20fe74cff4c24f8296f181fdc67b19bfdac90a908/gitconsensus-0.7.1-py3-none-any.whl" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "af023f2b1c098911bbd1a8f95ed3d5b9", "sha256": "04a725f22f3c7a3fdbf84f082f694b7e069071c7272e00c767c099c3fc07af5a" }, "downloads": -1, "filename": "gitconsensus-0.7.2-py3-none-any.whl", "has_sig": false, "md5_digest": "af023f2b1c098911bbd1a8f95ed3d5b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 9443, "upload_time": "2018-04-10T06:39:19", "url": "https://files.pythonhosted.org/packages/b0/6a/7cd1ca49560c6415a152c25d08cc029a615907f093119dcf465009950457/gitconsensus-0.7.2-py3-none-any.whl" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "6edec3a77015b2c4db09438aff3878b0", "sha256": "5534516c3f5ed06a13e4e3fd5a0967f30e58877bd42ea006b63105bf8b805310" }, "downloads": -1, "filename": "gitconsensus-0.7.3-py3-none-any.whl", "has_sig": false, "md5_digest": "6edec3a77015b2c4db09438aff3878b0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 10282, "upload_time": "2019-05-12T03:15:31", "url": "https://files.pythonhosted.org/packages/99/b9/32c2eb82ebeead345538a11789eb2e2bc548339c9a7a63fc8850ca7d5a75/gitconsensus-0.7.3-py3-none-any.whl" } ], "0.7.4": [ { "comment_text": "", "digests": { "md5": "b62ae4c45769e88429ff152865edb65e", "sha256": "83bf49c02d97fd9a70ba9794ea0f8b2038e10a49fd32936af063584bb5453c40" }, "downloads": -1, "filename": "gitconsensus-0.7.4-py3-none-any.whl", "has_sig": false, "md5_digest": "b62ae4c45769e88429ff152865edb65e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 10285, "upload_time": "2019-05-12T07:13:51", "url": "https://files.pythonhosted.org/packages/1b/fe/b29a007543b68335493c05e001e84f761ff5e8d99d51a8b16dcec92340be/gitconsensus-0.7.4-py3-none-any.whl" } ], "0.7.5": [ { "comment_text": "", "digests": { "md5": "2551faeabc4f59afc482ed4fa5fb6422", "sha256": "e272626bfb282948e507eb23e370ffc26b62dc5b7f9f051a0d938a32dcbd5e14" }, "downloads": -1, "filename": "gitconsensus-0.7.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2551faeabc4f59afc482ed4fa5fb6422", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 10266, "upload_time": "2019-08-26T06:39:14", "url": "https://files.pythonhosted.org/packages/21/89/58d004c6c015bf66171bbcfe4c0235f9a8b44d965b9eb840a0cbd723f850/gitconsensus-0.7.5-py3-none-any.whl" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "27cb89e04da33946b1dcb5330e55aa0b", "sha256": "509356e3c059514beee330c6fbde5a7fcae839423632d8c9963282b77a89b04e" }, "downloads": -1, "filename": "gitconsensus-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "27cb89e04da33946b1dcb5330e55aa0b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 10251, "upload_time": "2019-09-15T22:20:17", "url": "https://files.pythonhosted.org/packages/34/0c/f98e16b7e962aabbfcc9af602972dcc0791ce06ac70816f0ce3f8a2bf06b/gitconsensus-0.8.0-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "27cb89e04da33946b1dcb5330e55aa0b", "sha256": "509356e3c059514beee330c6fbde5a7fcae839423632d8c9963282b77a89b04e" }, "downloads": -1, "filename": "gitconsensus-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "27cb89e04da33946b1dcb5330e55aa0b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 10251, "upload_time": "2019-09-15T22:20:17", "url": "https://files.pythonhosted.org/packages/34/0c/f98e16b7e962aabbfcc9af602972dcc0791ce06ac70816f0ce3f8a2bf06b/gitconsensus-0.8.0-py3-none-any.whl" } ] }