


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的支持者或贊助商。