Skip to content

Commit

Permalink
Merge #6249: ci: improve conflicts checker to skip PRs which are a draft
Browse files Browse the repository at this point in the history
2e8f9f9 refactor: better readability (UdjinM6)
9ad5373 ci: less api calls when checking potential conflicts (UdjinM6)
9f3d5b0 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 2e8f9f9

Tree-SHA512: 3c498d406244bf288df21dc57b28120d2f50c409c1cf1311e3681647bc76d435910e7bb81e9bf6441c057644602324b8be451e66a9fc19a28be30100a7c70087
  • Loading branch information
PastaPastaPasta committed Sep 6, 2024
2 parents f222f79 + 2e8f9f9 commit 8c106bb
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 16 deletions.
34 changes: 19 additions & 15 deletions .github/workflows/handle_potential_conflicts.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
# 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:
Expand All @@ -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 "Can’t 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 "Can’t automatically merge" in pre_mergeable.text:
bad.append(conflict_pr_num)
else:
raise Exception("not mergeable or unmergable!")

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/predict-conflicts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ permissions:
statuses: none

jobs:
main:
predict_conflicts:
runs-on: ubuntu-latest
steps:
- name: check for potential conflicts
Expand Down

0 comments on commit 8c106bb

Please sign in to comment.