


ReviewDog提供了一种将评论评论发布到代码托管服务(例如GitHub)通过轻松与任何Linter工具集成的方式。如果发现存在于补丁程序中以查看,它使用棉绒工具的输出并将其发布为注释。
ReviewDog还支持在本地环境中运行,以通过DIFF过滤棉绒工具的输出。
设计文档



# Install the latest version. (Install it into ./bin/ by default).
$ curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s
# Specify installation directory ($(go env GOPATH)/bin/) and version.
$ curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s -- -b $( go env GOPATH ) /bin [vX.Y.Z]
# In alpine linux (as it does not come with curl by default)
$ wget -O - -q https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s [vX.Y.Z]您也可以使用Nightly ReviewDog Release每天尝试最新的ReviewDog改进!
$ curl -sfL https://raw.githubusercontent.com/reviewdog/nightly/master/install.sh | sh -s -- -b $( go env GOPATH ) /bin steps :
- uses : reviewdog/action-setup@v1
with :
reviewdog_version : latest # Optional. [latest,nightly,v.X.Y.Z]您还可以使用Brew安装评论狗:
$ brew install reviewdog/tap/reviewdog
$ brew upgrade reviewdog/tap/reviewdog > scoop install reviewdog
$ go install github.com/reviewdog/reviewdog/cmd/reviewdog@latestReviewDog接受STDIN产生的任何编译器或Linter,并用Scan-f类似于“ errorformat” ,这是VIM的errorformat功能的端口。
例如,如果结果格式为{file}:{line number}:{column number}: {message} ,errorformat应该为%f:%l:%c: %m ,您可以将其作为-efm参数传递。
$ golint ./...
comment_iowriter.go:11:6: exported type CommentWriter should have comment or be unexported
$ golint ./... | reviewdog -efm= " %f:%l:%c: %m " -diff= " git diff FETCH_HEAD "| 姓名 | 描述 |
|---|---|
| %f | 文件名 |
| %l | 行号 |
| %c | 列号 |
| %m | 错误信息 |
| %% | 单个“%”字符 |
| ... | ... |
如果要处理更复杂的输出,请参见ReviewDog/errorformat和:H errorformat。 “ errorformat”可以处理更复杂的输出,例如多行错误消息。
您也可以在操场上尝试使用ErrorFormat!
借助此“错误形式”功能,ReviewDog可以轻松支持任何工具输出。
但是,在许多情况下,您不必编写“错误形式”。 ReviewDog支持主要工具的预定义错误图。
您可以通过reviewdog -list找到可用的错误format名称,并且可以使用-f={name}使用它。
$ reviewdog -list
golint linter for Go source code - https://github.com/golang/lint
govet Vet examines Go source code and reports suspicious problems - https://golang.org/cmd/vet/
sbt the interactive build tool - http://www.scala-sbt.org/
...$ golint ./... | reviewdog -f=golint -diff= " git diff FETCH_HEAD "您可以通过为ReviewDog/errorformat做出贡献来添加支持的预定义的“ errorformat”
ReviewDog支持ReviewDog诊断格式(RDFORMAT)作为通用诊断格式,并支持RDJSON和RDJSONL格式。
此rdformat支持丰富的功能,例如多行范围的评论,严重性,带有URL的规则代码和代码建议。
$ < linter > | < convert-to-rdjson > | reviewdog -f=rdjson -reporter=github-pr-review
# or
$ < linter > | < convert-to-rdjsonl > | reviewdog -f=rdjsonl -reporter=github-pr-review
您可以使用Eslint-Formatter-rdjson作为ESLINT输出格式输出rdjson 。
$ npm install --save-dev eslint-formatter-rdjson
$ eslint -f rdjson . | reviewdog -f=rdjson -reporter=github-pr-review或者,您也可以将ReviewDog/Action-Eslint用于GitHub操作。

