#!/usr/bin/env python3 from __future__ import annotations import argparse import os from pathlib import Path from huggingface_hub import HfApi, upload_file, upload_folder def main() -> None: p = argparse.ArgumentParser(description="Publish EdgeEDA agent to Hugging Face Hub") p.add_argument("--repo-id", required=True, help="Repo id, e.g. org/name or user/name") p.add_argument("--repo-type", default="model", choices=["model", "dataset", "space"]) p.add_argument("--private", action="store_true", help="Create a private repo") p.add_argument("--token", default=None, help="HF token (or set HF_TOKEN)") p.add_argument("--commit-message", default="Add EdgeEDA agent", help="Commit message") args = p.parse_args() token = args.token or os.environ.get("HF_TOKEN") if not token: raise SystemExit("Missing HF token. Provide --token or set HF_TOKEN.") api = HfApi(token=token) api.create_repo( repo_id=args.repo_id, repo_type=args.repo_type, private=args.private, exist_ok=True, ) root = Path(__file__).resolve().parents[1] readme_hf = root / "README_HF.md" if not readme_hf.exists(): raise SystemExit(f"Missing {readme_hf}") upload_file( path_or_fileobj=str(readme_hf), path_in_repo="README.md", repo_id=args.repo_id, repo_type=args.repo_type, token=token, commit_message=args.commit_message, ) allow_patterns = [ "src/**", "configs/**", "scripts/**", "docker/**", "LICENSE", "pyproject.toml", "setup.py", "requirements.txt", "README_RUN.md", "QUICK_START.md", "EXECUTE_IN_DOCKER.md", "CHANGELOG_FIXES.md", ] ignore_patterns = [ "OpenROAD-flow-scripts/**", "runs/**", "IEEE_EdgeEDA_Agent_ISVLSI/**", "build/**", "**/__pycache__/**", "**/*.pyc", "**/*.sqlite", "**/*.png", "**/*.pdf", "**/*.log", "README.md", "README_HF.md", "UNKNOWN.egg-info/**", "src/edgeeda.egg-info/**", "*.egg-info/**", ] upload_folder( folder_path=str(root), repo_id=args.repo_id, repo_type=args.repo_type, token=token, commit_message=args.commit_message, allow_patterns=allow_patterns, ignore_patterns=ignore_patterns, ) if __name__ == "__main__": main()