> ## Documentation Index
> Fetch the complete documentation index at: https://niceeval.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 在 GitHub Actions 和 CI 中运行 niceeval

> 把 niceeval 接入 GitHub Actions 或任意 CI。eval 失败时非零退出，输出 JUnit XML，并通过缓存加速重复运行。

Evals 应该和测试一样进入 CI。它们能在 PR 阶段发现 agent 行为回退，也能在 nightly job 中跟踪模型、成本和延迟变化。

## 退出码

默认情况下，只要存在失败的 gate，niceeval 将以非零状态码退出。CI 中通常使用 `--strict`，让失败更明确。

```bash theme={null}
npx niceeval exp ci --strict
```

## GitHub Actions 示例

```yaml theme={null}
name: evals
on:
  pull_request:
  workflow_dispatch:

jobs:
  evals:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npx niceeval exp ci --strict
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
```

## 配置 secrets

<Steps>
  <Step title="在仓库中添加 secrets">
    把 provider token 放进 GitHub Actions secrets。
  </Step>

  <Step title="在 workflow 中传入 env">
    只在运行 eval 的 step 暴露必要环境变量。
  </Step>

  <Step title="验证变量存在">
    用最小 eval 或 `list` / dry run 先验证配置。
  </Step>
</Steps>

## JUnit reporter

```ts theme={null}
import { defineConfig } from "niceeval";
import { Console, JUnit } from "niceeval/reporters";

export default defineConfig({
  reporters: [Console(), JUnit(".niceeval/junit.xml")],
});
```

CI 可以上传 JUnit XML，让失败出现在测试报告 UI 里。

## 只检查发现

```bash theme={null}
npx niceeval list
```

适合快速验证 eval 文件能加载、配置没有明显错误。

## 缓存 `.niceeval/`

可以在 CI 中缓存 `.niceeval/`，但要确保 fingerprint 覆盖了影响结果的输入。对于 nightly 基准，通常保留完整 artifacts 更有价值。

## 控制并发

```bash theme={null}
npx niceeval exp ci --max-concurrency 2
```

标准 GitHub-hosted runner 上，sandbox eval 并发不宜过高。远程 HTTP eval 可以按服务限流能力调高。

## 推荐模式

<CardGroup cols={2}>
  <Card title="PR runs" icon="code-pull-request">
    只跑关键 eval 和高风险路径，保持反馈快。
  </Card>

  <Card title="Nightly 全量矩阵运行" icon="moon">
    运行完整 experiment，记录 pass rate、成本和延迟趋势。
  </Card>
</CardGroup>
