CI:增强 Markdown 测试报告(失败含日志片段+运行链接),移除 HTML 报告,README 加 CI 徽章与报告入口
build-test-deploy / ci (push) Successful in 7m22s
build-test-deploy / ci (push) Successful in 7m22s
This commit is contained in:
@@ -84,7 +84,11 @@ jobs:
|
||||
docker start "$CID" >/dev/null
|
||||
# Run build + tests (capture exit code, don't fail the step here so
|
||||
# we can still collect the report on failure)
|
||||
docker exec "$CID" /src/ci/build-test.sh
|
||||
docker exec \
|
||||
-e GITHUB_RUN_ID="${{ github.run_id }}" \
|
||||
-e GITHUB_REPOSITORY="${{ github.repository }}" \
|
||||
-e GITHUB_SERVER_URL="${GITEA_SERVER}" \
|
||||
"$CID" /src/ci/build-test.sh
|
||||
TEST_RC=$?
|
||||
mkdir -p bin reports
|
||||
docker cp "$CID:/src/bin/pPowerManger" bin/pPowerManger 2>/dev/null || true
|
||||
@@ -116,8 +120,8 @@ jobs:
|
||||
git config user.email "ci@localhost"
|
||||
git checkout --orphan test-reports >/dev/null 2>&1 || git checkout test-reports >/dev/null 2>&1 || true
|
||||
git rm -rf . >/dev/null 2>&1 || true
|
||||
cp -f reports/test-report.md reports/test-report.html reports/junit.xml . 2>/dev/null || true
|
||||
git add test-report.md test-report.html junit.xml
|
||||
cp -f reports/test-report.md reports/junit.xml . 2>/dev/null || true
|
||||
git add test-report.md junit.xml
|
||||
git commit -m "CI test report ${GITHUB_SHA:-}" >/dev/null 2>&1 || true
|
||||
git push -f origin test-reports >/dev/null 2>&1 || echo "WARN: failed to push test-reports branch"
|
||||
fi
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
# H100PowerManger
|
||||
|
||||
H100 能源管理程序
|
||||
H100 能源管理程序
|
||||
|
||||
[](https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/actions)
|
||||
|
||||
## 测试报告
|
||||
|
||||
每次 CI 运行后自动生成测试报告:
|
||||
|
||||
- [最新测试报告 (Markdown)](https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/src/branch/test-reports/test-report.md)
|
||||
- [JUnit XML](https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/raw/branch/test-reports/junit.xml)
|
||||
|
||||
+73
-47
@@ -2,7 +2,7 @@
|
||||
#=======================================================================
|
||||
# FILE: ci/build-test.sh
|
||||
# DESC: Build the project, run unit tests + a startup smoke test, and
|
||||
# generate a visual test report (markdown + junit.xml + html).
|
||||
# generate a visual test report (markdown + junit.xml).
|
||||
# Executed INSIDE the aarch64 build container (ci/Dockerfile).
|
||||
#=======================================================================
|
||||
set -uo pipefail
|
||||
@@ -17,6 +17,12 @@ ARCH="$(uname -m)"
|
||||
COMMIT="$(git -C "${SRC_DIR}" rev-parse --short HEAD 2>/dev/null || echo "${GITHUB_SHA:-unknown}")"
|
||||
BUILD_DATE="$(date -u +'%Y-%m-%d %H:%M:%S UTC')"
|
||||
|
||||
# Run link (env vars passed by the workflow via docker exec)
|
||||
RUN_LINK=""
|
||||
if [ -n "${GITHUB_SERVER_URL:-}" ] && [ -n "${GITHUB_REPOSITORY:-}" ] && [ -n "${GITHUB_RUN_ID:-}" ]; then
|
||||
RUN_LINK="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
|
||||
fi
|
||||
|
||||
#-----------------------------------------------------------------------
|
||||
# Result trackers
|
||||
#-----------------------------------------------------------------------
|
||||
@@ -117,30 +123,81 @@ EOF
|
||||
fi
|
||||
|
||||
#-----------------------------------------------------------------------
|
||||
# 4. Generate visual test report
|
||||
# 4. Generate visual test report (markdown + junit.xml)
|
||||
#-----------------------------------------------------------------------
|
||||
mark() { [ "$1" = "1" ] && echo "✅ 通过" || echo "❌ 失败"; }
|
||||
ALL_OK=0
|
||||
[ "${BUILD_OK}" = "1" ] && [ "${SQLITE_OK}" = "1" ] && [ "${SMOKE_OK}" = "1" ] && ALL_OK=1
|
||||
|
||||
# --- Markdown report ---
|
||||
cat > "${REPORT_DIR}/test-report.md" <<EOF
|
||||
## H100PowerManger CI 测试报告
|
||||
REPORT="${REPORT_DIR}/test-report.md"
|
||||
: > "$REPORT"
|
||||
md() { printf '%s\n' "$*" >> "$REPORT"; }
|
||||
|
||||
| 步骤 | 结果 | 耗时 |
|
||||
| :--- | :--- | :--- |
|
||||
| 构建 (${ARCH}) | $(mark ${BUILD_OK}) | ${BUILD_TIME}s |
|
||||
| 单元测试 SQLiteTest | $(mark ${SQLITE_OK}) | ${SQLITE_TIME}s |
|
||||
| 冒烟测试 MOOSDB+pPowerManger | $(mark ${SMOKE_OK}) | ${SMOKE_TIME}s |
|
||||
md "## H100PowerManger CI 测试报告"
|
||||
md ""
|
||||
md "**总体结论: $([ "${ALL_OK}" = "1" ] && echo "✅ 全部通过" || echo "❌ 存在失败")**"
|
||||
md ""
|
||||
md "| 步骤 | 结果 | 耗时 |"
|
||||
md "| :--- | :--- | :--- |"
|
||||
md "| 构建 (${ARCH}) | $(mark ${BUILD_OK}) | ${BUILD_TIME}s |"
|
||||
md "| 单元测试 SQLiteTest | $(mark ${SQLITE_OK}) | ${SQLITE_TIME}s |"
|
||||
md "| 冒烟测试 MOOSDB+pPowerManger | $(mark ${SMOKE_OK}) | ${SMOKE_TIME}s |"
|
||||
md ""
|
||||
|
||||
**总体结论: $([ "${ALL_OK}" = "1" ] && echo "✅ 全部通过" || echo "❌ 存在失败")**
|
||||
if [ "${ALL_OK}" != "1" ]; then
|
||||
md "## 失败详情"
|
||||
md ""
|
||||
if [ "${BUILD_OK}" != "1" ]; then
|
||||
md "### 构建 (${ARCH}) — ❌"
|
||||
md ""
|
||||
md '<details><summary>make.log 末尾</summary>'
|
||||
md ""
|
||||
md '```text'
|
||||
tail -30 /tmp/make.log >> "$REPORT" 2>/dev/null || true
|
||||
md '```'
|
||||
md '</details>'
|
||||
md ""
|
||||
fi
|
||||
if [ "${SQLITE_OK}" != "1" ]; then
|
||||
md "### 单元测试 SQLiteTest — ❌"
|
||||
md ""
|
||||
md '<details><summary>SQLiteTest 输出末尾</summary>'
|
||||
md ""
|
||||
md '```text'
|
||||
tail -30 /tmp/sqlitetest.log >> "$REPORT" 2>/dev/null || true
|
||||
md '```'
|
||||
md '</details>'
|
||||
md ""
|
||||
fi
|
||||
if [ "${SMOKE_OK}" != "1" ]; then
|
||||
md "### 冒烟测试 MOOSDB+pPowerManger — ❌"
|
||||
md ""
|
||||
md '<details><summary>pPowerManger 日志末尾</summary>'
|
||||
md ""
|
||||
md '```text'
|
||||
tail -20 /tmp/pm_smoke.log >> "$REPORT" 2>/dev/null || true
|
||||
md '```'
|
||||
md ''
|
||||
md '<details><summary>MOOSDB 日志末尾</summary>'
|
||||
md ""
|
||||
md '```text'
|
||||
tail -10 /tmp/moosdb_smoke.log >> "$REPORT" 2>/dev/null || true
|
||||
md '```'
|
||||
md '</details>'
|
||||
md ""
|
||||
fi
|
||||
fi
|
||||
|
||||
- 架构: \`${ARCH}\`
|
||||
- Commit: \`${COMMIT}\`
|
||||
- 时间: ${BUILD_DATE}
|
||||
EOF
|
||||
md "---"
|
||||
md ""
|
||||
md "- 架构: \`${ARCH}\`"
|
||||
md "- Commit: \`${COMMIT}\`"
|
||||
md "- 时间: ${BUILD_DATE}"
|
||||
if [ -n "${RUN_LINK}" ]; then
|
||||
md "- 运行: [${RUN_LINK}](${RUN_LINK})"
|
||||
fi
|
||||
|
||||
# --- JUnit XML report (for Gitea test-report rendering) ---
|
||||
# --- JUnit XML report ---
|
||||
cat > "${REPORT_DIR}/junit.xml" <<EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuites name="H100PowerManger" tests="3" failures="$([ "${ALL_OK}" = "1" ] && echo 0 || echo 1)" time="$((BUILD_TIME+SQLITE_TIME+SMOKE_TIME))">
|
||||
@@ -158,37 +215,6 @@ cat > "${REPORT_DIR}/junit.xml" <<EOF
|
||||
</testsuites>
|
||||
EOF
|
||||
|
||||
# --- Self-contained HTML report ---
|
||||
status_html() {
|
||||
[ "$1" = "1" ] && echo '<span style="color:#1a7f37;font-weight:600">✔ PASS</span>' \
|
||||
|| echo '<span style="color:#cf222e;font-weight:600">✖ FAIL</span>'
|
||||
}
|
||||
cat > "${REPORT_DIR}/test-report.html" <<EOF
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN"><head><meta charset="utf-8"><title>H100PowerManger 测试报告</title>
|
||||
<style>
|
||||
body{font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;max-width:720px;margin:40px auto;color:#1f2328;line-height:1.6}
|
||||
h1{font-size:22px} h2{font-size:16px;border-bottom:1px solid #d0d7de;padding-bottom:6px}
|
||||
table{border-collapse:collapse;width:100%;margin:12px 0}
|
||||
th,td{border:1px solid #d0d7de;padding:8px 12px;text-align:left}
|
||||
th{background:#f6f8fa}
|
||||
.ok{background:#e6ffec} .fail{background:#ffebe9}
|
||||
.meta{color:#57606a;font-size:13px}
|
||||
.badge{display:inline-block;padding:4px 12px;border-radius:20px;font-weight:700}
|
||||
.badge.ok{background:#1a7f37;color:#fff} .badge.fail{background:#cf222e;color:#fff}
|
||||
</style></head><body>
|
||||
<h1>H100PowerManger CI 测试报告</h1>
|
||||
<p class="meta">架构 <code>${ARCH}</code> · Commit <code>${COMMIT}</code> · ${BUILD_DATE}</p>
|
||||
<p>$([ "${ALL_OK}" = "1" ] && echo '<span class="badge ok">全部通过</span>' || echo '<span class="badge fail">存在失败</span>')</p>
|
||||
<table>
|
||||
<tr><th>步骤</th><th>结果</th><th>耗时</th></tr>
|
||||
<tr class="$([ "${BUILD_OK}" = "1" ] && echo ok || echo fail)"><td>构建 (${ARCH})</td><td>$(status_html ${BUILD_OK})</td><td>${BUILD_TIME}s</td></tr>
|
||||
<tr class="$([ "${SQLITE_OK}" = "1" ] && echo ok || echo fail)"><td>单元测试 SQLiteTest</td><td>$(status_html ${SQLITE_OK})</td><td>${SQLITE_TIME}s</td></tr>
|
||||
<tr class="$([ "${SMOKE_OK}" = "1" ] && echo ok || echo fail)"><td>冒烟测试 MOOSDB+pPowerManger</td><td>$(status_html ${SMOKE_OK})</td><td>${SMOKE_TIME}s</td></tr>
|
||||
</table>
|
||||
</body></html>
|
||||
EOF
|
||||
|
||||
echo ">>> Reports generated in ${REPORT_DIR}:"
|
||||
ls -la "${REPORT_DIR}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user