[proto/protowalk] Add proto processing library.

This adds a protoreflect-based processing library which efficiently
allows processing of protobuf messages with field annotations applied.

This comes with processors which can check the `deprecated` proto
annotation as well as google.api.field_behavior = REQUIRED. It
additionally has a processor which can zero-out any
google.api.field_behavior = OUTPUT_ONLY fields.

This is meant to be used in conjunction with the protoc-gen-validate
generated code, though it would also be possible to implement a
processor which was able to apply these constraints via this
library instead, in case the generated code proves to be cumbersome.

R=chanli, ddoman, vadimsh

Bug: 1324799
Change-Id: I91837c9e5468d3e37346645f1e78259f7cf2774d
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-go/+/3632598
Commit-Queue: Robbie Iannucci <iannucci@chromium.org>
Reviewed-by: Vadim Shtayura <vadimsh@chromium.org>
Reviewed-by: Chan Li <chanli@chromium.org>
Auto-Submit: Robbie Iannucci <iannucci@chromium.org>
Reviewed-by: Scott Lee <ddoman@chromium.org>
18 files changed
tree: 89a8befbf880e5de865fbf59345d8a391fca28b1
  1. appengine/
  2. auth/
  3. auth_service/
  4. build/
  5. buildbucket/
  6. casviewer/
  7. cipd/
  8. client/
  9. cmdrunner/
  10. common/
  11. config/
  12. cv/
  13. deploy/
  14. examples/
  15. gae/
  16. gce/
  17. grpc/
  18. hacks/
  19. hardcoded/
  20. led/
  21. logdog/
  22. luci_notify/
  23. lucicfg/
  24. lucictx/
  25. luciexe/
  26. mailer/
  27. milo/
  28. mmutex/
  29. provenance/
  30. resultdb/
  31. scheduler/
  32. scripts/
  33. server/
  34. starlark/
  35. swarming/
  36. tokenserver/
  37. tools/
  38. vpython/
  39. web/
  40. .gitallowed
  41. .gitattributes
  42. .golangci.yml
  43. AUTHORS
  44. codereview.settings
  45. CONTRIBUTING.md
  46. CONTRIBUTORS
  47. go.mod
  48. go.sum
  49. LICENSE
  50. OWNERS
  51. PRESUBMIT.py
  52. README.md
  53. tools.go
  54. 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.