From 17f99d7285d83af5b17fa5b2806657da08983f2d Mon Sep 17 00:00:00 2001 From: whywaita Date: Tue, 20 Jan 2026 18:07:20 +0900 Subject: [PATCH 1/3] feat(proto): add Buf Schema Registry support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add Buf (https://buf.build) support for managing and publishing myshoes protobuf definitions to Buf Schema Registry (BSR). Changes: - Add api/proto/buf.yaml for Buf configuration with lint rules - Add api/proto/buf.gen.yaml for code generation settings - Add .github/workflows/buf.yaml for CI/CD integration - Update Makefile to use buf for proto code generation - Add .buf/ to .gitignore - Regenerate proto.go files using buf generate This allows other projects (shoes plugins) to depend on myshoes proto definitions via BSR. Manual steps required: 1. Create buf.build account and repository (buf.build/whywaita/myshoes) 2. Add BUF_TOKEN to GitHub Secrets 3. Run: cd api/proto && buf push prompt: Implement the following plan: # myshoes proto を Buf Cloud (BSR) に公開する計画 ---- 計画内容を実装します。まず、タスクを整理してから作業を開始します。 実装が完了しました。以下のファイルを作成・更新しました: ## 作成したファイル 1. **api/proto/buf.yaml** - Buf の設定ファイル(lint と breaking change のルールを定義) 2. **api/proto/buf.gen.yaml** - コード生成の設定ファイル 3. **.github/workflows/buf.yaml** - GitHub Actions ワークフロー ## 更新したファイル 1. **Makefile** - `build-proto` を buf ベースに変更、`lint-proto` ターゲットを追加 2. **.gitignore** - `.buf/` を追加 3. **api/proto.go/myshoes.pb.go** - buf generate で再生成(protoc バージョン表示のみ変更) 4. **api/proto.go/myshoes_grpc.pb.go** - buf generate で再生成(protoc バージョン表示のみ変更) ## 動作確認 - `buf lint` - エラーなし - `buf build` - 成功 - `make build` - 成功 - `make test` - すべてのテストが成功 ## 次のステップ(手動作業が必要) BSR に公開するためには、以下の手順を手動で行う必要があります: 1. **BSR アカウントのセットアップ** - https://buf.build でアカウントを作成 - リポジトリ `buf.build/whywaita/myshoes` を作成 - API トークンを取得 - GitHub の Settings → Secrets and variables → Actions で `BUF_TOKEN` を登録 2. **初回プッシュ** \`\`\`bash cd api/proto && buf push \`\`\` 3. **他のプロジェクトからの利用** 公開後、他のプロジェクトは以下のように依存できます: \`\`\`yaml # 依存先の buf.yaml version: v2 deps: - buf.build/whywaita/myshoes \`\`\` --- .github/workflows/buf.yaml | 18 ++++++++++++++++++ .gitignore | 5 ++++- Makefile | 10 ++++------ api/proto.go/myshoes.pb.go | 2 +- api/proto.go/myshoes_grpc.pb.go | 2 +- api/proto/buf.gen.yaml | 11 +++++++++++ api/proto/buf.yaml | 17 +++++++++++++++++ 7 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/buf.yaml create mode 100644 api/proto/buf.gen.yaml create mode 100644 api/proto/buf.yaml diff --git a/.github/workflows/buf.yaml b/.github/workflows/buf.yaml new file mode 100644 index 0000000..14202ee --- /dev/null +++ b/.github/workflows/buf.yaml @@ -0,0 +1,18 @@ +name: Buf +on: + push: + branches: [master] + paths: ['api/proto/**'] + pull_request: + paths: ['api/proto/**'] + +jobs: + buf: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: bufbuild/buf-action@v1 + with: + token: ${{ secrets.BUF_TOKEN }} + input: api/proto + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} diff --git a/.gitignore b/.gitignore index 78d6394..94fbfc0 100644 --- a/.gitignore +++ b/.gitignore @@ -157,4 +157,7 @@ Temporary Items # End of https://www.toptal.com/developers/gitignore/api/macos,intellij,go -/myshoes* \ No newline at end of file +/myshoes* + +# Buf +.buf/ \ No newline at end of file diff --git a/Makefile b/Makefile index a08aa06..1a07a75 100644 --- a/Makefile +++ b/Makefile @@ -17,13 +17,11 @@ build-linux: ## Build for Linux make build-proto GOOS=linux GOARCH=amd64 go build -o myshoes-linux-amd64 -ldflags $(BUILD_LDFLAGS) cmd/server/cmd.go -build-proto: ## Build proto file - mkdir -p tmp/proto-go - rm -rf api/proto.go +build-proto: ## Build proto file with buf + cd api/proto && buf generate - protoc -I=api/proto/ --go_out=tmp/proto-go/ --go-grpc_out=tmp/proto-go/ api/proto/**.proto - mv tmp/proto-go/github.com/whywaita/myshoes/api/proto.go api/ - rm -rf tmp +lint-proto: ## Lint proto files + cd api/proto && buf lint test: ## Exec test go test -v ./... \ No newline at end of file diff --git a/api/proto.go/myshoes.pb.go b/api/proto.go/myshoes.pb.go index 57e8fd5..4bc0c4c 100644 --- a/api/proto.go/myshoes.pb.go +++ b/api/proto.go/myshoes.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v5.29.3 +// protoc (unknown) // source: myshoes.proto package proto_go diff --git a/api/proto.go/myshoes_grpc.pb.go b/api/proto.go/myshoes_grpc.pb.go index 2fd1042..4bbdfbb 100644 --- a/api/proto.go/myshoes_grpc.pb.go +++ b/api/proto.go/myshoes_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.0 -// - protoc v5.29.3 +// - protoc (unknown) // source: myshoes.proto package proto_go diff --git a/api/proto/buf.gen.yaml b/api/proto/buf.gen.yaml new file mode 100644 index 0000000..1bd4b3b --- /dev/null +++ b/api/proto/buf.gen.yaml @@ -0,0 +1,11 @@ +version: v2 +clean: true +plugins: + - remote: buf.build/protocolbuffers/go + out: ../proto.go + opt: + - paths=source_relative + - remote: buf.build/grpc/go + out: ../proto.go + opt: + - paths=source_relative diff --git a/api/proto/buf.yaml b/api/proto/buf.yaml new file mode 100644 index 0000000..01b983d --- /dev/null +++ b/api/proto/buf.yaml @@ -0,0 +1,17 @@ +version: v2 +modules: + - path: . + name: buf.build/whywaita/myshoes +lint: + use: + - STANDARD + except: + - PACKAGE_DIRECTORY_MATCH + - ENUM_ZERO_VALUE_SUFFIX + - PACKAGE_VERSION_SUFFIX + - SERVICE_SUFFIX + - ENUM_VALUE_PREFIX + - ENUM_VALUE_UPPER_SNAKE_CASE +breaking: + use: + - FILE From e4bdc08187b29d6c576224cd53e4cd3bccdf4f52 Mon Sep 17 00:00:00 2001 From: whywaita Date: Tue, 20 Jan 2026 18:12:39 +0900 Subject: [PATCH 2/3] fix(proto): format proto file with buf format - Add blank line after package declaration - Add newline at end of file This fixes the buf format CI check. --- api/proto/myshoes.proto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/proto/myshoes.proto b/api/proto/myshoes.proto index 72ab027..c2c107b 100644 --- a/api/proto/myshoes.proto +++ b/api/proto/myshoes.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package whywaita.myshoes; + option go_package = "github.com/whywaita/myshoes/api/proto.go"; service Shoes { @@ -40,4 +41,4 @@ message DeleteInstanceRequest { repeated string labels = 2; } -message DeleteInstanceResponse {} \ No newline at end of file +message DeleteInstanceResponse {} From 218c6168d413c82859ed8197f406d11901ae7f8f Mon Sep 17 00:00:00 2001 From: whywaita Date: Tue, 20 Jan 2026 18:13:50 +0900 Subject: [PATCH 3/3] fix(docker): install buf in Dockerfile for proto generation Add buf installation to fix docker build error. The Makefile now uses 'buf generate' so buf must be available in the build environment. --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index b4b9421..6d5febe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,7 @@ WORKDIR /go/src/github.com/whywaita/myshoes RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.34.2 RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.5.1 +RUN go install github.com/bufbuild/buf/cmd/buf@latest RUN apt-get update -y \ && apt-get install -y protobuf-compiler