1*f578df4fSJingwen Chen# Copyright 2022 The Bazel Authors. All rights reserved. 2*f578df4fSJingwen Chen# 3*f578df4fSJingwen Chen# Licensed under the Apache License, Version 2.0 (the "License"); 4*f578df4fSJingwen Chen# you may not use this file except in compliance with the License. 5*f578df4fSJingwen Chen# You may obtain a copy of the License at 6*f578df4fSJingwen Chen# 7*f578df4fSJingwen Chen# http://www.apache.org/licenses/LICENSE-2.0 8*f578df4fSJingwen Chen# 9*f578df4fSJingwen Chen# Unless required by applicable law or agreed to in writing, software 10*f578df4fSJingwen Chen# distributed under the License is distributed on an "AS IS" BASIS, 11*f578df4fSJingwen Chen# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*f578df4fSJingwen Chen# See the License for the specific language governing permissions and 13*f578df4fSJingwen Chen# limitations under the License. 14*f578df4fSJingwen Chen"""Generate the reference documentation. 15*f578df4fSJingwen Chen 16*f578df4fSJingwen ChenHow to: 17*f578df4fSJingwen Chen bazel build //doc_build:reference 18*f578df4fSJingwen Chen cp bazel-bin/doc_build/reference.md docs/latest.md 19*f578df4fSJingwen Chen git commit -m 'update docs' docs/latest.md 20*f578df4fSJingwen Chen""" 21*f578df4fSJingwen Chen 22*f578df4fSJingwen Chenload("@bazel_skylib//:bzl_library.bzl", "bzl_library") 23*f578df4fSJingwen Chenload("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc") 24*f578df4fSJingwen Chenload("@rules_python//python:defs.bzl", "py_library") 25*f578df4fSJingwen Chenload("//:version.bzl", "version") 26*f578df4fSJingwen Chen 27*f578df4fSJingwen Chenpackage(default_package_metadata = ["//:license", "//:package_info"]) 28*f578df4fSJingwen Chen 29*f578df4fSJingwen Chenfilegroup( 30*f578df4fSJingwen Chen name = "standard_package", 31*f578df4fSJingwen Chen srcs = [ 32*f578df4fSJingwen Chen "BUILD", 33*f578df4fSJingwen Chen ] + glob([ 34*f578df4fSJingwen Chen "*.bzl", 35*f578df4fSJingwen Chen "*.py", 36*f578df4fSJingwen Chen ]), 37*f578df4fSJingwen Chen visibility = ["//distro:__pkg__"], 38*f578df4fSJingwen Chen) 39*f578df4fSJingwen Chen 40*f578df4fSJingwen Chenexports_files( 41*f578df4fSJingwen Chen glob([ 42*f578df4fSJingwen Chen "*.bzl", 43*f578df4fSJingwen Chen ]), 44*f578df4fSJingwen Chen visibility = [ 45*f578df4fSJingwen Chen "//distro:__pkg__", 46*f578df4fSJingwen Chen ], 47*f578df4fSJingwen Chen) 48*f578df4fSJingwen Chen 49*f578df4fSJingwen Chen# pairs of rule name and the source file to get it from 50*f578df4fSJingwen Chen# Must put macro wrapped rules after their wrapper 51*f578df4fSJingwen Chen# buildifier: leave-alone, do not sort 52*f578df4fSJingwen ChenORDER = [ 53*f578df4fSJingwen Chen ("license", "//rules:license.bzl"), 54*f578df4fSJingwen Chen ("_license", "//rules:license.bzl"), 55*f578df4fSJingwen Chen ("license_kind", "//rules:license_kind.bzl"), 56*f578df4fSJingwen Chen ("_license_kind", "//rules:license_kind.bzl"), 57*f578df4fSJingwen Chen ("package_info", "//rules:package_info.bzl"), 58*f578df4fSJingwen Chen ("_package_info", "//rules:package_info.bzl"), 59*f578df4fSJingwen Chen ("LicenseInfo", "//rules:providers.bzl"), 60*f578df4fSJingwen Chen ("LicenseKindInfo", "//rules:providers.bzl"), 61*f578df4fSJingwen Chen ("PackageInfo", "//rules:providers.bzl"), 62*f578df4fSJingwen Chen] 63*f578df4fSJingwen Chen 64*f578df4fSJingwen Chengenrule( 65*f578df4fSJingwen Chen name = "reference", 66*f578df4fSJingwen Chen srcs = ["%s.md" % rule for rule, _ in ORDER], 67*f578df4fSJingwen Chen outs = ["reference.md"], 68*f578df4fSJingwen Chen cmd = "$(location :merge) $(SRCS) >$@", 69*f578df4fSJingwen Chen tools = [":merge"], 70*f578df4fSJingwen Chen) 71*f578df4fSJingwen Chen 72*f578df4fSJingwen Chen[ 73*f578df4fSJingwen Chen stardoc( 74*f578df4fSJingwen Chen name = "%s_gen" % rule, 75*f578df4fSJingwen Chen out = "%s.md" % rule, 76*f578df4fSJingwen Chen input = src, 77*f578df4fSJingwen Chen symbol_names = [ 78*f578df4fSJingwen Chen rule, 79*f578df4fSJingwen Chen ], 80*f578df4fSJingwen Chen deps = [":lib_of_everything"], 81*f578df4fSJingwen Chen ) 82*f578df4fSJingwen Chen for rule, src in ORDER 83*f578df4fSJingwen Chen if src 84*f578df4fSJingwen Chen] 85*f578df4fSJingwen Chen 86*f578df4fSJingwen Chen# gather all rules that should be documented 87*f578df4fSJingwen Chenbzl_library( 88*f578df4fSJingwen Chen name = "lib_of_everything", 89*f578df4fSJingwen Chen srcs = [ 90*f578df4fSJingwen Chen "//:version.bzl", 91*f578df4fSJingwen Chen "//rules:standard_package", 92*f578df4fSJingwen Chen "//rules/private:standard_package", 93*f578df4fSJingwen Chen # "@bazel_skylib//lib:paths", 94*f578df4fSJingwen Chen ], 95*f578df4fSJingwen Chen visibility = ["//visibility:public"], 96*f578df4fSJingwen Chen) 97*f578df4fSJingwen Chen 98*f578df4fSJingwen Chen# This is experimental. We are waiting for stardoc to get the features which 99*f578df4fSJingwen Chen# are done in merge. 100*f578df4fSJingwen Chenpy_binary( 101*f578df4fSJingwen Chen name = "merge", 102*f578df4fSJingwen Chen srcs = ["merge.py"], 103*f578df4fSJingwen Chen python_version = "PY3", 104*f578df4fSJingwen Chen srcs_version = "PY3", 105*f578df4fSJingwen Chen visibility = ["//visibility:private"], 106*f578df4fSJingwen Chen) 107