本文档介绍了用于验证 Gumroad 平台代码质量和功能的自动化测试基础设施。测试管道包括代码质量检查、并行测试执行和部署门集成。
有关测试之前的构建过程的信息,请参阅构建过程。有关成功测试后的部署自动化,请参阅部署自动化。
测试管道包含两个主要的 GitHub Actions 工作流,它们处理代码验证的不同方面
来源: .github/workflows/autofix.yml1-47 .github/workflows/tests.yml1-489
代码质量管道通过 autofix 工作流在拉取请求上自动运行,确保一致的格式化并在代码审查前捕获静态分析问题。
| 工具 | 目的 | 自动修复 |
|---|---|---|
| TypeScript | 类型检查和编译 | 否 |
| ESLint | JavaScript/TypeScript 代码检查 | 是 |
| Prettier | 代码格式化 | 是 |
| RuboCop | Ruby 风格和代码检查 | 是 |
| SVGO | SVG 优化 | 是 |
当检测到格式化或代码检查违规时,管道使用 autofix-ci/action 自动将修复提交回拉取请求分支。
来源: .github/workflows/autofix.yml14-46
测试执行管道构建容器化测试环境,并在多个自托管运行器上并行运行完整的测试套件。
管道构建专用于测试的 Docker 镜像
web_base - 带有 Ruby 和系统依赖的基础应用程序镜像web_base_test - 带有额外测试工具的测试专用基础镜像web:test-{sha} - 包含应用程序代码和测试设置的完整测试镜像来源: .github/workflows/tests.yml13-153
测试套件分为两类,针对不同的执行特性进行了优化
spec/**/*_spec.rb(不包括 spec/requests/**/*_spec.rb)spec/requests/**/*_spec.rb这两类测试都使用 Knapsack Pro 进行智能测试分发和队列管理。
每个测试节点都在一个独立的 Docker Compose 环境中运行,包含以下服务
| 服务 | 目的 | 配置 |
|---|---|---|
db_test | MySQL 测试数据库 | 端口 3306,每个测试节点独立 |
| 测试容器 | Rails 应用程序 | RAILS_ENV=test,RUBY_YJIT_ENABLE=1 |
测试环境变量
来源: .github/workflows/tests.yml184-408
在 main 分支上成功完成快速测试和慢速测试套件后,管道将自动解除相应 Buildkite 部署管道的阻止。
unblock_deployment_from_buildkite 作业执行以下步骤
require-approval 的手动审批作业使用的 API 端点
GET /v2/organizations/gumroad-inc/pipelines/gumroad/buildsGET /v2/organizations/gumroad-inc/pipelines/gumroad/builds/{number}PUT /v2/organizations/gumroad-inc/pipelines/gumroad/builds/{number}/jobs/{job_id}/unblock来源: .github/workflows/tests.yml426-489
测试管道使用自托管的 GitHub Actions 运行器,以实现最佳性能和资源控制
| 运行器 | 用途 | 功能 |
|---|---|---|
antiwork-1 | 测试执行,镜像拉取 | Docker, Compose, Quay.io 访问 |
antiwork-2 | 测试执行,镜像拉取 | Docker, Compose, Quay.io 访问 |
ubicloud-standard-2 | 代码质量检查 | Node.js, Ruby, npm/bundle |
管道实施全面的清理程序以防止资源耗尽
清理命令
来源: .github/workflows/tests.yml258-264 .github/workflows/tests.yml401-407 .github/workflows/tests.yml410-425