2024-08-07T17:14:54.2273656Z Current runner version: '2.317.0' 2024-08-07T17:14:54.2302977Z ##[group]Operating System 2024-08-07T17:14:54.2303685Z Ubuntu 2024-08-07T17:14:54.2304021Z 22.04.4 2024-08-07T17:14:54.2304427Z LTS 2024-08-07T17:14:54.2304793Z ##[endgroup] 2024-08-07T17:14:54.2305173Z ##[group]Runner Image 2024-08-07T17:14:54.2305646Z Image: ubuntu-22.04 2024-08-07T17:14:54.2306091Z Version: 20240804.1.0 2024-08-07T17:14:54.2307100Z Included Software: https://github.com/actions/runner-images/blob/ubuntu22/20240804.1/images/ubuntu/Ubuntu2204-Readme.md 2024-08-07T17:14:54.2308630Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu22%2F20240804.1 2024-08-07T17:14:54.2309454Z ##[endgroup] 2024-08-07T17:14:54.2309974Z ##[group]Runner Image Provisioner 2024-08-07T17:14:54.2310562Z 2.0.374.1 2024-08-07T17:14:54.2310868Z ##[endgroup] 2024-08-07T17:14:54.2313168Z ##[group]GITHUB_TOKEN Permissions 2024-08-07T17:14:54.2315297Z Actions: read 2024-08-07T17:14:54.2316109Z Attestations: read 2024-08-07T17:14:54.2316614Z Checks: read 2024-08-07T17:14:54.2316995Z Contents: read 2024-08-07T17:14:54.2317465Z Deployments: read 2024-08-07T17:14:54.2317820Z Discussions: read 2024-08-07T17:14:54.2318211Z Issues: read 2024-08-07T17:14:54.2318637Z Metadata: read 2024-08-07T17:14:54.2318986Z Packages: read 2024-08-07T17:14:54.2319377Z Pages: read 2024-08-07T17:14:54.2319805Z PullRequests: read 2024-08-07T17:14:54.2320179Z RepositoryProjects: read 2024-08-07T17:14:54.2320637Z SecurityEvents: read 2024-08-07T17:14:54.2321121Z Statuses: read 2024-08-07T17:14:54.2321458Z ##[endgroup] 2024-08-07T17:14:54.2325024Z Secret source: Actions 2024-08-07T17:14:54.2325775Z Prepare workflow directory 2024-08-07T17:14:54.3299893Z Prepare all required actions 2024-08-07T17:14:54.3484537Z Uses: pytorch/pytorch/.github/workflows/_runner-determinator.yml@refs/pull/131248/merge (f779f6b7738020e244184bded4026b37de3f9f24) 2024-08-07T17:14:54.3489656Z ##[group] Inputs 2024-08-07T17:14:54.3490199Z triggering_actor: zdevito 2024-08-07T17:14:54.3490803Z issue_owner: zdevito 2024-08-07T17:14:54.3491356Z curr_branch: gh/zdevito/267/head 2024-08-07T17:14:54.3491903Z curr_ref_type: branch 2024-08-07T17:14:54.3492405Z issue_number: 5132 2024-08-07T17:14:54.3492828Z ##[endgroup] 2024-08-07T17:14:54.3493826Z Complete job name: get-label-type / runner-determinator 2024-08-07T17:14:54.4448560Z ##[group]Run cat < runner_determinator.py 2024-08-07T17:14:54.4450441Z cat < runner_determinator.py 2024-08-07T17:14:54.4451153Z # flake8: noqa: G004 2024-08-07T17:14:54.4451635Z  2024-08-07T17:14:54.4451972Z """ 2024-08-07T17:14:54.4452766Z This runner determinator is used to determine which set of runners to run a 2024-08-07T17:14:54.4453921Z GitHub job on. It uses the first comment of a GitHub issue (by default 2024-08-07T17:14:54.4455024Z https://github.com/pytorch/test-infra/issues/5132) as a user list to determine 2024-08-07T17:14:54.4456304Z which users will get their jobs to run on experimental runners. This user list 2024-08-07T17:14:54.4457518Z is also a comma separated list of additional features or experiments which the 2024-08-07T17:14:54.4458379Z user could be opted in to. 2024-08-07T17:14:54.4458909Z  2024-08-07T17:14:54.4459485Z The user list has the following rules: 2024-08-07T17:14:54.4460014Z  2024-08-07T17:14:54.4460570Z - Users are GitHub usernames with the @ prefix 2024-08-07T17:14:54.4461427Z - If the first line is a "*" then all users will use the new runners 2024-08-07T17:14:54.4462366Z - If the first line is a "!" then all users will use the old runners 2024-08-07T17:14:54.4463511Z - Each user is also a comma-separated list of features/experiments to enable 2024-08-07T17:14:54.4464647Z - A "#" prefix indicates the user is opted out of the new runners but is opting 2024-08-07T17:14:54.4465565Z  into features/experiments. 2024-08-07T17:14:54.4466447Z  2024-08-07T17:14:54.4466824Z Example user list: 2024-08-07T17:14:54.4467393Z  2024-08-07T17:14:54.4467716Z  @User1 2024-08-07T17:14:54.4468128Z  @User2,amz2023 2024-08-07T17:14:54.4468744Z  #@UserOptOutOfNewRunner,amz2023 2024-08-07T17:14:54.4469300Z """ 2024-08-07T17:14:54.4469649Z  2024-08-07T17:14:54.4470122Z import logging 2024-08-07T17:14:54.4470524Z import os 2024-08-07T17:14:54.4470997Z from argparse import ArgumentParser 2024-08-07T17:14:54.4471684Z from logging import LogRecord 2024-08-07T17:14:54.4472235Z from typing import Any, Iterable 2024-08-07T17:14:54.4472780Z  2024-08-07T17:14:54.4473259Z from github import Auth, Github 2024-08-07T17:14:54.4473800Z from github.Issue import Issue 2024-08-07T17:14:54.4474332Z  2024-08-07T17:14:54.4475085Z  2024-08-07T17:14:54.4475607Z WORKFLOW_LABEL_META = "" # use meta runners 2024-08-07T17:14:54.4476498Z WORKFLOW_LABEL_LF = "lf." # use runners from the linux foundation 2024-08-07T17:14:54.4477659Z WORKFLOW_LABEL_LF_CANARY = "lf.c." # use canary runners from the linux foundation 2024-08-07T17:14:54.4478462Z  2024-08-07T17:14:54.4478854Z RUNNER_AMI_LEGACY = "" 2024-08-07T17:14:54.4479430Z RUNNER_AMI_AMZ2023 = "amz2023" 2024-08-07T17:14:54.4479905Z  2024-08-07T17:14:54.4480394Z GITHUB_OUTPUT = os.getenv("GITHUB_OUTPUT", "") 2024-08-07T17:14:54.4481150Z GH_OUTPUT_KEY_AMI = "runner-ami" 2024-08-07T17:14:54.4481780Z GH_OUTPUT_KEY_LABEL_TYPE = "label-type" 2024-08-07T17:14:54.4482308Z  2024-08-07T17:14:54.4482708Z  2024-08-07T17:14:54.4483128Z class ColorFormatter(logging.Formatter): 2024-08-07T17:14:54.4483906Z  """Color codes the log messages based on the log level""" 2024-08-07T17:14:54.4484658Z  2024-08-07T17:14:54.4485023Z  COLORS = { 2024-08-07T17:14:54.4485472Z  "WARNING": "\033[33m", # Yellow 2024-08-07T17:14:54.4486148Z  "ERROR": "\033[31m", # Red 2024-08-07T17:14:54.4486742Z  "CRITICAL": "\033[31m", # Red 2024-08-07T17:14:54.4487586Z  "INFO": "\033[0m", # Reset 2024-08-07T17:14:54.4488294Z  "DEBUG": "\033[0m", # Reset 2024-08-07T17:14:54.4488828Z  } 2024-08-07T17:14:54.4489152Z  2024-08-07T17:14:54.4489690Z  def format(self, record: LogRecord) -> str: 2024-08-07T17:14:54.4490627Z  log_color = self.COLORS.get(record.levelname, "\033[0m") # Default to reset 2024-08-07T17:14:54.4491901Z  record.msg = f"{log_color}{record.msg}\033[0m" 2024-08-07T17:14:54.4492719Z  return super().format(record) 2024-08-07T17:14:54.4493413Z  2024-08-07T17:14:54.4493774Z  2024-08-07T17:14:54.4494237Z handler = logging.StreamHandler() 2024-08-07T17:14:54.4495093Z handler.setFormatter(ColorFormatter(fmt="%(levelname)-8s: %(message)s")) 2024-08-07T17:14:54.4495935Z  2024-08-07T17:14:54.4496464Z log = logging.getLogger(os.path.basename(__file__)) 2024-08-07T17:14:54.4497164Z log.addHandler(handler) 2024-08-07T17:14:54.4497697Z log.setLevel(logging.INFO) 2024-08-07T17:14:54.4498246Z  2024-08-07T17:14:54.4498547Z  2024-08-07T17:14:54.4499058Z def set_github_output(key: str, value: str) -> None: 2024-08-07T17:14:54.4499774Z  """ 2024-08-07T17:14:54.4500359Z  Defines outputs of the github action that invokes this script 2024-08-07T17:14:54.4501097Z  """ 2024-08-07T17:14:54.4501557Z  if not GITHUB_OUTPUT: 2024-08-07T17:14:54.4502886Z  # See https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ for deprecation notice 2024-08-07T17:14:54.4504530Z  log.warning( 2024-08-07T17:14:54.4505692Z  "No env var found for GITHUB_OUTPUT, you must be running this code locally. Falling back to the deprecated print method." 2024-08-07T17:14:54.4506816Z  ) 2024-08-07T17:14:54.4507323Z  print(f"::set-output name={key}::{value}") 2024-08-07T17:14:54.4508001Z  return 2024-08-07T17:14:54.4508421Z  2024-08-07T17:14:54.4508799Z  with open(GITHUB_OUTPUT, "a") as f: 2024-08-07T17:14:54.4509580Z  log.info(f"Setting output: {key}='{value}'") 2024-08-07T17:14:54.4510252Z  f.write(f"{key}={value}\n") 2024-08-07T17:14:54.4510747Z  2024-08-07T17:14:54.4511189Z  2024-08-07T17:14:54.4511582Z def parse_args() -> Any: 2024-08-07T17:14:54.4512223Z  parser = ArgumentParser("Get dynamic rollout settings") 2024-08-07T17:14:54.4513373Z  parser.add_argument("--github-token", type=str, required=True, help="GitHub token") 2024-08-07T17:14:54.4514261Z  parser.add_argument( 2024-08-07T17:14:54.4515069Z  "--github-issue-repo", 2024-08-07T17:14:54.4515982Z  type=str, 2024-08-07T17:14:54.4516476Z  required=False, 2024-08-07T17:14:54.4516992Z  default="pytorch/test-infra", 2024-08-07T17:14:54.4517732Z  help="GitHub repo to get the issue", 2024-08-07T17:14:54.4518313Z  ) 2024-08-07T17:14:54.4518668Z  parser.add_argument( 2024-08-07T17:14:54.4519257Z  "--github-repo", 2024-08-07T17:14:54.4519773Z  type=str, 2024-08-07T17:14:54.4520199Z  required=True, 2024-08-07T17:14:54.4520828Z  help="GitHub repo where CI is running", 2024-08-07T17:14:54.4521415Z  ) 2024-08-07T17:14:54.4521779Z  parser.add_argument( 2024-08-07T17:14:54.4522606Z  "--github-issue", type=int, required=True, help="GitHub issue number" 2024-08-07T17:14:54.4523366Z  ) 2024-08-07T17:14:54.4523767Z  parser.add_argument( 2024-08-07T17:14:54.4524775Z  "--github-actor", type=str, required=True, help="GitHub triggering_actor" 2024-08-07T17:14:54.4525604Z  ) 2024-08-07T17:14:54.4525989Z  parser.add_argument( 2024-08-07T17:14:54.4526837Z  "--github-issue-owner", type=str, required=True, help="GitHub issue owner" 2024-08-07T17:14:54.4527657Z  ) 2024-08-07T17:14:54.4528043Z  parser.add_argument( 2024-08-07T17:14:54.4528884Z  "--github-branch", type=str, required=True, help="Current GitHub branch or tag" 2024-08-07T17:14:54.4529726Z  ) 2024-08-07T17:14:54.4530115Z  parser.add_argument( 2024-08-07T17:14:54.4530648Z  "--github-ref-type", 2024-08-07T17:14:54.4531177Z  type=str, 2024-08-07T17:14:54.4531626Z  required=True, 2024-08-07T17:14:54.4532259Z  help="Current GitHub ref type, branch or tag", 2024-08-07T17:14:54.4532902Z  ) 2024-08-07T17:14:54.4533257Z  2024-08-07T17:14:54.4533730Z  return parser.parse_args() 2024-08-07T17:14:54.4534240Z  2024-08-07T17:14:54.4534567Z  2024-08-07T17:14:54.4535078Z def get_gh_client(github_token: str) -> Github: 2024-08-07T17:14:54.4535746Z  auth = Auth.Token(github_token) 2024-08-07T17:14:54.4536312Z  return Github(auth=auth) 2024-08-07T17:14:54.4536892Z  2024-08-07T17:14:54.4537190Z  2024-08-07T17:14:54.4537745Z def get_issue(gh: Github, repo: str, issue_num: int) -> Issue: 2024-08-07T17:14:54.4538560Z  repo = gh.get_repo(repo) 2024-08-07T17:14:54.4539121Z  return repo.get_issue(number=issue_num) 2024-08-07T17:14:54.4539917Z  2024-08-07T17:14:54.4540313Z  2024-08-07T17:14:54.4540653Z def get_potential_pr_author( 2024-08-07T17:14:54.4541403Z  gh: Github, repo: str, username: str, ref_type: str, ref_name: str 2024-08-07T17:14:54.4542198Z ) -> str: 2024-08-07T17:14:54.4542815Z  # If the trigger was a new tag added by a bot, this is a ciflow case 2024-08-07T17:14:54.4543981Z  # Fetch the actual username from the original PR. The PR number is 2024-08-07T17:14:54.4544991Z  # embedded in the tag name: ciflow// 2024-08-07T17:14:54.4545811Z  if username == "pytorch-bot[bot]" and ref_type == "tag": 2024-08-07T17:14:54.4546563Z  split_tag = ref_name.split("/") 2024-08-07T17:14:54.4547182Z  if ( 2024-08-07T17:14:54.4547631Z  len(split_tag) == 3 2024-08-07T17:14:54.4548200Z  and split_tag[0] == "ciflow" 2024-08-07T17:14:54.4548907Z  and split_tag[2].isnumeric() 2024-08-07T17:14:54.4549477Z  ): 2024-08-07T17:14:54.4549880Z  pr_number = split_tag[2] 2024-08-07T17:14:54.4550509Z  try: 2024-08-07T17:14:54.4551044Z  repository = gh.get_repo(repo) 2024-08-07T17:14:54.4551752Z  pull = repository.get_pull(number=int(pr_number)) 2024-08-07T17:14:54.4552547Z  except Exception as e: 2024-08-07T17:14:54.4553174Z  raise Exception( # noqa: TRY002 2024-08-07T17:14:54.4553958Z  f"issue with pull request {pr_number} from repo {repository}" 2024-08-07T17:14:54.4555544Z  ) from e 2024-08-07T17:14:54.4556216Z  return pull.user.login 2024-08-07T17:14:54.4557083Z  # In all other cases, return the original input username 2024-08-07T17:14:54.4557800Z  return username 2024-08-07T17:14:54.4558300Z  2024-08-07T17:14:54.4558717Z  2024-08-07T17:14:54.4559168Z def is_exception_branch(branch: str) -> bool: 2024-08-07T17:14:54.4560056Z  return branch.split("/")[0] in {"main", "nightly", "release", "landchecks"} 2024-08-07T17:14:54.4561151Z  2024-08-07T17:14:54.4561485Z  2024-08-07T17:14:54.4562166Z def get_workflow_type(issue: Issue, workflow_requestors: Iterable[str]) -> str: 2024-08-07T17:14:54.4563086Z  try: 2024-08-07T17:14:54.4563651Z  first_comment = issue.get_comments()[0].body.strip("\n\t ") 2024-08-07T17:14:54.4564355Z  2024-08-07T17:14:54.4564835Z  if first_comment[0] == "!": 2024-08-07T17:14:54.4565664Z  log.info("LF Workflows are disabled for everyone. Using meta runners.") 2024-08-07T17:14:54.4566529Z  return WORKFLOW_LABEL_META 2024-08-07T17:14:54.4567213Z  elif first_comment[0] == "*": 2024-08-07T17:14:54.4568045Z  log.info("LF Workflows are enabled for everyone. Using LF runners.") 2024-08-07T17:14:54.4568844Z  return WORKFLOW_LABEL_LF 2024-08-07T17:14:54.4569479Z  else: 2024-08-07T17:14:54.4569947Z  all_opted_in_users = { 2024-08-07T17:14:54.4570566Z  usr_raw.strip("\n\t@ ").split(",")[0] 2024-08-07T17:14:54.4571348Z  for usr_raw in first_comment.split() 2024-08-07T17:14:54.4571964Z  } 2024-08-07T17:14:54.4572408Z  opted_in_requestors = { 2024-08-07T17:14:54.4573244Z  usr for usr in workflow_requestors if usr in all_opted_in_users 2024-08-07T17:14:54.4574024Z  } 2024-08-07T17:14:54.4574466Z  if opted_in_requestors: 2024-08-07T17:14:54.4575075Z  log.info( 2024-08-07T17:14:54.4575920Z  f"LF Workflows are enabled for {', '.join(opted_in_requestors)}. Using LF runners." 2024-08-07T17:14:54.4576978Z  ) 2024-08-07T17:14:54.4577521Z  return WORKFLOW_LABEL_LF 2024-08-07T17:14:54.4578124Z  else: 2024-08-07T17:14:54.4578580Z  log.info( 2024-08-07T17:14:54.4579505Z  f"LF Workflows are disabled for {', '.join(workflow_requestors)}. Using meta runners." 2024-08-07T17:14:54.4580397Z  ) 2024-08-07T17:14:54.4580869Z  return WORKFLOW_LABEL_META 2024-08-07T17:14:54.4581536Z  2024-08-07T17:14:54.4581920Z  except Exception as e: 2024-08-07T17:14:54.4582395Z  log.error( 2024-08-07T17:14:54.4583321Z  f"Failed to get determine workflow type. Falling back to meta runners. Exception: {e}" 2024-08-07T17:14:54.4584221Z  ) 2024-08-07T17:14:54.4584636Z  return WORKFLOW_LABEL_META 2024-08-07T17:14:54.4585254Z  2024-08-07T17:14:54.4585594Z  2024-08-07T17:14:54.4585926Z def get_optin_feature( 2024-08-07T17:14:54.4586797Z  issue: Issue, workflow_requestors: Iterable[str], feature: str, fallback: str 2024-08-07T17:14:54.4587634Z ) -> str: 2024-08-07T17:14:54.4587983Z  try: 2024-08-07T17:14:54.4588688Z  first_comment = issue.get_comments()[0].body.strip("\n\t ") 2024-08-07T17:14:54.4589679Z  userlist = {u.lstrip("#").strip("\n\t@ ") for u in first_comment.split()} 2024-08-07T17:14:54.4590519Z  all_opted_in_users = set() 2024-08-07T17:14:54.4591111Z  for user in userlist: 2024-08-07T17:14:54.4591739Z  for i in user.split(","): 2024-08-07T17:14:54.4592341Z  if i == feature: 2024-08-07T17:14:54.4593027Z  all_opted_in_users.add(user.split(",")[0]) 2024-08-07T17:14:54.4593730Z  opted_in_requestors = { 2024-08-07T17:14:54.4594529Z  usr for usr in workflow_requestors if usr in all_opted_in_users 2024-08-07T17:14:54.4595709Z  } 2024-08-07T17:14:54.4596309Z  2024-08-07T17:14:54.4596737Z  if opted_in_requestors: 2024-08-07T17:14:54.4597325Z  log.info( 2024-08-07T17:14:54.4598230Z  f"Feature {feature} is enabled for {', '.join(opted_in_requestors)}. Using feature {feature}." 2024-08-07T17:14:54.4599149Z  ) 2024-08-07T17:14:54.4599616Z  return feature 2024-08-07T17:14:54.4600126Z  else: 2024-08-07T17:14:54.4600546Z  log.info( 2024-08-07T17:14:54.4601521Z  f"Feature {feature} is disabled for {', '.join(workflow_requestors)}. Using fallback \"{fallback}\"." 2024-08-07T17:14:54.4602471Z  ) 2024-08-07T17:14:54.4602903Z  return fallback 2024-08-07T17:14:54.4603482Z  2024-08-07T17:14:54.4603834Z  except Exception as e: 2024-08-07T17:14:54.4604382Z  log.error( 2024-08-07T17:14:54.4605465Z  f'Failed to determine if user has opted-in to feature {feature}. Using fallback "{fallback}". Exception: {e}' 2024-08-07T17:14:54.4606467Z  ) 2024-08-07T17:14:54.4606879Z  return fallback 2024-08-07T17:14:54.4607436Z  2024-08-07T17:14:54.4607747Z  2024-08-07T17:14:54.4608115Z def main() -> None: 2024-08-07T17:14:54.4608671Z  args = parse_args() 2024-08-07T17:14:54.4609104Z  2024-08-07T17:14:54.4609781Z  if args.github_ref_type == "branch" and is_exception_branch(args.github_branch): 2024-08-07T17:14:54.4611003Z  log.info(f"Exception branch: '{args.github_branch}', using meta runners") 2024-08-07T17:14:54.4612045Z  label_type = WORKFLOW_LABEL_META 2024-08-07T17:14:54.4612697Z  runner_ami = RUNNER_AMI_LEGACY 2024-08-07T17:14:54.4613348Z  else: 2024-08-07T17:14:54.4613739Z  try: 2024-08-07T17:14:54.4614242Z  gh = get_gh_client(args.github_token) 2024-08-07T17:14:54.4615272Z  # The default issue we use - https://github.com/pytorch/test-infra/issues/5132 2024-08-07T17:14:54.4616348Z  issue = get_issue(gh, args.github_issue_repo, args.github_issue) 2024-08-07T17:14:54.4617176Z  username = get_potential_pr_author( 2024-08-07T17:14:54.4617864Z  gh, 2024-08-07T17:14:54.4618381Z  args.github_repo, 2024-08-07T17:14:54.4618929Z  args.github_actor, 2024-08-07T17:14:54.4619586Z  args.github_ref_type, 2024-08-07T17:14:54.4620237Z  args.github_branch, 2024-08-07T17:14:54.4620748Z  ) 2024-08-07T17:14:54.4621304Z  label_type = get_workflow_type( 2024-08-07T17:14:54.4621903Z  issue, 2024-08-07T17:14:54.4622432Z  ( 2024-08-07T17:14:54.4622911Z  args.github_issue_owner, 2024-08-07T17:14:54.4623524Z  username, 2024-08-07T17:14:54.4624095Z  ), 2024-08-07T17:14:54.4624497Z  ) 2024-08-07T17:14:54.4624997Z  runner_ami = get_optin_feature( 2024-08-07T17:14:54.4625642Z  issue=issue, 2024-08-07T17:14:54.4626167Z  workflow_requestors=( 2024-08-07T17:14:54.4626830Z  args.github_issue_owner, 2024-08-07T17:14:54.4627484Z  username, 2024-08-07T17:14:54.4627973Z  ), 2024-08-07T17:14:54.4628494Z  feature=RUNNER_AMI_AMZ2023, 2024-08-07T17:14:54.4629185Z  fallback=RUNNER_AMI_LEGACY, 2024-08-07T17:14:54.4629733Z  ) 2024-08-07T17:14:54.4630184Z  except Exception as e: 2024-08-07T17:14:54.4630939Z  log.error( 2024-08-07T17:14:54.4631700Z  f"Failed to get issue. Falling back to meta runners. Exception: {e}" 2024-08-07T17:14:54.4632492Z  ) 2024-08-07T17:14:54.4633082Z  label_type = WORKFLOW_LABEL_META 2024-08-07T17:14:54.4633757Z  runner_ami = RUNNER_AMI_LEGACY 2024-08-07T17:14:54.4634274Z  2024-08-07T17:14:54.4635123Z  # For Canary builds use canary runners 2024-08-07T17:14:54.4636133Z  if args.github_repo == "pytorch/pytorch-canary" and label_type == WORKFLOW_LABEL_LF: 2024-08-07T17:14:54.4637069Z  label_type = WORKFLOW_LABEL_LF_CANARY 2024-08-07T17:14:54.4637752Z  2024-08-07T17:14:54.4638295Z  set_github_output(GH_OUTPUT_KEY_LABEL_TYPE, label_type) 2024-08-07T17:14:54.4639081Z  set_github_output(GH_OUTPUT_KEY_AMI, runner_ami) 2024-08-07T17:14:54.4639799Z  2024-08-07T17:14:54.4640152Z  2024-08-07T17:14:54.4640494Z if __name__ == "__main__": 2024-08-07T17:14:54.4641078Z  main() 2024-08-07T17:14:54.4641493Z EOF 2024-08-07T17:14:54.4641826Z  2024-08-07T17:14:54.4642266Z cat runner_determinator.py 2024-08-07T17:14:54.5175553Z shell: /usr/bin/bash -e {0} 2024-08-07T17:14:54.5176333Z env: 2024-08-07T17:14:54.5177092Z GITHUB_TOKEN: *** 2024-08-07T17:14:54.5177561Z ISSUE_NUMBER: 5132 2024-08-07T17:14:54.5178036Z TRIGGERING_ACTOR: zdevito 2024-08-07T17:14:54.5178496Z ISSUE_OWNER: zdevito 2024-08-07T17:14:54.5178927Z ##[endgroup] 2024-08-07T17:14:54.5640707Z # flake8: noqa: G004 2024-08-07T17:14:54.5641083Z 2024-08-07T17:14:54.5641608Z """ 2024-08-07T17:14:54.5643180Z This runner determinator is used to determine which set of runners to run a 2024-08-07T17:14:54.5644295Z GitHub job on. It uses the first comment of a GitHub issue (by default 2024-08-07T17:14:54.5645587Z https://github.com/pytorch/test-infra/issues/5132) as a user list to determine 2024-08-07T17:14:54.5646658Z which users will get their jobs to run on experimental runners. This user list 2024-08-07T17:14:54.5647817Z is also a comma separated list of additional features or experiments which the 2024-08-07T17:14:54.5648582Z user could be opted in to. 2024-08-07T17:14:54.5648895Z 2024-08-07T17:14:54.5649067Z The user list has the following rules: 2024-08-07T17:14:54.5649434Z 2024-08-07T17:14:54.5649799Z - Users are GitHub usernames with the @ prefix 2024-08-07T17:14:54.5650574Z - If the first line is a "*" then all users will use the new runners 2024-08-07T17:14:54.5651494Z - If the first line is a "!" then all users will use the old runners 2024-08-07T17:14:54.5652598Z - Each user is also a comma-separated list of features/experiments to enable 2024-08-07T17:14:54.5653643Z - A "#" prefix indicates the user is opted out of the new runners but is opting 2024-08-07T17:14:54.5654443Z into features/experiments. 2024-08-07T17:14:54.5654733Z 2024-08-07T17:14:54.5655002Z Example user list: 2024-08-07T17:14:54.5655233Z 2024-08-07T17:14:54.5655359Z @User1 2024-08-07T17:14:54.5655745Z @User2,amz2023 2024-08-07T17:14:54.5656242Z #@UserOptOutOfNewRunner,amz2023 2024-08-07T17:14:54.5656703Z """ 2024-08-07T17:14:54.5656918Z 2024-08-07T17:14:54.5657049Z import logging 2024-08-07T17:14:54.5657485Z import os 2024-08-07T17:14:54.5657834Z from argparse import ArgumentParser 2024-08-07T17:14:54.5658383Z from logging import LogRecord 2024-08-07T17:14:54.5658943Z from typing import Any, Iterable 2024-08-07T17:14:54.5659266Z 2024-08-07T17:14:54.5659426Z from github import Auth, Github 2024-08-07T17:14:54.5659937Z from github.Issue import Issue 2024-08-07T17:14:54.5660342Z 2024-08-07T17:14:54.5660347Z 2024-08-07T17:14:54.5660545Z WORKFLOW_LABEL_META = "" # use meta runners 2024-08-07T17:14:54.5661284Z WORKFLOW_LABEL_LF = "lf." # use runners from the linux foundation 2024-08-07T17:14:54.5662430Z WORKFLOW_LABEL_LF_CANARY = "lf.c." # use canary runners from the linux foundation 2024-08-07T17:14:54.5663184Z 2024-08-07T17:14:54.5663331Z RUNNER_AMI_LEGACY = "" 2024-08-07T17:14:54.5663781Z RUNNER_AMI_AMZ2023 = "amz2023" 2024-08-07T17:14:54.5664069Z 2024-08-07T17:14:54.5664277Z GITHUB_OUTPUT = os.getenv("GITHUB_OUTPUT", "") 2024-08-07T17:14:54.5664977Z GH_OUTPUT_KEY_AMI = "runner-ami" 2024-08-07T17:14:54.5665548Z GH_OUTPUT_KEY_LABEL_TYPE = "label-type" 2024-08-07T17:14:54.5665896Z 2024-08-07T17:14:54.5665900Z 2024-08-07T17:14:54.5666087Z class ColorFormatter(logging.Formatter): 2024-08-07T17:14:54.5666839Z """Color codes the log messages based on the log level""" 2024-08-07T17:14:54.5667332Z 2024-08-07T17:14:54.5667459Z COLORS = { 2024-08-07T17:14:54.5667849Z "WARNING": "\033[33m", # Yellow 2024-08-07T17:14:54.5668420Z "ERROR": "\033[31m", # Red 2024-08-07T17:14:54.5668936Z "CRITICAL": "\033[31m", # Red 2024-08-07T17:14:54.5669437Z "INFO": "\033[0m", # Reset 2024-08-07T17:14:54.5669976Z "DEBUG": "\033[0m", # Reset 2024-08-07T17:14:54.5670453Z } 2024-08-07T17:14:54.5670620Z 2024-08-07T17:14:54.5670910Z def format(self, record: LogRecord) -> str: 2024-08-07T17:14:54.5671779Z log_color = self.COLORS.get(record.levelname, "\033[0m") # Default to reset 2024-08-07T17:14:54.5672636Z record.msg = f"{log_color}{record.msg}\033[0m" 2024-08-07T17:14:54.5673254Z return super().format(record) 2024-08-07T17:14:54.5673646Z 2024-08-07T17:14:54.5673651Z 2024-08-07T17:14:54.5673819Z handler = logging.StreamHandler() 2024-08-07T17:14:54.5674617Z handler.setFormatter(ColorFormatter(fmt="%(levelname)-8s: %(message)s")) 2024-08-07T17:14:54.5675490Z 2024-08-07T17:14:54.5675784Z log = logging.getLogger(os.path.basename(__file__)) 2024-08-07T17:14:54.5676666Z log.addHandler(handler) 2024-08-07T17:14:54.5677141Z log.setLevel(logging.INFO) 2024-08-07T17:14:54.5677431Z 2024-08-07T17:14:54.5677474Z 2024-08-07T17:14:54.5677791Z def set_github_output(key: str, value: str) -> None: 2024-08-07T17:14:54.5678450Z """ 2024-08-07T17:14:54.5678932Z Defines outputs of the github action that invokes this script 2024-08-07T17:14:54.5679603Z """ 2024-08-07T17:14:54.5680018Z if not GITHUB_OUTPUT: 2024-08-07T17:14:54.5681336Z # See https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ for deprecation notice 2024-08-07T17:14:54.5682638Z log.warning( 2024-08-07T17:14:54.5683665Z "No env var found for GITHUB_OUTPUT, you must be running this code locally. Falling back to the deprecated print method." 2024-08-07T17:14:54.5684688Z ) 2024-08-07T17:14:54.5708620Z print(f"::set-output name={key}::{value}") 2024-08-07T17:14:54.5709382Z return 2024-08-07T17:14:54.5709627Z 2024-08-07T17:14:54.5709842Z with open(GITHUB_OUTPUT, "a") as f: 2024-08-07T17:14:54.5710474Z log.info(f"Setting output: {key}='{value}'") 2024-08-07T17:14:54.5711171Z f.write(f"{key}={value}\n") 2024-08-07T17:14:54.5711500Z 2024-08-07T17:14:54.5711512Z 2024-08-07T17:14:54.5711734Z def parse_args() -> Any: 2024-08-07T17:14:54.5712264Z parser = ArgumentParser("Get dynamic rollout settings") 2024-08-07T17:14:54.5713380Z parser.add_argument("--github-token", type=str, required=True, help="GitHub token") 2024-08-07T17:14:54.5714209Z parser.add_argument( 2024-08-07T17:14:54.5715045Z "--github-issue-repo", 2024-08-07T17:14:54.5715547Z type=str, 2024-08-07T17:14:54.5715928Z required=False, 2024-08-07T17:14:54.5716392Z default="pytorch/test-infra", 2024-08-07T17:14:54.5717079Z help="GitHub repo to get the issue", 2024-08-07T17:14:54.5717606Z ) 2024-08-07T17:14:54.5717915Z parser.add_argument( 2024-08-07T17:14:54.5718487Z "--github-repo", 2024-08-07T17:14:54.5718901Z type=str, 2024-08-07T17:14:54.5719238Z required=True, 2024-08-07T17:14:54.5719781Z help="GitHub repo where CI is running", 2024-08-07T17:14:54.5720314Z ) 2024-08-07T17:14:54.5720889Z parser.add_argument( 2024-08-07T17:14:54.5721725Z "--github-issue", type=int, required=True, help="GitHub issue number" 2024-08-07T17:14:54.5722432Z ) 2024-08-07T17:14:54.5722797Z parser.add_argument( 2024-08-07T17:14:54.5723605Z "--github-actor", type=str, required=True, help="GitHub triggering_actor" 2024-08-07T17:14:54.5724350Z ) 2024-08-07T17:14:54.5724661Z parser.add_argument( 2024-08-07T17:14:54.5725459Z "--github-issue-owner", type=str, required=True, help="GitHub issue owner" 2024-08-07T17:14:54.5726216Z ) 2024-08-07T17:14:54.5726519Z parser.add_argument( 2024-08-07T17:14:54.5727343Z "--github-branch", type=str, required=True, help="Current GitHub branch or tag" 2024-08-07T17:14:54.5728133Z ) 2024-08-07T17:14:54.5728432Z parser.add_argument( 2024-08-07T17:14:54.5728970Z "--github-ref-type", 2024-08-07T17:14:54.5729427Z type=str, 2024-08-07T17:14:54.5729791Z required=True, 2024-08-07T17:14:54.5730356Z help="Current GitHub ref type, branch or tag", 2024-08-07T17:14:54.5730940Z ) 2024-08-07T17:14:54.5731108Z 2024-08-07T17:14:54.5731268Z return parser.parse_args() 2024-08-07T17:14:54.5731674Z 2024-08-07T17:14:54.5731679Z 2024-08-07T17:14:54.5731954Z def get_gh_client(github_token: str) -> Github: 2024-08-07T17:14:54.5732567Z auth = Auth.Token(github_token) 2024-08-07T17:14:54.5733149Z return Github(auth=auth) 2024-08-07T17:14:54.5733432Z 2024-08-07T17:14:54.5733436Z 2024-08-07T17:14:54.5733809Z def get_issue(gh: Github, repo: str, issue_num: int) -> Issue: 2024-08-07T17:14:54.5734489Z repo = gh.get_repo(repo) 2024-08-07T17:14:54.5735047Z return repo.get_issue(number=issue_num) 2024-08-07T17:14:54.5735643Z 2024-08-07T17:14:54.5735648Z 2024-08-07T17:14:54.5735802Z def get_potential_pr_author( 2024-08-07T17:14:54.5736448Z gh: Github, repo: str, username: str, ref_type: str, ref_name: str 2024-08-07T17:14:54.5737269Z ) -> str: 2024-08-07T17:14:54.5737796Z # If the trigger was a new tag added by a bot, this is a ciflow case 2024-08-07T17:14:54.5738706Z # Fetch the actual username from the original PR. The PR number is 2024-08-07T17:14:54.5739652Z # embedded in the tag name: ciflow// 2024-08-07T17:14:54.5740441Z if username == "pytorch-bot[bot]" and ref_type == "tag": 2024-08-07T17:14:54.5741065Z split_tag = ref_name.split("/") 2024-08-07T17:14:54.5741665Z if ( 2024-08-07T17:14:54.5742034Z len(split_tag) == 3 2024-08-07T17:14:54.5742493Z and split_tag[0] == "ciflow" 2024-08-07T17:14:54.5743103Z and split_tag[2].isnumeric() 2024-08-07T17:14:54.5743595Z ): 2024-08-07T17:14:54.5743944Z pr_number = split_tag[2] 2024-08-07T17:14:54.5744532Z try: 2024-08-07T17:14:54.5744956Z repository = gh.get_repo(repo) 2024-08-07T17:14:54.5745577Z pull = repository.get_pull(number=int(pr_number)) 2024-08-07T17:14:54.5746294Z except Exception as e: 2024-08-07T17:14:54.5746831Z raise Exception( # noqa: TRY002 2024-08-07T17:14:54.5747541Z f"issue with pull request {pr_number} from repo {repository}" 2024-08-07T17:14:54.5748289Z ) from e 2024-08-07T17:14:54.5748720Z return pull.user.login 2024-08-07T17:14:54.5749305Z # In all other cases, return the original input username 2024-08-07T17:14:54.5750010Z return username 2024-08-07T17:14:54.5750240Z 2024-08-07T17:14:54.5750245Z 2024-08-07T17:14:54.5750534Z def is_exception_branch(branch: str) -> bool: 2024-08-07T17:14:54.5751315Z return branch.split("/")[0] in {"main", "nightly", "release", "landchecks"} 2024-08-07T17:14:54.5751920Z 2024-08-07T17:14:54.5751931Z 2024-08-07T17:14:54.5752462Z def get_workflow_type(issue: Issue, workflow_requestors: Iterable[str]) -> str: 2024-08-07T17:14:54.5753224Z try: 2024-08-07T17:14:54.5753697Z first_comment = issue.get_comments()[0].body.strip("\n\t ") 2024-08-07T17:14:54.5754216Z 2024-08-07T17:14:54.5754593Z if first_comment[0] == "!": 2024-08-07T17:14:54.5755719Z log.info("LF Workflows are disabled for everyone. Using meta runners.") 2024-08-07T17:14:54.5756489Z return WORKFLOW_LABEL_META 2024-08-07T17:14:54.5757090Z elif first_comment[0] == "*": 2024-08-07T17:14:54.5757821Z log.info("LF Workflows are enabled for everyone. Using LF runners.") 2024-08-07T17:14:54.5758564Z return WORKFLOW_LABEL_LF 2024-08-07T17:14:54.5759078Z else: 2024-08-07T17:14:54.5759491Z all_opted_in_users = { 2024-08-07T17:14:54.5760022Z usr_raw.strip("\n\t@ ").split(",")[0] 2024-08-07T17:14:54.5760668Z for usr_raw in first_comment.split() 2024-08-07T17:14:54.5761251Z } 2024-08-07T17:14:54.5761675Z opted_in_requestors = { 2024-08-07T17:14:54.5762391Z usr for usr in workflow_requestors if usr in all_opted_in_users 2024-08-07T17:14:54.5763079Z } 2024-08-07T17:14:54.5763454Z if opted_in_requestors: 2024-08-07T17:14:54.5763990Z log.info( 2024-08-07T17:14:54.5764816Z f"LF Workflows are enabled for {', '.join(opted_in_requestors)}. Using LF runners." 2024-08-07T17:14:54.5765631Z ) 2024-08-07T17:14:54.5766063Z return WORKFLOW_LABEL_LF 2024-08-07T17:14:54.5766582Z else: 2024-08-07T17:14:54.5766970Z log.info( 2024-08-07T17:14:54.5767829Z f"LF Workflows are disabled for {', '.join(workflow_requestors)}. Using meta runners." 2024-08-07T17:14:54.5768643Z ) 2024-08-07T17:14:54.5769055Z return WORKFLOW_LABEL_META 2024-08-07T17:14:54.5769683Z 2024-08-07T17:14:54.5769846Z except Exception as e: 2024-08-07T17:14:54.5770278Z log.error( 2024-08-07T17:14:54.5771011Z f"Failed to get determine workflow type. Falling back to meta runners. Exception: {e}" 2024-08-07T17:14:54.5771871Z ) 2024-08-07T17:14:54.5772256Z return WORKFLOW_LABEL_META 2024-08-07T17:14:54.5772607Z 2024-08-07T17:14:54.5772611Z 2024-08-07T17:14:54.5772751Z def get_optin_feature( 2024-08-07T17:14:54.5773517Z issue: Issue, workflow_requestors: Iterable[str], feature: str, fallback: str 2024-08-07T17:14:54.5774286Z ) -> str: 2024-08-07T17:14:54.5774625Z try: 2024-08-07T17:14:54.5775186Z first_comment = issue.get_comments()[0].body.strip("\n\t ") 2024-08-07T17:14:54.5776044Z userlist = {u.lstrip("#").strip("\n\t@ ") for u in first_comment.split()} 2024-08-07T17:14:54.5776787Z all_opted_in_users = set() 2024-08-07T17:14:54.5777341Z for user in userlist: 2024-08-07T17:14:54.5777799Z for i in user.split(","): 2024-08-07T17:14:54.5778309Z if i == feature: 2024-08-07T17:14:54.5778932Z all_opted_in_users.add(user.split(",")[0]) 2024-08-07T17:14:54.5779498Z opted_in_requestors = { 2024-08-07T17:14:54.5780151Z usr for usr in workflow_requestors if usr in all_opted_in_users 2024-08-07T17:14:54.5780939Z } 2024-08-07T17:14:54.5781118Z 2024-08-07T17:14:54.5781267Z if opted_in_requestors: 2024-08-07T17:14:54.5781729Z log.info( 2024-08-07T17:14:54.5782657Z f"Feature {feature} is enabled for {', '.join(opted_in_requestors)}. Using feature {feature}." 2024-08-07T17:14:54.5783465Z ) 2024-08-07T17:14:54.5783827Z return feature 2024-08-07T17:14:54.5784324Z else: 2024-08-07T17:14:54.5784644Z log.info( 2024-08-07T17:14:54.5785508Z f"Feature {feature} is disabled for {', '.join(workflow_requestors)}. Using fallback \"{fallback}\"." 2024-08-07T17:14:54.5786474Z ) 2024-08-07T17:14:54.5786795Z return fallback 2024-08-07T17:14:54.5787096Z 2024-08-07T17:14:54.5787267Z except Exception as e: 2024-08-07T17:14:54.5787775Z log.error( 2024-08-07T17:14:54.5788841Z f'Failed to determine if user has opted-in to feature {feature}. Using fallback "{fallback}". Exception: {e}' 2024-08-07T17:14:54.5789842Z ) 2024-08-07T17:14:54.5790262Z return fallback 2024-08-07T17:14:54.5790510Z 2024-08-07T17:14:54.5790515Z 2024-08-07T17:14:54.5790718Z def main() -> None: 2024-08-07T17:14:54.5791093Z args = parse_args() 2024-08-07T17:14:54.5791435Z 2024-08-07T17:14:54.5791848Z if args.github_ref_type == "branch" and is_exception_branch(args.github_branch): 2024-08-07T17:14:54.5792945Z log.info(f"Exception branch: '{args.github_branch}', using meta runners") 2024-08-07T17:14:54.5793874Z label_type = WORKFLOW_LABEL_META 2024-08-07T17:14:54.5794506Z runner_ami = RUNNER_AMI_LEGACY 2024-08-07T17:14:54.5795596Z else: 2024-08-07T17:14:54.5795907Z try: 2024-08-07T17:14:54.5796418Z gh = get_gh_client(args.github_token) 2024-08-07T17:14:54.5797381Z # The default issue we use - https://github.com/pytorch/test-infra/issues/5132 2024-08-07T17:14:54.5798339Z issue = get_issue(gh, args.github_issue_repo, args.github_issue) 2024-08-07T17:14:54.5799185Z username = get_potential_pr_author( 2024-08-07T17:14:54.5799729Z gh, 2024-08-07T17:14:54.5800084Z args.github_repo, 2024-08-07T17:14:54.5800634Z args.github_actor, 2024-08-07T17:14:54.5801142Z args.github_ref_type, 2024-08-07T17:14:54.5801608Z args.github_branch, 2024-08-07T17:14:54.5802160Z ) 2024-08-07T17:14:54.5802570Z label_type = get_workflow_type( 2024-08-07T17:14:54.5803053Z issue, 2024-08-07T17:14:54.5803519Z ( 2024-08-07T17:14:54.5803934Z args.github_issue_owner, 2024-08-07T17:14:54.5804620Z username, 2024-08-07T17:14:54.5805151Z ), 2024-08-07T17:14:54.5805511Z ) 2024-08-07T17:14:54.5805866Z runner_ami = get_optin_feature( 2024-08-07T17:14:54.5806489Z issue=issue, 2024-08-07T17:14:54.5806947Z workflow_requestors=( 2024-08-07T17:14:54.5807456Z args.github_issue_owner, 2024-08-07T17:14:54.5808051Z username, 2024-08-07T17:14:54.5808495Z ), 2024-08-07T17:14:54.5808882Z feature=RUNNER_AMI_AMZ2023, 2024-08-07T17:14:54.5809488Z fallback=RUNNER_AMI_LEGACY, 2024-08-07T17:14:54.5809995Z ) 2024-08-07T17:14:54.5810346Z except Exception as e: 2024-08-07T17:14:54.5810866Z log.error( 2024-08-07T17:14:54.5811489Z f"Failed to get issue. Falling back to meta runners. Exception: {e}" 2024-08-07T17:14:54.5812186Z ) 2024-08-07T17:14:54.5812665Z label_type = WORKFLOW_LABEL_META 2024-08-07T17:14:54.5813239Z runner_ami = RUNNER_AMI_LEGACY 2024-08-07T17:14:54.5813597Z 2024-08-07T17:14:54.5813771Z # For Canary builds use canary runners 2024-08-07T17:14:54.5814762Z if args.github_repo == "pytorch/pytorch-canary" and label_type == WORKFLOW_LABEL_LF: 2024-08-07T17:14:54.5815662Z label_type = WORKFLOW_LABEL_LF_CANARY 2024-08-07T17:14:54.5816034Z 2024-08-07T17:14:54.5816404Z set_github_output(GH_OUTPUT_KEY_LABEL_TYPE, label_type) 2024-08-07T17:14:54.5817080Z set_github_output(GH_OUTPUT_KEY_AMI, runner_ami) 2024-08-07T17:14:54.5817546Z 2024-08-07T17:14:54.5817551Z 2024-08-07T17:14:54.5817692Z if __name__ == "__main__": 2024-08-07T17:14:54.5818169Z main() 2024-08-07T17:14:54.6007955Z ##[group]Run python3 -m pip install urllib3==1.26.18 PyGithub==2.3.0 2024-08-07T17:14:54.6008986Z python3 -m pip install urllib3==1.26.18 PyGithub==2.3.0 2024-08-07T17:14:54.6075573Z shell: /usr/bin/bash -e {0} 2024-08-07T17:14:54.6076204Z env: 2024-08-07T17:14:54.6076940Z GITHUB_TOKEN: *** 2024-08-07T17:14:54.6077411Z ISSUE_NUMBER: 5132 2024-08-07T17:14:54.6077882Z TRIGGERING_ACTOR: zdevito 2024-08-07T17:14:54.6078332Z ISSUE_OWNER: zdevito 2024-08-07T17:14:54.6078751Z ##[endgroup] 2024-08-07T17:14:56.5217641Z Defaulting to user installation because normal site-packages is not writeable 2024-08-07T17:14:57.8860430Z Collecting urllib3==1.26.18 2024-08-07T17:14:57.9748259Z Downloading urllib3-1.26.18-py2.py3-none-any.whl (143 kB) 2024-08-07T17:14:58.0182345Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.8/143.8 KB 3.3 MB/s eta 0:00:00 2024-08-07T17:14:58.0531694Z Collecting PyGithub==2.3.0 2024-08-07T17:14:58.0735101Z Downloading PyGithub-2.3.0-py3-none-any.whl (354 kB) 2024-08-07T17:14:58.1019836Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 354.4/354.4 KB 13.2 MB/s eta 0:00:00 2024-08-07T17:14:58.1528099Z Collecting Deprecated 2024-08-07T17:14:58.1737008Z Downloading Deprecated-1.2.14-py2.py3-none-any.whl (9.6 kB) 2024-08-07T17:14:58.2112954Z Collecting pynacl>=1.4.0 2024-08-07T17:14:58.2319235Z Downloading PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB) 2024-08-07T17:14:58.2598365Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 856.7/856.7 KB 33.4 MB/s eta 0:00:00 2024-08-07T17:14:58.2625673Z Requirement already satisfied: requests>=2.14.0 in /usr/lib/python3/dist-packages (from PyGithub==2.3.0) (2.25.1) 2024-08-07T17:14:58.2879218Z Collecting pyjwt[crypto]>=2.4.0 2024-08-07T17:14:58.3080399Z Downloading PyJWT-2.9.0-py3-none-any.whl (22 kB) 2024-08-07T17:14:58.3389472Z Collecting typing-extensions>=4.0.0 2024-08-07T17:14:58.3592313Z Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB) 2024-08-07T17:14:58.3737564Z Requirement already satisfied: cryptography>=3.4.0 in /usr/lib/python3/dist-packages (from pyjwt[crypto]>=2.4.0->PyGithub==2.3.0) (3.4.8) 2024-08-07T17:14:58.5876404Z Collecting cffi>=1.4.1 2024-08-07T17:14:58.6079622Z Downloading cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (445 kB) 2024-08-07T17:14:58.6157022Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 445.9/445.9 KB 76.8 MB/s eta 0:00:00 2024-08-07T17:14:58.7693409Z Collecting wrapt<2,>=1.10 2024-08-07T17:14:58.7897117Z Downloading wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (80 kB) 2024-08-07T17:14:58.7938494Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.3/80.3 KB 31.1 MB/s eta 0:00:00 2024-08-07T17:14:58.8113459Z Collecting pycparser 2024-08-07T17:14:58.8312135Z Downloading pycparser-2.22-py3-none-any.whl (117 kB) 2024-08-07T17:14:58.8364854Z ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.6/117.6 KB 36.6 MB/s eta 0:00:00 2024-08-07T17:14:59.1384014Z Installing collected packages: wrapt, urllib3, typing-extensions, pyjwt, pycparser, Deprecated, cffi, pynacl, PyGithub 2024-08-07T17:14:59.6213611Z Successfully installed Deprecated-1.2.14 PyGithub-2.3.0 cffi-1.17.0 pycparser-2.22 pyjwt-2.9.0 pynacl-1.5.0 typing-extensions-4.12.2 urllib3-1.26.18 wrapt-1.16.0 2024-08-07T17:14:59.7078408Z ##[group]Run curr_branch="gh/zdevito/267/head" 2024-08-07T17:14:59.7079127Z curr_branch="gh/zdevito/267/head" 2024-08-07T17:14:59.7079577Z curr_ref_type="branch" 2024-08-07T17:14:59.7080159Z echo "Current branch is '$curr_branch'" 2024-08-07T17:14:59.7080864Z  2024-08-07T17:14:59.7081239Z python3 runner_determinator.py \ 2024-08-07T17:14:59.7081738Z  --github-token "$GITHUB_TOKEN" \ 2024-08-07T17:14:59.7082245Z  --github-issue "$ISSUE_NUMBER" \ 2024-08-07T17:14:59.7082823Z  --github-branch "$curr_branch" \ 2024-08-07T17:14:59.7083414Z  --github-actor "$TRIGGERING_ACTOR" \ 2024-08-07T17:14:59.7083871Z  --github-issue-owner "$ISSUE_OWNER" \ 2024-08-07T17:14:59.7084430Z  --github-ref-type "$curr_ref_type" \ 2024-08-07T17:14:59.7085117Z  --github-repo "$GITHUB_REPOSITORY" 2024-08-07T17:14:59.7149346Z shell: /usr/bin/bash -e {0} 2024-08-07T17:14:59.7149818Z env: 2024-08-07T17:14:59.7150435Z GITHUB_TOKEN: *** 2024-08-07T17:14:59.7150863Z ISSUE_NUMBER: 5132 2024-08-07T17:14:59.7151229Z TRIGGERING_ACTOR: zdevito 2024-08-07T17:14:59.7151559Z ISSUE_OWNER: zdevito 2024-08-07T17:14:59.7151989Z ##[endgroup] 2024-08-07T17:14:59.7235012Z Current branch is 'gh/zdevito/267/head' 2024-08-07T17:15:00.9805651Z INFO : LF Workflows are disabled for zdevito, zdevito. Using meta runners. 2024-08-07T17:15:01.4089429Z INFO : Feature amz2023 is disabled for zdevito, zdevito. Using fallback "". 2024-08-07T17:15:01.4091082Z INFO : Setting output: label-type='' 2024-08-07T17:15:01.4092005Z INFO : Setting output: runner-ami='' 2024-08-07T17:15:01.4522641Z Evaluate and set job outputs 2024-08-07T17:15:01.4535160Z Cleaning up orphan processes