From ee60b1e5accf7af2707f74410f8143bd5ee19b66 Mon Sep 17 00:00:00 2001 From: mac Date: Tue, 28 Jul 2026 20:34:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20ziwei-power=20=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=E9=83=A8=E7=BD=B2=E5=B7=A5=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/deploy-ziwei.yml | 98 +++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 .gitea/workflows/deploy-ziwei.yml diff --git a/.gitea/workflows/deploy-ziwei.yml b/.gitea/workflows/deploy-ziwei.yml new file mode 100644 index 0000000..8944d2b --- /dev/null +++ b/.gitea/workflows/deploy-ziwei.yml @@ -0,0 +1,98 @@ +name: Deploy ziwei-power + +on: + workflow_dispatch: + +jobs: + deploy-ziwei: + runs-on: prod-deploy + env: + DEPLOY_BASE: /opt/ziwei-power + REPO_URL: https://qiukai:${{ secrets.DEPLOY_TOKEN }}@git.qiukai.me/qiukai/ziwei-power.git + SERVICE_NAME: ziwei-power + steps: + - name: Clone and deploy + run: | + set -e + RELEASE_ID="$(date +%Y%m%d-%H%M%S)" + RELEASE_DIR="${DEPLOY_BASE}/releases/${RELEASE_ID}" + CLONE_DIR="/tmp/zw-deploy-${RELEASE_ID}" + + echo "=== 1. Clone repository ===" + rm -rf "${CLONE_DIR}" + git clone --depth 1 --branch main "${REPO_URL}" "${CLONE_DIR}" + + echo "=== 2. Prepare release directory ===" + rm -rf "${RELEASE_DIR}" + mkdir -p "${RELEASE_DIR}" + + rsync -a --exclude='.git' --exclude='.env' --exclude='.env.local' --exclude='.venv' --exclude='data/' --exclude='__pycache__' --exclude='.gitea' "${CLONE_DIR}/" "${RELEASE_DIR}/" + + echo "=== 3. Link shared resources ===" + mkdir -p "${DEPLOY_BASE}/shared" + mkdir -p "${RELEASE_DIR}/data" + ln -sfn "${DEPLOY_BASE}/shared/.env" "${RELEASE_DIR}/.env" + DB_DIR="$HOME/.workbuddy/data/ziwei-power" + mkdir -p "${DB_DIR}" + ln -sfn "${DB_DIR}" "${RELEASE_DIR}/data" + + echo "=== 4. Setup Python venv ===" + cd "${RELEASE_DIR}" + python3 -m venv .venv + . .venv/bin/activate + pip install --no-cache-dir -r requirements.txt + + echo "=== 5. Setup systemd (first run only) ===" + if ! systemctl is-enabled "${SERVICE_NAME}" >/dev/null 2>&1; then + cat > "/etc/systemd/system/${SERVICE_NAME}.service" </dev/null 2>&1; then + echo "Health check passed" + break + fi + echo "Attempt $i: waiting..." + sleep 2 + done + + if ! curl -fsS http://127.0.0.1:5058/api/health >/dev/null 2>&1; then + echo "ERROR: Health check failed" + PREV=$(ls -t "${DEPLOY_BASE}/releases" | sed -n '2p') + if [ -n "${PREV}" ]; then + ln -sfn "${DEPLOY_BASE}/releases/${PREV}" "${DEPLOY_BASE}/current" + systemctl restart "${SERVICE_NAME}" + echo "Rolled back to ${PREV}" + fi + exit 1 + fi + + echo "=== 8. Cleanup ===" + ls -dt "${DEPLOY_BASE}"/releases/*/ | tail -n +6 | xargs -r rm -rf + rm -rf "${CLONE_DIR}" + + echo "=== Deploy complete: ${RELEASE_ID} ==="