blob: ecccb91d4789d57e419e90c5bc4d57f0079d0237 [file] [log] [blame]
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Recipe for testing Recipes."""
from recipe_engine.recipe_api import Property
DEPS = [
"fuchsia/build_input_resolver",
"fuchsia/checkout",
"fuchsia/commit_queue",
"fuchsia/gitiles",
"fuchsia/recipe_testing",
"fuchsia/status_check",
"recipe_engine/buildbucket",
"recipe_engine/context",
"recipe_engine/path",
"recipe_engine/properties",
"recipe_engine/step",
]
PROPERTIES = {
"project": Property(kind=str, help="Jiri remote manifest project", default=None),
"manifest": Property(kind=str, help="Jiri manifest to use"),
"remote": Property(kind=str, help="Remote manifest repository"),
"unittest_only": Property(kind=bool, help="Finish after unit tests", default=False),
"include_public": Property(kind=bool, help="Include public tryjobs", default=True),
"include_private": Property(
kind=bool, help="Include private tryjobs", default=False
),
}
# If this build is being triggered from a change to this recipe, we need
# to explicitly pass a CL. The most recent passing run of
# fuchsia.try/recipes could take anywhere from about three to 200 minutes,
# and the three minute version does not test much of what this recipe
# actually does. In that case alter the recipes build to run on a specific
# CL that modifies the cobalt recipe alone. (The cobalt build usually
# takes less than 10 minutes.)
SELFTEST_CL = "https://fuchsia-review.googlesource.com/c/infra/recipes/+/303171"
def RunSteps(
api, project, manifest, remote, unittest_only, include_public, include_private
):
"""Run tests for recipes."""
# Resolve the build input to always contain a Gitiles commit.
api.build_input_resolver.resolve()
with api.context(infra_steps=True):
api.checkout.with_options(
path=api.path["start_dir"],
manifest=manifest,
remote=remote,
project=project,
build_input=api.buildbucket.build.input,
# Override defaults. We should always attempt to patch.
skip_patch_projects=(),
)
recipes_path = api.path["start_dir"].join("infra", "recipes")
with api.step.defer_results():
# TODO(olivernewman): Stop whitelisting pipes after it's no longer used by
# gcc_toolchain.
api.recipe_testing.run_lint(recipes_path, whitelist=r"^pipes$")
api.recipe_testing.run_unit_tests(recipes_path)
if not unittest_only:
api.recipe_testing.run_led_tests(
recipes_path,
SELFTEST_CL,
include_public=include_public,
include_private=include_private,
)
def GenTests(api): # pylint: disable=invalid-name
def test(name, **props):
return (
api.status_check.test(name)
+ api.build_input_resolver.set_gerrit_branch()
+ api.gitiles.refs("refs", ["refs/heads/master", "c" * 40])
+ api.commit_queue.test_data()
+ api.recipe_testing.affected_recipes_data(["none"])
+ api.buildbucket.try_build(
git_repo="https://fuchsia.googlesource.com/infra/recipes"
)
+ api.properties(
manifest="manifest/minimal",
remote="https://fuchsia.googlesource.com/infra/recipes",
**props
)
)
yield (
test("cq_try")
+ api.recipe_testing.build_data(
"fuchsia/try/fuchsia-x64-debug", "fuchsia", skip=True
)
+ api.recipe_testing.build_data(
"fuchsia/try/fuchsia-arm64-debug", "fuchsia", skip=True
)
+ api.recipe_testing.build_data(
"fuchsia/try/cobalt-x64-linux", "cobalt", skip=True
)
)
yield (
test("cq_try_private", include_public=False, include_private=True)
+ api.recipe_testing.build_data("fuchsia/try/secret-tryjob", "docs", skip=True)
)