#!/bin/bash # 部署到 Hugging Face Spaces 脚本 # 设置颜色输出 GREEN='\033[0;32m' BLUE='\033[0;34m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${BLUE}================================${NC}" echo -e "${BLUE}部署到 Hugging Face Spaces${NC}" echo -e "${BLUE}================================${NC}" # 检查是否安装了 git if ! command -v git &> /dev/null; then echo -e "${RED}❌ 错误: 未安装 Git${NC}" exit 1 fi # 获取用户信息 echo -e "\n${YELLOW}请输入你的 Hugging Face 信息:${NC}" read -p "Hugging Face 用户名: " HF_USERNAME read -p "Space 名称: " SPACE_NAME if [ -z "$HF_USERNAME" ] || [ -z "$SPACE_NAME" ]; then echo -e "${RED}❌ 错误: 用户名和 Space 名称不能为空${NC}" exit 1 fi # 构建远程仓库 URL SPACE_URL="https://huggingface.co/spaces/${HF_USERNAME}/${SPACE_NAME}" echo -e "\n${GREEN}Space URL: ${SPACE_URL}${NC}" # 检查是否已经添加了 space 远程仓库 if git remote | grep -q "^space$"; then echo -e "${YELLOW}⚠️ 检测到已存在的 'space' 远程仓库${NC}" read -p "是否更新远程仓库地址? (y/n): " UPDATE_REMOTE if [ "$UPDATE_REMOTE" = "y" ]; then git remote set-url space ${SPACE_URL} echo -e "${GREEN}✅ 已更新远程仓库地址${NC}" fi else # 添加 Hugging Face Space 作为远程仓库 git remote add space ${SPACE_URL} echo -e "${GREEN}✅ 已添加远程仓库${NC}" fi # 检查 Dockerfile 是否存在 if [ ! -f "Dockerfile" ]; then echo -e "${RED}❌ 错误: 未找到 Dockerfile${NC}" exit 1 fi # 检查必要文件 echo -e "\n${BLUE}检查必要文件...${NC}" REQUIRED_FILES=("app.py" "config.py" "requirements.txt" "index.html" "book_10242.json") MISSING_FILES=() for file in "${REQUIRED_FILES[@]}"; do if [ -f "$file" ]; then echo -e "${GREEN} ✅ $file${NC}" else echo -e "${RED} ❌ $file (缺失)${NC}" MISSING_FILES+=("$file") fi done if [ ${#MISSING_FILES[@]} -gt 0 ]; then echo -e "${RED}❌ 缺少必要文件,部署可能失败${NC}" read -p "是否继续? (y/n): " CONTINUE if [ "$CONTINUE" != "y" ]; then exit 1 fi fi # 检查 Git 状态 echo -e "\n${BLUE}检查 Git 状态...${NC}" if [ -n "$(git status --porcelain)" ]; then echo -e "${YELLOW}⚠️ 检测到未提交的更改${NC}" git status --short read -p "是否添加并提交这些更改? (y/n): " COMMIT_CHANGES if [ "$COMMIT_CHANGES" = "y" ]; then git add . read -p "提交信息 (默认: 'Deploy Flask app to Hugging Face Spaces'): " COMMIT_MSG COMMIT_MSG=${COMMIT_MSG:-"Deploy Flask app to Hugging Face Spaces"} git commit -m "$COMMIT_MSG" echo -e "${GREEN}✅ 已提交更改${NC}" else echo -e "${YELLOW}⚠️ 未提交的更改不会被推送${NC}" fi else echo -e "${GREEN}✅ 工作目录干净${NC}" fi # 推送到 Hugging Face Spaces echo -e "\n${BLUE}推送到 Hugging Face Spaces...${NC}" echo -e "${YELLOW}注意: 可能需要输入 Hugging Face 访问令牌${NC}" echo -e "${YELLOW}获取令牌: https://huggingface.co/settings/tokens${NC}" read -p "是否现在推送? (y/n): " PUSH_NOW if [ "$PUSH_NOW" = "y" ]; then # 获取当前分支 CURRENT_BRANCH=$(git branch --show-current) echo -e "${BLUE}当前分支: ${CURRENT_BRANCH}${NC}" # 推送到 space if git push space ${CURRENT_BRANCH}:main -f; then echo -e "\n${GREEN}🎉 部署成功!${NC}" echo -e "${GREEN}Space URL: ${SPACE_URL}${NC}" echo -e "${GREEN}应用 URL: https://${HF_USERNAME}-${SPACE_NAME}.hf.space${NC}" echo -e "\n${YELLOW}提示: 首次部署需要 5-10 分钟构建时间${NC}" echo -e "${YELLOW}可以在 Space 页面查看构建日志${NC}" else echo -e "${RED}❌ 推送失败${NC}" echo -e "${YELLOW}可能的原因:${NC}" echo -e " 1. 未登录 Hugging Face (需要访问令牌)" echo -e " 2. Space 不存在 (需要先在网页上创建 Space)" echo -e " 3. 网络连接问题" exit 1 fi else echo -e "${YELLOW}已取消推送${NC}" echo -e "\n${BLUE}手动推送命令:${NC}" echo -e " git push space main" fi echo -e "\n${BLUE}================================${NC}" echo -e "${GREEN}部署流程完成!${NC}" echo -e "${BLUE}================================${NC}"