go - 错误 : failed post-processing: 820:39: missing ',' in argument list

标签 go bazel protoc

protoc-gen-validate 是一个用于生成多语言消息验证器的协议(protocol)插件。

该项目使用 Bazel 进行构建并且有一个 open pull request添加对自定义验证错误消息的支持。

原代码是2020年做的,最近更新了最新的代码,修复了所有合并冲突后现在构建失败,但找不到问题:

~/GitHub/protoc-gen-validate (i18n) $ make bazel-tests
bazel test //tests/... --test_output=errors
INFO: Analyzed 68 targets (0 packages loaded, 0 targets configured).
INFO: Found 62 targets and 6 test targets...
ERROR: /Users/mparnisari/GitHub/protoc-gen-validate/tests/harness/cases/BUILD:46:21: Generating into bazel-out/darwin-fastbuild/bin/tests/harness/cases/go_/github.com/envoyproxy/protoc-gen-validate/tests/harness/cases/go failed: (Exit 1): go-protoc-bin failed: error executing command bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/io_bazel_rules_go/go/tools/builders/go-protoc-bin_/go-protoc-bin -protoc bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/com_google_protobuf/protoc ... (remaining 117 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
[error] failed post-processing: 820:39: missing ',' in argument list (and 10 more errors)
--validate_out: protoc-gen-validate: Plugin failed with status code 1.
2021/12/14 23:46:43 error running protoc: exit status 1
ERROR: /Users/mparnisari/GitHub/protoc-gen-validate/tests/harness/cases/BUILD:46:21 GoCompilePkg tests/harness/cases/go.a failed: (Exit 1): go-protoc-bin failed: error executing command bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/io_bazel_rules_go/go/tools/builders/go-protoc-bin_/go-protoc-bin -protoc bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/com_google_protobuf/protoc ... (remaining 117 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
INFO: Elapsed time: 0.962s, Critical Path: 0.48s
INFO: 8 processes: 8 internal.
FAILED: Build did NOT complete successfully

根据错误 ([error] failed post-processing: 820:39: missing ',' in argument list (and 10 more errors)) 在我触发后立即出现的事实判断tests 命令,我认为这是 Bazel 的问题,但我不确定。


更新 1:我将范围缩小到:

~/GitHub/fork/protoc-gen-validate (i18n) $ make testcases
cd tests/harness/cases && \
        protoc \
                -I . \
                -I ../../.. \
                --go_out="module=github.com/envoyproxy/protoc-gen-validate/tests/harness/cases/go,Mtests/harness/cases/other_package/embed.proto=github.com/envoyproxy/protoc-gen-validate/tests/harness/cases/other_package/go;other_package,Mtests/harness/cases/yet_another_package/embed.proto=github.com/envoyproxy/protoc-gen-validate/tests/harness/cases/yet_another_package/go,Mvalidate/validate.proto=github.com/envoyproxy/protoc-gen-validate/validate,Mgoogle/protobuf/any.proto=google.golang.org/protobuf/types/known/anypb,Mgoogle/protobuf/duration.proto=google.golang.org/protobuf/types/known/durationpb,Mgoogle/protobuf/struct.proto=google.golang.org/protobuf/types/known/structpb,Mgoogle/protobuf/timestamp.proto=google.golang.org/protobuf/types/known/timestamppb,Mgoogle/protobuf/wrappers.proto=google.golang.org/protobuf/types/known/wrapperspb,Mgoogle/protobuf/descriptor.proto=google.golang.org/protobuf/types/descriptorpb:./go" \
                --plugin=protoc-gen-go=/Users/mparnisari/go/bin/protoc-gen-go \
                --validate_out="module=github.com/envoyproxy/protoc-gen-validate/tests/harness/cases/go,lang=go,Mtests/harness/cases/other_package/embed.proto=github.com/envoyproxy/protoc-gen-validate/tests/harness/cases/other_package/go,Mtests/harness/cases/yet_another_package/embed.proto=github.com/envoyproxy/protoc-gen-validate/tests/harness/cases/yet_another_package/go:./go" \
                ./*.proto
filename-with-dash.proto:5:1: warning: Import validate/validate.proto is unused.
[error] failed post-processing: 820:39: missing ',' in argument list (and 10 more errors)
--validate_out: protoc-gen-validate: Plugin failed with status code 1.
make: 
*** [testcases] Error 1

更新 2:缩小范围。如果我删除这个文件:tests/harness/cases/maps.proto

制作测试用例 有效


更新 3:缩小范围。如果我删除这些行:https://github.com/envoyproxy/protoc-gen-validate/blob/main/tests/harness/cases/maps.proto#L14-L17

制作测试用例 有效

最佳答案

使用开关 --sandbox_debug 构建将提供未截断的堆栈跟踪。
都是关于缺少一个逗号...唯一的问题是在哪个文件和行中。

它提示 harness_py_proto 测试 @ 46:21。建议对文件 tests/harness/executor/cases.go 运行语法检查,因为如果 820:39 不在某个生成的文件中,这可能是该文件最适合(按行号和错误消息)。我对 Go 语法不是很流利,这就是为什么我无法立即发现它的原因 - 但语法检查器或 linter 可以:

lint bazel testcases bazel-tests

Makefile 也可能是候选者,但没有太多进展:

.PHONY: harness
harness: testcases tests/harness/go/harness.pb.go tests/harness/go/main/go-harness tests/harness/cc/cc-harness bin/harness ## runs the test harness, validating a series of test cases in all supported languages
    ./bin/harness -go -cc

.PHONY: bazel-tests
bazel-tests: ## runs all tests with Bazel
    bazel test //tests/... --test_output=errors

曾经尝试过运行 make harness 吗?当它按照评论所说的去做时......

## runs the test harness, validating a series of test cases in all supported languages

关于go - 错误 : failed post-processing: 820:39: missing ',' in argument list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70360041/

相关文章:

android-studio - Gomobile 工具链已过时,仅适用于 Android Studio

go - 如何在 Golang 中打印 slice 的内存地址?

encoding - 在 Golang 中创建具有已知文本字符串的字节 slice

angular - Bazel + Angular + SocketIO 导致 : Uncaught TypeError: XMLHttpRequest is not a constructor

android - 使用 Bazel 和 j2objc 在 iOS 和 Android 之间共享代码

java - 如何将 google.protobuf.Timestamp 与 protoc-jar-maven-plugin 一起使用?

java - eclipse中hadoop中的protoc错误

python - Golang - 检测 JSON 输入中的重复键

TensorFlow 无法编译

python - 找不到 `protoc` 命令