6eac0b2cf2
Worker Base Image Build / Build Worker Base Images (worker-base-builder-cache, infra/docker/worker-base-builder.Dockerfile, worker-base-builder, builder) (push) Failing after 1m54s
Worker Base Image Build / Build Worker Base Images (worker-base-runtime-cache, infra/docker/worker-base-runtime.Dockerfile, worker-base-runtime, runtime) (push) Failing after 1m36s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Validate - Code Quality (push) Failing after 1m29s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m4s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 1m2s
CI/CD Pipeline / Unit Tests (push) Successful in 3m38s
CI/CD Pipeline / Integration Tests (push) Successful in 2m0s
CI/CD Pipeline / Frontend Lint (push) Successful in 28s
CI/CD Pipeline / Frontend Unit Tests (push) Failing after 44s
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Build Staging API Image (push) Failing after 2m16s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 8m14s
CI/CD Pipeline / Build Staging Worker Image (push) Failing after 2m0s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (push) Has been skipped
同步内容: 1. CI流水线配置(ci-pipeline.yml)与develop对齐 2. PR构建脚本docker_build_only.sh增加buildx→docker build回退 3. pre-build步骤worker基础镜像构建增加buildx回退 4. 单元测试脚本全量覆盖率改为仅报告不阻塞 5. diff-cover依赖加入requirements-dev.txt 6. worker base builder/runtime Dockerfile同步 7. test_config_oss.py clear=False→clear=True修复OSS污染 8. Frontend Lint增加prettier依赖
104 lines
3.7 KiB
YAML
104 lines
3.7 KiB
YAML
name: CI Health Daily Report
|
|
on:
|
|
schedule:
|
|
- cron: '0 1 * * *' # UTC 01:00 = 北京时间 09:00
|
|
workflow_dispatch:
|
|
permissions:
|
|
contents: read
|
|
jobs:
|
|
ci-health-report:
|
|
name: CI健康度每日巡检
|
|
runs-on: saas
|
|
timeout-minutes: 15
|
|
steps:
|
|
- name: Checkout code
|
|
shell: sh
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
run: |
|
|
set -eu
|
|
python3 - <<'PY'
|
|
import io, os, tarfile, time, urllib.request, urllib.error
|
|
url = f"{os.environ['GITHUB_API_URL']}/repos/{os.environ['GITHUB_REPOSITORY']}/archive/{os.environ['GITHUB_SHA']}.tar.gz"
|
|
request = urllib.request.Request(url, headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}"})
|
|
last_err = None
|
|
for attempt in range(5):
|
|
try:
|
|
with urllib.request.urlopen(request, timeout=120) as response:
|
|
archive = response.read()
|
|
break
|
|
except urllib.error.HTTPError as e:
|
|
last_err = e
|
|
if e.code >= 500 and attempt < 4:
|
|
wait = 2 ** attempt
|
|
print(f"Checkout HTTP {e.code}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
time.sleep(wait)
|
|
continue
|
|
raise
|
|
except Exception as e:
|
|
last_err = e
|
|
if attempt < 4:
|
|
wait = 2 ** attempt
|
|
print(f"Checkout error: {e}, retrying in {wait}s (attempt {attempt+1}/5)...")
|
|
time.sleep(wait)
|
|
continue
|
|
raise
|
|
else:
|
|
raise last_err
|
|
with tarfile.open(fileobj=io.BytesIO(archive), mode='r:gz') as tar:
|
|
root_prefix = tar.getmembers()[0].name.split('/', 1)[0] + '/'
|
|
for member in tar.getmembers():
|
|
name = member.name
|
|
if name == root_prefix[:-1]:
|
|
continue
|
|
if name.startswith(root_prefix):
|
|
member.name = name[len(root_prefix):]
|
|
if member.name:
|
|
tar.extract(member, '.')
|
|
PY
|
|
|
|
- name: Generate CI Dashboard HTML
|
|
shell: sh
|
|
env:
|
|
GITEA_TOKEN: ${{ github.token }}
|
|
run: |
|
|
set +e
|
|
echo "=== 生成 CI 健康度 HTML 看板 ==="
|
|
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo ""
|
|
python3 scripts/ci/ci_dashboard.py --days 7 --html --html-output ci_dashboard.html
|
|
EXIT_CODE=$?
|
|
if [ $EXIT_CODE -eq 0 ] && [ -f ci_dashboard.html ]; then
|
|
HTML_SIZE=$(wc -c < ci_dashboard.html)
|
|
echo ""
|
|
echo "✅ HTML 看板生成成功 (${HTML_SIZE} bytes)"
|
|
echo "路径: $(pwd)/ci_dashboard.html"
|
|
# 输出文件内容前几行,方便在 Actions 日志中确认
|
|
echo ""
|
|
echo "--- 看板预览 (前 5 行) ---"
|
|
head -5 ci_dashboard.html
|
|
echo "...(完整内容见产物文件)"
|
|
else
|
|
echo "❌ HTML 看板生成失败 (exit code: $EXIT_CODE)"
|
|
fi
|
|
echo ""
|
|
# 永远成功,看板生成失败不影响主流程
|
|
exit 0
|
|
|
|
- name: Run CI health check and report
|
|
shell: sh
|
|
env:
|
|
GITEA_TOKEN: ${{ github.token }}
|
|
CI_NOTIFY_WEBHOOK: ${{ secrets.CI_NOTIFY_WEBHOOK }}
|
|
run: |
|
|
set +e
|
|
echo "=== CI健康度每日巡检 ==="
|
|
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo ""
|
|
python3 scripts/ci/ci_health_report.py --limit 30
|
|
EXIT_CODE=$?
|
|
echo ""
|
|
echo "巡检完成 (exit code: $EXIT_CODE)"
|
|
# 永远成功,不影响CI状态(通知失败不应该标红)
|
|
exit 0
|