fathom-code / scripts /deploy_env_space.sh
23f2002275
feat: phase 1 complete — smoke green on HF Jobs, training scripts, plot generator, Colab notebook, submission preflight
8787bd3
Raw
History Blame Contribute Delete
2.49 kB
#!/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."