Skip to content

Commit

Permalink
Fixing issue with some default runner labels such as Linux and ARM64
Browse files Browse the repository at this point in the history
being capitalized by GitHub Actions.
Forcing all labels to be lowercase.
  • Loading branch information
Vitaliy Zakaznikov committed Dec 4, 2024
1 parent f84e2f7 commit 60069af
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 7 deletions.
10 changes: 10 additions & 0 deletions testflows/github/hetzner/runners/config/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,11 +266,13 @@ def parse_config(filename: str):
assert isinstance(doc["with_label"], list), "config.with_label: is not a list"
for i, label in enumerate(doc["with_label"]):
assert isinstance(label, str), f"config.with_label[{i}]: is not a string"
doc["with_label"] = [label.lower().strip() for label in doc["with_label"]]

if doc.get("label_prefix") is not None:
assert isinstance(
doc["label_prefix"], str
), "config.label_prefix: is not a string"
doc["label_prefix"] = doc["label_prefix"].lower().strip()

if doc.get("meta_label") is not None:
assert isinstance(
Expand All @@ -289,6 +291,13 @@ def parse_config(filename: str):
), f"config.meta_label.{meta}[{j}]: is not a string"
doc["meta_label"][meta] = set(doc["meta_label"][meta])

doc["meta_label"] = {
meta.lower().strip(): [
label.lower().strip() for label in doc["meta_label"][meta]
]
for meta in doc["meta_label"]
}

if doc.get("recycle") is not None:
assert isinstance(doc["recycle"], bool), "config.recycle: is not a boolean"

Expand Down Expand Up @@ -545,6 +554,7 @@ def parse_config(filename: str):
assert isinstance(
label, str
), f"config.standby_runners[{i}].labels[{j}]: {label} is not a string"
entry["labels"] = [label.lower().strip() for label in entry["labels"]]
if entry.get("count") is not None:
v = entry["count"]
assert (
Expand Down
7 changes: 5 additions & 2 deletions testflows/github/hetzner/runners/scale_down.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ def scale_down(
for server in servers:
servers_labels[server.name] = set(
[
value
value.lower()
for name, value in server.labels.items()
if name.startswith("github-hetzner-runner-label")
]
Expand Down Expand Up @@ -354,7 +354,10 @@ def scale_down(
for standby_runner in _standby_runners:
if set(standby_runner.labels).issubset(
set(
[label["name"] for label in runner.labels()]
[
label["name"].lower()
for label in runner.labels()
]
)
):
standby_runner.count -= 1
Expand Down
25 changes: 20 additions & 5 deletions testflows/github/hetzner/runners/scale_up.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,10 @@ def get_server_type(labels: set[str], default: ServerType, label_prefix: str = "
if label_prefix and not label_prefix.endswith("-"):
label_prefix += "-"
label_prefix += "type-"
label_prefix = label_prefix.lower()

for label in labels:
label = label.lower()
if label.startswith(label_prefix):
server_type_name = label.split(label_prefix, 1)[-1].lower()
server_type = ServerType(name=server_type_name)
Expand All @@ -179,8 +181,10 @@ def get_server_location(
if label_prefix and not label_prefix.endswith("-"):
label_prefix += "-"
label_prefix += "in-"
label_prefix = label_prefix.lower()

for label in labels:
label = label.lower()
if label.startswith(label_prefix):
server_location_name = label.split(label_prefix, 1)[-1].lower()
server_location = Location(name=server_location_name)
Expand All @@ -200,8 +204,10 @@ def get_server_image(
if label_prefix and not label_prefix.endswith("-"):
label_prefix += "-"
label_prefix += "image-"
label_prefix = label_prefix.lower()

for label in labels:
label = label.lower()
if label.startswith(label_prefix):
server_image = check_image(
client,
Expand Down Expand Up @@ -234,8 +240,10 @@ def get_setup_script(
if label_prefix and not label_prefix.endswith("-"):
label_prefix += "-"
label_prefix += "setup-"
label_prefix = label_prefix.lower()

for label in labels:
label = label.lower()
if label.startswith(label_prefix):
script = label.split(label_prefix, 1)[-1] + ".sh"

Expand Down Expand Up @@ -265,8 +273,10 @@ def get_startup_script(
if label_prefix and not label_prefix.endswith("-"):
label_prefix += "-"
label_prefix += "startup-"
label_prefix = label_prefix.lower()

for label in labels:
label = label.lower()
if label.startswith(label_prefix):
script = label.split(label_prefix, 1)[-1] + ".sh"

Expand All @@ -283,8 +293,10 @@ def expand_meta_label(
):
"""Expand any meta labels."""
expanded_labels = []
label_prefix = label_prefix.lower()

for label in labels:
label = label.lower()
expanded_labels.append(label)
if label.startswith(label_prefix):
raw_label = label.split(label_prefix, 1)[-1] if label_prefix else label
Expand Down Expand Up @@ -404,7 +416,7 @@ def count_available_runners(runners: list[SelfHostedActionsRunner], labels: set[

for runner in runners:
if runner.status == "online":
runner_labels = set([label["name"] for label in runner.labels()])
runner_labels = set([label["name"].lower() for label in runner.labels()])
if labels.issubset(runner_labels):
if not runner.busy:
count += 1
Expand Down Expand Up @@ -696,7 +708,7 @@ def create_runner_server(
server_status=server.status,
labels=set(
[
value
value.lower()
for name, value in server.labels.items()
if name.startswith("github-hetzner-runner-label")
]
Expand Down Expand Up @@ -763,7 +775,10 @@ def create_runner_server(
interval=interval,
):
pass
labels = set(job.raw_data["labels"])

labels = set(
[label.lower() for label in job.raw_data["labels"]]
)

server_name = (
f"{server_name_prefix}{job.run_id}-{job.id}"
Expand Down Expand Up @@ -801,7 +816,7 @@ def create_runner_server(
):
labels = set(
[
label["name"]
label["name"].lower()
for label in repo.get_self_hosted_runner(
job.raw_data["runner_id"]
).labels()
Expand All @@ -820,7 +835,7 @@ def create_runner_server(
if with_label is not None:
found_all_with_labels = True
for label in with_label:
if not label in labels:
if not label.lower() in labels:
found_all_with_labels = False
with Action(
f"Skipping {job} with {labels} as it is missing label '{label}'",
Expand Down

0 comments on commit 60069af

Please sign in to comment.