forked from redrsoe2100/os-autotest
ci:log-report.sh
This commit is contained in:
43
.github/workflows/scripts/log-report.sh
vendored
Normal file
43
.github/workflows/scripts/log-report.sh
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 1. 定义根目录路径 (请根据实际情况修改)
|
||||||
|
ROOT_DIR="${1:-$(pwd)/logs}"
|
||||||
|
|
||||||
|
# 2. 检查目录是否存在
|
||||||
|
if [ ! -d "$ROOT_DIR" ]; then
|
||||||
|
echo "错误: 目录 $ROOT_DIR 不存在"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "正在分析目录: $ROOT_DIR"
|
||||||
|
echo "----------------------------------------"
|
||||||
|
|
||||||
|
# 3. 遍历根目录下的所有一级子目录
|
||||||
|
# 使用 -mindepth 1 -maxdepth 1 确保只遍历第一层子目录
|
||||||
|
# 使用 -type d 确保只处理目录
|
||||||
|
for subdir in "$ROOT_DIR"/*/; do
|
||||||
|
# 如果没有子目录,循环可能会直接跳过,这里做一个安全检查
|
||||||
|
[ -d "$subdir" ] || continue
|
||||||
|
|
||||||
|
# 4. 查找该子目录下最大的 .log 文件
|
||||||
|
# ls -1 列出文件
|
||||||
|
# sort 按名称排序 (因为你要的是"按名称排序最大",即字母顺序最后)
|
||||||
|
# tail -n 1 取最后一行,即最大的那个
|
||||||
|
max_log_file=$(ls -1 "$subdir"*.log 2>/dev/null | sort | tail -n 1)
|
||||||
|
|
||||||
|
# 5. 检查是否找到了 log 文件
|
||||||
|
if [ -n "$max_log_file" ] && [ -f "$max_log_file" ]; then
|
||||||
|
echo ">>> 正在分析文件: $max_log_file"
|
||||||
|
|
||||||
|
# 6. 使用 grep 获取 warn 和 error 信息及其前后 5 行
|
||||||
|
# -i : 忽略大小写 (匹配 Warn, WARN, warn)
|
||||||
|
# -E : 使用扩展正则表达式 (匹配 warn 或 error)
|
||||||
|
# -C 5 : 显示匹配行的前后 5 行 (Context)
|
||||||
|
# --color=auto : 高亮显示关键词 (可选,方便查看)
|
||||||
|
grep -n -E -C 5 --color=auto "Failed |Error:" "$max_log_file" | sed 's/^--$/----------------------------------------/'
|
||||||
|
|
||||||
|
echo "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
|
||||||
|
else
|
||||||
|
echo ">>> 在 $subdir 中未找到 .log 文件"
|
||||||
|
fi
|
||||||
|
done
|
||||||
2
.github/workflows/scripts/summary.py
vendored
2
.github/workflows/scripts/summary.py
vendored
@@ -73,7 +73,7 @@ def get_os_autotest_testsuite_result_data(testsuite):
|
|||||||
log.warning(f"{case_name}.sh not found in {script_dir}")
|
log.warning(f"{case_name}.sh not found in {script_dir}")
|
||||||
continue
|
continue
|
||||||
if case_name not in all_cases:
|
if case_name not in all_cases:
|
||||||
if testsuite == "smoke_pkg_install" and "case_name" == "test_pkg_install_uninstall":
|
if testsuite == "smoke_pkg_install" and case_name == "test_pkg_install_uninstall":
|
||||||
continue
|
continue
|
||||||
temp = [testsuite, case_name, "not run or exception in running, please run manual"]
|
temp = [testsuite, case_name, "not run or exception in running, please run manual"]
|
||||||
data.append(temp)
|
data.append(temp)
|
||||||
|
|||||||
2
.github/workflows/smoke-test.yml
vendored
2
.github/workflows/smoke-test.yml
vendored
@@ -32,6 +32,8 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
bash .github/workflows/scripts/log-report.sh "${RESULT_DIR}/logs"
|
||||||
|
|
||||||
python .github/workflows/scripts/summary.py --testsuits ".os-autotest/testsuite" --result "${RESULT_DIR}" --source "${RESULT_DIR}/source"
|
python .github/workflows/scripts/summary.py --testsuits ".os-autotest/testsuite" --result "${RESULT_DIR}" --source "${RESULT_DIR}/source"
|
||||||
sshpass -p "${{ secrets.IMAGE_BACKUP_HOST_PWD }}" rsync -av -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" "${RESULT_DIR}" "${{ secrets.IMAGE_BACKUP_HOST_USER }}@${{ secrets.IMAGE_BACKUP_HOST }}:${{ secrets.IMAGE_BACKUP_DIR }}"
|
sshpass -p "${{ secrets.IMAGE_BACKUP_HOST_PWD }}" rsync -av -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" "${RESULT_DIR}" "${{ secrets.IMAGE_BACKUP_HOST_USER }}@${{ secrets.IMAGE_BACKUP_HOST }}:${{ secrets.IMAGE_BACKUP_DIR }}"
|
||||||
TITLE="os-autotest"
|
TITLE="os-autotest"
|
||||||
|
|||||||
Reference in New Issue
Block a user