Skip to content

Commit

Permalink
Add generated docs to Jekyll tree build target. Add script for bringi…
Browse files Browse the repository at this point in the history
…ng up

local instance of bazel.io site.

* Add a new genrule rule that runs the new jekyll-tree.sh to do the following:
  * Combine the generated docs for the Build Encyclopedia and Skylark Library
    with the static site docs
  * Combine the README.md files for the Docker and Packaging rules with the
    Jekyll tree
  * Process the generated docs, replaces instances of "blaze" with "bazel",
    etc.
* Add scripts/serve-docs.sh script that can be used to bring up a local
  instance of the bazel.io website.

As of this patch, it is possible to construct the full Bazel.io site tree from
the master branch.

--
MOS_MIGRATED_REVID=121813688
  • Loading branch information
davidzchen authored and aehlig committed May 9, 2016
1 parent 7222943 commit 3f69751
Show file tree
Hide file tree
Showing 6 changed files with 187 additions and 1 deletion.
36 changes: 36 additions & 0 deletions scripts/serve-docs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash
# Copyright 2016 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.

set -eu

readonly PORT=${1-12345}

readonly WORKING_DIR=$(mktemp -d)
trap "rm -rf $WORKING_DIR" EXIT

function check {
which $1 > /dev/null || (echo "$1 not installed. Please install $1."; exit 1)
}

function main {
check jekyll

bazel build //site:jekyll-tree.tar
tar -xf bazel-genfiles/site/jekyll-tree.tar -C $WORKING_DIR

cd $WORKING_DIR
jekyll serve --port $PORT
}
main
30 changes: 29 additions & 1 deletion site/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ pkg_tar(
)

pkg_tar(
name = "jekyll-tree",
name = "jekyll-base",
deps = [
":bootstrap-css",
":bootstrap-images",
Expand All @@ -74,3 +74,31 @@ pkg_tar(
":jekyll-files",
],
)

pkg_tar(
name = "skylark-rule-docs",
files = [
"//tools/build_defs/docker:README.md",
"//tools/build_defs/pkg:README.md",
],
strip_prefix = "/tools/build_defs",
)

genrule(
name = "jekyll-tree",
srcs = [
":jekyll-base",
":skylark-rule-docs",
"//src/main/java/com/google/devtools/build/lib:gen_buildencyclopedia",
"//src/main/java/com/google/devtools/build/lib:gen_skylarklibrary",
],
outs = ["jekyll-tree.tar"],
cmd = ("$(location jekyll-tree.sh) $@ " +
"$(location :jekyll-base) " +
"$(location :skylark-rule-docs) " +
"$(location //src/main/java/com/google/devtools/build/lib:gen_buildencyclopedia) " +
"$(location //src/main/java/com/google/devtools/build/lib:gen_skylarklibrary)"),
tools = [
"jekyll-tree.sh",
],
)
110 changes: 110 additions & 0 deletions site/jekyll-tree.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/bin/bash
# Copyright 2016 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.

set -eu

readonly OUTPUT=${PWD}/$1
shift
readonly JEKYLL_BASE=${PWD}/$1
shift
readonly SKYLARK_RULE_DOCS=${PWD}/$1
shift
readonly BE_ZIP=${PWD}/$1
shift
readonly SL_ZIP=${PWD}/$1

# Create temporary directory that is removed when this script exits.
readonly TMP=$(mktemp -d)
readonly OUT_DIR="$TMP/out"
trap "rm -rf ${TMP}" EXIT

function setup {
mkdir -p "$OUT_DIR"
cd "$OUT_DIR"
tar -xf "${JEKYLL_BASE}"
}

# Unpack the Build Encyclopedia into docs/be
function unpack_build_encyclopedia {
local be_dir="$OUT_DIR/docs/be"
mkdir -p "$be_dir"
unzip -qq "$BE_ZIP" -d "$be_dir"
mv "$be_dir/be-nav.html" "$OUT_DIR/_includes"
}

# Unpack the Skylark Library into docs/skylark/lib
function unpack_skylark_library {
local sl_dir="$OUT_DIR/docs/skylark/lib"
mkdir -p "$sl_dir"
unzip -qq "$SL_ZIP" -d "$sl_dir"
mv "$sl_dir/skylark-nav.html" "$OUT_DIR/_includes"
}

function copy_skylark_rule_doc {
local rule_family=$1
local rule_family_name=$2
local be_dir="$OUT_DIR/docs/be"
local tempf=$(mktemp -t bazel-skylark-XXXXXX)

( cat <<EOF
---
layout: documentation
title: ${rule_family_name} Rules
---
EOF
cat "$TMP/skylark/$rule_family/README.md"; ) > "$be_dir/${rule_family}.md"
}

function unpack_skylark_rule_docs {
local tmp_dir=$TMP/skylark
mkdir -p $tmp_dir
cd "$tmp_dir"
tar -xf "${SKYLARK_RULE_DOCS}"
copy_skylark_rule_doc docker "Docker"
copy_skylark_rule_doc pkg "Packaging"
}

function process_doc {
local f=$1
local tempf=$(mktemp -t bazel-doc-XXXXXX)

chmod +w $f
cat "$f" | sed 's,\.md,.html,g;s,Blaze,Bazel,g;s,blaze,bazel,g' > "$tempf"
cat "$tempf" > "$f"
}

function process_docs {
for f in $(find "$OUT_DIR/docs" -name "*.html"); do
process_doc $f
done
for f in $(find "$OUT_DIR/docs" -name "*.md"); do
process_doc $f
done
}

function package_output {
cd "$OUT_DIR"
tar -hcf $OUTPUT $(find . -type f | sort)
}

function main {
setup
unpack_build_encyclopedia
unpack_skylark_library
unpack_skylark_rule_docs
process_docs
package_output
}
main
2 changes: 2 additions & 0 deletions src/main/java/com/google/devtools/build/lib/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -975,6 +975,7 @@ genrule(
"//src/main/java/com/google/devtools/build/docgen:docgen_bin",
"//src/main/java/com/google/devtools/build/docgen:docgen_javalib",
],
visibility = ["//site:__pkg__"],
)

# The skylark repository classes are passed as parameter of the Skylark documentation generator.
Expand All @@ -994,6 +995,7 @@ genrule(
" ".join(SKYLARK_REPOSITORY_CLASSES) +
" && zip -qj $@ $(@D)/skylark-lib/*",
tools = ["//src/main/java/com/google/devtools/build/docgen:skydoc_bin"],
visibility = ["//site:__pkg__"],
)

# Bootstrapping SingleJar using Skylark rules
Expand Down
5 changes: 5 additions & 0 deletions tools/build_defs/docker/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ filegroup(
visibility = ["//tools:__pkg__"],
)

exports_files(
["README.md"],
visibility = ["//site:__pkg__"],
)

TEST_TARGETS = [
"base_with_entrypoint",
"base_with_volume",
Expand Down
5 changes: 5 additions & 0 deletions tools/build_defs/pkg/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ filegroup(
visibility = ["//tools:__pkg__"],
)

exports_files(
["README.md"],
visibility = ["//site:__pkg__"],
)

# Used by pkg_deb
py_library(
name = "archive",
Expand Down

0 comments on commit 3f69751

Please sign in to comment.