Commit 06fa3473 authored by Pierre Smeyers's avatar Pierre Smeyers
Browse files

feat: check jobs prefix rule

Closes #4
parent f7f54bba
Loading
Loading
Loading
Loading
+31 −6
Original line number Diff line number Diff line
@@ -375,7 +375,8 @@ def _check_tpl(
    kicker: dict[str, any],
    root_kicker: Optional[dict[str, any]],
    project_dir: Path,
    var_prefix: str,
    prefix: str,
    job_prefix: str,
    doc_vars: list[DocVar],
) -> int:
    """Check a template (either main or variant)."""
@@ -395,7 +396,29 @@ def _check_tpl(
    inputs: dict[str, dict[str, any]] = dict(tpl_spec["spec"]["inputs"])
    err_count = 0

    # check main template variables
    # check jobs
    # ----------
    for name, body in tpl_body.items():
        if name.startswith("."):
            # hidden
            continue
        if "stage" not in body and "extends" not in body:
            # not a job?
            continue
        # check: all jobs are prefixed with the template prefix
        if not name.startswith(job_prefix) or (
            len(name) > len(job_prefix) and name[len(job_prefix)] != "-"
        ):
            print(
                f"  {AnsiColors.RED}✕ job <{name}>: doesn't start with prefix ({job_prefix}){AnsiColors.RESET}"
            )
            err_count += 1

    # check variables
    # ---------------
    var_prefix = prefix.upper() + "_"

    # check main variables
    for var in kicker.get("variables", []):
        tbc_var = TbcVar.parse_obj(var)
        err_count += _check_var(
@@ -530,11 +553,11 @@ def run():
        )
        or kicker["name"].lower()
    )
    var_prefix = prefix.upper() + "_"
    job_prefix: str = kicker.get("job_prefix", prefix)

    print("=============================================================")
    print(
        f"Checking template {AnsiColors.CYAN}{kicker['name']}{AnsiColors.RESET} (vars prefix {AnsiColors.CYAN}\"{var_prefix}\"{AnsiColors.RESET})"
        f"Checking template {AnsiColors.CYAN}{kicker['name']}{AnsiColors.RESET} (prefix {AnsiColors.CYAN}\"{prefix}\"{AnsiColors.RESET} / job prefix {AnsiColors.CYAN}\"{job_prefix}\"{AnsiColors.RESET})"
    )
    print("=============================================================")
    if not kicker.get("is_component"):
@@ -547,14 +570,16 @@ def run():
    print(
        f"{AnsiColors.BLUE}{AnsiColors.BOLD}→ Main template ({kicker['template_path']}){AnsiColors.RESET}"
    )
    err_count = _check_tpl(kicker, None, project_dir, var_prefix, doc_vars)
    err_count = _check_tpl(kicker, None, project_dir, prefix, job_prefix, doc_vars)

    # Check variants
    for variant in kicker.get("variants", []):
        print(
            f"{AnsiColors.BLUE}{AnsiColors.BOLD}{variant['name']} variant ({variant['template_path']}){AnsiColors.RESET}"
        )
        err_count += _check_tpl(variant, kicker, project_dir, var_prefix, doc_vars)
        err_count += _check_tpl(
            variant, kicker, project_dir, prefix, job_prefix, doc_vars
        )

    if err_count > 0:
        exit(127)