[build/properties] More sophisticated input property parsing.

Previously when luciexe's parsed input properties they would, by
default, error out when they encounter an unrecognized field.

However, this makes migration very difficult - if an unaware caller
starts passing a new field to an old luciexe, it would result in
a hard error.

At the same time, we don't want misspelled fields to be silently
ignored.

This CL makes it so that, when deserializing the input properties,
if any property fields do not round-trip from the decoded inputs,
they will be logged with Warning (with the option of turning them
into a hard error with OptRejectUnknownFields()).

This should give us the best default configuration for existing and
future luciexe programs.

R=azrahman, chanli, fancl

Change-Id: I4db6d0a32b155bd8f0c4d7e17cd8446cf93ab8c1
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-go/+/5876343
Auto-Submit: Robbie Iannucci <iannucci@chromium.org>
Commit-Queue: Chan Li <chanli@chromium.org>
Reviewed-by: Chan Li <chanli@chromium.org>
18 files changed
tree: 17c3b2dca53e9a6fc8b7ecc39d0ea56e201430f7
  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. recipes_py/
  33. resultdb/
  34. scheduler/
  35. scripts/
  36. server/
  37. source_index/
  38. standalone/
  39. starlark/
  40. swarming/
  41. teams/
  42. third_party/
  43. tokenserver/
  44. tools/
  45. tree_status/
  46. vpython/
  47. web/
  48. .gitallowed
  49. .gitattributes
  50. .gitignore
  51. .go-lintable
  52. AUTHORS
  53. codereview.settings
  54. CONTRIBUTING.md
  55. CONTRIBUTORS
  56. go.mod
  57. go.sum
  58. LICENSE
  59. OWNERS
  60. PRESUBMIT.py
  61. README.md
  62. tools.go
  63. 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.