#62 Support Zuul CI
Merged 4 years ago by frantisekz. Opened 4 years ago by frantisekz.

file modified
+15 -11
@@ -424,20 +424,24 @@ 

  def get_pr_ci_result(package, pr_id):

      """

      Return CI result for package pull-request

-     Returns "failure" or "success" or None

-     TODO: Add support for FedoraCI, add support for results other than "failure" and "success"

+     Returns {"Zuul": "result", "simple-koji-ci": "result"} , "result" can be "failure", "success", "pending" or None

+     TODO: Add support for FedoraCI once pagure exposes it's result in the api

      """

      resp_pr_ci_result = get_json("https://src.fedoraproject.org/api/0/rpms/%s/pull-request/%s/flag" % (package, pr_id))

+     data = {"Zuul": None, "simple-koji-ci": None}

      if not resp_pr_ci_result:

-         return None

-     # Pagure might not have CI results at all, return None in such cases

-     try:

-         # Pagure returns PR results sorted from newest to latest, so we can pick just the first result

-         if resp_pr_ci_result["flags"][0]["status"] not in ("failure", "success"):

-             return None

-         return resp_pr_ci_result["flags"][0]["status"]

-     except IndexError:

-         return None

+         return data

+     if "flags" not in resp_pr_ci_result:

+         return data

+     for result in resp_pr_ci_result["flags"]:

+         if result["username"] == "Zuul" and not data["Zuul"]:

+             data["Zuul"] = result["status"]

+         if result["username"] == "simple-koji-ci" and not data["simple-koji-ci"]:

+             data["simple-koji-ci"] = result["status"]

+         # We care only about the newest results

+         if data["simple-koji-ci"] and data["Zuul"]:

+             break

+     return data

  

  

  def get_package_prs(package):

This will just fail on KeyError when the flags field is not set (e.g. https://src.fedoraproject.org/api/0/rpms/wine-dxvk/pull-request/4 at the time of writing this comment):

{
  "assignee": null, 
  "branch": "master", 
  "branch_from": "vulkan_check_reverse", 
  "cached_merge_status": "CONFLICTS", 
  "closed_at": null, 
  "closed_by": null, 
  "comments": [
    {
      "comment": "**1 new commit added**\n\n * ``Silence grep output from vk check``\n", 
      "commit": null, 
      "date_created": "1595262283", 
      "edited_on": null, 
      "editor": null, 
      "filename": null, 
      "id": 50396, 
      "line": null, 
      "notification": true, 
      "parent": null, 
      "reactions": {}, 
      "tree": null, 
      "user": {
        "fullname": "Franti\u0161ek Zatloukal", 
        "name": "frantisekz", 
        "url_path": "user/frantisekz"
      }
    }
  ], 
  "commit_start": "67d7640ebbb82412911199084bed3ccc249a94ca", 
  "commit_stop": "f5bff8d2dfac524eed54d1d21a50f5645b47a759", 
  "date_created": "1595255058", 
  "id": 4, 
  "initial_comment": null, 
  "last_updated": "1595343076", 
  "project": {
    "access_groups": {
      "admin": [], 
      "commit": [], 
      "ticket": []
    }, 
    "access_users": {
      "admin": [], 
      "commit": [], 
      "owner": [
        "frantisekz"
      ], 
      "ticket": []
    }, 
    "close_status": [], 
    "custom_keys": [], 
    "date_created": "1565011863", 
    "date_modified": "1565011924", 
    "description": "The wine-dxvk package", 
    "fullname": "rpms/wine-dxvk", 
    "id": 37841, 
    "milestones": {}, 
    "name": "wine-dxvk", 
    "namespace": "rpms", 
    "parent": null, 
    "priorities": {}, 
    "tags": [], 
    "url_path": "rpms/wine-dxvk", 
    "user": {
      "fullname": "Franti\u0161ek Zatloukal", 
      "name": "frantisekz", 
      "url_path": "user/frantisekz"
    }
  }, 
  "remote_git": null, 
  "repo_from": {
    "access_groups": {
      "admin": [], 
      "commit": [], 
      "ticket": []
    }, 
    "access_users": {
      "admin": [], 
      "commit": [], 
      "owner": [
        "frantisekz"
      ], 
      "ticket": []
    }, 
    "close_status": [], 
    "custom_keys": [], 
    "date_created": "1565011863", 
    "date_modified": "1565011924", 
    "description": "The wine-dxvk package", 
    "fullname": "rpms/wine-dxvk", 
    "id": 37841, 
    "milestones": {}, 
    "name": "wine-dxvk", 
    "namespace": "rpms", 
    "parent": null, 
    "priorities": {}, 
    "tags": [], 
    "url_path": "rpms/wine-dxvk", 
    "user": {
      "fullname": "Franti\u0161ek Zatloukal", 
      "name": "frantisekz", 
      "url_path": "user/frantisekz"
    }
  }, 
  "status": "Open", 
  "tags": [], 
  "threshold_reached": null, 
  "title": "Check for vulkan before installing dxvk as best alternative", 
  "uid": "b292504325f0473ebe4b9daf35523a72", 
  "updated_on": "1595262720", 
  "user": {
    "fullname": "Franti\u0161ek Zatloukal", 
    "name": "frantisekz", 
    "url_path": "user/frantisekz"
  }
}

get_pr_ci_result() is querying this api endpoint: https://src.fedoraproject.org/api/0/rpms/package/pull-request/pr_id/flag

So, in case of wine-dxvk ( https://src.fedoraproject.org/api/0/rpms/wine-dxvk/pull-request/4/flag ):

{
    "flags": [
        {
            "comment": "Build completed for f5bff8d2",
            "date_created": "1595262295",
            "date_updated": "1595262720",
            "percent": null,
            "pull_request_uid": "b292504325f0473ebe4b9daf35523a72",
            "status": "success",
            "url": "http://koji.fedoraproject.org/koji/taskinfo?taskID=47506661",
            "user": {
                "fullname": "Pierre-YvesChibon",
                "name": "pingou",
                "url_path": "user/pingou"
            },
            "username": "simple-koji-ci"
        },
        {
            "comment": "Build completed for 67d7640e",
            "date_created": "1595255071",
            "date_updated": "1595255459",
            "percent": null,
            "pull_request_uid": "b292504325f0473ebe4b9daf35523a72",
            "status": "success",
            "url": "http://koji.fedoraproject.org/koji/taskinfo?taskID=47499518",
            "user": {
                "fullname": "Pierre-YvesChibon",
                "name": "pingou",
                "url_path": "user/pingou"
            },
            "username": "simple-koji-ci"
        }
    ]
}

I didn't see a PR with "flags" key missing there, yet. Should i add some check for "flags" key anyway?

Thinking about this... there probably were some problems, I just can't remember where I hit those issues and why I put there:

# Pagure might not have CI results at all, return None in such cases

I'll add flags check after lunch, just to be sure.

:thumbsup:

get_pr_ci_result() is querying this api endpoint: https://src.fedoraproject.org/api/0/rpms/package/pull-request/pr_id/flag
So, in case of wine-dxvk ( https://src.fedoraproject.org/api/0/rpms/wine-dxvk/pull-request/4/flag

I could have sworn I used that URL... Copy paste errors seem to be strong with this one.

rebased onto f2a11c1

4 years ago

Pull-Request has been merged by frantisekz

4 years ago
Metadata