diff --git a/infra/README.recipes.md b/infra/README.recipes.md index ba9daae43b..0626422daa 100644 --- a/infra/README.recipes.md +++ b/infra/README.recipes.md @@ -15,7 +15,7 @@ ### *recipe_modules* / [crosvm](/infra/recipe_modules/crosvm) -[DEPS](/infra/recipe_modules/crosvm/__init__.py#7): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/step][recipe_engine/recipe_modules/step] +[DEPS](/infra/recipe_modules/crosvm/__init__.py#7): [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/git][depot_tools/recipe_modules/git], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/step][recipe_engine/recipe_modules/step] PYTHON_VERSION_COMPATIBILITY: PY3 @@ -23,7 +23,7 @@ PYTHON_VERSION_COMPATIBILITY: PY3 Crosvm specific functionality shared between recipes. -— **def [build\_context](/infra/recipe_modules/crosvm/api.py#21)(self, source=True, container=True):** +— **def [build\_context](/infra/recipe_modules/crosvm/api.py#27)(self, source=True, container=True):** Prepares everything needed to build crosvm on the revision that needs to be verified. @@ -36,9 +36,11 @@ Usage:   **@property**
— **def [builder\_dir](/infra/recipe_modules/crosvm/api.py#17)(self):** -— **def [prepare\_container](/infra/recipe_modules/crosvm/api.py#59)(self):** +— **def [prepare\_container](/infra/recipe_modules/crosvm/api.py#65)(self):** -— **def [prepare\_source](/infra/recipe_modules/crosvm/api.py#38)(self):** +— **def [prepare\_git](/infra/recipe_modules/crosvm/api.py#79)(self):** + +— **def [prepare\_source](/infra/recipe_modules/crosvm/api.py#45)(self):** Prepares the local crosvm source for testing in `self.source_dir` @@ -47,26 +49,26 @@ change to be tested.   **@property**
— **def [source\_dir](/infra/recipe_modules/crosvm/api.py#13)(self):** -— **def [step\_in\_container](/infra/recipe_modules/crosvm/api.py#73)(self, step_name, command):** +— **def [step\_in\_container](/infra/recipe_modules/crosvm/api.py#90)(self, step_name, command):** Runs a luci step inside the crosvm dev container. ## Recipes ### *recipes* / [build\_chromeos](/infra/recipes/build_chromeos.py) -[DEPS](/infra/recipes/build_chromeos.py#9): [crosvm](#recipe_modules-crosvm), [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step] +[DEPS](/infra/recipes/build_chromeos.py#10): [crosvm](#recipe_modules-crosvm), [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step] PYTHON_VERSION_COMPATIBILITY: PY3 -— **def [BuildAndTest](/infra/recipes/build_chromeos.py#76)(api, board):** +— **def [BuildAndTest](/infra/recipes/build_chromeos.py#80)(api, board):** -— **def [CleanUp](/infra/recipes/build_chromeos.py#89)(api):** +— **def [CleanUp](/infra/recipes/build_chromeos.py#93)(api):** -— **def [PrepareBuild](/infra/recipes/build_chromeos.py#61)(api):** +— **def [PrepareBuild](/infra/recipes/build_chromeos.py#65)(api):** -— **def [RunSteps](/infra/recipes/build_chromeos.py#94)(api, properties):** +— **def [RunSteps](/infra/recipes/build_chromeos.py#98)(api, properties):** -— **def [SetupSource](/infra/recipes/build_chromeos.py#27)(api, workspace):** +— **def [SetupSource](/infra/recipes/build_chromeos.py#28)(api, workspace):** ### *recipes* / [build\_linux](/infra/recipes/build_linux.py) [DEPS](/infra/recipes/build_linux.py#11): [crosvm](#recipe_modules-crosvm), [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step] @@ -103,6 +105,7 @@ PYTHON_VERSION_COMPATIBILITY: PY3 [depot_tools/recipe_modules/bot_update]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/8a87603683bda769d437e48cc1a7494a2e237ead/recipes/README.recipes.md#recipe_modules-bot_update [depot_tools/recipe_modules/depot_tools]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/8a87603683bda769d437e48cc1a7494a2e237ead/recipes/README.recipes.md#recipe_modules-depot_tools [depot_tools/recipe_modules/gclient]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/8a87603683bda769d437e48cc1a7494a2e237ead/recipes/README.recipes.md#recipe_modules-gclient +[depot_tools/recipe_modules/git]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/8a87603683bda769d437e48cc1a7494a2e237ead/recipes/README.recipes.md#recipe_modules-git [recipe_engine/recipe_modules/buildbucket]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/7b42800366a15f34b28e62f6bcb1cddcb2206db0/README.recipes.md#recipe_modules-buildbucket [recipe_engine/recipe_modules/context]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/7b42800366a15f34b28e62f6bcb1cddcb2206db0/README.recipes.md#recipe_modules-context [recipe_engine/recipe_modules/file]: https://chromium.googlesource.com/infra/luci/recipes-py.git/+/7b42800366a15f34b28e62f6bcb1cddcb2206db0/README.recipes.md#recipe_modules-file diff --git a/infra/recipe_modules/crosvm/__init__.py b/infra/recipe_modules/crosvm/__init__.py index 5ac3c00767..75f32d1997 100644 --- a/infra/recipe_modules/crosvm/__init__.py +++ b/infra/recipe_modules/crosvm/__init__.py @@ -7,6 +7,7 @@ PYTHON_VERSION_COMPATIBILITY = "PY3" DEPS = [ "depot_tools/bot_update", "depot_tools/gclient", + "depot_tools/git", "recipe_engine/buildbucket", "recipe_engine/context", "recipe_engine/file", diff --git a/infra/recipe_modules/crosvm/api.py b/infra/recipe_modules/crosvm/api.py index 949727bb5d..3e617e3c46 100644 --- a/infra/recipe_modules/crosvm/api.py +++ b/infra/recipe_modules/crosvm/api.py @@ -18,6 +18,12 @@ class CrosvmApi(recipe_api.RecipeApi): def builder_dir(self): return self.m.path["cache"].join("builder") + def __set_git_config(self, prop, value): + self.m.step( + "Set git config: %s" % prop, + ["git", "config", "--global", prop, value], + ) + def build_context(self, source=True, container=True): """ Prepares everything needed to build crosvm on the revision that needs to be verified. @@ -29,6 +35,7 @@ class CrosvmApi(recipe_api.RecipeApi): with api.crosvm.build_context(): api.crosvm.step_in_container("build crosvm", ["cargo build"]) """ + self.prepare_git() if source: self.prepare_source() if container: @@ -44,7 +51,6 @@ class CrosvmApi(recipe_api.RecipeApi): """ with self.m.step.nest("Prepare source"): self.m.file.ensure_directory("Ensure builder_dir exists", self.builder_dir) - with self.m.context(cwd=self.builder_dir): gclient_config = self.m.gclient.make_config() s = gclient_config.solutions.add() @@ -70,6 +76,17 @@ class CrosvmApi(recipe_api.RecipeApi): ) self.m.crosvm.step_in_container("Ensure dev container exists", ["true"]) + def prepare_git(self): + with self.m.step.nest("Prepare git"): + with self.m.context(cwd=self.m.path["start_dir"]): + name = self.m.git.config_get("user.name") + email = self.m.git.config_get("user.email") + if not name or not email: + self.__set_git_config("user.name", "Crosvm Bot") + self.__set_git_config( + "user.email", "crosvm-bot@crosvm-infra.iam.gserviceaccount.com" + ) + def step_in_container(self, step_name, command): """ Runs a luci step inside the crosvm dev container. diff --git a/infra/recipe_modules/crosvm/examples/build_context.expected/basic.json b/infra/recipe_modules/crosvm/examples/build_context.expected/basic.json index 8527cc4172..d7982f9c1e 100644 --- a/infra/recipe_modules/crosvm/examples/build_context.expected/basic.json +++ b/infra/recipe_modules/crosvm/examples/build_context.expected/basic.json @@ -1,4 +1,60 @@ [ + { + "cmd": [], + "name": "Prepare git" + }, + { + "cmd": [ + "git", + "config", + "--get", + "user.name" + ], + "infra_step": true, + "name": "Prepare git.git config user.name", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "config", + "--get", + "user.email" + ], + "infra_step": true, + "name": "Prepare git.git config user.email", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "config", + "--global", + "user.name", + "Crosvm Bot" + ], + "name": "Prepare git.Set git config: user.name", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "config", + "--global", + "user.email", + "crosvm-bot@crosvm-infra.iam.gserviceaccount.com" + ], + "name": "Prepare git.Set git config: user.email", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, { "cmd": [], "name": "Prepare source" diff --git a/infra/recipes/build_chromeos.expected/build_default.json b/infra/recipes/build_chromeos.expected/build_default.json index 87e3efa4d2..adaf147d47 100644 --- a/infra/recipes/build_chromeos.expected/build_default.json +++ b/infra/recipes/build_chromeos.expected/build_default.json @@ -14,6 +14,74 @@ "infra_step": true, "name": "Ensure workspace exists" }, + { + "cmd": [], + "name": "Prepare git" + }, + { + "cmd": [ + "git", + "config", + "--get", + "user.name" + ], + "env": { + "DEPOT_TOOLS_UPDATE": "0" + }, + "infra_step": true, + "name": "Prepare git.git config user.name", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "config", + "--get", + "user.email" + ], + "env": { + "DEPOT_TOOLS_UPDATE": "0" + }, + "infra_step": true, + "name": "Prepare git.git config user.email", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "config", + "--global", + "user.name", + "Crosvm Bot" + ], + "env": { + "DEPOT_TOOLS_UPDATE": "0" + }, + "name": "Prepare git.Set git config: user.name", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "config", + "--global", + "user.email", + "crosvm-bot@crosvm-infra.iam.gserviceaccount.com" + ], + "env": { + "DEPOT_TOOLS_UPDATE": "0" + }, + "name": "Prepare git.Set git config: user.email", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, { "cmd": [ "RECIPE_REPO[depot_tools]/repo", diff --git a/infra/recipes/build_chromeos.py b/infra/recipes/build_chromeos.py index 12d50a6be0..9094d65c6f 100644 --- a/infra/recipes/build_chromeos.py +++ b/infra/recipes/build_chromeos.py @@ -30,6 +30,9 @@ def SetupSource(api, workspace): upstream_url = "https://chromium.googlesource.com/crosvm/crosvm" revision = gitilies.id or "HEAD" + # Initialize git user name to make repo happy. + api.crosvm.prepare_git() + # Init and sync the ChromeOS checkout api.step( "Init repo",