publish.sh 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/bin/bash
  2. # TappoCloud Store 应用发布脚本
  3. # 用法: ./publish.sh <zip文件路径> [API地址]
  4. set -e
  5. ZIP_FILE="$1"
  6. API_BASE="${2:-https://app.tappo.dev}"
  7. if [ -z "$ZIP_FILE" ]; then
  8. echo "用法: $0 <zip文件路径> [API地址]"
  9. echo "示例: $0 ./my-app-v1.0.0.zip"
  10. echo " $0 ./my-app-v1.0.0.zip https://app.tappo.dev"
  11. exit 1
  12. fi
  13. if [ ! -f "$ZIP_FILE" ]; then
  14. echo "错误: 文件不存在: $ZIP_FILE"
  15. exit 1
  16. fi
  17. # 检查是否已有 token
  18. TOKEN_FILE="$HOME/.tappocloud_token"
  19. if [ -f "$TOKEN_FILE" ]; then
  20. TOKEN=$(cat "$TOKEN_FILE")
  21. # 验证 token 是否有效
  22. if ! curl -sf -o /dev/null -H "Authorization: Bearer $TOKEN" "$API_BASE/api/v1/admin/apps/upload" 2>/dev/null; then
  23. rm -f "$TOKEN_FILE"
  24. TOKEN=""
  25. fi
  26. fi
  27. # 如果没有有效 token,进行登录
  28. if [ -z "$TOKEN" ]; then
  29. echo "请输入管理员账号:"
  30. read -p "用户名: " USERNAME
  31. read -sp "密码: " PASSWORD
  32. echo
  33. RESPONSE=$(curl -sf -X POST "$API_BASE/api/v1/admin/login" \
  34. -H "Content-Type: application/json" \
  35. -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}" 2>&1) || {
  36. echo "错误: 登录失败"
  37. exit 1
  38. }
  39. TOKEN=$(echo "$RESPONSE" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
  40. if [ -z "$TOKEN" ]; then
  41. echo "错误: 无法获取 token"
  42. exit 1
  43. fi
  44. echo "$TOKEN" > "$TOKEN_FILE"
  45. chmod 600 "$TOKEN_FILE"
  46. echo "登录成功,token 已保存"
  47. fi
  48. # 上传文件
  49. echo "正在上传: $ZIP_FILE"
  50. RESULT=$(curl -sf -X POST "$API_BASE/api/v1/admin/apps/upload" \
  51. -H "Authorization: Bearer $TOKEN" \
  52. -F "file=@$ZIP_FILE" 2>&1) || {
  53. echo "错误: 上传失败"
  54. rm -f "$TOKEN_FILE"
  55. exit 1
  56. }
  57. echo "上传成功!"
  58. echo "$RESULT" | python3 -m json.tool 2>/dev/null || echo "$RESULT"