mirror of
https://github.com/snowy-yang/qqbotsdk.git
synced 2026-10-21 13:37:19 +00:00
五轮实跑证据链:工作流多次 7~26s 即死而 probe(纯 curl)每次成功; 换成 gitea 本地 clone 依旧 8s 即死——默认镜像工具链不明是主因,git/ github 只是其中一环。收缩依赖面:container 固定 python:3.13-slim (保证 python3.13+pip,免去 uv 下载 CPython);源码经 Gitea archive 接口拉 tarball(curl 已被 probe 证明可用);pyright 的 node 缺失时 apt 兜底。日志匿名不可读,改为每个关键步骤把成败写进 commit status (远程可读),失败点从此可直接定位。 部署工作流同步换 archive 拉源码;deploy/secrets 探测两轮均报 MISSING,待仓库侧补配 secrets。
60 lines
2.4 KiB
YAML
60 lines
2.4 KiB
YAML
name: 代码检测
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
pull_request:
|
||
workflow_dispatch:
|
||
|
||
jobs:
|
||
lint:
|
||
name: ruff + pyright
|
||
runs-on: ubuntu-latest
|
||
# 固定官方 python 镜像:保证 python3.13 + pip 在场(runner 默认镜像
|
||
# 工具链不明,实测任务曾 7s 即死);runner 不支持 container 时回落
|
||
# 宿主机 python,此时 uv 经下方镜像变量自行下载 CPython
|
||
container: python:3.13-slim
|
||
steps:
|
||
# 不用 actions/checkout、不用 git:runner 对 github 连通性不稳
|
||
# (probe.yml 实测),改走 Gitea archive 接口拉源码 tarball;每步
|
||
# 结果写进 commit status(日志匿名不可读,status 远程可读)
|
||
- name: 拉源码、装依赖并执行检测
|
||
env:
|
||
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||
UV_PYTHON_INSTALL_MIRROR: https://registry.npmmirror.com/-/binary/python-build-standalone
|
||
run: |
|
||
set -e
|
||
SERVER="${GITHUB_SERVER_URL:-https://gitea.4i.hk}"
|
||
note() {
|
||
curl -s -m 10 -X POST \
|
||
-H "Authorization: token $TOKEN" \
|
||
-H 'Content-Type: application/json' \
|
||
-d "{\"state\":\"$3\",\"context\":\"ci/$1\",\"description\":\"$2\"}" \
|
||
"$SERVER/api/v1/repos/$GITHUB_REPOSITORY/statuses/$GITHUB_SHA" \
|
||
-o /dev/null
|
||
}
|
||
trap 'note error "步骤意外失败,详见 Actions 日志" failure' ERR
|
||
|
||
curl -sL "$SERVER/api/v1/repos/$GITHUB_REPOSITORY/archive/$GITHUB_SHA.tar.gz" -o 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 >/dev/null 2>&1 \
|
||
|| { note pip "pip 安装 uv 失败" failure; exit 1; }
|
||
note pip ok success
|
||
|
||
uv sync >/dev/null 2>&1 \
|
||
|| { note sync "uv sync 失败" failure; exit 1; }
|
||
note sync ok success
|
||
|
||
uv run ruff check src tests examples \
|
||
|| { note ruff "ruff check 未通过" failure; exit 1; }
|
||
note ruff ok success
|
||
|
||
# pyright 需要 node:镜像里没有就装 Debian 的(保底 pyright 自带下载)
|
||
command -v node >/dev/null 2>&1 || { apt-get update -qq && apt-get install -y -qq nodejs; } || true
|
||
uv run pyright \
|
||
|| { note pyright "pyright 未通过" failure; exit 1; }
|
||
note pyright ok success
|