diff --git a/README.md b/README.md index b5cb505c..73c7ea5b 100644 --- a/README.md +++ b/README.md @@ -174,20 +174,10 @@ go build -o cyberstrike-ai cmd/server/main.go ### Version Update (No Breaking Changes) -**CyberStrikeAI one-click upgrade (recommended):** -1. (First time) enable the script: `chmod +x upgrade.sh` -2. Upgrade with: `./upgrade.sh` (optional flags: `--tag vX.Y.Z`, `--no-venv`, `--preserve-custom`, `--yes`) -3. The script will back up your `config.yaml` and `data/`, upgrade the code from GitHub Release, update `config.yaml`'s `version`, then restart the server. - -Recommended one-liner: -`chmod +x upgrade.sh && ./upgrade.sh --yes` - -If something goes wrong, you can restore from `.upgrade-backup/` (or manually copy `/data` and `config.yaml` back) and run `./run.sh` again. - -Requirements / tips: -* You need `curl` or `wget` for downloading Release packages. -* `rsync` is recommended/required for the safe code sync. -* If GitHub API rate-limits you, set `export GITHUB_TOKEN="..."` before running `./upgrade.sh`. +**CyberStrikeAI version update (when there are no compatibility changes):** +1. Download the latest source code. +2. Copy the old project's `/data` folder and `config.yaml` file into the new source directory. +3. Restart with: `chmod +x run.sh && ./run.sh` ⚠️ **Note:** This procedure only applies to version updates without compatibility or breaking changes. If a release includes compatibility changes, this method may not apply. diff --git a/README_CN.md b/README_CN.md index 5f75fff7..2d45b58c 100644 --- a/README_CN.md +++ b/README_CN.md @@ -173,19 +173,9 @@ go build -o cyberstrike-ai cmd/server/main.go ### CyberStrikeAI 版本更新(无兼容性问题) -1. (首次使用)启用脚本:`chmod +x upgrade.sh` -2. 一键升级:`./upgrade.sh`(可选参数:`--tag vX.Y.Z`、`--no-venv`、`--preserve-custom`、`--yes`) -3. 脚本会备份你的 `config.yaml` 和 `data/`,从 GitHub Release 升级代码,更新 `config.yaml` 的 `version` 字段后重启服务。 - -推荐的一键指令: -`chmod +x upgrade.sh && ./upgrade.sh --yes` - -如果升级失败,可以从 `.upgrade-backup/` 恢复,或按旧方式手动拷贝 `/data` 和 `config.yaml` 后再运行 `./run.sh`。 - -依赖/提示: -* 需要 `curl` 或 `wget` 用于下载 GitHub Release 包。 -* 建议/需要 `rsync` 用于安全同步代码。 -* 如果遇到 GitHub API 限流,运行前设置 `export GITHUB_TOKEN="..."` 再执行 `./upgrade.sh`。 +1. 下载最新源代码; +2. 将旧项目的 `/data` 文件夹、`config.yaml` 文件复制至新版源代码目录; +3. 执行命令重启:`chmod +x run.sh && ./run.sh` ⚠️ **注意:** 仅适用于无兼容性变更的版本更新。若版本存在兼容性调整,此方法不适用。 diff --git a/upgrade.sh b/upgrade.sh index d6a6bce7..3b7ec110 100644 --- a/upgrade.sh +++ b/upgrade.sh @@ -69,9 +69,11 @@ http_get() { if have_cmd curl; then # If GITHUB_TOKEN is provided, use it for api.github.com to avoid low rate limits. if [[ -n "${GITHUB_TOKEN:-}" && "$1" == https://api.github.com/* ]]; then - curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" "$1" + # Do not use `-f` so we can parse GitHub error JSON bodies and show `message`. + curl -sSL -H "Authorization: Bearer ${GITHUB_TOKEN}" "$1" else - curl -fsSL "$1" + # Do not use `-f` so we can parse GitHub error JSON bodies and show `message`. + curl -sSL "$1" fi elif have_cmd wget; then wget -qO- "$1" @@ -208,11 +210,33 @@ PY if [[ -z "$TAG" ]]; then local msg msg="$(printf '%s' "$json" | python3 -c "import sys,json; d=json.loads(sys.stdin.read() or '{}'); print(d.get('message',''))" 2>/dev/null || true)" + + # Fallback: try query releases list (sometimes latest endpoint returns error JSON without tag_name). + local fallback_url="https://api.github.com/repos/${GITHUB_REPO}/releases?per_page=1" + info "Fallback to: ${fallback_url}" + local fallback_json + fallback_json="$(http_get "$fallback_url" 2>/dev/null || true)" + local fallback_tag + fallback_tag="$(printf '%s' "$fallback_json" | python3 -c "import sys,json; d=json.loads(sys.stdin.read() or '[]'); print(d[0].get('tag_name','') if isinstance(d,list) and d else '')" 2>/dev/null || true)" + + if [[ -n "$fallback_tag" ]]; then + TAG="$fallback_tag" + info "Latest Release tag (fallback): $TAG" + return 0 + fi + + local snippet + snippet="$(printf '%s' "$json" | python3 -c "import sys; s=sys.stdin.read(); print(s[:300].replace('\\n',' '))" 2>/dev/null || true)" + if [[ -n "$msg" ]]; then err "Failed to fetch latest tag: ${msg}" else - err "Failed to fetch latest tag. Please try using --tag to specify the version." + err "Failed to fetch latest tag." fi + if [[ -n "$snippet" ]]; then + err "API response snippet: ${snippet}" + fi + err "Please try using --tag to specify the version, or set export GITHUB_TOKEN=\"...\"." exit 1 fi info "Latest Release tag: $TAG"