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。
This commit is contained in:
snowy-yang committed 2026-09-24 20:48:16 +08:00
1 parent b3edd79674
commit a09d1788cd
2 files changed
+50 -20

No files matched your search

+42 -16
View File
@@ -10,24 +10,50 @@ 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:runner 对 github 的连通性不稳定(probe.yml
# 实测多次工作流死于 checkout 阶段),改从 Gitea 本体克隆
- name: 检出代码
run: git clone --depth=1 "${GITHUB_SERVER_URL:-https://gitea.4i.hk}/${GITHUB_REPOSITORY}.git" .
- name: 安装 uv
run: pip install uv
- name: 同步依赖(含 dev 组)
run: uv sync
# 不用 actions/checkout、不用 git:runner 对 github 连通性不稳
# (probe.yml 实测),改走 Gitea archive 接口拉源码 tarball;每步
# 结果写进 commit status(日志匿名不可读,status 远程可读)
- name: 拉源码、装依赖并执行检测
env:
# CPython 3.13 走 npmmirror 的 python-build-standalone 镜像,
# 避开 github releases 的间歇性不通
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
- name: ruff 静态检查
run: uv run ruff check src tests examples
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
- name: pyright 类型检查
run: uv run pyright
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
+8 -4
View File
@@ -19,10 +19,14 @@ jobs:
name: Cloudflare Pages
runs-on: ubuntu-latest
steps:
# 不用 actions/checkout(runner 对 github 连通性不稳,见 probe.yml),
# 改从 Gitea 本体克隆
- name: 检出代码
run: git clone --depth=1 "${GITHUB_SERVER_URL:-https://gitea.4i.hk}/${GITHUB_REPOSITORY}.git" .
# 不用 actions/checkout、不用 git(runner 对 github 连通性不稳,见
# probe.yml):改走 Gitea archive 接口拉源码 tarball
- name: 拉源码
run: |
SERVER="${GITHUB_SERVER_URL:-https://gitea.4i.hk}"
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 \
&& mv src/* . && rm -rf src src.tgz
# 日志匿名不可读:把 secrets 在场情况写进 commit status 便于远程
# 排查(只报 set/MISSING,不泄露值)