Skip to content

Commit 5271bb8

Browse files
committed
tools: Avoid picking protoc file randomly
The list of protogen.File passed to tetragon plugin might contain 3rd party files from the import statement as well. For example, if bpf.proto imports google/protobuf/duration.proto, then generated file will be in v1/google/protobuf instead of v1/tetragon directory. This commit is to make sure the location is correctly derived. Signed-off-by: Tam Mach <[email protected]>
1 parent 159fd10 commit 5271bb8

File tree

4 files changed

+29
-5
lines changed

4 files changed

+29
-5
lines changed

tools/protoc-gen-go-tetragon/common/common.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"google.golang.org/protobuf/reflect/protoreflect"
1515
)
1616

17+
var TetragonProtoPackageName = "tetragon"
18+
1719
// TetragonPackageName is the import path for the Tetragon package
1820
var TetragonPackageName = "github.com/cilium/tetragon"
1921

@@ -366,3 +368,14 @@ func GetEnums(files []*protogen.File) ([]*protogen.Enum, error) {
366368

367369
return enumsCache, nil
368370
}
371+
372+
// GetFirstTetragonFile returns the first file in the provided files that has a filename prefix
373+
// starting with TetragonProtoPackageName
374+
func GetFirstTetragonFile(files []*protogen.File) (*protogen.File, error) {
375+
for _, file := range files {
376+
if strings.HasPrefix(file.GeneratedFilenamePrefix, TetragonProtoPackageName) {
377+
return file, nil
378+
}
379+
}
380+
return nil, errors.New("no Tetragon file found in the provided files")
381+
}

tools/protoc-gen-go-tetragon/eventchecker/eventchecker.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ func Generate(gen *protogen.Plugin, files []*protogen.File) error {
1414
// generated files will be in pkg tetragon so its not important
1515
// from packaging side and any prefix will work fine we just pick
1616
// the first file arbitrarily.
17-
g := common.NewCodegenFile(gen, files[0], "eventchecker")
18-
yaml := common.NewCodegenFile(gen, files[0], "eventchecker/yaml")
17+
f, err := common.GetFirstTetragonFile(files)
18+
if err != nil {
19+
return err
20+
}
21+
g := common.NewCodegenFile(gen, f, "eventchecker")
22+
yaml := common.NewCodegenFile(gen, f, "eventchecker/yaml")
1923

2024
if err := generateEventCheckerConf(yaml); err != nil {
2125
return err

tools/protoc-gen-go-tetragon/helpers/helpers.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,11 @@ func generateProcessEventMap(g *protogen.GeneratedFile, files []*protogen.File)
298298

299299
// Generate generates boilerplate helpers
300300
func Generate(gen *protogen.Plugin, files []*protogen.File) error {
301-
// Pick arbitrary file to use for prefix of generated files, files[0] here.
302-
g := common.NewCodegenFile(gen, files[0], "helpers")
301+
f, err := common.GetFirstTetragonFile(files)
302+
if err != nil {
303+
return err
304+
}
305+
g := common.NewCodegenFile(gen, f, "helpers")
303306

304307
if err := generateResponseTypeString(g, files); err != nil {
305308
return err

tools/protoc-gen-go-tetragon/types/types.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ import (
1111
)
1212

1313
func Generate(gen *protogen.Plugin, files []*protogen.File) error {
14-
g := common.NewFile(gen, files[0], "", filepath.Base(common.TetragonApiPackageName), "types")
14+
f, err := common.GetFirstTetragonFile(files)
15+
if err != nil {
16+
return err
17+
}
18+
g := common.NewFile(gen, f, "", filepath.Base(common.TetragonApiPackageName), "types")
1519

1620
events, err := common.GetEvents(files)
1721
if err != nil {

0 commit comments

Comments
 (0)