~

Migrate to buf from prototool

Why? Because prototool is outdated, and can not run on M1 mac.

We need 3 files:

FYI, I use:

build.go

//go:build tools
// +build tools

import (
  _ "github.com/kei2100/protoc-gen-marshal-zap/plugin/protoc-gen-marshal-zap"
)

buf.yaml

version: v2
deps:
    - buf.build/envoyproxy/protoc-gen-validate:v1.2.1
    - buf.build/kei2100/protoc-gen-marshal-zap:081f499bbca4486784773e060c1c1418
    - buf.build/haunt98/googleapis
    - buf.build/haunt98/grpc-gateway:v2.27.1
breaking:
    use:
        - WIRE

buf.gen.yaml

version: v2
plugins:
    - remote: buf.build/grpc/go:v1.5.1
      out: pkg
    - remote: buf.build/protocolbuffers/go:v1.36.6
      out: pkg
    - remote: buf.build/bufbuild/validate-go:v1.2.1
      out: pkg
    - local: protoc-gen-marshal-zap
      out: pkg
    - remote: buf.build/grpc-ecosystem/gateway:v2.27.1
      out: pkg
    - remote: buf.build/grpc-ecosystem/openapiv2:v2.27.1
      out: .
      opt:
          - json_names_for_fields=false
          - enums_as_ints=true
          - disable_service_tags=true
          - preserve_rpc_order=true

Makefile

gen:
	# go install github.com/kei2100/protoc-gen-marshal-zap/plugin/protoc-gen-marshal-zap
	go install github.com/bufbuild/buf/cmd/buf@latest
	# buf config migrate
	buf dep update
	buf format --path ./api -w
	buf generate --path ./api

If using some imports, you better make a raw proto file for other services to integrate:

raw:
	mkdir -p api/raw
	cp api/*.proto api/raw/
	# https://github.com/chmln/sd
	sd -F 'import "validate/validate.proto";' '' api/raw/*.proto
	sd -F 'import "marshal-zap.proto";' '' api/raw/*.proto
	sd -f s '\s\[\s*\(.*?];' ';' api/raw/*.proto
	buf format --path api/raw -w

FAQ

If you use grpc-gateway:

The last step is delete prototool.yaml.

If you are not migrate but start from scratch:

Tips

Some experience I got after writing proto files for a living:

Thanks

Feel free to ask me via email or Mastodon.
Source code is available on GitHub Codeberg sourcehut Treehouse GitLab