github: Minimize dependencies for document generation
Instead of install full dependencies with `install-deps` in GitHub
action, minimize dependencies because we use GitHub only for document
generation.
- Passed `CARGO_DOC` environment when running cargo-doc command so we
can skip unnecessary build flow when we just want to generate API docs.
- Added a new script `install-docs-deps` to install only doc-related
dependencies.
BUG=none
TEST=test on GitHub Action at my personal repository
Change-Id: Ibe988ab43215e285d946812bdd6c1536ae87b50e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3578144
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Anton Romanov <romanton@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml
index 02d9dec..f610126 100644
--- a/.github/workflows/gh-pages.yml
+++ b/.github/workflows/gh-pages.yml
@@ -20,7 +20,8 @@
mdbook-version: 'latest'
- name: Install Dependencies
run: |
- ./tools/install-deps
+ sudo apt update
+ ./tools/install-docs-deps
- name: Run mdbook
run: |
mkdir -p docs/target/
diff --git a/base/build.rs b/base/build.rs
index 4517f2b..ffc6ef1 100644
--- a/base/build.rs
+++ b/base/build.rs
@@ -3,6 +3,11 @@
// found in the LICENSE file.
fn main() {
+ // Skip installing dependencies when generating documents.
+ if std::env::var("CARGO_DOC").is_ok() {
+ return;
+ }
+
cc::Build::new()
.file("src/windows/stdio_fileno.c")
.compile("stdio_fileno");
diff --git a/gpu_display/build.rs b/gpu_display/build.rs
index 717c87a..41a44cb 100644
--- a/gpu_display/build.rs
+++ b/gpu_display/build.rs
@@ -71,6 +71,11 @@
}
fn main() {
+ // Skip installing dependencies when generating documents.
+ if std::env::var("CARGO_DOC").is_ok() {
+ return;
+ }
+
println!("cargo:rerun-if-env-changed=WAYLAND_PROTOCOLS_PATH");
let out_dir = env::var("OUT_DIR").unwrap();
diff --git a/media/libvda/build.rs b/media/libvda/build.rs
index 47fa015..95e71dc 100644
--- a/media/libvda/build.rs
+++ b/media/libvda/build.rs
@@ -3,6 +3,11 @@
// found in the LICENSE file.
fn main() {
+ // Skip installing dependencies when generating documents.
+ if std::env::var("CARGO_DOC").is_ok() {
+ return;
+ }
+
#[allow(clippy::single_match)]
match pkg_config::probe_library("libvda") {
Ok(_) => (),
diff --git a/power_monitor/build.rs b/power_monitor/build.rs
index 174389d..77d6331 100644
--- a/power_monitor/build.rs
+++ b/power_monitor/build.rs
@@ -20,6 +20,11 @@
.collect()
}
+ // Skip building dependencies when generating documents.
+ if std::env::var("CARGO_DOC").is_ok() {
+ return Ok(());
+ }
+
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
let proto_root = match env::var("SYSROOT") {
Ok(dir) => PathBuf::from(dir).join("usr/include/chromeos"),
diff --git a/rutabaga_gfx/build.rs b/rutabaga_gfx/build.rs
index da8e5ff..713ec02 100644
--- a/rutabaga_gfx/build.rs
+++ b/rutabaga_gfx/build.rs
@@ -165,6 +165,11 @@
}
fn main() -> Result<()> {
+ // Skip installing dependencies when generating documents.
+ if std::env::var("CARGO_DOC").is_ok() {
+ return Ok(());
+ }
+
#[cfg(feature = "virgl_renderer")]
virglrenderer()?;
diff --git a/tools/cargo-doc b/tools/cargo-doc
index 49df6e5..b48740f 100755
--- a/tools/cargo-doc
+++ b/tools/cargo-doc
@@ -38,6 +38,8 @@
fi
done
-cargo doc \
+# Set an environment variable 'CARGO_DOC' here so that each build.rs can skip
+# building unnecessary dependencies to generate documentations.
+CARGO_DOC="true" cargo doc \
--manifest-path="${MANIFEST_PATH}" \
--features="${features}" "$@"
diff --git a/tools/install-deps b/tools/install-deps
index 23aa211..dc11abf 100755
--- a/tools/install-deps
+++ b/tools/install-deps
@@ -15,7 +15,6 @@
git \
jq \
libasound2-dev \
- libcap-dev \
libclang-dev \
libdbus-1-dev \
libdrm-dev \
@@ -28,7 +27,6 @@
ninja-build \
openssh-client \
pkg-config \
- protobuf-compiler \
python3 \
python3-pip \
python3-setuptools \
@@ -56,7 +54,5 @@
# The bindgen tool is required to build a crosvm dependency.
cargo install bindgen
-# The mdbook and mdbook-mermaid tools are used to build the crosvm book.
-cargo install mdbook --no-default-features --version "^0.4.10"
-cargo install mdbook-mermaid --version "^0.8.3"
-cargo install mdbook-linkcheck --version "^0.7.6"
+# Install dependencies used to generate mdbook documentation.
+$(dirname "$0")/install-docs-deps
diff --git a/tools/install-docs-deps b/tools/install-docs-deps
new file mode 100755
index 0000000..1a8e593
--- /dev/null
+++ b/tools/install-docs-deps
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+# Copyright 2022 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Install dependencies to generate mdbook documentation.
+# Before running this script, `apt update` needs to be executed.
+
+set -ex
+
+# Install packages to run build.rs in some crate:
+# * libcap-dev: Used by minijail-sys/build.rs
+# * protobuf-compiler: Generates Rust files in protos
+sudo apt install --yes --no-install-recommends \
+ libcap-dev \
+ protobuf-compiler
+
+# The mdbook and mdbook-mermaid tools are used to build the crosvm book.
+cargo install mdbook --no-default-features --version "^0.4.10"
+cargo install mdbook-mermaid --version "^0.8.3"
+cargo install mdbook-linkcheck --version "^0.7.6"
diff --git a/tpm2-sys/build.rs b/tpm2-sys/build.rs
index a138fb1..d8c3fc7 100644
--- a/tpm2-sys/build.rs
+++ b/tpm2-sys/build.rs
@@ -57,6 +57,11 @@
}
fn main() -> Result<()> {
+ // Skip installing dependencies when generating documents.
+ if std::env::var("CARGO_DOC").is_ok() {
+ return Ok(());
+ }
+
// Use tpm2 package from the standard system location if available.
if pkg_config::Config::new()
.statik(true)