-
Notifications
You must be signed in to change notification settings - Fork 342
Description
Summary
Hi TTN team,
I’m currently integrating TTN’s gRPC API into a codebase and encountered a recurring issue stemming from TTN’s continued use of:
buf.build/envoyproxy/protoc-gen-validate
which corresponds to the deprecated protoc-gen-validate (PGV) runtime.
This is creating namespace conflicts with modern Buf-generated protobuf code using the Protovalidate runtime: https://protovalidate.com/
Specifically, PGV and Protovalidate both register the same proto:
validate/validate.proto
which leads to the following panic at runtime:
panic: proto: file "validate/validate.proto" is already registered
previously from: "buf.build/gen/go/envoyproxy/protoc-gen-validate/protocolbuffers/go/validate"
currently from: "github.com/envoyproxy/protoc-gen-validate/validate"
Current Situation
No response
Why do we need this? Who uses it, and when?
Why TTN Should Migrate to Protovalidate
1. PGV is no longer maintained, and the Envoy project does not recommend using its Go runtime.
2. Protovalidate is the official successor, built and maintained by Buf.
3. Protovalidate:
• provides a more modern validation engine
• supports rich validation semantics
• avoids global registration conflicts
• integrates cleanly with Buf’s ecosystem and codegen
4. Many Go teams (mine included) are increasingly adopting Protovalidate, making PGV-based APIs difficult to integrate without hacks or stubbing modules.
Proposed Implementation
In Buf yaml: buf.build/envoyproxy/protoc-gen-validate -> buf.build/bufbuild/protovalidate
And change imports in protos:
import "buf/validate/validate.proto";
Contributing
- I can help by doing more research.
- I can help by implementing the feature after the proposal above is approved.
- I can help by testing the feature before it's released.
Validation
- The feature is tested in a staging environment.
- The feature is documented in The Things Stack Documentation
Code of Conduct
- I agree to follow TTN's Community Code of Conduct.