Merge #6249: ci: improve conflicts checker to skip PRs which are a draft

2e8f9f9f08 refactor: better readability (UdjinM6)
9ad537380b ci: less api calls when checking potential conflicts (UdjinM6)
9f3d5b08c7 ci: improve conflicts checker to skip PRs which are a draft (pasta)

Pull request description:

  ## Issue being fixed or feature implemented
  Currently, CI will report a lot of conflicts on most normal PRs. This is because a lot of times a WIP PR will be opened which depends on another. This will result in both being unhappy.

  ## What was done?
  Instead, skip any PR which is considered a draft.

  ## How Has This Been Tested?
  Hasn't, wish us luck!

  ## Breaking Changes
  None

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have commented my code, particularly in hard-to-understand areas
  - [ ] I have added or updated relevant unit/integration/functional/e2e tests
  - [ ] I have made corresponding changes to the documentation
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  UdjinM6:
    utACK 2e8f9f9f08

Tree-SHA512: 3c498d406244bf288df21dc57b28120d2f50c409c1cf1311e3681647bc76d435910e7bb81e9bf6441c057644602324b8be451e66a9fc19a28be30100a7c70087
This commit is contained in:
pasta 2024-09-05 21:30:42 -05:00
commit 8c106bb9ce
No known key found for this signature in database
GPG Key ID: 52527BEDABE87984
2 changed files with 20 additions and 16 deletions

View File

@ -24,8 +24,8 @@ import requests
# need to install via pip
import hjson
def get_label(pr_num):
return requests.get(f'https://api.github.com/repos/dashpay/dash/pulls/{pr_num}').json()['head']['label']
def get_pr_json(pr_num):
return requests.get(f'https://api.github.com/repos/dashpay/dash/pulls/{pr_num}').json()
def main():
if len(sys.argv) != 2:
@ -39,29 +39,33 @@ def main():
our_pr_num = j_input['pull_number']
our_pr_label = get_label(our_pr_num)
our_pr_label = get_pr_json(our_pr_num)['head']['label']
conflictPrs = j_input['conflictPrs']
good = []
bad = []
for conflict in conflictPrs:
this_pr_num = conflict['number']
print(this_pr_num)
conflict_pr_num = conflict['number']
print(conflict_pr_num)
r = requests.get(f'https://api.github.com/repos/dashpay/dash/pulls/{this_pr_num}')
print(r.json()['head']['label'])
conflict_pr_json = get_pr_json(conflict_pr_num)
conflict_pr_label = conflict_pr_json['head']['label']
print(conflict_pr_label)
mergable_state = r.json()['mergeable_state']
if mergable_state == "dirty":
print(f'{this_pr_num} needs rebase. Skipping conflict check')
if conflict_pr_json['mergeable_state'] == "dirty":
print(f'{conflict_pr_num} needs rebase. Skipping conflict check')
continue
r = requests.get(f'https://github.com/dashpay/dash/branches/pre_mergeable/{our_pr_label}...{get_label(this_pr_num)}')
if "These branches can be automatically merged." in r.text:
good.append(this_pr_num)
elif "Cant automatically merge" in r.text:
bad.append(this_pr_num)
if conflict_pr_json['draft']:
print(f'{conflict_pr_num} is a draft. Skipping conflict check')
continue
pre_mergeable = requests.get(f'https://github.com/dashpay/dash/branches/pre_mergeable/{our_pr_label}...{conflict_pr_label}')
if "These branches can be automatically merged." in pre_mergeable.text:
good.append(conflict_pr_num)
elif "Cant automatically merge" in pre_mergeable.text:
bad.append(conflict_pr_num)
else:
raise Exception("not mergeable or unmergable!")

View File

@ -19,7 +19,7 @@ permissions:
statuses: none
jobs:
main:
predict_conflicts:
runs-on: ubuntu-latest
steps:
- name: check for potential conflicts