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