Skip to content

Commit

Permalink
test: add test coverage for docs rules
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeagle committed Apr 28, 2022
1 parent d14c398 commit a729914
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 24 deletions.
1 change: 1 addition & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ module(

bazel_dep(name = "bazel_skylib", version = "1.1.1")
bazel_dep(name = "platforms", version = "0.0.4")
bazel_dep(name = "stardoc", version = "0.5.0", repo_name = "io_bazel_stardoc")

ext = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "ext")
use_repo(ext, "jq_toolchains")
Expand Down
9 changes: 2 additions & 7 deletions docs/docs.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 23 additions & 1 deletion e2e/bzlmod/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,7 +1,29 @@
load("@aspect_bazel_lib//lib:jq.bzl", "jq")

# We don't use yq, so we can confirm that Bazel never fetches it.
# You can manually verify this after testing this repo with
# `ls $(bazel info output_base)/external | grep yq`
# You'll see a aspect_bazel_lib.ext.yq_toolchains repo, but no downloaded yq binary.
load("@aspect_bazel_lib//lib:docs.bzl", "stardoc_with_diff_test")
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")

# No sources produces null (equivalent to --null-input)
bzl_library(
name = "defs",
srcs = ["defs.bzl"],
)

# Validate that stardoc dependency works.
# Note, stardoc is generally broken under bzlmod, see
# https://github.com/bazelbuild/stardoc/issues/117
# This happens to work because we don't reference any external repos
# from defs.bzl.
stardoc_with_diff_test(
name = "docs",
bzl_library_target = "//:defs",
)

# Validate that JQ works and resolves its toolchain
jq(
name = "case_no_sources",
srcs = [],
Expand Down
2 changes: 2 additions & 0 deletions e2e/bzlmod/WORKSPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Marker file that this folder is the root of a Bazel workspace.
# See MODULE.bazel for dependencies and setup.
1 change: 1 addition & 0 deletions e2e/bzlmod/defs.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# no rules
1 change: 1 addition & 0 deletions e2e/bzlmod/docs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<!-- Generated with Stardoc: http://skydoc.bazel.build -->
20 changes: 4 additions & 16 deletions lib/private/docs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,17 @@ load("//lib:write_source_files.bzl", "write_source_files")
def stardoc_with_diff_test(
name,
bzl_library_target,
aspect_template = "@io_bazel_stardoc//stardoc:templates/markdown_tables/aspect.vm",
func_template = "@io_bazel_stardoc//stardoc:templates/markdown_tables/func.vm",
header_template = "@io_bazel_stardoc//stardoc:templates/markdown_tables/header.vm",
provider_template = "@io_bazel_stardoc//stardoc:templates/markdown_tables/provider.vm",
rule_template = "@io_bazel_stardoc//stardoc:templates/markdown_tables/rule.vm",
suggested_update_target = "//docs:update"):
suggested_update_target = "//docs:update",
**kwargs):
"""Creates a stardoc target, diff test, and an executable to rule to write the generated doc to the source tree and test that it's up to date.
This is helpful for minimizing boilerplate in repos wih lots of stardoc targets.
Args:
name: the name of the stardoc file to be written to the current source directory (.md will be appended to the name). Call bazel run on this target to update the file.
bzl_library_target: the label of the `bzl_library` target to generate documentation for
aspect_template: the label or path to the Velocity aspect template to use with stardoc
func_template: the label or path to the Velocity function/macro template to use with stardoc
header_template: the label or path to the Velocity header template to use with stardoc
provider_template: the label or path to the Velocity provider template to use with stardoc
rule_template: the label or path to the Velocity rule template to use with stardoc
suggested_update_target: the target suggested to be run when a doc is out of date (should be the label for [update_docs](#update_docs))
**kwargs: additional attributes passed to the stardoc() rule, such as for overriding the templates
"""

stardoc_label = name + "-docgen"
Expand All @@ -36,12 +28,8 @@ def stardoc_with_diff_test(
out = name + "-docgen.md",
input = bzl_library_target + ".bzl",
deps = [bzl_library_target],
aspect_template = aspect_template,
func_template = func_template,
header_template = header_template,
provider_template = provider_template,
rule_template = rule_template,
tags = ["package:" + native.package_name()], # Tag the package name which will help us reconstruct the write_source_files label in update_docs
**kwargs
)

write_source_files(
Expand Down

0 comments on commit a729914

Please sign in to comment.