ReviewDog支持DIFF(统一格式)作为输入格式,对于代码建议特别有用。 ReviewDog可以与任何代码建议工具或格式化器集成以报告建议。
-f.diff.strip :for -f=diff :diff文件名(等效于'patch -p')的drim num引导组件(default为git diff)(默认为1)(默认为1)(默认为1)(默认为1)(默认为1)(默认为1)(默认为1)(默认为1)
$ < any-code-fixer/formatter > # e.g. eslint --fix, gofmt
$ TMPFILE= $( mktemp )
$ git diff > " ${TMPFILE} "
$ git stash -u && git stash drop
$ reviewdog -f=diff -f.diff.strip=1 -reporter=github-pr-review < " ${TMPFILE} "或者,您也可以将ReviewDog/Action-Suggester用于GitHub操作。
如果诊断工具支持DIFF输出格式,则可以直接输送差异。
$ gofmt -s -d . | reviewdog -name= " gofmt " -f=diff -f.diff.strip=0 -reporter=github-pr-review
$ shellcheck -f diff $( shfmt -f . ) | reviewdog -f=diffReviewDog还接受CheckStyle XML格式。如果Linter支持CheckStyle格式作为报告格式,则可以使用-f = CheckStyle而不是使用“ errorforformat”。
# Local
$ eslint -f checkstyle . | reviewdog -f=checkstyle -diff= " git diff "
# CI (overwrite tool name which is shown in review comment by -name arg)
$ eslint -f checkstyle . | reviewdog -f=checkstyle -name= " eslint " -reporter=github-check另外,如果您想将其他JSON/XML/等...格式进行评论Dog,则可以编写一个转换器。
$ < linter > | < convert-to-checkstyle > | reviewdog -f=checkstyle -name= " <linter> " -reporter=github-pr-checkReviewDog支持SARIF 2.1.0 JSON格式。您可以使用-f = sarif选项使用eviewdog。
# Local
$ eslint -f @microsoft/eslint-formatter-sarif . | reviewdog -f=sarif -diff= " git diff " 

ReviewDog支持使用RDFORMAT或DIFF输入的代码建议功能。您还可以将ReviewDog/Action-Suggester用于GitHub动作。
如果诊断工具支持代码建议数据,ReviewDog可以建议代码更改以及诊断结果。您也可以将ReviewDog与任何代码修复工具和任何代码格式化工具与DIFF输入也集成在一起。
请注意,并非所有记者都为代码建议提供支持。
-reporter | 建议支持 |
|---|---|
local | 否[1] |
github-check | 否[2] |
github-pr-check | 否[2] |
github-pr-review | 好的 |
gitlab-mr-discussion | 好的 |
gitlab-mr-commit | 否[2] |
gerrit-change-review | 否[1] |
bitbucket-code-report | 否[2] |
gitea-pr-review | 否[2] |
也可以通过.reviewDog.yml配置文件而不是“ -f”或“ -efm”参数来控制DivewDog。
使用.reviewDog.yml,您可以轻松地为CI服务和本地环境运行相同的命令。
runner :
<tool-name> :
cmd : <command> # (required)
errorformat : # (optional if you use `format`)
- <list of errorformat>
format : <format-name> # (optional if you use `errorformat`. e.g. golint,rdjson,rdjsonl)
name : <tool-name> # (optional. you can overwrite <tool-name> defined by runner key)
level : <level> # (optional. same as -level flag. [info,warning,error])
# examples
golint :
cmd : golint ./...
errorformat :
- " %f:%l:%c: %m "
level : warning
govet :
cmd : go vet -all .
format : govet
your-awesome-linter :
cmd : awesome-linter run
format : rdjson
name : AwesomeLinter $ reviewdog -diff= " git diff FETCH_HEAD "
project/run_test.go:61:28: [golint] error strings should not end with punctuation
project/run.go:57:18: [errcheck] defer os.Setenv(name, os.Getenv(name))
project/run.go:58:12: [errcheck] os.Setenv(name, " " )
# You can use -runners to run only specified runners.
$ reviewdog -diff= " git diff FETCH_HEAD " -runners=golint,govet
project/run_test.go:61:28: [golint] error strings should not end with punctuation
# You can use -conf to specify config file path.
$ reviewdog -conf=./.reviewdog.yml -reporter=github-pr-check基于项目配置的运行的输出格式是以下格式之一。
<file>: [<tool name>] <message><file>:<lnum>: [<tool name>] <message><file>:<lnum>:<col>: [<tool name>] <message>ReviewDog可以在本地环境中报告结果,并以持续整合的方式审查服务。
ReviewDog可以通过使用DIFF过滤衬里结果来找到新引入的发现。您可以将diff命令作为-diff arg。
$ golint ./... | reviewdog -f=golint -diff= " git diff FETCH_HEAD "

