mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-07-17 22:14:25 +02:00
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
import os
|
|
import unittest
|
|
import yaml
|
|
from pathlib import Path
|
|
|
|
class TestRunAfterRoles(unittest.TestCase):
|
|
def setUp(self):
|
|
self.roles_dir = Path(__file__).resolve().parent.parent.parent / "roles"
|
|
self.valid_role_names = {p.name for p in self.roles_dir.iterdir() if p.is_dir()}
|
|
|
|
def test_run_after_roles_are_valid(self):
|
|
invalid_refs = []
|
|
|
|
for role in self.valid_role_names:
|
|
meta_path = self.roles_dir / role / "meta" / "main.yml"
|
|
if not meta_path.exists():
|
|
continue
|
|
|
|
try:
|
|
with open(meta_path, "r", encoding="utf-8") as f:
|
|
data = yaml.safe_load(f) or {}
|
|
except Exception as e:
|
|
self.fail(f"Failed to parse {meta_path}: {e}")
|
|
continue
|
|
|
|
run_after = data.get("galaxy_info", {}).get("run_after", [])
|
|
for ref in run_after:
|
|
if ref not in self.valid_role_names:
|
|
invalid_refs.append((role, ref))
|
|
|
|
if invalid_refs:
|
|
msg = "\n".join(f"{role}: invalid run_after → {ref}" for role, ref in invalid_refs)
|
|
self.fail(f"Found invalid run_after references:\n{msg}")
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|