ffasr / deploy.sh
whojavumusic's picture
migration to uv jobs
6845229
Raw
History Blame Contribute Delete
6.83 kB
#!/usr/bin/env bash
#
# Deploy script for the RIR-ASR Evaluation Leaderboard.
#
# The HF Space runs evaluation directly — no Lambda needed.
# AWS S3 is used only for private dataset storage and results.
#
# Prerequisites:
# - AWS CLI configured (aws configure)
# - HuggingFace CLI installed (pip install huggingface-hub)
#
# Usage:
# 1. Edit the variables below
# 2. ./deploy.sh setup-s3 # One-time: create S3 bucket + IAM user
# 3. ./deploy.sh upload-data # Upload private dataset to S3
# 4. ./deploy.sh deploy-space # Create/update HuggingFace Space
set -euo pipefail
# ============================================================================
# CONFIGURATION — edit these
# ============================================================================
AWS_REGION="us-east-1"
# S3
S3_BUCKET="FFASR_Leaderboard-storage"
S3_PREFIX="generated_with_treble10"
# IAM user for HF Space to access S3
IAM_USER_NAME="whojavumusic"
# HuggingFace Space (full repo id: org/SpaceName)
HF_SPACE_NAME="treble-technologies/FFASR_Leaderboard"
# Required for deploy-space: export HF_TOKEN before running (HF Settings → Access Tokens)
HF_TOKEN="${HF_TOKEN:-}"
# Local paths
DATASET_DIR="../data/packed/"
SPACE_DIR="."
# ============================================================================
# FUNCTIONS
# ============================================================================
setup_s3() {
echo "=== Creating S3 bucket ==="
aws s3 mb "s3://${S3_BUCKET}" --region "${AWS_REGION}" 2>/dev/null || echo "Bucket already exists"
# Block all public access
aws s3api put-public-access-block \
--bucket "${S3_BUCKET}" \
--public-access-block-configuration \
"BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
echo "=== Creating IAM user for Space S3 access ==="
aws iam create-user --user-name "${IAM_USER_NAME}" 2>/dev/null || echo "IAM user already exists"
# S3-only policy scoped to this bucket
S3_POLICY="{
\"Version\": \"2012-10-17\",
\"Statement\": [{
\"Effect\": \"Allow\",
\"Action\": [\"s3:GetObject\", \"s3:PutObject\", \"s3:ListBucket\"],
\"Resource\": [
\"arn:aws:s3:::${S3_BUCKET}\",
\"arn:aws:s3:::${S3_BUCKET}/*\"
]
}]
}"
aws iam put-user-policy \
--user-name "${IAM_USER_NAME}" \
--policy-name "S3DatasetAccess" \
--policy-document "${S3_POLICY}"
echo ""
echo "=== Creating access keys ==="
KEYS=$(aws iam create-access-key --user-name "${IAM_USER_NAME}" 2>/dev/null || echo "")
if [ -n "${KEYS}" ]; then
ACCESS_KEY=$(echo "${KEYS}" | python3 -c "import sys,json; print(json.load(sys.stdin)['AccessKey']['AccessKeyId'])")
SECRET_KEY=$(echo "${KEYS}" | python3 -c "import sys,json; print(json.load(sys.stdin)['AccessKey']['SecretAccessKey'])")
echo ""
echo "Save these — you won't see the secret again:"
echo " AWS_ACCESS_KEY_ID = ${ACCESS_KEY}"
echo " AWS_SECRET_ACCESS_KEY = ${SECRET_KEY}"
else
echo "Access keys already exist. Delete old ones in IAM console if you need new ones."
fi
echo ""
echo "=== S3 setup complete ==="
}
upload_data() {
echo "=== Uploading dataset to S3 ==="
aws s3 sync "${DATASET_DIR}/wavs/" "s3://${S3_BUCKET}/${S3_PREFIX}/wavs/" --region "${AWS_REGION}"
aws s3 sync "${DATASET_DIR}/transcripts/" "s3://${S3_BUCKET}/${S3_PREFIX}/transcripts/" --region "${AWS_REGION}"
echo ""
echo "=== Upload complete ($(aws s3 ls "s3://${S3_BUCKET}/${S3_PREFIX}/wavs/" --region "${AWS_REGION}" | wc -l) wav files) ==="
}
deploy_space() {
echo "=== Deploying HuggingFace Space ==="
if [ -z "${HF_TOKEN}" ]; then
echo "Error: Set HF_TOKEN environment variable"
exit 1
fi
# Create the Space repo if it doesn't exist
huggingface-cli repo create "${HF_SPACE_NAME}" --type space --space-sdk gradio 2>/dev/null || true
# Clone, copy files, push
TMPDIR=$(mktemp -d)
git clone "https://huggingface.co/spaces/${HF_SPACE_NAME}" "${TMPDIR}/space" 2>/dev/null || \
git clone "https://huggingface.co/spaces/${HF_SPACE_NAME}" "${TMPDIR}/space"
cp "${SPACE_DIR}/app.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/init.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/analytics.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/ffas.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/family_registry.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/job_queue.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/metrics_config.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/remote_jobs.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/storage.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/utils_display.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/constants.py" "${TMPDIR}/space/"
cp "${SPACE_DIR}/requirements.txt" "${TMPDIR}/space/"
cp "${SPACE_DIR}/README.md" "${TMPDIR}/space/"
rm -rf "${TMPDIR}/space/backends" "${TMPDIR}/space/benchmark" "${TMPDIR}/space/evaluation" "${TMPDIR}/space/scripts"
cp -R "${SPACE_DIR}/backends" "${TMPDIR}/space/backends"
cp -R "${SPACE_DIR}/benchmark" "${TMPDIR}/space/benchmark"
cp -R "${SPACE_DIR}/evaluation" "${TMPDIR}/space/evaluation"
cp -R "${SPACE_DIR}/scripts" "${TMPDIR}/space/scripts"
cd "${TMPDIR}/space"
git add -A
git commit -m "Update leaderboard app" || echo "No changes to commit"
git push
cd -
rm -rf "${TMPDIR}"
echo ""
echo "=== Space deployed ==="
echo "URL: https://huggingface.co/spaces/${HF_SPACE_NAME}"
echo ""
echo "Set these secrets in Space settings (Settings > Variables and Secrets):"
echo " AWS_ACCESS_KEY_ID = <from setup-s3 output>"
echo " AWS_SECRET_ACCESS_KEY = <from setup-s3 output>"
echo " AWS_DEFAULT_REGION = ${AWS_REGION}"
echo " DATASET_S3_BUCKET = ${S3_BUCKET}"
echo " DATASET_S3_PREFIX = ${S3_PREFIX}"
echo " RESULTS_S3_BUCKET = ${S3_BUCKET}"
echo " RESULTS_S3_KEY = results/leaderboard.csv"
}
# ============================================================================
# MAIN
# ============================================================================
case "${1:-help}" in
setup-s3) setup_s3 ;;
upload-data) upload_data ;;
deploy-space) deploy_space ;;
all)
setup_s3
upload_data
deploy_space
;;
*)
echo "Usage: $0 {setup-s3|upload-data|deploy-space|all}"
echo ""
echo " setup-s3 Create private S3 bucket + IAM user for the Space"
echo " upload-data Upload private dataset to S3"
echo " deploy-space Deploy HuggingFace Space"
echo " all Run all steps in order"
;;
esac