blob: e08b751158d5363fd3c33479bab5361cb3659f6c [file] [log] [blame]
# Copyright 2017 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc")
package(default_visibility = ["//visibility:public"])
licenses(["notice"]) # Apache 2.0
_DOCS = {
"packaging": "//docs:packaging-docs",
"pip": "//docs:pip-docs",
"python": "//docs:core-docs",
}
# We define these bzl_library targets here rather than in the //python package
# because they're only used for doc generation. This way, we avoid requiring
# our users to depend on Skylib.
# Requires Bazel 0.29 onward for public visibility of these .bzl files.
bzl_library(
name = "bazel_python_tools",
srcs = [
"@bazel_tools//tools/python:private/defs.bzl",
"@bazel_tools//tools/python:srcs_version.bzl",
"@bazel_tools//tools/python:toolchain.bzl",
"@bazel_tools//tools/python:utils.bzl",
],
)
bzl_library(
name = "bazel_repo_tools",
srcs = [
"@bazel_tools//tools:bzl_srcs",
],
)
bzl_library(
name = "defs",
srcs = [
"//python:defs.bzl",
"//python/private:reexports.bzl",
],
deps = [":bazel_python_tools"],
)
bzl_library(
name = "pip_install_bzl",
srcs = [
"//python/pip_install:bzl",
],
deps = [
":defs",
],
)
bzl_library(
name = "packaging_bzl",
srcs = [
"//python:packaging.bzl",
"//python/private:stamp.bzl",
],
)
# TODO: Stardoc does not guarantee consistent outputs accross platforms (Unix/Windows).
# As a result we do not build or test docs on Windows.
_NOT_WINDOWS = select({
"@platforms//os:linux": [],
"@platforms//os:macos": [],
"//conditions:default": ["@platforms//:incompatible"],
})
stardoc(
name = "core-docs",
out = "python.md_",
input = "//python:defs.bzl",
target_compatible_with = _NOT_WINDOWS,
deps = [":defs"],
)
stardoc(
name = "pip-docs",
out = "pip.md_",
input = "//python:pip.bzl",
target_compatible_with = _NOT_WINDOWS,
deps = [
":bazel_repo_tools",
":pip_install_bzl",
"//third_party/github.com/bazelbuild/bazel-skylib/lib:versions",
],
)
stardoc(
name = "packaging-docs",
out = "packaging.md_",
input = "//python:packaging.bzl",
target_compatible_with = _NOT_WINDOWS,
deps = [":packaging_bzl"],
)
[
diff_test(
name = "check_" + k,
failure_message = "Please run: bazel run //docs:update",
file1 = k + ".md",
file2 = k + ".md_",
target_compatible_with = _NOT_WINDOWS,
)
for k in _DOCS.keys()
]
write_file(
name = "gen_update",
out = "update.sh",
content = [
"#!/usr/bin/env bash",
"cd $BUILD_WORKSPACE_DIRECTORY",
] + [
"cp -fv bazel-bin/docs/{0}.md_ docs/{0}.md".format(k)
for k in _DOCS.keys()
],
target_compatible_with = _NOT_WINDOWS,
)
sh_binary(
name = "update",
srcs = ["update.sh"],
data = _DOCS.values(),
target_compatible_with = _NOT_WINDOWS,
)