|
import argparse |
|
import json |
|
import subprocess |
|
|
|
|
|
def get_runner_status(target_runners, token): |
|
offline_runners = [] |
|
|
|
cmd = ( |
|
f'curl -H "Accept: application/vnd.github+json" -H "Authorization: Bearer {token}"' |
|
" https://api.github.com/repos/huggingface/transformers/actions/runners" |
|
) |
|
output = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE) |
|
o = output.stdout.decode("utf-8") |
|
status = json.loads(o) |
|
|
|
runners = status["runners"] |
|
for runner in runners: |
|
if runner["name"] in target_runners: |
|
if runner["status"] == "offline": |
|
offline_runners.append(runner) |
|
|
|
|
|
with open("offline_runners.txt", "w") as fp: |
|
fp.write(json.dumps(offline_runners)) |
|
|
|
if len(offline_runners) > 0: |
|
failed = "\n".join([x["name"] for x in offline_runners]) |
|
raise ValueError(f"The following runners are offline:\n{failed}") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
def list_str(values): |
|
return values.split(",") |
|
|
|
parser = argparse.ArgumentParser() |
|
|
|
parser.add_argument( |
|
"--target_runners", |
|
default=None, |
|
type=list_str, |
|
required=True, |
|
help="Comma-separated list of runners to check status.", |
|
) |
|
|
|
parser.add_argument( |
|
"--token", default=None, type=str, required=True, help="A token that has actions:read permission." |
|
) |
|
args = parser.parse_args() |
|
|
|
get_runner_status(args.target_runners, args.token) |
|
|