[Analysis] Implement QueryStability RPC.

This RPC improves over QueryFailureRate for determining a test
variant's stability in the following ways:
- The analysis is scoped to a particular branch. This will allow
  exoneration on CQ runs for release branches, and cleans the data
  used for analysis on mainline branch.
- The analysis is scoped to a particular commit position.
  This allows exoneration of tests on recycled CQ builds, even
  where the test has been fixed at ToT.
- The analysis now natively orders test runs by commit position,
  not time, improving performance around test transitions.
- The analysis window for flaky tests has been increased. There
  is now a mechanism that allows all data from the last 14 days to
  be used for infrequently run tests. This should improve
  performance for these tests.
- A new criteria is introduced to the failure rate analysis, the
  consecutive failures count, which should improve time to
  exoneration for deterministically failing tests.
- Stability criteria is encoded in the project configuration,
  avoiding the need to duplicate parameters between recipes and
  the exonerations UI in LUCI Analysis.

A requirement for using the new RPC is that source positions be
uploaded for test results uploaded to ResultDB.

Proposal: go/luci-exoneration-v2
Design: go/luci-exoneration-v2-design

BUG=b:312815571
TEST=Integration tests

Change-Id: I8ddafcc9d8ac9f621fa86d3cd35c073573473275
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-go/+/5162110
Reviewed-by: Matthew Warton <mwarton@google.com>
Commit-Queue: Patrick Meiring <meiring@google.com>
15 files changed
tree: d60315d0188214a271759f3da123e2e433bfe34c
  1. analysis/
  2. appengine/
  3. auth/
  4. auth_service/
  5. bisection/
  6. build/
  7. buildbucket/
  8. casviewer/
  9. cipd/
  10. cipkg/
  11. client/
  12. common/
  13. config/
  14. config_service/
  15. cv/
  16. deploy/
  17. examples/
  18. gae/
  19. gce/
  20. grpc/
  21. hardcoded/
  22. led/
  23. logdog/
  24. luci_notify/
  25. lucicfg/
  26. lucictx/
  27. luciexe/
  28. mailer/
  29. milo/
  30. mmutex/
  31. provenance/
  32. resultdb/
  33. scheduler/
  34. scripts/
  35. server/
  36. standalone/
  37. starlark/
  38. swarming/
  39. third_party/
  40. tokenserver/
  41. tools/
  42. tree_status/
  43. vpython/
  44. web/
  45. .gitallowed
  46. .gitattributes
  47. .gitignore
  48. .go-lintable
  49. AUTHORS
  50. codereview.settings
  51. CONTRIBUTING.md
  52. CONTRIBUTORS
  53. go.mod
  54. go.sum
  55. LICENSE
  56. OWNERS
  57. PRESUBMIT.py
  58. README.md
  59. tools.go
  60. WATCHLISTS
README.md

luci-go: LUCI services and tools in Go

GoReference

Installing

LUCI Go code is meant to be worked on from an Chromium infra.git checkout, which enforces packages versions and Go toolchain version. First get fetch via depot_tools.git then run:

fetch infra
cd infra/go
eval `./env.py`
cd src/go.chromium.org/luci

It is now possible to directly install tools with go install:

go install go.chromium.org/luci/auth/client/cmd/...@latest
go install go.chromium.org/luci/buildbucket/cmd/...@latest
go install go.chromium.org/luci/cipd/client/cmd/...@latest
go install go.chromium.org/luci/client/cmd/...@latest
go install go.chromium.org/luci/cv/cmd/...@latest
go install go.chromium.org/luci/gce/cmd/...@latest
go install go.chromium.org/luci/grpc/cmd/...@latest
go install go.chromium.org/luci/logdog/client/cmd/...@latest
go install go.chromium.org/luci/luci_notify/cmd/...@latest
go install go.chromium.org/luci/lucicfg/cmd/...@latest
go install go.chromium.org/luci/luciexe/legacy/cmd/...@latest
go install go.chromium.org/luci/mailer/cmd/...@latest
go install go.chromium.org/luci/mmutex/cmd/...@latest
go install go.chromium.org/luci/resultdb/cmd/...@latest
go install go.chromium.org/luci/server/cmd/...@latest
go install go.chromium.org/luci/swarming/cmd/...@latest
go install go.chromium.org/luci/tokenserver/cmd/...@latest
go install go.chromium.org/luci/tools/cmd/...@latest

Contributing

Contributing uses the same flow as Chromium contributions.