GitHub-pr-Check Reporter向GitHub检查报告结果。
您可以按配置文件或-level标志中的level字段更改此记者的报告级别。您可以使用此功能控制GitHub状态检查结果。 (默认:错误)
| 等级 | GitHub状态 |
|---|---|
info | 中性的 |
warning | 中性的 |
error | 失败 |
有两个选择可以使用此记者。
示例:.github/workflows/reviewdog.yml
- name : Run reviewdog
env :
REVIEWDOG_GITHUB_API_TOKEN : ${{ secrets.GITHUB_TOKEN }}
run : |
golint ./... | reviewdog -f=golint -reporter=github-pr-check也请参见GitHub动作部分。您也可以使用公共评论github操作。
ReviewDog CLI向ReviewDog GitHub App Server发送请求,并且服务器发布结果为GitHub检查,因为仅支持GITHUB APP和GITHUB操作的检查API。
REVIEWDOG_TOKEN或运行ReviewDog CLI。https://reviewdog.app/gh/{owner}/{repo-name}获取令牌。 $ export REVIEWDOG_TOKEN= " <token> "
$ reviewdog -reporter=github-pr-check注意:如果您在Travis或Appveyor中运行ReviewDog,则不需要令牌。
警告
如上所述,具有选项2的GitHub-pr-Check记者取决于ReviewDog GitHub App Server。服务器目前正在使用Haya14Busa的零用钱运行,我可能会破坏东西,因此我无法确保服务器运行24小时和365天。
更新:开始获得OpenCollaction和GitHub赞助商的支持。请参阅支持评论Dog
如果您不想依赖ReviewDog Server,则可以使用GitHub-pr-Review Reporter或在GitHub操作下使用Run ReviedDog。
它基本上与-reporter=github-pr-check相同,只是它不仅适用于拉的请求,而且适用于提交。

您可以为此记者创建ReviewDog徽章。
GitHub-pr-Review Reporter使用GitHub个人API访问令牌向Github Pullrequest评论评论报告结果。 Github Enterprise也得到了支持。
repo或public_repo仓库中的公共存储库。 $ export REVIEWDOG_GITHUB_API_TOKEN= " <token> "
$ reviewdog -reporter=github-pr-review对于GitHub Enterprise,通过环境变量设置API端点。
$ export GITHUB_API= " https://example.githubenterprise.com/api/v3/ "
$ export REVIEWDOG_INSECURE_SKIP_VERIFY=true # set this as you need to skip verifying SSL如果您可以使用GitHub操作,也请参见GitHub操作部分。您也可以使用公共评论github操作。
GitHub-pr-nototations使用GitHub操作注释格式来输出错误和警告, stdout为EG
::error line=11,col=41,file=app/index.md::[vale] reported by reviewdog ?%0A[demo.Spelling] Did you really mean 'boobarbaz'?%0A%0ARaw Output:%0A{"message": "[demo.Spelling] Did you really mean 'boobarbaz'?", "location": {"path": "app/index.md", "range": {"start": {"line": 11, "column": 41}}}, "severity": "ERROR"}
该记者需要有效的github api令牌来生成差异,但不会使用令牌报告错误。

