summaryrefslogtreecommitdiffhomepage
path: root/website/BUILD
diff options
context:
space:
mode:
Diffstat (limited to 'website/BUILD')
-rw-r--r--website/BUILD181
1 files changed, 181 insertions, 0 deletions
diff --git a/website/BUILD b/website/BUILD
new file mode 100644
index 000000000..d6afd5f44
--- /dev/null
+++ b/website/BUILD
@@ -0,0 +1,181 @@
+load("//tools:defs.bzl", "pkg_tar")
+load("//website:defs.bzl", "doc", "docs")
+
+package(licenses = ["notice"])
+
+# website is the full container image. Note that this actually just collects
+# other dependendcies and runs Docker locally to import and tag the image.
+sh_binary(
+ name = "website",
+ srcs = ["import.sh"],
+ data = [":files"],
+ tags = [
+ "local",
+ "manual",
+ ],
+)
+
+# files is the full file system of the generated container.
+#
+# It must collect the all tarballs (produced by the rules below), and run it
+# through the Dockerfile to generate the site. Note that this checks all links,
+# and therefore requires all static content to be present as well.
+#
+# Note that this rule violates most aspects of hermetic builds. However, this
+# works much more reliably than depending on the container_image rules from
+# bazel itself, which are convoluted and seem to have a hard time even finding
+# the toolchain.
+genrule(
+ name = "files",
+ srcs = [
+ ":config",
+ ":css",
+ ":docs",
+ ":static",
+ ":syscallmd",
+ "//website/blog:posts",
+ "//website/cmd/server",
+ ],
+ outs = ["files.tgz"],
+ cmd = "set -x; " +
+ "T=$$(mktemp -d); " +
+ "mkdir -p $$T/input && " +
+ "mkdir -p $$T/output/_site && " +
+ "tar -xf $(location :config) -C $$T/input && " +
+ "tar -xf $(location :css) -C $$T/input && " +
+ "tar -xf $(location :docs) -C $$T/input && " +
+ "tar -xf $(location :syscallmd) -C $$T/input && " +
+ "tar -xf $(location //website/blog:posts) -C $$T/input && " +
+ "find $$T/input -type f -exec chmod u+rw {} \\; && " +
+ "docker run -i --user $$(id -u):$$(id -g) " +
+ "-v $$(readlink -m $$T/input):/input " +
+ "-v $$(readlink -m $$T/output/_site):/output " +
+ "gvisor.dev/images/jekyll && " +
+ "tar -xf $(location :static) -C $$T/output/_site && " +
+ "docker run -i --user $$(id -u):$$(id -g) " +
+ "-v $$(readlink -m $$T/output/_site):/output " +
+ "gvisor.dev/images/jekyll " +
+ "/usr/gem/bin/htmlproofer " +
+ "--disable-external " +
+ "--check-html " +
+ "/output && " +
+ "cp $(location //website/cmd/server) $$T/output/server && " +
+ "tar -zcf $@ -C $$T/output . && " +
+ "rm -rf $$T",
+ tags = [
+ "local",
+ "manual",
+ "nosandbox",
+ ],
+)
+
+# static are the purely static parts of the site. These are effectively copied
+# in after jekyll generates all the dynamic content.
+pkg_tar(
+ name = "static",
+ srcs = [
+ "archive.key",
+ ] + glob([
+ "performance/**",
+ ]),
+ strip_prefix = "./",
+)
+
+# main.scss requires front-matter to be processed.
+genrule(
+ name = "css",
+ srcs = glob([
+ "css/**",
+ ]),
+ outs = [
+ "css.tar",
+ ],
+ cmd = "T=$$(mktemp -d); " +
+ "mkdir -p $$T/css && " +
+ "for file in $(SRCS); do " +
+ "echo -en '---\\n---\\n' > $$T/css/$$(basename $$file) && " +
+ "cat $$file >> $$T/css/$$(basename $$file); " +
+ "done && " +
+ "tar -C $$T -czf $@ . && " +
+ "rm -rf $$T",
+)
+
+# config is "mostly" static content. These are parts of the site that are
+# present when jekyll runs, but are not dynamically generated.
+pkg_tar(
+ name = "config",
+ srcs = [
+ ":css",
+ "_config.yml",
+ "//website/blog:index.html",
+ ] + glob([
+ "assets/**",
+ "_includes/**",
+ "_layouts/**",
+ "_plugins/**",
+ "_sass/**",
+ ]),
+ strip_prefix = "./",
+)
+
+# index is the index file.
+doc(
+ name = "index",
+ src = "index.md",
+ layout = "base",
+ permalink = "/",
+)
+
+# docs is the dynamic content of the site.
+docs(
+ name = "docs",
+ deps = [
+ ":index",
+ "//:code_of_conduct",
+ "//:contributing",
+ "//:governance",
+ "//:security",
+ "//g3doc:community",
+ "//g3doc:index",
+ "//g3doc:roadmap",
+ "//g3doc/architecture_guide:index",
+ "//g3doc/architecture_guide:performance",
+ "//g3doc/architecture_guide:platforms",
+ "//g3doc/architecture_guide:resources",
+ "//g3doc/architecture_guide:security",
+ "//g3doc/user_guide:FAQ",
+ "//g3doc/user_guide:checkpoint_restore",
+ "//g3doc/user_guide:compatibility",
+ "//g3doc/user_guide:debugging",
+ "//g3doc/user_guide:filesystem",
+ "//g3doc/user_guide:install",
+ "//g3doc/user_guide:networking",
+ "//g3doc/user_guide:platforms",
+ "//g3doc/user_guide/quick_start:docker",
+ "//g3doc/user_guide/quick_start:kubernetes",
+ "//g3doc/user_guide/quick_start:oci",
+ "//g3doc/user_guide/tutorials:cni",
+ "//g3doc/user_guide/tutorials:docker",
+ "//g3doc/user_guide/tutorials:kubernetes",
+ ],
+)
+
+# Generate JSON for system call tables
+genrule(
+ name = "syscalljson",
+ outs = ["syscalls.json"],
+ cmd = "$(location //runsc) -- help syscalls -format json -filename $@",
+ tools = ["//runsc"],
+)
+
+# Generate markdown from the json dump.
+genrule(
+ name = "syscallmd",
+ srcs = [":syscalljson"],
+ outs = ["syscallsmd"],
+ cmd = "T=$$(mktemp -d) && " +
+ "$(location //website/cmd/syscalldocs) -in $< -out $$T && " +
+ "tar -C $$T -czf $@ . && " +
+ "rm -rf $$T",
+ tools = ["//website/cmd/syscalldocs"],
+)