schema-e2e-validation
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSchema E2E Validation
Schema E2E 验证
When to Use This Skill
何时使用该Skill
Use this skill when:
- Validating schema changes before commit
- Verifying YAML schema matches live ClickHouse Cloud
- Regenerating Python types, DDL, or docs
- Running full schema workflow validation
在以下场景中使用该Skill:
- 提交前验证schema变更
- 验证YAML schema与ClickHouse Cloud实际环境是否匹配
- 重新生成Python类型、DDL或文档
- 运行完整的schema工作流验证
Prerequisites
前置条件
Docker Runtime (Required)
Docker 运行时(必填)
Earthly requires Docker. Start Colima before running:
bash
colima startCheck if running:
bash
docker ps # Should not errorEarthly 依赖 Docker 运行环境。运行前请启动 Colima:
bash
colima start检查是否正常运行:
bash
docker ps # 执行后不应报错Doppler Access (For validation targets)
Doppler 访问权限(用于验证目标)
Required for and :
+test-schema-validate+test-schema-e2ebash
doppler configure set token <token_from_1password>
doppler setup --project gapless-network-data --config prd+test-schema-validate+test-schema-e2ebash
doppler configure set token <token_from_1password>
doppler setup --project gapless-network-data --config prdEarthly Installation
Earthly 安装
bash
brew install earthlybash
brew install earthlyQuick Commands
快速命令
Generation only (no secrets)
仅执行生成操作(无需密钥)
bash
cd /Users/terryli/eon/gapless-network-data
colima start # If not already running
earthly +test-schema-generatebash
cd /Users/terryli/eon/gapless-network-data
colima start # 若未启动则执行此命令
earthly +test-schema-generateFull E2E with validation (requires Doppler)
带验证的完整E2E流程(需Doppler)
bash
cd /Users/terryli/eon/gapless-network-data
colima start # If not already running
./scripts/earthly-with-doppler.sh +test-schema-e2ebash
cd /Users/terryli/eon/gapless-network-data
colima start # 若未启动则执行此命令
./scripts/earthly-with-doppler.sh +test-schema-e2eAll non-secret targets
所有非密钥依赖目标
bash
cd /Users/terryli/eon/gapless-network-data
earthly +allbash
cd /Users/terryli/eon/gapless-network-data
earthly +allArtifacts
生成产物
After running or , check :
+test-schema-generate+test-schema-e2e./earthly-artifacts/| Path | Contents |
|---|---|
| Pydantic + TypedDict models |
| Package init |
| ClickHouse DDL |
| Markdown documentation |
For E2E, artifacts are under , , .
e2e/types/e2e/ddl/e2e/docs/执行 或 后,可在 目录下查看产物:
+test-schema-generate+test-schema-e2e./earthly-artifacts/| 路径 | 内容 |
|---|---|
| Pydantic + TypedDict 模型 |
| 包初始化文件 |
| ClickHouse DDL |
| Markdown 文档 |
对于E2E流程,产物存储在 、、 目录下。
e2e/types/e2e/ddl/e2e/docs/Earthfile Targets Reference
Earthfile 目标参考
| Target | Secrets | Purpose |
|---|---|---|
| No | Install uv + dependencies |
| No | Copy source files |
| No | Run pytest |
| No | Generate types/DDL/docs |
| Yes | Validate vs ClickHouse |
| Yes | Full workflow + artifacts |
| No | Run all non-secret targets |
| 目标 | 是否需要密钥 | 用途 |
|---|---|---|
| 否 | 安装 uv 及相关依赖 |
| 否 | 复制源文件 |
| 否 | 运行 pytest 测试 |
| 否 | 生成类型文件/DDL/文档 |
| 是 | 与ClickHouse进行schema一致性验证 |
| 是 | 执行完整工作流并生成产物 |
| 否 | 运行所有无需密钥的目标 |
Troubleshooting
故障排查
"could not determine buildkit address - is Docker or Podman running?"
错误:无法确定buildkit地址 - Docker或Podman是否在运行?
Cause: Docker/Colima not running
Fix:
bash
colima start原因:Docker/Colima 未启动
解决方法:
bash
colima startWait for "done" message, then retry
等待显示「done」信息后重试
earthly +test-schema-generate
undefinedearthly +test-schema-generate
undefined"unable to parse --secret-file argument"
错误:无法解析 --secret-file 参数
Cause: Wrong flag name or malformed secrets file
Fix: The correct flag is (NOT ). The wrapper script handles this, but if running manually:
--secret-file-path--secret-filebash
undefined原因:参数名称错误或密钥文件格式不正确
解决方法:正确的参数是 (而非 )。包装脚本已处理此问题,若手动运行请使用:
--secret-file-path--secret-filebash
undefinedWRONG
错误写法
earthly --secret-file=/path/to/secrets +target
earthly --secret-file=/path/to/secrets +target
CORRECT
正确写法
earthly --secret-file-path=/path/to/secrets +target
Also ensure secrets file has no quotes around values:
```bashearthly --secret-file-path=/path/to/secrets +target
同时确保密钥文件中的值不带引号:
```bashWRONG format
错误格式
CLICKHOUSE_HOST="host.cloud"
CLICKHOUSE_HOST="host.cloud"
CORRECT format
正确格式
CLICKHOUSE_HOST=host.cloud
undefinedCLICKHOUSE_HOST=host.cloud
undefined"OSError: Readme file does not exist: README.md"
错误:OSError: 不存在README.md文件
Cause: hatchling build backend requires README.md in container
Fix: Ensure Earthfile copies README.md in deps target:
earthfile
deps:
COPY pyproject.toml uv.lock README.md ./ # README.md required!原因:hatchling 构建后端要求容器中存在README.md文件
解决方法:确保Earthfile的deps目标中复制了README.md:
earthfile
deps:
COPY pyproject.toml uv.lock README.md ./ # 必须包含README.md!"missing secret" during validation
验证时出现「缺少密钥」错误
Cause: Doppler not configured or secrets not passed
Fix:
bash
undefined原因:Doppler 未配置或密钥未正确传递
解决方法:
bash
undefinedVerify Doppler has the secrets
验证Doppler是否包含所需密钥
doppler secrets --project gapless-network-data --config prd | grep CLICKHOUSE
doppler secrets --project gapless-network-data --config prd | grep CLICKHOUSE
Use the wrapper script (handles secret injection)
使用包装脚本(已处理密钥注入)
./scripts/earthly-with-doppler.sh +test-schema-validate
undefined./scripts/earthly-with-doppler.sh +test-schema-validate
undefinedCache Issues
缓存问题
Force rebuild without cache:
bash
earthly --no-cache +test-schema-e2e强制不使用缓存重新构建:
bash
earthly --no-cache +test-schema-e2eImplementation Details
实现细节
Doppler Secret Injection
Doppler 密钥注入
The wrapper script :
scripts/earthly-with-doppler.sh- Downloads secrets from Doppler
- Filters for variables
CLICKHOUSE_* - Strips quotes (Doppler outputs , Earthly needs
KEY="value")KEY=value - Passes via flag
--secret-file-path - Cleans up temp file on exit
包装脚本 的执行流程:
scripts/earthly-with-doppler.sh- 从Doppler下载密钥
- 筛选出开头的变量
CLICKHOUSE_* - 去除引号(Doppler输出格式为,Earthly需要
KEY="value"格式)KEY=value - 通过参数传递密钥
--secret-file-path - 执行完成后清理临时文件
Secrets Required
所需密钥
| Secret | Purpose |
|---|---|
| ClickHouse Cloud host |
| Read-only user |
| Read-only password |
| 密钥名称 | 用途 |
|---|---|
| ClickHouse Cloud 主机地址 |
| 只读用户账号 |
| 只读用户密码 |
Related Files
相关文件
| File | Purpose |
|---|---|
| Main build file |
| Secret injection wrapper |
| SSoT schema |
| ADR |
| 文件路径 | 用途 |
|---|---|
| 主构建文件 |
| 密钥注入包装脚本 |
| 单一可信源(SSoT)schema文件 |
| 架构决策记录(ADR) |
Validation History
验证历史
- 2025-12-03: Created and validated with full E2E run against ClickHouse Cloud
- Lessons Learned:
- not
--secret-file-path(Earthly v0.8.16)--secret-file - Doppler outputs quotes, must strip with
--format envsed 's/"//g' - README.md must be copied for hatchling build backend
- Colima must be started before Earthly runs
- 2025-12-03:创建完成并通过针对ClickHouse Cloud的完整E2E验证
- 经验总结:
- Earthly v0.8.16版本需使用而非
--secret-file-path--secret-file - Doppler的输出带引号,需用
--format env去除sed 's/"//g' - hatchling构建后端要求必须复制README.md文件
- 运行Earthly前必须启动Colima
- Earthly v0.8.16版本需使用
Design Authority
设计依据
<!-- ADR: 2025-12-10-clickhouse-skill-delegation -->
This skill validates schemas but does not design them. For schema design guidance (ORDER BY, compression, partitioning), invoke first.
quality-tools:clickhouse-architect<!-- ADR: 2025-12-10-clickhouse-skill-delegation -->
该Skill仅负责验证schema,不负责schema设计。如需schema设计指导(如ORDER BY、压缩、分区策略),请先调用****。
quality-tools:clickhouse-architectRelated Skills
相关Skill
| Skill | Purpose |
|---|---|
| Schema design before validation |
| Cloud credentials for E2E tests |
| Client configuration |
| Skill名称 | 用途 |
|---|---|
| 验证前的Schema设计指导 |
| E2E测试所需的云凭证管理 |
| 客户端配置管理 |