使用超额提交实现代码检查自动化
推荐的内置挂钩
其他(可能)有用的内置钩子
正在找工作吗?
几个月前,我一直在寻找一种方法,防止我在调用调试器时提交/推送代码byebug。后来我发现了一个我之前并不了解的东西:Git Hooks。Git Hooks 允许在特定操作发生时运行自定义脚本,例如:提交、推送、合并、检出等等。
你可以在这些自定义脚本中编写任何你想要的内容,包括检查你是否做了某些不太明智的操作,例如,推送带有byebug调用的代码。如果你在谷歌上搜索,你会找到一些 Git hook 脚本来阻止你这样做。
但作为一名 Ruby 开发者,我当时就想:嘿,总会有办法的,对吧?!没错!它叫overcommit。Overcommit是一个 Ruby gem,可以让你轻松管理和配置 Git hooks。
使用 overcommit 非常简单:
$ gem install overcommit
$ overcommit --install
该overcommit --install命令将.overcommit.yml在当前文件夹中创建一个配置文件,并备份现有钩子。默认配置文件包含以下钩子:
- CapitalizedSubject:确保提交消息的主题行以大写字母开头
- EmptyMessage:检查提交消息是否为空。
- SingleLineSubject:确保提交消息主题行后跟一个空行
- TextWidth:确保主题和提交消息行所占用的列数在首选限制范围内。
- TrailingPeriod:确保提交消息的主题行末尾不包含句点。
- 作者邮箱:检查作者邮箱地址的格式
- AuthorName:确保提交作者至少包含名字和姓氏。
- BrokenSymlinks:检查损坏的符号链接
- CaseConflicts:检查在不区分大小写的文件系统中可能冲突的文件
当然,您可以轻松禁用这些钩子中的任何一个:
CapitalizedSubject:
enabled: false
每次修改配置文件后,都需要更新正在运行的签名。您也可以通过在配置文件中overcommit --sign进行设置来禁用签名检查。但是,请务必在执行此操作前了解其安全隐患。verify_signatures: false.overcommit.yml
推荐的内置挂钩
本节介绍的钩子是我目前正在使用并推荐的。您还可以在钩子标题的括号内找到钩子执行的操作。
RuboCop(预提交)
对任何修改过的 Ruby 文件运行 RuboCop 检测。
RuboCop:
enabled: true
on_warn: fail
problem_on_unmodified_line: ignore
command: ['bundle', 'exec', 'rubocop']
on_warn: fail如果出现警告,则阻止提交。problem_on_unmodified_line: ignore忽略您未添加/更改的代码行中的问题
捆绑审计(提交前)
检查 Gemfile.lock 中是否存在易受攻击的 gem 版本。
BundleAudit:
enabled: true
flags: ['--update']
flags: ['--update']强制 BundleAudit 在检查前进行更新
捆绑检查(提交前)
当本地 Gemfile.lock 文件或 Gemfile 文件发生更改时,检查它们是否匹配,除非Gemfile.lockgit 忽略此操作。
BundleCheck:
enabled: true
禁止分支(PreCommit 和 PrePush)
阻止向与已配置模式之一匹配的分支提交。
ForbiddenBranches:
enabled: true
branch_patterns: ['master']
更快(预提交)
fasterer可对任何修改过的 Ruby 文件运行。
Fasterer:
enabled: true
exclude:
- 'vendor/**/*.rb'
- 'db/schema.rb'
自定义脚本(提交前)
提交前运行自定义命令/脚本。
CustomScript:
quiet: true
enabled: true
command: ['i18n-tasks', 'normalize']
前一个钩子会在提交之前运行i18n-tasks normalize。这是i18n-tasksnormalize gem的一个任务。
BundleInstall(PostCheckout、PostMerge 和 PostRewrite)
bundle install当检测到存储库的依赖项发生更改时运行。
BundleInstall:
enabled: true
其他(可能)有用的内置钩子
这些是我目前没有使用但愿意尝试的钩子。
- Foodcritic:一款用于编写更好、更安全代码的代码检查工具
- RailsBestPractices:用于检查 Rails 代码质量的代码指标工具
- RailsSchemaUpToDate:检查 schema 文件是否与迁移文件一致。
- Reek:Ruby 代码异味检测器
- Brakeman:一款专为 Rails 应用设计的漏洞扫描器。它通过静态分析代码来查找安全问题。
- FixMe :提交前检查是否存在“token”(例如
TODO,` ,` 等)字符串FIXME - BundleOutdate:列出已安装的 gem 及其可用更新版本。
正在找工作吗?
如果您正在寻找工作,并且居住在法兰克福附近或愿意搬迁,Creditshelf目前有职位空缺。所有职位均面向英语使用者开放。
文章来源:https://dev.to/jalerson/automating-code-checks-with-overcommit-1cc3