File size: 2,487 Bytes
071ba6b 8787bd3 071ba6b 8787bd3 071ba6b 8787bd3 071ba6b 8787bd3 071ba6b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #!/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."
|