load("@bazel_skylib//rules:build_test.bzl", "build_test") load("@bazel_skylib//rules:diff_test.bzl", "diff_test") load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") genrule( name = "flatten_header_vm", srcs = [ "gen_header.sh", "docs.bzl", ], outs = ["flatten_header.vm"], cmd = "$(location gen_header.sh) $(location docs.bzl) $@", output_to_bindir = True, ) # Note that the stardoc `out` files are prefixed with `stardoc_` so the # `diff_test` targets which ensure documentation is up to date can access the # committed markdown files instead ouf the `out` targets from the stardoc rules stardoc( name = "flatten_docs", out = "stardoc_flatten.md", header_template = ":flatten_header_vm", input = "docs.bzl", deps = ["@rules_foreign_cc//:bzl_srcs"], ) stardoc( name = "cmake_docs", out = "stardoc_cmake.md", header_template = "common_header.vm", input = "@rules_foreign_cc//foreign_cc:cmake.bzl", deps = ["@rules_foreign_cc//:bzl_srcs"], ) stardoc( name = "make_docs", out = "stardoc_make.md", header_template = "common_header.vm", input = "@rules_foreign_cc//foreign_cc:make.bzl", deps = ["@rules_foreign_cc//:bzl_srcs"], ) stardoc( name = "ninja_docs", out = "stardoc_ninja.md", header_template = "common_header.vm", input = "@rules_foreign_cc//foreign_cc:ninja.bzl", deps = ["@rules_foreign_cc//:bzl_srcs"], ) stardoc( name = "configure_make_docs", out = "stardoc_configure_make.md", header_template = "common_header.vm", input = "@rules_foreign_cc//foreign_cc:configure.bzl", deps = ["@rules_foreign_cc//:bzl_srcs"], ) stardoc( name = "providers_docs", out = "stardoc_providers.md", header_template = "common_header.vm", input = "@rules_foreign_cc//foreign_cc:providers.bzl", deps = ["@rules_foreign_cc//:bzl_srcs"], ) DOCS_TARGETS = [ ":flatten_docs", ":cmake_docs", ":ninja_docs", ":make_docs", ":configure_make_docs", ":providers_docs", ] build_test( name = "docs_build_test", targets = DOCS_TARGETS, visibility = ["//visibility:public"], ) # Run this target to upate/generate docs genrule( name = "generate_docs_src", srcs = DOCS_TARGETS, outs = ["generate_docs.sh"], cmd = """cat << EOF > $@ #!/bin/bash set -euo pipefail cat \\$${BUILD_WORKSPACE_DIRECTORY}/$(location //:flatten_docs) > \\$${BUILD_WORKSPACE_DIRECTORY}/flatten.md cat \\$${BUILD_WORKSPACE_DIRECTORY}/$(location //:cmake_docs) > \\$${BUILD_WORKSPACE_DIRECTORY}/cmake.md cat \\$${BUILD_WORKSPACE_DIRECTORY}/$(location //:ninja_docs) > \\$${BUILD_WORKSPACE_DIRECTORY}/ninja.md cat \\$${BUILD_WORKSPACE_DIRECTORY}/$(location //:make_docs) > \\$${BUILD_WORKSPACE_DIRECTORY}/make.md cat \\$${BUILD_WORKSPACE_DIRECTORY}/$(location //:configure_make_docs) > \\$${BUILD_WORKSPACE_DIRECTORY}/configure_make.md cat \\$${BUILD_WORKSPACE_DIRECTORY}/$(location //:providers_docs) > \\$${BUILD_WORKSPACE_DIRECTORY}/providers.md EOF """, ) # When this test fails, run # (cd docs; bazel run :generate_docs) [ diff_test( name = "{}_test".format(doc), failure_message = "Please run 'cd docs && bazel run :generate_docs' to update documentation.", file1 = ":{}_docs".format(doc), file2 = "{}.md".format(doc), ) for doc in [ "flatten", "cmake", "ninja", "make", "configure_make", "providers", ] ] sh_binary( name = "generate_docs", srcs = [":generate_docs_src"], data = DOCS_TARGETS, )