Files
qqbotsdk/.gitea/workflows/ci.yml
T
snowy-yang a09d1788cd fix: CI 锁定 python:3.13-slim 容器、走 archive 接口拉源码,每步结果上报 status
五轮实跑证据链:工作流多次 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。
2026-09-24 20:48:16 +08:00

60 lines
2.4 KiB
YAML
Raw 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:
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