菜单

代码质量工具

相关源文件

本文档涵盖了集成到 Gumroad 开发工作流中的自动化代码质量和格式化工具。这些工具可确保代码风格一致、捕获常见错误,并在 Ruby、JavaScript/TypeScript、CSS 和其他文件类型中保持高代码质量标准。

有关开发环境设置和 IDE 配置的信息,请参阅开发工具和标准。有关 CI/CD 测试管道的详细信息,请参阅测试管道

自动化代码质量管道

代码库使用一个全面的自动化代码质量系统,该系统通过 GitHub Actions 在每次拉取请求上运行。autofix.ci 工作流会自动应用代码格式化和 linting 修复,然后将它们提交回拉取请求。

代码质量工作流图

来源:.github/workflows/autofix.yml1-47

工具集成架构

来源:.github/workflows/autofix.yml32-44 .prettierrc1-4 .rubocop.yml1-83

Prettier 配置

Prettier 处理 CSS、SCSS、Markdown 和 JSON 文件的代码格式化,并遵循一致的样式规则。

Prettier 设置

设置目的
printWidth120换行前的最大行长度
plugins["prettier-plugin-tailwindcss"]TailwindCSS 类排序集成

Prettier 忽略模式

以下文件和目录被排除在 Prettier 格式化之外

模式原因
_icon_names.scss自动生成的图标映射文件
app/javascript/types/icons.d.ts自动生成的 TypeScript 图标定义
app/javascript/utils/routes.*自动生成的路由辅助文件
public/静态资源和编译文件
vendor/第三方依赖
tmp/临时文件

来源:.prettierrc1-4 .prettierignore1-7

RuboCop 配置

RuboCop 强制执行 Ruby 风格指南,并能够自动纠正常见的 Ruby 编程错误。

RuboCop 规则类别

RuboCop 关键配置详情

配置目的
DisabledByDefaulttrue仅显式启用的规则生效
SuggestExtensionsfalse禁用自动扩展建议
数据库mysql用于迁移规则的 Rails 数据库类型
NumberOfEmptyLines1强制方法定义之间只有一行空行

排除的目录

  • bin/**/* - 可执行脚本
  • db/schema.rb - 自动生成的数据库模式
  • node_modules/**/* - Node.js 依赖
  • nomad/[^gumroad_deployer]/ - Nomad 配置(除部署器外)
  • tmp/**/* - 临时文件
  • vendor/bundle/**/* - Ruby gem 包

来源:.rubocop.yml1-83

ESLint 和 TypeScript 集成

ESLint 提供 JavaScript 和 TypeScript 的 linting 功能,并支持自动修复,而 TypeScript 编译器则确保类型安全。

ESLint 配置

autofix 工作流使用以下参数运行 ESLint

  • --fix - 自动修复可纠正的问题
  • --max-warnings 0 - 将警告视为错误,要求零警告

TypeScript 编译器检查

npx tsc 命令运行 TypeScript 编译,以便在代码合并前捕获类型错误。

来源:.github/workflows/autofix.yml32-36

SVGO 集成

SVGO (SVG Optimizer) 自动优化资产管道中的 SVG 文件,以减小文件大小并提高性能。

SVGO 配置

  • --multipass - 多次运行优化以获得更好结果
  • 目标模式:app/assets/**/*.svg - 资产目录中的所有 SVG 文件

来源:.github/workflows/autofix.yml44

开发工作流集成

代码质量工具通过 GitHub Actions 的 autofix 系统无缝集成到开发工作流中

  1. 拉取请求创建 - 触发 autofix 工作流
  2. 环境设置 - 安装 Node.js、Ruby 和依赖项
  3. 质量检查 - 运行所有 linting 和格式化工具
  4. 自动修复 - 应用更正并提交回代码
  5. 持续集成 - 在合并前确保代码质量标准

这种自动化方法确保了代码质量的一致性,无需开发人员手动干预,同时仍允许他们查看和批准质量工具所做的更改。

来源:.github/workflows/autofix.yml1-47