diff --git a/scripts/ci/deploy.sh b/scripts/ci/deploy.sh index 3a7f5fa..fe239bd 100755 --- a/scripts/ci/deploy.sh +++ b/scripts/ci/deploy.sh @@ -14,7 +14,7 @@ if [ ! -f dist/jiu-server ] || [ ! -f dist/web.tar.gz ] || [ ! -f dist/configs.t echo "==> deploy: dist/ incomplete — downloading assets for ${TAG} from Forgejo" mkdir -p dist - curl -sf \ + curl -f \ -H "Authorization: token ${FORGEJO_TOKEN}" \ "${FORGEJO_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases/tags/${TAG}" \ -o /tmp/release-info.json @@ -99,13 +99,13 @@ cp /tmp/version.yaml /opt/jiu/backend/config/version.yaml sudo systemctl start jiu echo "Waiting for health check..." for i in $(seq 1 30); do - if curl -sf http://localhost:8080/health > /dev/null 2>&1; then + if curl -f http://localhost:8080/health > /dev/null 2>&1; then echo "Health check passed" break fi sleep 2 done -curl -sf http://localhost:8080/health > /dev/null || { echo "Health check failed!"; exit 1; } +curl -f http://localhost:8080/health > /dev/null || { echo "Health check failed!"; exit 1; } # Swap Flutter web app (atomic) rm -rf /opt/jiu/web-old diff --git a/scripts/ci/notify.sh b/scripts/ci/notify.sh index 7a8b460..81c4254 100755 --- a/scripts/ci/notify.sh +++ b/scripts/ci/notify.sh @@ -16,7 +16,7 @@ fi MSG="${ICON} 岩美 ${TAG} ${LABEL} https://jiu.51yanmei.com" -curl -sf -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ +curl -f -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ -d "chat_id=${TELEGRAM_CHAT_ID}" \ --data-urlencode "text=${MSG}" \ > /dev/null diff --git a/scripts/ci/release.sh b/scripts/ci/release.sh index 9440ec3..08a52d8 100755 --- a/scripts/ci/release.sh +++ b/scripts/ci/release.sh @@ -20,7 +20,8 @@ try: notes = [] for line in lines[1:]: stripped = line.strip() - if stripped.startswith('#'): + # 只在遇到同级 ## 时停止,### 子标题保留 + if stripped.startswith('## '): break if stripped: notes.append(stripped) @@ -82,30 +83,37 @@ print(json.dumps(body)) PYEOF ) -RESP=$(curl -sf -X POST "${FORGEJO_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases" \ +HTTP_CODE=$(curl -w "%{http_code}" -o /tmp/release_resp.json \ + -X POST "${FORGEJO_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases" \ -H "Authorization: token ${FORGEJO_TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"tag_name\":\"${TAG}\",\"name\":\"Release ${TAG}\",\"body\":${BODY},\"draft\":false,\"prerelease\":false}") -echo "==> release: API response: ${RESP}" +RESP=$(cat /tmp/release_resp.json) +echo "==> release: API response (HTTP ${HTTP_CODE}): ${RESP}" + +if [ "$HTTP_CODE" -lt 200 ] || [ "$HTTP_CODE" -ge 300 ]; then + echo "==> release: FAILED — HTTP ${HTTP_CODE}" + exit 1 +fi RELEASE_ID=$(python3 -c "import sys,json; print(json.load(sys.stdin)['id'])" <<< "${RESP}") echo "==> release: release_id=${RELEASE_ID}" # Upload assets -curl -sf -X POST "${FORGEJO_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases/${RELEASE_ID}/assets" \ - -H "Authorization: token ${FORGEJO_TOKEN}" \ - -F "attachment=@dist/jiu-server" -echo "==> release: uploaded jiu-server" +upload_asset() { + local file="$1" + local code + code=$(curl -w "%{http_code}" -o /tmp/upload_resp.json \ + -X POST "${FORGEJO_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases/${RELEASE_ID}/assets" \ + -H "Authorization: token ${FORGEJO_TOKEN}" \ + -F "attachment=@${file}") + echo "==> release: uploaded ${file} (HTTP ${code}): $(cat /tmp/upload_resp.json)" + if [ "$code" -lt 200 ] || [ "$code" -ge 300 ]; then exit 1; fi +} -curl -sf -X POST "${FORGEJO_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases/${RELEASE_ID}/assets" \ - -H "Authorization: token ${FORGEJO_TOKEN}" \ - -F "attachment=@dist/web.tar.gz" -echo "==> release: uploaded web.tar.gz" - -curl -sf -X POST "${FORGEJO_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases/${RELEASE_ID}/assets" \ - -H "Authorization: token ${FORGEJO_TOKEN}" \ - -F "attachment=@dist/configs.tar.gz" -echo "==> release: uploaded configs.tar.gz" +upload_asset dist/jiu-server +upload_asset dist/web.tar.gz +upload_asset dist/configs.tar.gz echo "==> release: done — Release ${TAG} created"