必需的gitlab版本:> = V10.8.0
Gitlab-Mr-Discussion Reporter报告了Gitlab MergereQuest讨论的结果,使用Gitlab个人API访问令牌进行了讨论。从https://gitlab.com/profile/personal_access_tokens获取api范围的令牌。
$ export REVIEWDOG_GITLAB_API_TOKEN= " <token> "
$ reviewdog -reporter=gitlab-mr-discussion CI_API_V4_URL环境变量将使用Gitlab CI自动定义(v11.7),用于找出Gitlab API URL。
另外,也可以定义GITLAB_API ,在这种情况下,它将优先于CI_API_V4_URL 。
$ export GITLAB_API= " https://example.gitlab.com/api/v4 "
$ export REVIEWDOG_INSECURE_SKIP_VERIFY=true # set this as you need to skip verifying SSLGitLab-MR-Commit类似于Gitlab-Mr-Discussion Reporter,但向Gitlab MergereQuest中的每个提交报告结果。
建议使用GitLab-Mr-Discussion,但是如果您的GitLab版本低于V10.8.0,则可以使用GitLab-Mr-Commit Reporter。
$ export REVIEWDOG_GITLAB_API_TOKEN= " <token> "
$ reviewdog -reporter=gitlab-mr-commitGerrit-Change-Review Reporter使用Gerrit REST API报告了Gerrit更改的结果。
记者支持基本身份验证和基于git-cookie的身份验证,以报告结果。
设置GERRIT_USERNAME和GERRIT_PASSWORD环境变量以进行基本身份验证,并将基于git cookie的身份验证放置为GIT_GITCOOKIE_PATH 。
$ export GERRIT_CHANGE_ID=changeID
$ export GERRIT_REVISION_ID=revisionID
$ export GERRIT_BRANCH=master
$ export GERRIT_ADDRESS=http:// < gerrit-host > : < gerrit-port >
$ reviewdog -reporter=gerrit-change-review

Bitbucket-Code-Report生成带注释的Bitbucket代码洞察报告。
目前,仅支持no-filter模式,因此每次运行都会扫描整个项目。报告是每个提交存储的,并且可以从Bitbucket Pipelines UI或在拉请请求中查看每个提交。在“拉”请求中,UI受UI受影响的代码线将在diff中注释,并且您将能够通过此拉请求或全部过滤注释。
如果从Bitbucket管道运行,则不需要其他配置(甚至凭据)。如果在本地或其他一些CI系统运行,则需要提供Bitbucket API凭据:
BITBUCKET_USER基本BITBUCKET_PASSWORDBITBUCKET_ACCESS_TOKEN $ export BITBUCKET_USER= " my_user "
$ export BITBUCKET_PASSWORD= " my_password "
$ reviewdog -reporter=bitbucket-code-report要向BitBucket服务器发布报告,请使用BITBUCKET_SERVER_URL变量:
$ export BITBUCKET_USER= " my_user "
$ export BITBUCKET_PASSWORD= " my_password "
$ export BITBUCKET_SERVER_URL= " https://bitbucket.my-company.com "
$ reviewdog -reporter=bitbucket-code-report示例:.github/workflows/reviewdog.yml
name : reviewdog
on : [pull_request]
jobs :
reviewdog :
name : reviewdog
runs-on : ubuntu-latest
steps :
# ...
- uses : reviewdog/action-setup@v1
with :
reviewdog_version : latest # Optional. [latest,nightly,v.X.Y.Z]
- name : Run reviewdog
env :
REVIEWDOG_GITHUB_API_TOKEN : ${{ secrets.GITHUB_TOKEN }}
run : |
reviewdog -reporter=github-pr-check -runners=golint,govet
# or
reviewdog -reporter=github-pr-review -runners=golint,govet.github/workflows/审查狗
只有github-check Reporter也可以在推动事件上进行。
name : reviewdog (github-check)
on :
push :
branches :
- master
pull_request :
jobs :
reviewdog :
name : reviewdog
runs-on : ubuntu-latest
steps :
# ...
- name : Run reviewdog
env :
REVIEWDOG_GITHUB_API_TOKEN : ${{ secrets.GITHUB_TOKEN }}
run : |
reviewdog -reporter=github-check -runners=golint,govet 您可以使用公共github操作开始轻松地使用评论狗狗! ?
Dockerfile 。.env文件。...以及有关Github市场的更多信息。
缺少动作?查看ReviewDog/Action-Template并创建新的ReviewDog操作!
请在此处打开拉动请求,以在此处添加您创建的ReviewDog操作。我还可以将您的存储库放在ReviewDog org之下,并共同维护这些行动。示例:Action-Tflint。

