[cabe] update checker to assert that all tasks actually completed

This should  handle cases like tasks that failed due to dead bots, as
in the case of this example:
https://pinpoint-dot-chromeperf.appspot.com/job/12a96491a60000

The checker would previously report only an error about a single task
having a missing "StartedTs" value - when the underlying problem was
that the bot was dead and the task never even started.

Example run of the cli's `check` command, with this change:
```
bazelisk run //cabe/go/cmd/cabe -- check -pinpoint-job 12a96491a60000
INFO: Analyzed target //cabe/go/cmd/cabe:cabe (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //cabe/go/cmd/cabe:cabe up-to-date:
  _bazel_bin/cabe/go/cmd/cabe/cabe_/cabe
INFO: Elapsed time: 0.729s, Critical Path: 0.60s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
INFO: Build completed successfully, 1 total action
E0602 12:55:31.898637 1362392 analyzer.go:485] runInfoForTask: task "6295c04544a30c10" had no StartedTs value
E0602 12:55:31.898687 1362392 analyzer.go:313] RunChecker: processPinpointTryjobTasks returned task "6295c04544a30c10" had no StartedTs value
E0602 12:55:31.898693 1362392 check.go:48] run checker error: task "6295c04544a30c10" had no StartedTs value
Checker returned 5 findings
0 CheckSwarmingTask "6295c04544a30c10": TaskResult is in state "CANCELED" rather than "COMPLETED"
1 CheckSwarmingTask "6295c04347ed0f10": TaskResult is in state "CANCELED" rather than "COMPLETED"
2 CheckSwarmingTask "6295c03facc77910": TaskResult is in state "CANCELED" rather than "COMPLETED"
3 CheckSwarmingTask "6295c012e5aaf210": TaskResult is in state "CANCELED" rather than "COMPLETED"
4 CheckSwarmingTask "6295c00c9dc9b110": TaskResult is in state "CANCELED" rather than "COMPLETED"
```

So we can now at least see that there were multiple tasks with this problem, and they are
due to tasks being CANCELED, rather than just a single task missing a single timestamp field.

Bug: b:285597819
Change-Id: Ic93c011ad81647a0a36f3ebbe860d2f5637382ea
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/706454
Commit-Queue: Sean McCullough <seanmccullough@google.com>
Reviewed-by: Leina Sun <sunxiaodi@google.com>
7 files changed
tree: 5beb37134bfd4167b7b52f882be2739c6ede6f72
  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. tools/
  76. tree_status/
  77. trybot_updater/
  78. .bazelignore
  79. .bazelrc
  80. .bazelversion
  81. .eslintrc.js
  82. .gitattributes
  83. .gitignore
  84. .npmrc
  85. .prettierignore
  86. .prettierrc.json
  87. .puppeteerrc.js
  88. .vpython
  89. BAZEL_CHEATSHEET.md
  90. BUILD.bazel
  91. build_infra_prod.sh
  92. cipd.ensure
  93. codereview.settings
  94. DATASTORE.md
  95. demopage.sh
  96. DEPS
  97. go.mod
  98. go.sum
  99. go_repositories.bzl
  100. karmatest.sh
  101. launch.md
  102. LICENSE
  103. Makefile
  104. OWNERS
  105. package-lock.json
  106. package.json
  107. PRESUBMIT.py
  108. PRIVACY_POLICY.md
  109. README.md
  110. STYLEGUIDE.md
  111. tools.go
  112. tsconfig.json
  113. whitespace.txt
  114. 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