github.com/datadog/cilium@v1.6.12/contrib/backporting/set-labels.py (about)

     1  #!/usr/bin/env python3
     2  
     3  """
     4  This script requires PyGithub to be installed
     5  `pip install pygithub`
     6  
     7  GITHUB_TOKEN env variable is used to access GH API
     8  """
     9  
    10  import argparse
    11  import os
    12  import sys
    13  
    14  try:
    15      from github import Github
    16  except ImportError:
    17      print("pygithub not found you can install it by running 'pip3 install --user PyGithub'")
    18      sys.exit(-1)
    19  
    20  parser = argparse.ArgumentParser()
    21  parser.add_argument('pr_number', type=int)
    22  actions = ["pending", "done"]
    23  parser.add_argument('action', type=str, choices=actions)
    24  parser.add_argument('version', type=str, default="1.0", nargs='?')
    25  
    26  args = parser.parse_args()
    27  
    28  token = os.environ["GITHUB_TOKEN"]
    29  pr_number = args.pr_number
    30  action = args.action
    31  version = args.version
    32  
    33  g = Github(token)
    34  cilium = g.get_repo("cilium/cilium")
    35  pr = cilium.get_pull(pr_number)
    36  pr_labels = list(pr.get_labels())
    37  old_label_len = len(pr_labels)
    38  
    39  cilium_labels = cilium.get_labels()
    40  
    41  print("Setting labels for PR {}... ".format(pr_number), end="")
    42  if action == "pending":
    43      pr_labels = [l for l in pr_labels
    44                   if l.name != "needs-backport/"+version]
    45      if old_label_len - 1 != len(pr_labels):
    46          print("needs-backport/"+version+" label not found in PR, exiting")
    47          sys.exit(1)
    48  
    49      pr_labels.append(
    50          [l for l in cilium_labels if l.name == "backport-pending/"+version][0])
    51  
    52      if old_label_len != len(pr_labels):
    53          print("error adding backport-pending/"+version+" label to PR, exiting")
    54          sys.exit(2)
    55      pr.set_labels(*pr_labels)
    56  
    57  if action == "done":
    58      pr_labels = [l for l in pr_labels
    59                   if l.name != "backport-pending/"+version]
    60      if old_label_len - 1 != len(pr_labels):
    61          print("backport-pending/"+version+" label not found in PR, exiting")
    62          sys.exit(1)
    63  
    64      pr_labels.append(
    65          [l for l in cilium_labels if l.name == "backport-done/"+version][0])
    66  
    67      if old_label_len != len(pr_labels):
    68          print("error adding backport-done/"+version+" label to PR, exiting")
    69          sys.exit(2)
    70      pr.set_labels(*pr_labels)
    71  
    72  print("✓")