Files
TheRock/rocm-libraries/dnn-providers/hip-kernel-provider/rocke/platform/tests/run_all.py
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

143 lines
5.0 KiB
Python

#!/usr/bin/env python3
# Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
# SPDX-License-Identifier: MIT
#
# Cross-platform (Windows + Linux) CI/parent entrypoint for the rocKE engine.
# One command runs: (1) the relative-path contract guard, (2) the byte-identity
# gate, (3) the pytest suite, (4) ctest if a build dir exists. All paths are
# derived relative to this file so the rocke/platform/ tree is copy-able verbatim.
#
# Usage:
# python rocke/platform/tests/run_all.py [--no-guard] [--no-gate] [--no-pytest]
# [--only SUBSTR] [--build-root DIR]
from __future__ import annotations
import argparse
import os
import re
import subprocess
import sys
import tempfile
from pathlib import Path
ROCKE = Path(__file__).resolve().parents[1] # tests -> rocKE
TESTS = ROCKE / "tests"
TOOLS = ROCKE / "tools"
# Files that may reference an absolute repo path or a path that escapes rocke/platform/
# break the verbatim-copy contract. Enforce on code/build files only (docs are
# exempt). A clean run is required before the tree is dropped into another repo.
_GUARD_SUFFIXES = {".py", ".cmake", ".toml", ".ini", ".sh", ".cfg"}
_GUARD_NAMES = {"CMakeLists.txt"}
_GUARD_SKIP_DIRS = {".git", "__pycache__", "build", "dsl_docs", "examples"}
# Any ".venv*" dir is a local virtual environment (".venv", ".venv-torch", ...);
# keeping side venvs around for CI parity and local dev must not trip the guard.
_GUARD_SKIP_PREFIXES = (".venv",)
_FORBIDDEN = [
re.compile(r"/workspace\b"),
re.compile(r"rocm-libraries(?:-[a-z-]+)?/"),
re.compile(r"projects/composablekernel"),
re.compile(r"dnn-providers/"),
]
def relative_path_guard() -> int:
"""Fail if any code/build file under rocke/platform/ references an absolute repo path."""
violations: list[str] = []
for path in ROCKE.rglob("*"):
if not path.is_file():
continue
if any(
part in _GUARD_SKIP_DIRS or part.startswith(_GUARD_SKIP_PREFIXES)
for part in path.relative_to(ROCKE).parts
):
continue
if path.suffix not in _GUARD_SUFFIXES and path.name not in _GUARD_NAMES:
continue
if path.resolve() == Path(__file__).resolve():
continue # this guard file defines the patterns
try:
text = path.read_text(encoding="utf-8", errors="ignore")
except OSError:
continue
for i, line in enumerate(text.splitlines(), 1):
for pat in _FORBIDDEN:
if pat.search(line):
violations.append(
f"{path.relative_to(ROCKE)}:{i}: {line.strip()[:100]}"
)
if violations:
print(
"RELATIVE-PATH GUARD: FAIL - absolute/repo paths found under rocke/platform/:"
)
for v in violations:
print(f" {v}")
return 1
print("RELATIVE-PATH GUARD: PASS")
return 0
def main() -> int:
ap = argparse.ArgumentParser(description="rocKE test/validation runner")
ap.add_argument("--no-guard", action="store_true")
ap.add_argument("--no-gate", action="store_true")
ap.add_argument("--no-pytest", action="store_true")
ap.add_argument(
"--only",
default="",
help="restrict byte-identity gate to families containing SUBSTR",
)
ap.add_argument(
"--build-root", default=str(Path(tempfile.gettempdir()) / "rocke_verify")
)
args = ap.parse_args()
status = 0
if not args.no_guard:
status |= relative_path_guard()
if not args.no_gate:
print("\n== byte-identity gate ==")
gate = [
sys.executable,
str(TOOLS / "check_byte_identity.py"),
"--build-root",
args.build_root,
]
if args.only:
gate += ["--only", args.only]
status |= subprocess.run(gate).returncode
if not args.no_pytest:
print("\n== pytest ==")
status |= subprocess.run(
[sys.executable, "-m", "pytest", str(TESTS)], cwd=str(TESTS)
).returncode
build_root = Path(args.build_root)
# Only ctest when the CTest-registered binaries were actually built (the
# byte-identity gate builds just `rocke_core`, so a gate-only build dir has the
# registration file but no test executables -> running ctest there would
# spuriously fail). Gate on the registered tests only; `rocke_smoke` is an
# optional build-only target (not an add_test target) so it is not a signal.
test_bins = [
build_root / "tests" / b
for b in ("rocke_ir_serialize_roundtrip", "rocke_tiled_attention_2d_reentrancy")
]
if (build_root / "CTestTestfile.cmake").exists() and any(
b.exists() for b in test_bins
):
print("\n== ctest ==")
status |= subprocess.run(
["ctest", "--output-on-failure", "--no-tests=ignore"], cwd=str(build_root)
).returncode
print("\nRESULT:", "GREEN" if status == 0 else "RED")
return status
if __name__ == "__main__":
raise SystemExit(main())