Files
moziplus-v2/.gitea/workflows/deploy.yml
T
cfdaily 073121f7ca
CI / lint (push) Successful in -3m58s
CI / lint (pull_request) Successful in -3m58s
CI / test (push) Failing after -3m59s
CI / test (pull_request) Failing after -3m59s
CI / notify-on-failure (push) Successful in -4m3s
CI / notify-on-failure (pull_request) Successful in -4m3s
fix: test and coverage gracefully skip when tests/ or src/ not exists
2026-06-06 18:43:40 +08:00

122 lines
4.4 KiB
YAML
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.
# 部署管道 — moziplus v2.0
#
# 触发条件:
# - push 到 main 分支 → 完整 CIlint + test + coverage+ 部署
#
# 注意:非 main 分支的 CI 由 ci.yml 负责(快速门控)
#
# Gitea v1.23.4 限制注意:
# - 不支持 failure() 表达式
# - 不支持 concurrency / permissions
# - 部署脚本占位,等姜维确认 act-runner 环境后再补具体命令
name: Deploy
on:
push:
branches: [main]
jobs:
# ── Job 1: CI(main 分支跑完整测试)─────────────────
ci:
runs-on: macos-arm64
steps:
- uses: actions/checkout@v4
- name: Setup Python
run: |
python3 -m venv .venv
.venv/bin/pip install --quiet -e ".[dev]"
- name: Lint
run: |
test -d src && .venv/bin/ruff check src/ || echo "No src/ directory, skipping lint"
- name: Unit & Integration Tests
run: |
if [ -d tests ]; then
.venv/bin/pytest tests/ -m "not e2e" -x -q
else
echo "No tests/ directory, skipping tests"
fi
- name: Coverage Report
run: |
if [ -d tests ] && [ -d src ]; then
.venv/bin/pytest tests/ -m "not e2e" --cov=src --cov-report=term-missing -q
else
echo "No tests/ or src/ directory, skipping coverage"
fi
# ── Job 2: 部署 ─────────────────────────────────────
deploy:
runs-on: macos-arm64
needs: ci
steps:
- uses: actions/checkout@v4
- name: Record current version
run: |
echo "Deploying commit: ${{ gitea.sha }}"
echo "Branch: ${{ gitea.ref }}"
echo "Timestamp: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
# TODO: bash scripts/deploy.sh --version
# 等姜维确认 act-runner 环境后再补
- name: Deploy
run: |
echo "=== Deploy step (placeholder) ==="
echo "Source: ${{ gitea.workspace }}"
# TODO: 实际部署脚本
# bash scripts/deploy.sh --source="$GITHUB_WORKSPACE" --target="$HOME/.sanguo_projects/sanguo_moziplus_v2" --health-check
echo "Deploy placeholder completed."
# placeholder: 后续替换为实际部署脚本
true
- name: Health check
run: |
echo "=== Health check (placeholder) ==="
# TODO: 等服务启动后做健康检查
# curl -sf http://localhost:8083/api/health || exit 1
echo "Health check placeholder passed."
# placeholder: 后续替换为实际健康检查
true
# ── 失败时回滚 ────────────────────────────────
# v1.23 不支持 if: failure()
# 回滚逻辑改由 notify-on-failure job 检测 commit status 后通知人工介入
# 后续可升级到 v1.24+ 后改用 failure() 表达式
# ── Job 3: 部署失败通知 ──────────────────────────────
notify-deploy-failure:
runs-on: macos-arm64
needs: [ci, deploy]
if: always()
steps:
- name: Check deploy result and notify
env:
CI_TOKEN: ${{ secrets.CI_TOKEN }}
run: |
STATUS=$(curl -sf \
-H "Authorization: token $CI_TOKEN" \
"${{ gitea.api_url }}/repos/${{ gitea.repository }}/commits/${{ gitea.sha }}/status" \
| python3 -c "import sys,json; print(json.load(sys.stdin).get('state',''))" 2>/dev/null || echo "")
echo "Deploy status: $STATUS"
if [ "$STATUS" != "success" ]; then
echo "Deploy failed, creating Issue for manual intervention..."
# 创建 Issue 通知人工介入
curl -sf -X POST \
-H "Authorization: token $CI_TOKEN" \
-H "Content-Type: application/json" \
"${{ gitea.api_url }}/repos/${{ gitea.repository }}/issues" \
-d "{\"title\": \"🔴 部署失败: commit ${{ gitea.sha }}\", \"body\": \"部署失败,需人工介入排查。\\n\\n触发 commit: \`${{ gitea.sha }}\`\\n分支: main\\n\\n请检查 deploy 日志并手动处理。\", \"labels\": [\"bug\", \"priority:high\"]}" \
|| echo "Failed to create issue"
echo "Issue created for deploy failure."
else
echo "Deploy succeeded."
fi