23f2002275
feat: phase 1 complete — smoke green on HF Jobs, training scripts, plot generator, Colab notebook, submission preflight
8787bd3 | # Deploy FATHOM env server to HuggingFace Docker Space — ENV-10. | |
| # CHECKPOINT: human-action required. | |
| # | |
| # Prerequisites: | |
| # export HF_TOKEN=hf_xxx (write token from hf.co/settings/tokens) | |
| # export FATHOM_SPACE_NAME=... (e.g. "yourorg/fathom-env") | |
| # huggingface-cli installed (pip install huggingface_hub[cli]) | |
| # | |
| # Usage: | |
| # bash scripts/deploy_env_space.sh | |
| # FATHOM_SPACE_NAME=myorg/fathom-env bash scripts/deploy_env_space.sh | |
| set -euo pipefail | |
| SPACE_NAME="${FATHOM_SPACE_NAME:-fathom/fathom-env}" | |
| TOKEN="${HF_TOKEN:?HF_TOKEN environment variable is required}" | |
| export FATHOM_SPACE_NAME="${SPACE_NAME}" | |
| export HF_TOKEN="${TOKEN}" | |
| echo "==> Deploying FATHOM env to HF Space: ${SPACE_NAME}" | |
| # Step 1: Verify HF login | |
| huggingface-cli whoami --token "${TOKEN}" || { | |
| echo "ERROR: HF_TOKEN is invalid or lacks write permission." | |
| exit 1 | |
| } | |
| # Step 2: Copy space files to a temp staging dir | |
| STAGING=$(mktemp -d) | |
| cp space/Dockerfile "${STAGING}/Dockerfile" | |
| cp space/README.md "${STAGING}/README.md" | |
| # Copy env server source | |
| cp -r env "${STAGING}/env" | |
| cp pyproject.toml "${STAGING}/pyproject.toml" | |
| cp -r configs "${STAGING}/configs" | |
| export STAGING | |
| # Step 3: Push to HF Space (creates if not exists) | |
| python - <<'PYEOF' | |
| import os | |
| from huggingface_hub import HfApi | |
| api = HfApi(token=os.environ["HF_TOKEN"]) | |
| space_name = os.environ["FATHOM_SPACE_NAME"] | |
| staging = os.environ["STAGING"] | |
| # Create or update Space | |
| try: | |
| api.create_repo(repo_id=space_name, repo_type="space", space_sdk="docker", exist_ok=True) | |
| print(f"Space {space_name} ensured.") | |
| except Exception as e: | |
| print(f"create_repo: {e}") | |
| # Upload files | |
| import os as _os | |
| for root, dirs, files in _os.walk(staging): | |
| for fname in files: | |
| local = _os.path.join(root, fname) | |
| remote = _os.path.relpath(local, staging) | |
| api.upload_file(path_or_fileobj=local, path_in_repo=remote, | |
| repo_id=space_name, repo_type="space", | |
| commit_message=f"Deploy {remote}") | |
| print(f" uploaded: {remote}") | |
| print(f"Deploy complete. Space URL: https://huggingface.co/spaces/{space_name}") | |
| PYEOF | |
| python - <<'PYEOF2' | |
| import os | |
| SPACE_NAME = os.environ["FATHOM_SPACE_NAME"] | |
| print(f"\n==> RESUME SIGNAL: set FATHOM_SPACE_URL=https://{SPACE_NAME.replace('/', '-')}.hf.space") | |
| print(f" Test: curl -s https://{SPACE_NAME.replace('/', '-')}.hf.space/healthz") | |
| PYEOF2 | |
| echo "==> Cleaning staging dir" | |
| rm -rf "${STAGING}" | |
| echo "==> Done." | |