Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeagle committed Mar 28, 2022
1 parent b669088 commit 04fc664
Show file tree
Hide file tree
Showing 5 changed files with 159 additions and 124 deletions.
2 changes: 2 additions & 0 deletions .bazelci/presubmit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ tasks:
# TODO(laszlocsomor): remove "--test_env=LOCALAPPDATA" after
# https://github.com/bazelbuild/bazel/issues/7761 is fixed
- "--test_env=LOCALAPPDATA"
- "--test_tag_filters=-no-windows"

ubuntu1804_last_green:
name: "Last Green Bazel"
Expand Down Expand Up @@ -93,5 +94,6 @@ tasks:
# TODO(laszlocsomor): remove "--test_env=LOCALAPPDATA" after
# https://github.com/bazelbuild/bazel/issues/7761 is fixed
- "--test_env=LOCALAPPDATA"
- "--test_tag_filters=-no-windows"

buildifier: latest
160 changes: 63 additions & 97 deletions docs/BUILD
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,137 +1,103 @@
load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc")
load("//docs/private:stardoc_with_diff_test.bzl", "stardoc_with_diff_test", "update_docs")

licenses(["notice"])

# Note that due to a bug in Bazel 0.22.0, these targets cannot be built without
# the --incompatible_remap_main_repo flag.
stardoc(
name = "build_test_docs",
out = "build_test_doc_gen.md",
input = "//rules:build_test.bzl",
deps = ["//rules:build_test"],
stardoc_with_diff_test(
bzl_library_target = "//rules:analysis_test",
out_label = "//docs:analysis_test_doc.md",
)

stardoc(
name = "analysis_test_docs",
out = "analysis_test_doc_gen.md",
input = "//rules:analysis_test.bzl",
stardoc_with_diff_test(
bzl_library_target = "//rules:build_test",
out_label = "//docs:build_test_doc.md",
)

stardoc(
name = "collections_docs",
out = "collections_doc_gen.md",
input = "//lib:collections.bzl",
deps = ["//lib:collections"],
stardoc_with_diff_test(
bzl_library_target = "//lib:collections",
out_label = "//docs:collections_doc.md",
)

stardoc(
name = "dicts_docs",
out = "dicts_doc_gen.md",
input = "//lib:dicts.bzl",
deps = ["//lib:dicts"],
stardoc_with_diff_test(
bzl_library_target = "//rules:common_settings",
out_label = "//docs:common_settings_doc.md",
)

stardoc(
name = "partial_docs",
out = "partial_doc_gen.md",
input = "//lib:partial.bzl",
deps = ["//lib:partial"],
stardoc_with_diff_test(
bzl_library_target = "//rules:copy_file",
out_label = "//docs:copy_file_doc.md",
)

stardoc(
name = "paths_docs",
out = "paths_doc_gen.md",
input = "//lib:paths.bzl",
deps = ["//lib:paths"],
stardoc_with_diff_test(
bzl_library_target = "//lib:dicts",
out_label = "//docs:dicts_doc.md",
)

stardoc(
name = "selects_docs",
out = "selects_doc_gen.md",
input = "//lib:selects.bzl",
deps = ["//lib:selects"],
stardoc_with_diff_test(
bzl_library_target = "//rules:diff_test",
out_label = "//docs:diff_test_doc.md",
)

stardoc(
name = "new_sets_docs",
out = "new_sets_doc_gen.md",
input = "//lib:new_sets.bzl",
deps = ["//lib:new_sets"],
stardoc_with_diff_test(
bzl_library_target = "//rules:native_binary",
out_label = "//docs:native_binary_doc.md",
)

stardoc(
name = "shell_docs",
out = "shell_doc_gen.md",
input = "//lib:shell.bzl",
deps = ["//lib:shell"],
stardoc_with_diff_test(
bzl_library_target = "//lib:new_sets",
out_label = "//docs:new_sets_doc.md",
)

stardoc(
name = "structs_docs",
out = "structs_doc_gen.md",
input = "//lib:structs.bzl",
deps = ["//lib:structs"],
stardoc_with_diff_test(
bzl_library_target = "//lib:partial",
out_label = "//docs:partial_doc.md",
)

stardoc(
name = "types_docs",
out = "types_doc_gen.md",
input = "//lib:types.bzl",
deps = ["//lib:types"],
stardoc_with_diff_test(
bzl_library_target = "//lib:paths",
out_label = "//docs:paths_doc.md",
)

stardoc(
name = "unittest_docs",
out = "unittest_doc_gen.md",
input = "//lib:unittest.bzl",
deps = ["//lib:unittest"],
stardoc_with_diff_test(
bzl_library_target = "//rules:run_binary",
out_label = "//docs:run_binary_doc.md",
)

stardoc(
name = "versions_docs",
out = "versions_doc_gen.md",
input = "//lib:versions.bzl",
deps = ["//lib:versions"],
stardoc_with_diff_test(
bzl_library_target = "//lib:selects",
out_label = "//docs:selects_doc.md",
)

stardoc(
name = "copy_file_docs",
out = "copy_file_doc_gen.md",
input = "//rules:copy_file.bzl",
deps = ["//rules:copy_file"],
stardoc_with_diff_test(
bzl_library_target = "//lib:shell",
out_label = "//docs:shell_doc.md",
)

stardoc(
name = "write_file_docs",
out = "write_file_doc_gen.md",
input = "//rules:write_file.bzl",
deps = ["//rules:write_file"],
stardoc_with_diff_test(
bzl_library_target = "//lib:structs",
out_label = "//docs:structs_doc.md",
)

stardoc(
name = "diff_test_docs",
out = "diff_test_doc_gen.md",
input = "//rules:diff_test.bzl",
deps = ["//rules:diff_test"],
stardoc_with_diff_test(
bzl_library_target = "//lib:types",
out_label = "//docs:types_doc.md",
)

stardoc(
name = "native_binary_docs",
out = "native_binary_doc_gen.md",
input = "//rules:native_binary.bzl",
deps = ["//rules:native_binary"],
stardoc_with_diff_test(
bzl_library_target = "//lib:unittest",
out_label = "//docs:unittest_doc.md",
)

stardoc(
name = "run_binary_docs",
out = "run_binary_doc_gen.md",
input = "//rules:run_binary.bzl",
deps = ["//rules:run_binary"],
stardoc_with_diff_test(
bzl_library_target = "//lib:versions",
out_label = "//docs:versions_doc.md",
)

stardoc(
name = "common_settings_docs",
out = "common_settings_doc_gen.md",
input = "//rules:common_settings.bzl",
deps = ["//rules:common_settings"],
stardoc_with_diff_test(
bzl_library_target = "//rules:write_file",
out_label = "//docs:write_file_doc.md",
)

update_docs(
name = "update",
docs_folder = "docs",
)
1 change: 1 addition & 0 deletions docs/private/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# No targets in this package
93 changes: 93 additions & 0 deletions docs/private/stardoc_with_diff_test.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
"""Helpers for keeping stardoc documentation up-to-date.
These are currently a private API in bazel-skylib.
See discussion:
https://github.com/bazelbuild/bazel-skylib/pull/321#issuecomment-1081166216
If you need a similar feature, you can consider using a similar rule
available from a third-party:
https://github.com/aspect-build/bazel-lib/blob/main/docs/docs.md
"""

load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc")
load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")

def stardoc_with_diff_test(
bzl_library_target,
out_label):
"""Creates a stardoc target coupled with a `diff_test` for a given `bzl_library`.
This is helpful for minimizing boilerplate in repos wih lots of stardoc targets.
Args:
bzl_library_target: the label of the `bzl_library` target to generate documentation for
out_label: the label of the output MD file
"""

out_file = out_label.replace("//", "").replace(":", "/")

# Generate MD from .bzl
stardoc(
name = out_file.replace("/", "_").replace(".md", "-docgen"),
out = out_file.replace(".md", "-docgen.md"),
input = bzl_library_target + ".bzl",
deps = [bzl_library_target],
)

# Ensure that the generated MD has been updated in the local source tree
diff_test(
name = out_file.replace("/", "_").replace(".md", "-difftest"),
failure_message = "Please run \"bazel run //docs:update\"",
# Source file
file1 = out_label,
# Output from stardoc rule above
file2 = out_file.replace(".md", "-docgen.md"),
tags = ["no-windows"],
)

def update_docs(
name = "update",
docs_folder = "docs"):
"""Creates a `sh_binary` target which copies over generated doc files to the local source tree.
This is to be used in tandem with `stardoc_with_diff_test()` to produce a convenient workflow
for generating, testing, and updating all doc files as follows:
``` bash
bazel build //{docs_folder}/... && bazel test //{docs_folder}/... && bazel run //{docs_folder}:update
```
eg.
``` bash
bazel build //docs/... && bazel test //docs/... && bazel run //docs:update
```
Args:
name: the name of the `sh_binary` target
docs_folder: the name of the folder containing the doc files in the local source tree
"""
content = ["#!/usr/bin/env bash", "cd ${BUILD_WORKSPACE_DIRECTORY}"]
data = []
for r in native.existing_rules().values():
if r["kind"] == "stardoc":
doc_gen = r["out"]
if doc_gen.startswith(":"):
doc_gen = doc_gen[1:]
doc_dest = doc_gen.replace("-docgen.md", ".md")
data.append(doc_gen)
content.append("cp -fv bazel-bin/{0}/{1} {2}".format(docs_folder, doc_gen, doc_dest))

update_script = name + ".sh"
write_file(
name = "gen_" + name,
out = update_script,
content = content,
)

native.sh_binary(
name = name,
srcs = [update_script],
data = data,
)
27 changes: 0 additions & 27 deletions docs/regenerate_docs.sh

This file was deleted.

0 comments on commit 04fc664

Please sign in to comment.