Files
snowy-yang 24c235c93d
ci/fetch ok
ci/pip ok
ci/sync ok
ci/ruff ok
ci/pytest ok
代码测试 / ruff + pytest (push) Successful in 1m16s
修复 CI:slim 镜像没有 curl,网络操作改用 python 标准库
首轮实跑 1s 即死,日志定位 /var/run/act/workflow/0.sh: curl: command
not found——python:3.13-slim 不带 curl/wget/git;SDK 仓库那份 ci.yml
的「curl 可用」是宿主机 probe 验证的,进了 container 不成立(且该
方案在 Gitea 上从未跑绿过,后来整体迁去了 GitHub)。

- archive 拉取与 commit status 上报改用 python3 urllib(容器里保证
  在场的只有 python),note() 参数经 argv 传入、token 走环境变量
- 去掉 pyright 及其 apt 装 node 的兜底:多一条网络依赖链,且本地
  pyright 常绿,CI 保持 ruff + pytest 即可
- 各步骤不再吞输出,日志可直接定位
2026-09-24 22:00:07 +08:00

81 lines
3.3 KiB
YAML
Raw Permalink 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.
name: 代码测试
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
jobs:
test:
name: ruff + pytest
runs-on: ubuntu-latest
# 固定官方 python 镜像:保证 python3.13 + pip 在场(runner 默认镜像
# 工具链不明,SDK 仓库实测任务曾 7s 即死);runner 不支持 container
# 时回落宿主机 python,此时 uv 经下方镜像变量自行下载 CPython
container: python:3.13-slim
steps:
# 不用 actions/checkout、不用 git:runner 对 github 连通性不稳
# (SDK 仓库 probe 实测),改走 Gitea archive 接口拉源码 tarball。
# slim 镜像没有 curl/wget/git,网络操作一律用容器里保证在场的
# python 标准库;每步结果写进 commit status(日志匿名不可读,
# status 远程可读;GITEA_TOKEN 未配置时静默降级,不影响流程)
- name: 拉源码、装依赖并执行测试
env:
TOKEN: ${{ secrets.GITEA_TOKEN }}
UV_PYTHON_INSTALL_MIRROR: https://registry.npmmirror.com/-/binary/python-build-standalone
run: |
set -e
export SERVER="${GITHUB_SERVER_URL:-https://gitea.4i.hk}"
note() {
python3 -c '
import sys, os, json, urllib.request
ctx, desc, state = sys.argv[1:4]
req = urllib.request.Request(
os.environ["SERVER"] + "/api/v1/repos/" + os.environ["GITHUB_REPOSITORY"]
+ "/statuses/" + os.environ["GITHUB_SHA"],
data=json.dumps(
{"state": state, "context": "ci/" + ctx, "description": desc}
).encode(),
headers={
"Content-Type": "application/json",
"Authorization": "token " + os.environ["TOKEN"],
},
)
try:
urllib.request.urlopen(req, timeout=10)
except Exception:
pass # status 只是旁路:token 未配置或网络抖动都不能影响主流程
' "$1" "$2" "$3"
}
trap 'note error "步骤意外失败,详见 Actions 日志" failure' ERR
python3 -c "import urllib.request; urllib.request.urlretrieve(
'$SERVER/api/v1/repos/$GITHUB_REPOSITORY/archive/$GITHUB_SHA.tar.gz',
'src.tgz')" \
&& mkdir src && tar -xzf src.tgz -C src --strip-components=1 && cd src \
|| { note fetch "archive 拉取失败" failure; exit 1; }
note fetch ok success
pip install uv \
|| { note pip "pip 安装 uv 失败" failure; exit 1; }
note pip ok success
# qqbotsdk 依赖解析自 GitHub archive(uv.lock 锁定内容 hash),
# runner 到 github 时通时不通,sync 失败自动重试
sync_ok=""
for _ in 1 2 3; do
if uv sync; then sync_ok=1; break; fi
sleep 5
done
[ -n "$sync_ok" ] || { note sync "uv sync 失败(已重试 3 次)" failure; exit 1; }
note sync ok success
uv run ruff check musicbot tests \
|| { note ruff "ruff check 未通过" failure; exit 1; }
note ruff ok success
uv run pytest \
|| { note pytest "pytest 未通过" failure; exit 1; }
note pytest ok success