#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" source "$ROOT_DIR/scripts/venv_utils.sh" ENV_DIR="$ROOT_DIR" REPO_ID="${HF_SPACE_REPO_ID:-your-hf-username/polyguard-openenv}" DO_BUILD="true" DO_VALIDATE="true" CREATE_PR="false" DRY_RUN="false" PRIVATE="${HF_SPACE_PRIVATE:-false}" IMAGE_TAG="${HF_SPACE_IMAGE_TAG:-openenv-polyguard:latest}" while [[ $# -gt 0 ]]; do case "$1" in --repo-id) REPO_ID="$2" shift 2 ;; --env-dir) ENV_DIR="$2" shift 2 ;; --skip-build) DO_BUILD="false" shift ;; --skip-validate) DO_VALIDATE="false" shift ;; --create-pr) CREATE_PR="true" shift ;; --dry-run) DRY_RUN="true" shift ;; --private) PRIVATE="true" shift ;; --help|-h) cat <<'USAGE' Usage: bash scripts/deploy_space.sh [options] Options: --repo-id HF Space repo id (default: HF_SPACE_REPO_ID env var) --env-dir OpenEnv directory (default: repo root) --skip-validate Skip `openenv validate` --skip-build Skip `openenv build` --create-pr Push as Pull Request --private Deploy as private space --dry-run Print commands only USAGE exit 0 ;; *) echo "Unknown flag: $1" exit 1 ;; esac done run_cmd() { if [[ "$DRY_RUN" == "true" ]]; then echo "[dry-run] $*" return 0 fi "$@" } echo "[deploy_space] repo_id=$REPO_ID env_dir=$ENV_DIR create_pr=$CREATE_PR dry_run=$DRY_RUN" ensure_polyguard_venv if ! sync_polyguard_requirements >/dev/null 2>&1; then echo "[deploy_space] dependency sync skipped (offline/restricted), continuing with existing environment" fi activate_polyguard_path if [[ "$DO_VALIDATE" == "true" ]]; then run_cmd openenv validate "$ENV_DIR" fi if [[ "$DO_BUILD" == "true" ]]; then run_cmd openenv build "$ENV_DIR" --tag "$IMAGE_TAG" fi PUSH_ARGS=(openenv push "$ENV_DIR" --repo-id "$REPO_ID") if [[ "$CREATE_PR" == "true" ]]; then PUSH_ARGS+=(--create-pr) fi if [[ "$PRIVATE" == "true" ]]; then PUSH_ARGS+=(--private) fi run_cmd "${PUSH_ARGS[@]}" echo "[deploy_space] completed"