From aae31a48bd4ff763237a4c5ee62bce9258f98a81 Mon Sep 17 00:00:00 2001 From: xiaoli-cli Date: Sun, 26 Apr 2026 14:09:28 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E6=B7=BB=E5=8A=A0=20Gitee=20Go=20?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E7=BA=BF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitee/pipeline.yml | 133 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 .gitee/pipeline.yml diff --git a/.gitee/pipeline.yml b/.gitee/pipeline.yml new file mode 100644 index 0000000..33c3a02 --- /dev/null +++ b/.gitee/pipeline.yml @@ -0,0 +1,133 @@ +# Gitee Go CI 流水线 +# 自动在 push/PR 到 master 时触发 + +triggers: + push: + branches: + - master + - main + pull_request: + branches: + - master + - main + +stages: + - lint + - test + - structure + +jobs: + # ── 代码检查 ── + py-compile: + name: 语法检查 + stage: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: py_compile 语法检查 + run: | + python -c " + import py_compile, os, sys + errors = 0 + for root, dirs, files in os.walk('.'): + dirs[:] = [d for d in dirs if d not in {'.git', '__pycache__', 'node_modules', 'embedded_python'}] + for f in files: + if f.endswith('.py'): + path = os.path.join(root, f) + try: + py_compile.compile(path, doraise=True) + except py_compile.PyCompileError as e: + print(f'ERROR: {e}') + errors += 1 + if errors: + print(f'\n{errors} 个文件有语法错误') + sys.exit(1) + print('所有文件语法正确') + " + + ruff-lint: + name: Ruff lint + stage: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: 安装 ruff + run: pip install ruff + - name: Ruff 检查 + run: ruff check . --select E,F,W --ignore E501,E402 --exclude .git,__pycache__,embedded_python + + # ── 插件测试 ── + pytest: + name: 插件测试 (Python ${{ matrix.python-version }}) + stage: test + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10", "3.11", "3.12"] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: 安装依赖 + run: pip install pytest colorama + - name: 运行测试 + run: pytest tests/ -v --tb=short + + # ── 项目结构检查 ── + structure: + name: 项目结构检查 + stage: structure + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: 检查必要文件 + run: | + echo "检查项目结构..." + files=( + "ai_cli.py" + "launcher.py" + "xcli_core/cli_core.py" + "xcli_core/cli_base.py" + "xcli_core/config.py" + "xcli_core/constants.py" + "ai_engines/ollama_engine.py" + "ai_engines/openai_engine.py" + "plugins/code_editor.py" + "plugins/cmd_executor.py" + "plugins/file_manager.py" + "plugins/auto_engineer.py" + ) + missing=0 + for f in "${files[@]}"; do + if [ -f "$f" ]; then + echo " ✓ $f" + else + echo " ✗ $f (缺失!)" + missing=$((missing + 1)) + fi + done + if [ $missing -gt 0 ]; then + echo "\n${missing} 个文件缺失" + exit 1 + fi + echo "\n项目结构完整" + + - name: 检查无重复引擎 + run: | + engines=$(ls ai_engines/*_engine.py 2>/dev/null | wc -l) + echo "AI 引擎数量: $engines" + if [ "$engines" -gt 2 ]; then + echo "警告: 引擎数量超过 2 个" + exit 1 + fi + echo "引擎数量正常"