//cmd/presubmit/presubmit.go: Run all checks even in the presence of errors.

Currently when a check fails, the presubmit program skips all subsequent checks, and prompts "Are you sure you wish to continue? (y/N)". If we answers yes, potential errors from the skipped checks go unnoticed until the Housekeeper-OnDemand-Presubmit task fails, wasting a CL dry-run cycle. A common example is when one continues despite a long line check failure.

Another issue is that presubmit check failures are reported one at a time. For example, if we fix a long line and re-run the presubmit program, another unrelated error might occur, such as a diff introduced by Gazelle.

This CL aims to fix both issues by running all checks, even if one or more checks fail.

This CL also move reorders the checks so that we first run those checks that might mutate files (gofmt, gazelle, etc.), followed by those that check for rules such as line length, disallowed words, etc.

Finally, this CL changes the runPrettier check to rewrite files rather than just checking their format.

Change-Id: Ica69b373be9946bd5cf165324ebb57781fbda42a
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/681079
Reviewed-by: Eric Boren <borenet@google.com>
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
Commit-Queue: Leandro Lovisolo <lovisolo@google.com>
2 files changed
tree: fc95221148f2c356a88e44966ff26675e9641121
  1. am/
  2. android_ingest/
  3. android_stats/
  4. api/
  5. autoroll/
  6. bash/
  7. bazel/
  8. blamer/
  9. bugs-central/
  10. cabe/
  11. cd/
  12. cherrypick-watcher/
  13. cmd/
  14. codereview-watcher/
  15. codesize/
  16. comments/
  17. comp-ui/
  18. cq_watcher/
  19. ct/
  20. datahopper/
  21. debugger-app/
  22. demos/
  23. docker/
  24. docker_pushes_watcher/
  25. docs/
  26. docsyserver/
  27. ds/
  28. elements-sk/
  29. email/
  30. external/
  31. fiddlek/
  32. firestore/
  33. get_service_account/
  34. gitsync/
  35. go/
  36. gold-client/
  37. golden/
  38. helloworld/
  39. infra/
  40. infra-sk/
  41. jsdoc/
  42. jsfiddle/
  43. k8s-checker/
  44. k8s-deployer/
  45. kube/
  46. leasing/
  47. licenses/
  48. machine/
  49. make/
  50. modules/
  51. named-fiddles/
  52. new_element/
  53. npm-audit-mirror/
  54. perdiff/
  55. perf/
  56. periodic-trigger/
  57. proberk/
  58. promk/
  59. puppeteer-tests/
  60. sa-keys-checker/
  61. scrap/
  62. scripts/
  63. shaders/
  64. sk/
  65. skbug/
  66. skcq/
  67. skfe/
  68. skolo/
  69. skottie/
  70. static_server/
  71. status/
  72. task_driver/
  73. task_scheduler/
  74. test-service/
  75. third_party/
  76. tools/
  77. tree_status/
  78. trybot_updater/
  79. .bazelignore
  80. .bazelrc
  81. .bazelversion
  82. .eslintrc.js
  83. .gitattributes
  84. .gitignore
  85. .npmrc
  86. .prettierignore
  87. .prettierrc.json
  88. .puppeteerrc.js
  89. .vpython
  90. BAZEL_CHEATSHEET.md
  91. BUILD.bazel
  92. build_infra_prod.sh
  93. cipd.ensure
  94. codereview.settings
  95. DATASTORE.md
  96. demopage.sh
  97. DEPS
  98. go.mod
  99. go.sum
  100. go_repositories.bzl
  101. karmatest.sh
  102. launch.md
  103. LICENSE
  104. Makefile
  105. OWNERS
  106. package-lock.json
  107. package.json
  108. PRESUBMIT.py
  109. PRIVACY_POLICY.md
  110. README.md
  111. STYLEGUIDE.md
  112. tools.go
  113. tsconfig.json
  114. whitespace.txt
  115. WORKSPACE
README.md

Skia-Buildbot Repository

This repo contains infrastructure code for Skia.

Getting the Source Code

The main source code repository is a Git repository hosted at https://skia.googlesource.com/buildbot.git. It is possible to check out this repository directly with git clone or via go get.

Using git clone allows you to work in whatever directory you want. You will still need to set GOPATH in order to build some apps (recommended to put this in a cache dir). E.g.:

$ cd ${WORKDIR}
$ git clone https://skia.googlesource.com/buildbot.git
$ export GOPATH=${HOME}/.cache/gopath/$(basename ${WORKDIR})
$ mkdir $GOPATH
$ cd buildbot

Install dependencies

Almost all applications are built with Bazel, and bazelisk is the recommended tool to ensure you have the right version of bazel installed:

go install github.com/bazelbuild/bazelisk@latest
go install github.com/bazelbuild/buildtools/buildifier@latest
go install github.com/kisielk/errcheck@latest
go install golang.org/x/tools/cmd/goimports@latest
go install github.com/mikefarah/yq/v4@latest
go install go.chromium.org/luci/client/cmd/...@latest

Install other dependencies:

sudo apt-get install jq

Build ~everything

bazelisk build --config=mayberemote //...

Test everything

bazelisk test --config=mayberemote //...

Generated Code

To update generated code run the following in any directory:

go generate ./...

Running unit tests

Install Cloud SDK.

Use this command to run the presubmit tests:

./run_unittests --small