# Copyright 2022 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from recipe_engine.post_process import Filter

DEPS = [
    "crosvm",
    "depot_tools/depot_tools",
    "recipe_engine/buildbucket",
    "recipe_engine/context",
    "recipe_engine/properties",
    "recipe_engine/step",
]


def RunSteps(api):
    with api.crosvm.cros_container_build_context():
        gitilies = api.buildbucket.build.input.gitiles_commit
        upstream_url = "https://chromium.googlesource.com/crosvm/crosvm"
        revision = gitilies.id or "upstream/main"

        api.crosvm.step_in_container(
            "Sync repo",
            [
                "repo",
                "sync",
                "-j8",
            ],
            cros=True,
        )

        api.crosvm.step_in_container(
            "Add crosvm upstream remote",
            ["git", "remote", "add", "upstream", upstream_url],
            cros=True,
        )

        # Ignore errors from unshallow as repo sync sometimes resulted in full git history
        api.crosvm.step_in_container(
            "Unshallow crosvm as needed",
            [
                "bash",
                "-c",
                "for i in $(seq 1 5);do if [[ $(git rev-parse --is-shallow-repository) == 'true' ]]; then git fetch cros --unshallow; else break; fi; done",
            ],
            cros=True,
        )

        api.crosvm.step_in_container("Print current git log", ["git", "log"], cros=True)

        api.crosvm.step_in_container(
            "Fetch upstream crosvm", ["git", "fetch", "upstream"], cros=True
        )

        # Apply unmerged commit from upstream to crOS tree
        api.crosvm.step_in_container(
            "Cherry-pick from upstream revision", ["git", "cherry-pick", ".." + revision], cros=True
        )

        api.crosvm.step_in_container(
            "cros-workon-hatch crosvm",
            ["cros_sdk", "cros-workon-hatch", "start", "crosvm"],
            cros=True,
        )

        api.crosvm.step_in_container(
            "Build crosvm",
            [
                "cros_sdk",
                "build_packages",
                "--board=hatch",
                "crosvm",
            ],
            cros=True,
        )


def GenTests(api):
    filter_steps = Filter("Build crosvm")
    yield (
        api.test(
            "build_chromeos_hatch",
            api.buildbucket.ci_build(project="crosvm/crosvm"),
        )
        + api.post_process(filter_steps)
    )
