From 718b9285ef7e04d3ed94332e75ebd74afbeed6ba Mon Sep 17 00:00:00 2001 From: ahmadalguydi Date: Wed, 5 Aug 2026 22:06:59 +0300 Subject: [PATCH 1/3] feat(mdbook): allow default configuration --- extensions/mdbook/private/mdbook.bzl | 20 ++++++++++++++----- .../mdbook/test/default_config/BUILD.bazel | 12 +++++++++++ .../mdbook/test/default_config/src/SUMMARY.md | 3 +++ .../test/default_config/src/chapter_1.md | 3 +++ 4 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 extensions/mdbook/test/default_config/BUILD.bazel create mode 100644 extensions/mdbook/test/default_config/src/SUMMARY.md create mode 100644 extensions/mdbook/test/default_config/src/chapter_1.md diff --git a/extensions/mdbook/private/mdbook.bzl b/extensions/mdbook/private/mdbook.bzl index 1fac752918..a7055c34f6 100644 --- a/extensions/mdbook/private/mdbook.bzl +++ b/extensions/mdbook/private/mdbook.bzl @@ -23,6 +23,14 @@ def _map_inputs(file): def _mdbook_impl(ctx): output = ctx.actions.declare_directory(ctx.label.name) + book = ctx.file.book + if book == None: + book = ctx.actions.declare_file("{}.book.toml".format(ctx.label.name)) + ctx.actions.write( + output = book, + content = "", + ) + toolchain = ctx.toolchains["@rules_rust_mdbook//:toolchain_type"] plugin_paths = depset([ @@ -33,7 +41,7 @@ def _mdbook_impl(ctx): path_sep = ";" if is_windows else ":" plugin_path = path_sep.join(plugin_paths.to_list()) - inputs = depset([ctx.file.book] + ctx.files.srcs) + inputs = depset([book] + ctx.files.srcs) inputs_map_args = ctx.actions.args() inputs_map_args.use_param_file("%s", use_always = True) @@ -45,7 +53,7 @@ def _mdbook_impl(ctx): args.add(output.path) args.add(toolchain.mdbook) args.add("build") - args.add("${{pwd}}/{}".format(ctx.file.book.dirname)) + args.add("${{pwd}}/{}".format(book.dirname)) ctx.actions.run( mnemonic = "MdBookBuild", @@ -64,7 +72,7 @@ def _mdbook_impl(ctx): ), MdBookInfo( srcs = depset(ctx.files.srcs), - config = ctx.file.book, + config = book, plugins = depset(ctx.files.plugins), ), ] @@ -74,9 +82,11 @@ mdbook = rule( doc = "Rules to create book from markdown files using `mdBook`.", attrs = { "book": attr.label( - doc = "The `book.toml` file.", + doc = ( + "The optional `book.toml` file. An empty default configuration is " + "used when omitted." + ), allow_single_file = ["book.toml"], - mandatory = True, ), "plugins": attr.label_list( doc = ( diff --git a/extensions/mdbook/test/default_config/BUILD.bazel b/extensions/mdbook/test/default_config/BUILD.bazel new file mode 100644 index 0000000000..0b71487717 --- /dev/null +++ b/extensions/mdbook/test/default_config/BUILD.bazel @@ -0,0 +1,12 @@ +load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("//:defs.bzl", "mdbook") + +mdbook( + name = "default_config", + srcs = glob(["src/**/*.md"]), +) + +build_test( + name = "default_config_test", + targets = [":default_config"], +) diff --git a/extensions/mdbook/test/default_config/src/SUMMARY.md b/extensions/mdbook/test/default_config/src/SUMMARY.md new file mode 100644 index 0000000000..7390c82896 --- /dev/null +++ b/extensions/mdbook/test/default_config/src/SUMMARY.md @@ -0,0 +1,3 @@ +# Summary + +- [Chapter 1](./chapter_1.md) diff --git a/extensions/mdbook/test/default_config/src/chapter_1.md b/extensions/mdbook/test/default_config/src/chapter_1.md new file mode 100644 index 0000000000..07bcc558e4 --- /dev/null +++ b/extensions/mdbook/test/default_config/src/chapter_1.md @@ -0,0 +1,3 @@ +# Chapter 1 + +This book uses mdBook's default configuration. From a830d13c106e388c5bbc080d7f49c9e542cc6188 Mon Sep 17 00:00:00 2001 From: ahmadalguydi Date: Wed, 5 Aug 2026 22:17:00 +0300 Subject: [PATCH 2/3] fix(mdbook): stage generated default config correctly --- extensions/mdbook/private/mdbook.bzl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/extensions/mdbook/private/mdbook.bzl b/extensions/mdbook/private/mdbook.bzl index a7055c34f6..6812fcef4e 100644 --- a/extensions/mdbook/private/mdbook.bzl +++ b/extensions/mdbook/private/mdbook.bzl @@ -4,6 +4,7 @@ MdBookInfo = provider( doc = "Information about a `mdbook` target.", fields = { "config": "File: The `book.toml` file.", + "config_dest": "String: The path of the configuration file in the staged book.", "plugins": "Depset[File]: TODO", "srcs": "Depset[File]: TODO", }, @@ -24,6 +25,7 @@ def _mdbook_impl(ctx): output = ctx.actions.declare_directory(ctx.label.name) book = ctx.file.book + config_dest = "{}/{}".format(ctx.label.package, book.basename) if book != None else "{}/{}.book.toml".format(ctx.label.package, ctx.label.name) if book == None: book = ctx.actions.declare_file("{}.book.toml".format(ctx.label.name)) ctx.actions.write( @@ -53,7 +55,7 @@ def _mdbook_impl(ctx): args.add(output.path) args.add(toolchain.mdbook) args.add("build") - args.add("${{pwd}}/{}".format(book.dirname)) + args.add("${{pwd}}/{}".format(ctx.label.package)) ctx.actions.run( mnemonic = "MdBookBuild", @@ -73,6 +75,7 @@ def _mdbook_impl(ctx): MdBookInfo( srcs = depset(ctx.files.srcs), config = book, + config_dest = config_dest, plugins = depset(ctx.files.plugins), ), ] @@ -84,7 +87,7 @@ mdbook = rule( "book": attr.label( doc = ( "The optional `book.toml` file. An empty default configuration is " - "used when omitted." + + "used when omitted." ), allow_single_file = ["book.toml"], ), @@ -131,12 +134,13 @@ def _mdbook_server_impl(ctx): workspace_name = ctx.workspace_name args.add("--mdbook={}".format(_rlocationpath(toolchain.mdbook, workspace_name))) - args.add("--config={}".format(_src_dest_path(book_info.config))) + args.add("--config={}".format(book_info.config_dest)) args.add("--hostname={}".format(ctx.attr.hostname)) args.add("--port={}".format(ctx.attr.port)) def _src_map(file): - return "--src={}={}".format(_rlocationpath(file, workspace_name), _src_dest_path(file)) + dest = book_info.config_dest if file == book_info.config else _src_dest_path(file) + return "--src={}={}".format(_rlocationpath(file, workspace_name), dest) # The set of files that must be staged into the workdir for `mdbook serve` to # see a consistent source tree. `book.toml` is included so that referencing it From 95bbe23a90cd8e3d4ca8c81eeb4bcc292c4e8df1 Mon Sep 17 00:00:00 2001 From: ahmadalguydi Date: Tue, 11 Aug 2026 22:55:06 +0300 Subject: [PATCH 3/3] fix(mdbook): satisfy buildifier formatting Signed-off-by: ahmadalguydi --- extensions/mdbook/private/mdbook.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/mdbook/private/mdbook.bzl b/extensions/mdbook/private/mdbook.bzl index 6812fcef4e..8ffaeec6b4 100644 --- a/extensions/mdbook/private/mdbook.bzl +++ b/extensions/mdbook/private/mdbook.bzl @@ -86,8 +86,8 @@ mdbook = rule( attrs = { "book": attr.label( doc = ( - "The optional `book.toml` file. An empty default configuration is " - + "used when omitted." + "The optional `book.toml` file. An empty default configuration is " + + "used when omitted." ), allow_single_file = ["book.toml"], ),