#!/bin/bash # 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."