From c33f13d744cc37d851c00a33a0aa1e156f6eeae0 Mon Sep 17 00:00:00 2001 From: Sri Krishna Date: Wed, 7 May 2025 15:13:24 -0400 Subject: [PATCH 1/2] Add `buf_format` rule --- buf/defs.bzl | 2 ++ buf/internal/BUILD.bazel | 5 +++++ buf/internal/format.bzl | 38 ++++++++++++++++++++++++++++++++++++ examples/bzlmod/BUILD.bazel | 6 +++++- examples/bzlmod/unused.proto | 2 +- 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 buf/internal/format.bzl diff --git a/buf/defs.bzl b/buf/defs.bzl index 0de2348..e460945 100644 --- a/buf/defs.bzl +++ b/buf/defs.bzl @@ -29,7 +29,9 @@ Use [gazelle](/gazelle/buf) to auto generate all of these rules based on `buf.ya load("//buf/internal:breaking.bzl", _buf_breaking_test = "buf_breaking_test") load("//buf/internal:lint.bzl", _buf_lint_test = "buf_lint_test") load("//buf/internal:repo.bzl", _buf_dependencies = "buf_dependencies") +load("//buf/internal:format.bzl", _buf_format = "buf_format") +buf_format = _buf_format buf_dependencies = _buf_dependencies def buf_breaking_test(timeout = "short", **kwargs): diff --git a/buf/internal/BUILD.bazel b/buf/internal/BUILD.bazel index 5489205..8a69d31 100644 --- a/buf/internal/BUILD.bazel +++ b/buf/internal/BUILD.bazel @@ -16,6 +16,11 @@ load("@bazel_skylib//:bzl_library.bzl", "bzl_library") package(default_visibility = ["//:__subpackages__"]) +bzl_library( + name = "format", + srcs = ["format.bzl"], +) + bzl_library( name = "breaking", srcs = ["breaking.bzl"], diff --git a/buf/internal/format.bzl b/buf/internal/format.bzl new file mode 100644 index 0000000..198cbc3 --- /dev/null +++ b/buf/internal/format.bzl @@ -0,0 +1,38 @@ +_DOC = """ +buf_format rule formats Protobuf files. +""" + +_TEMPLATE = """ +buf=$(readlink "{}") +if ! cd "$BUILD_WORKSPACE_DIRECTORY"; then + echo "Unable to change to workspace (BUILD_WORKSPACE_DIRECTORY: $BUILD_WORKSPACE_DIRECTORY)" + exit 1 +fi + +$buf format {} . +""" + +_TOOLCHAIN = str(Label("//tools/buf:toolchain_type")) + +def _buf_format_impl(ctx): + ctx.actions.write( + output = ctx.outputs.executable, + is_executable = True, + content = _TEMPLATE.format(ctx.toolchains[_TOOLCHAIN].cli.short_path, "-w"), + ) + + return [ + DefaultInfo( + runfiles = ctx.runfiles( + files = [ctx.toolchains[_TOOLCHAIN].cli], + ), + ), + ] + +buf_format = rule( + implementation = _buf_format_impl, + doc = _DOC, + attrs = {}, + toolchains = [_TOOLCHAIN], + executable = True, +) diff --git a/examples/bzlmod/BUILD.bazel b/examples/bzlmod/BUILD.bazel index ea541bb..24e457c 100644 --- a/examples/bzlmod/BUILD.bazel +++ b/examples/bzlmod/BUILD.bazel @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -load("@rules_buf//buf:defs.bzl", "buf_lint_test") +load("@rules_buf//buf:defs.bzl", "buf_format", "buf_lint_test") load("@rules_proto//proto:defs.bzl", "proto_library") load("@gazelle//:def.bzl", "gazelle", "gazelle_binary") @@ -51,3 +51,7 @@ buf_lint_test( config = "//:buf.yaml", targets = [":root_proto"], ) + +buf_format( + name = "buf_format", +) diff --git a/examples/bzlmod/unused.proto b/examples/bzlmod/unused.proto index b7666a6..49caaba 100644 --- a/examples/bzlmod/unused.proto +++ b/examples/bzlmod/unused.proto @@ -12,4 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. -syntax = "proto3"; \ No newline at end of file +syntax = "proto3"; From 8125556de2a994711996b3e1410dd915c5122c6f Mon Sep 17 00:00:00 2001 From: Sri Krishna Date: Wed, 7 May 2025 15:35:00 -0400 Subject: [PATCH 2/2] Add format dependency --- buf/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/buf/BUILD.bazel b/buf/BUILD.bazel index 706f143..3f7fbc4 100644 --- a/buf/BUILD.bazel +++ b/buf/BUILD.bazel @@ -21,6 +21,7 @@ bzl_library( srcs = ["defs.bzl"], deps = [ "//buf/internal:breaking", + "//buf/internal:format", "//buf/internal:lint", "//buf/internal:repo", ],