Files
cleveragents-core/benchmarks/ci_yaml_parse_bench.py

45 lines
1.4 KiB
Python

"""Benchmarks for CI workflow YAML parsing and key lookup."""
from __future__ import annotations
from pathlib import Path
import yaml
CI_WORKFLOW_PATH = Path(".forgejo/workflows/ci.yml")
class CIYamlParseSuite:
"""Measure CI YAML parsing performance."""
def setup(self) -> None:
"""Read the raw YAML text once for reuse."""
if CI_WORKFLOW_PATH.exists():
self.yaml_text = CI_WORKFLOW_PATH.read_text()
else:
self.yaml_text = ""
def time_parse_ci_yaml(self) -> None:
"""Benchmark parsing the CI workflow YAML."""
if self.yaml_text:
yaml.safe_load(self.yaml_text)
def time_extract_job_names(self) -> None:
"""Benchmark extracting job names from parsed YAML."""
if self.yaml_text:
data = yaml.safe_load(self.yaml_text)
if data and "jobs" in data:
list(data["jobs"].keys())
def time_extract_nox_sessions(self) -> None:
"""Benchmark extracting nox session references from all steps."""
if self.yaml_text:
data = yaml.safe_load(self.yaml_text)
if data and "jobs" in data:
sessions: list[str] = []
for job_data in data["jobs"].values():
for step in job_data.get("steps", []):
run_cmd = step.get("run", "")
if "nox -s" in run_cmd:
sessions.append(run_cmd.strip())