Download scripts/publish_env_space.py from StarAtNyte1/beam-boot: direct link, hf CLI and curl.
- Browser
- Download file 2.34 kB
-
https://huggingface.co/StarAtNyte1/beam-boot/resolve/main/scripts/publish_env_space.py
- Command line
-
hf download hf://StarAtNyte1/beam-boot/scripts/publish_env_space.py
-
curl -L -o publish_env_space.py https://huggingface.co/StarAtNyte1/beam-boot/resolve/main/scripts/publish_env_space.py
2.34 kB
| """Publish envs/superbeam_env as a Docker Space (StarAtNyte1/superbeam-env) using the | |
| Modal-held HF write token. The token stays in memory; it is never printed or saved. | |
| modal run scripts/publish_env_space.py | |
| Bundles the game files first (scripts/prepare_superbeam_env.py) and uploads server/Dockerfile | |
| as the repo-root Dockerfile (Spaces requires it there). | |
| """ | |
| import os | |
| import shutil | |
| import subprocess | |
| import sys | |
| import tempfile | |
| from pathlib import Path | |
| import modal | |
| REPO_ID = "StarAtNyte1/superbeam-env" | |
| ROOT = Path(__file__).resolve().parent.parent | |
| ENV_DIR = ROOT / "envs" / "superbeam_env" | |
| app = modal.App("superbeam-env-publish") | |
| def get_write_token(): | |
| token = os.environ.get("HUGGINGFACE_TOKEN") or os.environ.get("HF_TOKEN") | |
| if not token: | |
| raise RuntimeError("No HF write token in configured secret") | |
| return token | |
| def main(private: bool = False, repo_type: str = "space"): | |
| """repo_type 'space' = Docker Space (needs HF PRO on free hardware); 'model' = a plain Hub repo | |
| holding the same files, run locally with uvicorn or `docker build`.""" | |
| from huggingface_hub import HfApi | |
| subprocess.run([sys.executable, str(ROOT / "scripts" / "prepare_superbeam_env.py")], check=True, | |
| stdout=subprocess.DEVNULL) | |
| token = get_write_token.remote() | |
| api = HfApi(token=token) | |
| if not api.repo_exists(repo_id=REPO_ID, repo_type=repo_type): | |
| kw = {"space_sdk": "docker"} if repo_type == "space" else {} | |
| api.create_repo(repo_id=REPO_ID, repo_type=repo_type, private=private, **kw) | |
| url = "https://huggingface.co/%s%s" % ("spaces/" if repo_type == "space" else "", REPO_ID) | |
| with tempfile.TemporaryDirectory() as tmp: | |
| stage = Path(tmp) / "env" | |
| shutil.copytree(ENV_DIR, stage, ignore=shutil.ignore_patterns("__pycache__", "*.pyc", ".venv*")) | |
| shutil.copy2(stage / "server" / "Dockerfile", stage / "Dockerfile") | |
| print(f"Uploading to {url}", flush=True) | |
| api.upload_folder(repo_id=REPO_ID, repo_type=repo_type, folder_path=str(stage), | |
| commit_message="SUPERBEAM OpenEnv environment") | |
| print(f"Done: {url}", flush=True) | |