GITHUB_TOKEN用于分叉存储库中的拉动请求,由于github操作限制,没有写入API或查看API的写入访问。
取而代之的是,ReviewDog使用GitHub操作的记录命令将结果发布为类似于github-pr-check Reporter的注释。
请注意,通过记录命令创建的注释有一个限制,例如每次运行的最大注释#。您可以在这种情况下查看GitHub操作日志以查看完整结果。

当github-check Reporter支持在Commit上运行时,我们可以创建ReviewDog GitHub Action Badge,以检查结果与MASTER COMMIT相比。 ?
例子:
<!-- Replace <OWNER> and <REPOSITORY>. It assumes workflow name is "reviewdog" -->
[](https://github.com/<OWNER>/<REPOSITORY>/actions?query=workflow%3Areviewdog+event%3Apush+branch%3Amaster)
如果您在travis ci中使用-reporter = github-pr-check,则无需设置REVIEWDOG_TOKEN 。
例子:
install :
- mkdir -p ~/bin/ && export PATH="~/bin/:$PATH"
- curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh| sh -s -- -b ~/bin
script :
- reviewdog -conf=.reviewdog.yml -reporter=github-pr-check 通过Travis加密密钥存储GitHub API令牌。
$ gem install travis
$ travis encrypt REVIEWDOG_GITHUB_API_TOKEN= < token > --add env.global例子:
env :
global :
- secure : <token>
install :
- mkdir -p ~/bin/ && export PATH="~/bin/:$PATH"
- curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh| sh -s -- -b ~/bin
script :
- >-
golint ./... | reviewdog -f=golint -reporter=github-pr-review例子
在环境变量中商店REVIEWDOG_GITHUB_API_TOKEN (或用于github-pr-check的REVIEWDOG_TOKEN )-CircleCi
version : 2
jobs :
build :
docker :
- image : golang:latest
steps :
- checkout
- run : curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh| sh -s -- -b ./bin
- run : go vet ./... 2>&1 | ./bin/reviewdog -f=govet -reporter=github-pr-review
# Deprecated: prefer GitHub Actions to use github-pr-check reporter.
- run : go vet ./... 2>&1 | ./bin/reviewdog -f=govet -reporter=github-pr-check Gitlab CI变量中的商店REVIEWDOG_GITLAB_API_TOKEN 。
reviewdog :
script :
- reviewdog -reporter=gitlab-mr-discussion
# Or
- reviewdog -reporter=gitlab-mr-commit无需其他配置。
pipelines :
default :
- step :
name : Reviewdog
image : golangci/golangci-lint:v1.31-alpine
script :
- wget -O - -q https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh |
sh -s -- -b $(go env GOPATH)/bin
- golangci-lint run --out-format=line-number ./... | reviewdog -f=golangci-lint -reporter=bitbucket-code-report您可以使用ReviewDog在任何地方发表评论评论,并具有以下环境变量。
| 姓名 | 描述 |
|---|---|
CI_PULL_REQUEST | 拉请求号码(例如14) |
CI_COMMIT | SHA1用于当前构建 |
CI_REPO_OWNER | 存储库所有者(例如,https://github.com/reviewdog/errorformat) |
CI_REPO_NAME | 存储库名称(例如https://github.com/reviewdog/errorformat)的存储库名称 |
CI_BRANCH | [可选]提交的分支 |
$ export CI_PULL_REQUEST=14
$ export CI_REPO_OWNER=haya14busa
$ export CI_REPO_NAME=reviewdog
$ export CI_COMMIT= $( git rev-parse HEAD )并在需要时设置一个令牌。
$ REVIEWDOG_TOKEN= " <token> "
$ REVIEWDOG_GITHUB_API_TOKEN= " <token> "
$ REVIEWDOG_GITLAB_API_TOKEN= " <token> "如果CI服务没有提供诸如拉动请求ID之类的信息,那么ReviewDog可以通过分支名称猜测并提交SHA。只需通过旗帜guess :
$ reviewdog -conf=.reviewdog.yml -reporter=github-pr-check -guess$ export CI_PULL_REQUEST= ${ghprbPullId}
$ export CI_REPO_OWNER=haya14busa
$ export CI_REPO_NAME=reviewdog
$ export CI_COMMIT= ${ghprbActualCommit}
$ export REVIEWDOG_INSECURE_SKIP_VERIFY=true # set this as you need
# To submit via reviewdog server using github-pr-check reporter
$ REVIEWDOG_TOKEN= " <token> " reviewdog -reporter=github-pr-check
# Or, to submit directly via API using github-pr-review reporter
$ REVIEWDOG_GITHUB_API_TOKEN= " <token> " reviewdog -reporter=github-pr-review
# Or, to submit directly via API using github-pr-check reporter (requires GitHub App Account configured)
$ REVIEWDOG_SKIP_DOGHOUSE=true REVIEWDOG_GITHUB_API_TOKEN= " <token> " reviewdog -reporter=github-pr-check默认情况下( -fail-level=none )评论dog即使发现错误也将返回0作为退出代码。 ReviewDog将使用-fail-level=[any,info,warning,error]代码1退出,如果它发现至少有1个问题,其严重性大于或等于给定级别。当您将其用作CI管道中的步骤时,这可能会有所帮助,如果Linter发现任何错误,则希望标记步骤失败。
您还可以使用-level标志来配置默认报告Revel。
通过diff进行评论杜的滤波器结果,您可以通过-filter-mode标志来控制评论登录滤波器的结果。可用的过滤模式如下。
added (默认)通过添加/修改线进行过滤结果。
diff_context通过差异上下文过滤结果。 IE更改线 +-n线(例如n = 3)。
file通过添加/修改的文件过滤结果。即使结果在实际差异中,IE ReviewDog将在添加/修改的文件中报告结果。
nofilter不要过滤任何结果。对于尽可能多的评论发布结果,并同时在控制台中检查其他结果。
-fail-on-error还可以与任何过滤模式一起使用,并且可以从任何具有nofilter模式的林格捕获所有结果。
例子:
$ reviewdog -reporter=github-pr-review -filter-mode=nofilter -fail-on-error请注意,由于API限制,并非所有记者都为过滤模式提供全面支持。例如, github-pr-review记者使用github评论api,但此API不支持在diff上下文之外发布评论,因此eviewdog将使用检查注释作为后备来发布这些评论[1]。
-reporter -filter-mode | added | diff_context | file | nofilter |
|---|---|---|---|---|
local | 好的 | 好的 | 好的 | 好的 |
github-check | 好的 | 好的 | 好的 | 好的 |
github-pr-check | 好的 | 好的 | 好的 | 好的 |
github-pr-review | 好的 | 好的 | 部分支持[1] | 部分支持[1] |
github-pr-annotations | 好的 | 好的 | 好的 | 好的 |
gitlab-mr-discussion | 好的 | 好的 | 好的 | 部分支持[2] |
gitlab-mr-commit | 好的 | 部分支持[2] | 部分支持[2] | 部分支持[2] |
gerrit-change-review | 好的 | 好的? [3] | 好的? [3] | 部分支持? [2] [3] |
bitbucket-code-report | 否[4] | 否[4] | 否[4] | 好的 |
gitea-pr-review | 好的 | 好的 | 部分支持[2] | 部分支持[2] |
使用-tee标志显示调试信息。
reviewdog -filter-mode=nofilter -teeHaya14busa
成为每个贡献者的GitHub赞助商,或者成为OpenCollective的支持者或赞助商。