Skip to content

Feat: add protobuf lint#15

Merged
kooksee merged 8 commits intomainfrom
feat/linter
Jun 25, 2025
Merged

Feat: add protobuf lint#15
kooksee merged 8 commits intomainfrom
feat/linter

Conversation

@kooksee
Copy link
Copy Markdown
Contributor

@kooksee kooksee commented Jun 25, 2025

No description provided.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @kooksee, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

I've added a significant new feature to the protobuild tool: protobuf linting. This enhancement allows users to validate their .proto files against best practices and style guides using the protobuild lint command. The implementation leverages the googleapis/api-linter library and provides flexible configuration options, including output tailored for GitHub Actions. This change also includes a general update of the Go environment and project dependencies, along with extending build support to arm64.

Highlights

  • Protobuf Linting: I've introduced a new lint command to the protobuild CLI, enabling the checking of protobuf files against a set of predefined rules.
  • API Linter Integration: The core linting functionality is powered by integrating github.com/googleapis/api-linter, providing comprehensive rule-based analysis for .proto files.
  • GitHub Actions Output Format: Linting results can now be formatted in a GitHub Actions compatible format, which facilitates direct integration and error reporting within CI/CD workflows.
  • Configurable Linting Rules: The linting behavior, including enabling or disabling specific rules and choosing the output format, can now be configured via the main protobuild configuration file.
  • Go Version and Dependency Updates: The project's Go module has been upgraded to Go 1.24, and numerous dependencies, including urfave/cli/v3, googleapis/api-linter, and jhump/protoreflect, have been updated to their latest versions.
  • ARM64 Build Support: The .goreleaser.yaml configuration has been updated to include arm64 architecture for building release artifacts, expanding platform compatibility.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@kooksee kooksee merged commit 8aed3ac into main Jun 25, 2025
3 checks passed
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The pull request adds protobuf linting functionality to the protobuild tool, including GitHub Actions output formatting and integration with the existing CLI. It also updates dependencies and adds arm64 architecture support to the build process.

// ::error file={name},line={line},endLine={endLine},title={title}::{message}
// https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-error-message

fmt.Println(lo.Must(filepath.Abs(response.FilePath)))
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Consider using slog for logging instead of fmt.Println. It provides structured logging and better control over log levels.

Comment on lines +46 to +47
runeThatLooksLikeTwoColonsButIsActuallyTwoArmenianFullStops := "։։"
title := strings.ReplaceAll(string(problem.RuleID), "::", runeThatLooksLikeTwoColonsButIsActuallyTwoArmenianFullStops)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This replacement of :: with Armenian full stops is clever to avoid conflicts with GitHub Actions' control characters. However, ensure this substitution is well-documented and easily discoverable for anyone debugging linting outputs.

Comment on lines +70 to 71
Local: true,
Destination: &protoCfg,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Changing Persistent to Local ensures that the flag is only available for the current command and not inherited by subcommands. Verify this is the intended behavior.

Comment on lines +142 to +143
Before: func(ctx context.Context, command *cli.Command) (context.Context, error) {
return ctx, parseConfig()
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The Before function now returns a context.Context and an error. Ensure that the context is properly handled and passed along, even if it's not modified in this specific function.

Comment on lines +320 to +321
Before: func(ctx context.Context, command *cli.Command) (context.Context, error) {
return ctx, parseConfig()
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The Before function now returns a context.Context and an error. Ensure that the context is properly handled and passed along, even if it's not modified in this specific function.

Comment on lines +487 to +488
Before: func(ctx context.Context, command *cli.Command) (context.Context, error) {
return ctx, parseConfig()
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The Before function now returns a context.Context and an error. Ensure that the context is properly handled and passed along, even if it's not modified in this specific function.

Comment on lines +4 to +5
"github.com/pubgo/protobuild/cmd/linters"
)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This import statement introduces a dependency on the linters package. Ensure that this dependency is necessary and doesn't create a circular dependency or unnecessary coupling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant