xref: /aosp_15_r20/external/crosvm/infra/recipes/build_docs.py (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2022 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker
5*bb4ee6a4SAndroid Build Coastguard Workerfrom recipe_engine.post_process import Filter
6*bb4ee6a4SAndroid Build Coastguard Worker
7*bb4ee6a4SAndroid Build Coastguard WorkerDEPS = [
8*bb4ee6a4SAndroid Build Coastguard Worker    "crosvm",
9*bb4ee6a4SAndroid Build Coastguard Worker    "recipe_engine/file",
10*bb4ee6a4SAndroid Build Coastguard Worker    "recipe_engine/buildbucket",
11*bb4ee6a4SAndroid Build Coastguard Worker    "recipe_engine/context",
12*bb4ee6a4SAndroid Build Coastguard Worker    "recipe_engine/step",
13*bb4ee6a4SAndroid Build Coastguard Worker    "depot_tools/gsutil",
14*bb4ee6a4SAndroid Build Coastguard Worker]
15*bb4ee6a4SAndroid Build Coastguard Worker
16*bb4ee6a4SAndroid Build Coastguard WorkerBOOK_URL = "gs://crosvm-dot-dev/book"
17*bb4ee6a4SAndroid Build Coastguard WorkerDOCS_URL = "gs://crosvm-dot-dev/doc"
18*bb4ee6a4SAndroid Build Coastguard Worker
19*bb4ee6a4SAndroid Build Coastguard Worker
20*bb4ee6a4SAndroid Build Coastguard Workerdef RunSteps(api):
21*bb4ee6a4SAndroid Build Coastguard Worker    """
22*bb4ee6a4SAndroid Build Coastguard Worker    Builds crosvm mdbook and api docs, then uploads them to GCS.
23*bb4ee6a4SAndroid Build Coastguard Worker
24*bb4ee6a4SAndroid Build Coastguard Worker    This recipe requires ambient luci authentication. To test locally run:
25*bb4ee6a4SAndroid Build Coastguard Worker       $ luci-auth context ./infra/recipes.py run build_docs
26*bb4ee6a4SAndroid Build Coastguard Worker    """
27*bb4ee6a4SAndroid Build Coastguard Worker    with api.crosvm.container_build_context():
28*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
29*bb4ee6a4SAndroid Build Coastguard Worker            "Build mdbook", ["mdbook", "build", "docs/book/", "--dest-dir", "../target"]
30*bb4ee6a4SAndroid Build Coastguard Worker        )
31*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
32*bb4ee6a4SAndroid Build Coastguard Worker            "Run cargo docs",
33*bb4ee6a4SAndroid Build Coastguard Worker            ["./tools/cargo-doc", "--target-dir", "docs/target"],
34*bb4ee6a4SAndroid Build Coastguard Worker        )
35*bb4ee6a4SAndroid Build Coastguard Worker
36*bb4ee6a4SAndroid Build Coastguard Worker        # Container generated files are root-owned, we need to make sure they will be readable by
37*bb4ee6a4SAndroid Build Coastguard Worker        # gsutil (which has to run outside the container to run with proper authentication).
38*bb4ee6a4SAndroid Build Coastguard Worker        api.crosvm.step_in_container(
39*bb4ee6a4SAndroid Build Coastguard Worker            "Make docs readable by gsutil",
40*bb4ee6a4SAndroid Build Coastguard Worker            ["chmod", "-R", "o+r", "docs/target"],
41*bb4ee6a4SAndroid Build Coastguard Worker        )
42*bb4ee6a4SAndroid Build Coastguard Worker
43*bb4ee6a4SAndroid Build Coastguard Worker        api.gsutil(
44*bb4ee6a4SAndroid Build Coastguard Worker            ["rsync", "-r", "-d", "./docs/target/html", BOOK_URL],
45*bb4ee6a4SAndroid Build Coastguard Worker            name="Upload book",
46*bb4ee6a4SAndroid Build Coastguard Worker            multithreaded=True,
47*bb4ee6a4SAndroid Build Coastguard Worker        )
48*bb4ee6a4SAndroid Build Coastguard Worker        # TODO(b/239255064): Generate the redirect HTML so we can use cleanly mirror here too.
49*bb4ee6a4SAndroid Build Coastguard Worker        api.gsutil(
50*bb4ee6a4SAndroid Build Coastguard Worker            ["rsync", "-r", "./docs/target/doc", DOCS_URL],
51*bb4ee6a4SAndroid Build Coastguard Worker            name="Upload docs",
52*bb4ee6a4SAndroid Build Coastguard Worker            multithreaded=True,
53*bb4ee6a4SAndroid Build Coastguard Worker        )
54*bb4ee6a4SAndroid Build Coastguard Worker
55*bb4ee6a4SAndroid Build Coastguard Worker
56*bb4ee6a4SAndroid Build Coastguard Workerdef GenTests(api):
57*bb4ee6a4SAndroid Build Coastguard Worker    filter_steps = Filter(
58*bb4ee6a4SAndroid Build Coastguard Worker        "Build mdbook", "Run cargo docs", "gsutil Upload book", "gsutil Upload docs"
59*bb4ee6a4SAndroid Build Coastguard Worker    )
60*bb4ee6a4SAndroid Build Coastguard Worker    yield (
61*bb4ee6a4SAndroid Build Coastguard Worker        api.test(
62*bb4ee6a4SAndroid Build Coastguard Worker            "build_docs",
63*bb4ee6a4SAndroid Build Coastguard Worker            api.buildbucket.ci_build(project="crosvm/crosvm"),
64*bb4ee6a4SAndroid Build Coastguard Worker        )
65*bb4ee6a4SAndroid Build Coastguard Worker        + api.post_process(filter_steps)
66*bb4ee6a4SAndroid Build Coastguard Worker    )
67