diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index 195dbac763e3..c9d72511e63d 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -36,6 +36,6 @@ jobs: REPO_NAME: spark-rapids HEAD: branch-0.2 BASE: branch-0.3 - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # use to create and merge PR - NVAUTO_TOKEN: ${{ secrets.NVAUTO_TOKEN }} # PR has to be approved by a different token + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # use to approve and merge PR + NVAUTO_TOKEN: ${{ secrets.NVAUTO_TOKEN }} # use to trigger checks. diff --git a/.github/workflows/auto-merge/automerge b/.github/workflows/auto-merge/automerge index bed17cc6dd37..0ae439feb3a7 100755 --- a/.github/workflows/auto-merge/automerge +++ b/.github/workflows/auto-merge/automerge @@ -31,11 +31,7 @@ import requests API_URL = 'https://api.github.com' -def create(github_token: str, owner: str, repo_name: str, head: str, base: str): - auth_header = { - 'Authorization': 'token ' + github_token - } - +def create(nvauto_token: str, owner: str, repo_name: str, head: str, base: str): url = f'{API_URL}/repos/{owner}/{repo_name}/pulls' params = { 'title': f'[auto-merge] {head} to {base} [skip ci] [bot]', @@ -45,7 +41,7 @@ def create(github_token: str, owner: str, repo_name: str, head: str, base: str): 'this PR is unable to be merged due to conflicts, it will remain open until manually fix.', 'maintainer_can_modify': True } - r = requests.post(url, headers=auth_header, json=params) + r = requests.post(url, headers={'Authorization': 'token ' + nvauto_token}, json=params) if r.status_code == 201: print('SUCCESS - create PR') pull = r.json() @@ -63,7 +59,10 @@ def create(github_token: str, owner: str, repo_name: str, head: str, base: str): sys.exit(1) -def auto_merge(github_token: str, nvauto_token: str, owner: str, repo_name: str, number: str, commit_id: str): +def auto_merge(github_token: str, owner: str, repo_name: str, number: str, commit_id: str): + auth_header = { + 'Authorization': 'token ' + github_token + } try: # auto-approve PR approve_url = f'{API_URL}/repos/{owner}/{repo_name}/pulls/{number}/reviews' @@ -72,9 +71,9 @@ def auto_merge(github_token: str, nvauto_token: str, owner: str, repo_name: str, 'event': 'APPROVE', 'body': 'auto-approved', } - r = requests.post(approve_url, headers={'Authorization': 'token ' + nvauto_token}, json=approve_params) + r = requests.post(approve_url, headers=auth_header, json=approve_params) if r.status_code == 200: - comment(github_token=github_token, owner=owner, repo_name=repo_name, number=number, + comment(token=github_token, owner=owner, repo_name=repo_name, number=number, content='**SUCCESS** - auto-approve') print('SUCCESS - auto-approve') else: @@ -87,9 +86,9 @@ def auto_merge(github_token: str, nvauto_token: str, owner: str, repo_name: str, 'sha': commit_id, 'merge_method': 'merge', } - r = requests.put(merge_url, headers={'Authorization': 'token ' + github_token}, json=merge_params) + r = requests.put(merge_url, headers=auth_header, json=merge_params) if r.status_code == 200: - comment(github_token=github_token, owner=owner, repo_name=repo_name, number=number, + comment(token=github_token, owner=owner, repo_name=repo_name, number=number, content='**SUCCESS** - auto-merge') print('SUCCESS - auto-merge') sys.exit(0) @@ -97,7 +96,7 @@ def auto_merge(github_token: str, nvauto_token: str, owner: str, repo_name: str, print('FAILURE - auto-merge') raise Exception(r.json()) except Exception as e: - comment(github_token=github_token, owner=owner, repo_name=repo_name, number=number, + comment(token=github_token, owner=owner, repo_name=repo_name, number=number, content=f"""**FAILURE** - Unable to auto-merge. Manual operation is required. ``` {e} @@ -107,15 +106,12 @@ def auto_merge(github_token: str, nvauto_token: str, owner: str, repo_name: str, sys.exit(1) -def comment(github_token: str, owner: str, repo_name: str, number: str, content: str): - auth_header = { - 'Authorization': 'token ' + github_token - } +def comment(token: str, owner: str, repo_name: str, number: str, content: str): url = f'{API_URL}/repos/{owner}/{repo_name}/issues/{number}/comments' params = { 'body': content } - r = requests.post(url, headers=auth_header, json=params) + r = requests.post(url, headers={'Authorization': 'token ' + token}, json=params) if r.status_code == 201: print('SUCCESS - create comment') else: @@ -126,16 +122,17 @@ def comment(github_token: str, owner: str, repo_name: str, number: str, content: def main(github_token: str, nvauto_token: str, owner: str, repo_name: str, head: str, base: str): try: - number, sha, term = create(github_token=github_token, owner=owner, repo_name=repo_name, head=head, base=base) + # NOTE: github actions can not be trigger by default github-actions bot + # So use nvauto_token to trigger checks + number, sha, term = create(nvauto_token=nvauto_token, owner=owner, repo_name=repo_name, head=head, base=base) if term: sys.exit(0) # skip pre-merge blossom CI w/ [skip ci] in PR title - comment(github_token=nvauto_token, owner=owner, repo_name=repo_name, number=number, content='build') + comment(token=nvauto_token, owner=owner, repo_name=repo_name, number=number, content='build') time.sleep(600) # sleep 10 minutes, then try auto-merge - auto_merge(github_token=github_token, nvauto_token=nvauto_token, - owner=owner, repo_name=repo_name, number=number, commit_id=sha) + auto_merge(github_token=github_token, owner=owner, repo_name=repo_name, number=number, commit_id=sha) except Exception as e: print("Unexpected error: ", e) exit(-1)