From 020248bdf02ecc8c698e0902a0d03c9c5371e062 Mon Sep 17 00:00:00 2001 From: Nathan Weinberg Date: Fri, 25 Jul 2025 10:41:27 -0400 Subject: [PATCH] feat: add script to generate CI documentation Signed-off-by: Nathan Weinberg --- scripts/gen-ci-docs.py | 77 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 scripts/gen-ci-docs.py diff --git a/scripts/gen-ci-docs.py b/scripts/gen-ci-docs.py new file mode 100755 index 000000000..630cfe765 --- /dev/null +++ b/scripts/gen-ci-docs.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# Copyright (c) Meta Platforms, Inc. and affiliates. +# All rights reserved. +# +# This source code is licensed under the terms described in the LICENSE file in +# the root directory of this source tree. + +from pathlib import Path + +import yaml + +REPO_ROOT = Path(__file__).parent.parent + + +def parse_workflow_file(file_path): + """Parse a workflow YAML file and extract name and run-name.""" + try: + with open(file_path, encoding="utf-8") as f: + content = yaml.safe_load(f) + + name = content["name"] + run_name = content["run-name"] + + return name, run_name + except Exception as e: + raise Exception(f"Error parsing {file_path}") from e + + +def generate_ci_docs(): + """Generate the CI documentation README.md file.""" + + # Define paths + workflows_dir = REPO_ROOT / ".github/workflows" + readme_path = workflows_dir / "README.md" + + # Header section to preserve + header = """# Llama Stack CI + +Llama Stack uses GitHub Actions for Continous Integration (CI). Below is a table detailing what CI the project includes and the purpose. + +| Name | File | Purpose | +| ---- | ---- | ------- | +""" + + # Get all .yml files in workflows directory + yml_files = [] + for file_path in workflows_dir.glob("*.yml"): + yml_files.append(file_path) + + # Sort files alphabetically for consistent output + yml_files.sort(key=lambda x: x.name) + + # Generate table rows + table_rows = [] + for file_path in yml_files: + name, run_name = parse_workflow_file(file_path) + filename = file_path.name + + # Create markdown link in the format [filename.yml](filename.yml) + file_link = f"[{filename}]({filename})" + + # Create table row + row = f"| {name} | {file_link} | {run_name} |" + table_rows.append(row) + + # Combine header and table rows + content = header + "\n".join(table_rows) + "\n" + + # Write to README.md + with open(readme_path, "w", encoding="utf-8") as f: + f.write(content) + + print(f"Generated {readme_path} with {len(table_rows)} workflow entries") + + +if __name__ == "__main__": + generate_ci_docs()