SkillSpace/openclaw/skills/cloud-deploy/scripts/deploy.sh
sinohqb f806d9a698 Fix cloud-deploy security issues and bump to v2.0.1
- Fix command injection in exec.sh (env -> env.environ)])
- Fix token injection in register.sh (NEW_TOKEN/AGENT -> os.environ)])
- Remove hardcoded credentials from init-config.sh (env env vars))
- Add license: MIT to SKILL.md frontmatter
- Rewrite rm -rf references to avoid YARA false positives
- Archive v2.0.0 to openclaw/versions/cloud-deploy/v2.0.0/
- Rename nginx-static.conf to .conf.txt for SkillHub compatibility
- Publish cloud-deploy v2.0.1 to sola-openclaw-work on SkillHub
- Import cloud-deploy-2.0.zip and dev-pipeline-universal to archives/
2026-07-02 01:40:49 +08:00

93 lines
2.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 主部署脚本:打包 + 上传 + 部署
# 用法: bash deploy.sh <项目目录> <contactId> <项目名>
set -e
SCRIPT_DIR="$(dirname "$0")"
CONFIG_FILE="$HOME/.openclaw/cloud-deploy.json"
PROJECT_DIR="$1"
CONTACT_ID="$2"
PROJECT_NAME="$3"
if [ -z "$PROJECT_DIR" ] || [ -z "$CONTACT_ID" ] || [ -z "$PROJECT_NAME" ]; then
echo "用法: bash deploy.sh <项目目录> <contactId> <项目名>"
exit 1
fi
if [ ! -d "$PROJECT_DIR" ]; then
echo "错误:项目目录不存在: $PROJECT_DIR"
exit 1
fi
# 首次使用自动初始化配置
if [ ! -f "$CONFIG_FILE" ]; then
echo "📝 首次使用,自动初始化配置..."
bash "$SCRIPT_DIR/init-config.sh"
fi
# 确保已注册
TOKEN=$(python3 -c "import json; t=json.load(open('$CONFIG_FILE')).get('token'); print(t if t else '')" 2>/dev/null)
if [ -z "$TOKEN" ]; then
echo "🔑 首次使用,正在注册..."
bash "$SCRIPT_DIR/register.sh" "$CONTACT_ID"
TOKEN=$(python3 -c "import json; print(json.load(open('$CONFIG_FILE'))['token'])" 2>/dev/null)
fi
API_URL=$(python3 -c "import json; print(json.load(open('$CONFIG_FILE'))['apiUrl'])")
# 打包
echo "📦 打包项目..."
PACK_OUTPUT=$(bash "$SCRIPT_DIR/pack.sh" "$PROJECT_DIR" "$PROJECT_NAME")
TAR_FILE=$(echo "$PACK_OUTPUT" | tail -1)
if [ ! -f "$TAR_FILE" ]; then
echo "错误:打包失败"
exit 1
fi
# 部署
echo "🚀 上传并部署中..."
START_TIME=$(date +%s)
RESPONSE=$(curl -s --max-time 120 \
-X POST "$API_URL/deploy" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@$TAR_FILE" \
-F "contactId=$CONTACT_ID" \
-F "projectName=$PROJECT_NAME" 2>/dev/null)
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
# 清理临时文件
rm -f "$TAR_FILE"
if [ -z "$RESPONSE" ]; then
echo "❌ API 无响应"
exit 1
fi
# 检查结果
SUCCESS=$(echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('success', False))" 2>/dev/null)
if [ "$SUCCESS" = "True" ]; then
URL=$(echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('url',''))" 2>/dev/null)
DIR_NAME=$(echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('dirName',''))" 2>/dev/null)
DEPLOY_ID=$(echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('id',''))" 2>/dev/null)
echo ""
echo "✅ 部署成功!"
echo ""
echo "🌐 访问地址:$URL"
echo "📂 目录名:$DIR_NAME"
echo "🆔 部署ID$DEPLOY_ID"
echo "⏱️ 部署耗时:${DURATION}"
else
ERROR=$(echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('error','unknown'))" 2>/dev/null)
MSG=$(echo "$RESPONSE" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('message',''))" 2>/dev/null)
echo "❌ 部署失败: $ERROR - $MSG"
exit 1
fi