---
title: 自动化与集成
description: 把 Welight CLI 接入脚本与 CI：规则检查门禁、shell 补全与发布前的出口 IP 说明。
---

CLI 的输出遵循「结果走 stdout、日志走 stderr」的约定，便于管道与脚本组合；非交互环境下会自动退化为纯文本输出。

## 管道与脚本

```bash
# 从 stdin 读取，输出 HTML 到 stdout
cat post.md | wl render - --stdout > out.html

# 规则检查结果交给脚本处理
wl lint post.md --json | jq '.issues | length'

# 一键排版写回文件
wl layout post.md --in-place
```

## 接入 CI

`wl lint`、`wl checkup`、`wl detect` 都可以用退出码表达结果，适合作为流水线门禁：

```bash
wl lint post.md --fail-on high          # 命中高危时退出码 1
wl checkup post.md --fail-on action     # 体检有「建议处理」时退出码 1
wl detect post.md --max-ai 40           # AI + 疑似占比达到 40% 时退出码 1
```

密钥通过环境变量注入，例如：

```yaml
- name: Welight 规则检查
  env:
    WELIGHT_TYPESAFE_KEY: ${{ secrets.WELIGHT_TYPESAFE_KEY }}
  run: npx welight lint post.md --fail-on high
```

:::tip
`wl lint` 使用内置规则库离线扫描，无需联网与密钥；只有 `checkup`、`detect`、`title` 等需要判断层或模型的命令才依赖密钥。
:::

## Shell 补全

安装补全后，输入 `wl` 后按 `Tab` 即可联想子命令、选项与枚举值（主题、提供商、档位、凭据名等）：

```bash
# bash
eval "$(wl completion bash)"              # 可写入 ~/.bashrc

# zsh
eval "$(wl completion zsh)"               # 写入 ~/.zshrc（oh-my-zsh 之后）

# fish
wl completion fish | source
```

补全数据由隐藏命令 `wl __complete` 提供，无需额外依赖。

**行内联想**（输入时浅色候选，按 `→` 采用）属于 shell 行编辑器能力：

- **zsh**：安装 [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions)，并设置 `ZSH_AUTOSUGGEST_STRATEGY=(completion history)`
- **fish**：原生支持（候选来自补全）
- **bash**：需要 [ble.sh](https://github.com/akinomyoga/ble.sh)

## 发布与出口 IP

CLI 的发布链路**不使用官方代理**，默认直连 `api.weixin.qq.com`。微信会校验调用方公网 IP，未在白名单中时返回 `40164`：

1. 在公众号后台「开发 → 基本配置 → IP 白名单」加入当前网络出口 IP；
2. 用 `curl -4 ifconfig.me` 查看出口 IP；
3. 若出口不固定，可自建反向代理并通过 `--proxy` 或配置项 `proxy` 指定。

:::caution
CI runner 的出口 IP 通常不固定，不建议直接在 CI 中执行 `wl publish`。常见做法是在本地或固定出口的机器上发布，或配置自建代理。
:::
