aboutsummaryrefslogtreecommitdiffhomepage
path: root/scripts/docs/jekyll.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/docs/jekyll.bzl')
-rw-r--r--scripts/docs/jekyll.bzl83
1 files changed, 83 insertions, 0 deletions
diff --git a/scripts/docs/jekyll.bzl b/scripts/docs/jekyll.bzl
new file mode 100644
index 0000000000..3552f4a23b
--- /dev/null
+++ b/scripts/docs/jekyll.bzl
@@ -0,0 +1,83 @@
+# 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.
+"""Quick rule to build a Jekyll site."""
+
+def _bucket_from_workspace_name(wname):
+ """Try to assert the bucket name from the workspace name.
+
+ E.g. it will answer www.bazel.build if the workspace name is build_bazel_www.
+
+ Args:
+ wname: workspace name
+
+ Returns:
+ the guessed name of the bucket for this workspace.
+ """
+ revlist = []
+ for part in wname.split("_"):
+ revlist.insert(0, part)
+ return ".".join(revlist)
+
+def _impl(ctx):
+ """Quick and non-hermetic rule to build a Jekyll site."""
+ source = ctx.actions.declare_directory(ctx.attr.name + "-srcs")
+ output = ctx.actions.declare_directory(ctx.attr.name + "-build")
+
+ ctx.actions.run_shell(inputs = ctx.files.srcs,
+ outputs = [source],
+ command = ("mkdir -p %s\n" % (source.path)) +
+ "\n".join([
+ "tar xf %s -C %s" % (src.path, source.path) for src in ctx.files.srcs])
+ )
+ ctx.actions.run(
+ inputs = [source],
+ outputs = [output],
+ executable = "jekyll",
+ use_default_shell_env = True,
+ arguments = ["build", "-q", "-s", source.path, "-d", output.path]
+ )
+ ctx.actions.run(
+ inputs = [output],
+ outputs = [ctx.outputs.out],
+ executable = "tar",
+ arguments = ["cf", ctx.outputs.out.path, "-C", output.path, "."]
+ )
+
+ # Create a shell script to serve the site locally or push with the --push
+ # flag.
+ bucket = ctx.attr.bucket if ctx.attr.bucket else _bucket_from_workspace_name(ctx.workspace_name)
+
+ ctx.actions.expand_template(
+ template=ctx.file._jekyll_build_tpl,
+ output=ctx.outputs.executable,
+ substitutions={
+ "%{workspace_name}": ctx.workspace_name,
+ "%{source_dir}": source.short_path,
+ "%{prod_dir}": output.short_path,
+ "%{bucket}": bucket,
+ },
+ is_executable=True)
+ return [DefaultInfo(runfiles=ctx.runfiles(files=[source, output]))]
+
+jekyll_build = rule(
+ implementation = _impl,
+ executable = True,
+ attrs = {
+ "srcs": attr.label_list(allow_empty=False),
+ "bucket": attr.string(),
+ "_jekyll_build_tpl": attr.label(
+ default=":jekyll_build.sh.tpl",
+ allow_files=True,
+ single_file=True)},
+ outputs = {"out": "%{name}.tar"})