From e8cb744ecd501af1593c53a34a33f1b4ef52d2f9 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Sep 05 2019 12:14:45 +0000 Subject: Keep working on testing the PR workflow --- diff --git a/monitor_gating.py b/monitor_gating.py index d198842..999af80 100644 --- a/monitor_gating.py +++ b/monitor_gating.py @@ -39,6 +39,7 @@ _vars = { 'resultsdb': 'https://taskotron.fedoraproject.org/resultsdb_api/api/v2.0/results', 'resultsdb_rdu': 'http://resultsdb.ci.centos.org/resultsdb_api/api/v2.0/results', 'datagrepper': 'https://apps.fedoraproject.org/datagrepper/raw', + 'pagure_dist_git': 'https://src.fedoraproject.org/', "distgit_host": "pkgs.fedoraproject.org", "bodhi": "https://bodhi.fedoraproject.org", "bodhi-cli": "bodhi", @@ -47,6 +48,7 @@ _vars = { 'fedpkg': 'fedpkg-stage', 'resultsdb': 'https://taskotron.stg.fedoraproject.org/resultsdb/results', 'datagrepper': 'https://apps.stg.fedoraproject.org/datagrepper/raw', + 'pagure_dist_git': 'https://src.stg.fedoraproject.org/', "distgit_host": "pkgs.stg.fedoraproject.org", "bodhi": "https://bodhi.stg.fedoraproject.org", "bodhi-cli": "bodhi", @@ -216,11 +218,46 @@ def push_changes(folder, target, branch, force=False): print_user(info_log, success=False) -def open_pullrequest(username, namespace, name, branch): +def open_pullrequest(base_url, username, namespace, name, branch, token): """ Open a pull-request from the user's fork to the main project for the specified branch. """ - pass + info_log = f"Creating PR from forks/{username}/{namespace}/{name}" + print_user(info_log) + url = "/".join([ + base_url.rstrip("/"), "api/0", namespace, name, "pull-request/new" + ]) + data = { + "branch_to": branch, + "branch_from": branch, + "repo_from": name, + "repo_from_username": username, + "repo_from_namespace": namespace, + "initial_comment": "Testing PR", + "title": "Test PR for monitoring", + } + headers = { + "Authorization": f"token {token}" + } + req = requests.post( + url=url, + data=data, + headers=headers, + ) + if not req.ok: + print(req.text) + success = False + pr_id = None + else: + output = req.json() + pr_id = str(output["id"]) + url = "/".join([ + base_url.rstrip("/"), namespace, name, "pull-request", pr_id + ]) + info_log = f"PR created {url}" + success = True + print_user(info_log, success=success) + return (success, pr_id) def get_nevr(folder): @@ -481,10 +518,13 @@ def main(): switch_branch(branch, folder=gitfolder) bump_release(name, folder=gitfolder) commit_changes("Bump release", folder=gitfolder) + nevr = get_nevr(folder=gitfolder) + print(f" Upcoming build : {nevr}") if args.no_pr: # Push to the main repo push_changes(gitfolder, "origin", branch) + build_package(folder=gitfolder) else: # Add the fork as remote, push to the it, open the PR, # wait for CI to flag the PR, twice, merge the PR @@ -493,11 +533,53 @@ def main(): f"ssh://{fas_username}@{_vars[_env]['distgit_host']}/forks/{fas_username}/" f"{namespace}/{name}.git", folder=gitfolder) - push_changes(gitfolder, fas_username, branch) + push_changes(gitfolder, fas_username, branch, force=True) + pr_created, pr_id = open_pullrequest( + base_url=_vars[_env]['pagure_dist_git'], + username=fas_username, + namespace=namespace, + name=name, + branch=branch, + token=pagure_token, + ) + if pr_created: + # Check that pr pipeline is running + lookup_results_datagrepper( + name="CI", + topic=f"org.centos.{_ci_env}.ci.pipeline.allpackages-pr.package.running", + rev=f"PR-{pr_id}", + ) + # Check that CI flag pending was set + get_pr_flag( + base_url=_vars[_env]['pagure_dist_git'], + username=fas_username, + namespace=namespace, + name=name, + pr_id=pr_id, + flag_username="jenkins", + flag_status="pending", + ) + # Check that pr pipeline has finished + lookup_results_datagrepper( + name="CI", + topic=f"org.centos.{_ci_env}.ci.pipeline.allpackages-pr.complete", + rev=f"PR-{pr_id}", + ) + # Check that CI flag failure was set + get_pr_flag( + base_url=_vars[_env]['pagure_dist_git'], + username=fas_username, + namespace=namespace, + name=name, + pr_id=pr_id, + flag_username="jenkins", + flag_status="failure", + duration=25, + ) + # Merge the PR: TODO + else: + return - nevr = get_nevr(folder=gitfolder) - print(f" Upcoming build : {nevr}") - build_package(folder=gitfolder) else: nevr = args.nevr