From a247502d28d8d70d648390de52952189b99a0bb7 Mon Sep 17 00:00:00 2001 From: Googler Date: Thu, 8 Dec 2022 07:51:13 -0800 Subject: [PATCH] Add 'toolchain' parameter to actions.{run,run_shell} If set, the action executes on a specific execution platform connected to this toolchain (not to the default exec group). Design doc with more information: https://docs.google.com/document/d/1-rbP_hmKs9D639YWw5F_JyxPxL2bi6dSmmvj_WXak9M. PiperOrigin-RevId: 493894090 Change-Id: Ieb928cec469c01879eebe6249ff1db5df1da0527 --- .../starlark/StarlarkActionFactory.java | 6 ++- .../StarlarkActionFactoryApi.java | 46 ++++++++++++++++++- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java index 306e37de6f21e3..a78e07c6362559 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java @@ -369,7 +369,8 @@ public void run( Object inputManifestsUnchecked, Object execGroupUnchecked, Object shadowedActionUnchecked, - Object resourceSetUnchecked) + Object resourceSetUnchecked, + Object toolchainUnchecked) throws EvalException { context.checkMutable("actions.run"); @@ -480,7 +481,8 @@ public void runShell( Object inputManifestsUnchecked, Object execGroupUnchecked, Object shadowedActionUnchecked, - Object resourceSetUnchecked) + Object resourceSetUnchecked, + Object toolchainUnchecked) throws EvalException { context.checkMutable("actions.run_shell"); RuleContext ruleContext = getRuleContext(); diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java index 832b11ccdc69c8..b25b482f5d749d 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/StarlarkActionFactoryApi.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.starlarkbuildapi; import com.google.devtools.build.docgen.annot.DocCategory; +import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.Depset; import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions; import net.starlark.java.annot.Param; @@ -465,6 +466,25 @@ void symlink( + " --experimental_action_resource_set is false, the default" + " values are used.

The callback must be top-level (lambda and nested" + " functions aren't allowed)."), + @Param( + name = "toolchain", + allowedTypes = { + @ParamType(type = Label.class), + @ParamType(type = String.class), + @ParamType(type = NoneType.class), + }, + defaultValue = "None", + named = true, + positional = false, + doc = + "

Toolchain type of the executable or tools used in this action. The parameter" + + " must be set, so that, the action executes on the correct execution" + + " platform.

It's a no-op right now, but we recommend to set it when a" + + " toolchain is used, because it will be required in the future Bazel" + + " releases.

Note that the rule which creates this action needs to" + + " define this toolchain inside its 'rule()' function.

When `toolchain`" + + " and `exec_group` parameters are both set, `exec_group` will be used. An" + + " error is raised in case the `exec_group` doesn't specify the same."), }) void run( Sequence outputs, @@ -481,7 +501,8 @@ void run( Object inputManifestsUnchecked, Object execGroupUnchecked, Object shadowedAction, - Object resourceSetUnchecked) + Object resourceSetUnchecked, + Object toolchainUnchecked) throws EvalException; @StarlarkMethod( @@ -682,6 +703,26 @@ void run( doc = "A callback function for estimating resource usage if run locally. See" + "ctx.actions.run()."), + @Param( + name = "toolchain", + allowedTypes = { + @ParamType(type = Label.class), + @ParamType(type = String.class), + @ParamType(type = NoneType.class), + }, + defaultValue = "None", + named = true, + positional = false, + doc = + "

Toolchain type of the executable or tools used in this action. The parameter" + + " must be set, so that, the action executes on the correct execution" + + " platform.

It's a no-op right now, but we recommend to set it when a" + + " toolchain is used, because it will be required in the future Bazel" + + " releases.

Note that the rule which creates this action needs to" + + " define this toolchain inside its 'rule()' function.

When `toolchain`" + + " and `exec_group` parameters are both set, `exec_group` will be used. An" + + " error is raised in case the `exec_group` doesn't specify the same." + + " toolchain.

"), }) void runShell( Sequence outputs, @@ -697,7 +738,8 @@ void runShell( Object inputManifestsUnchecked, Object execGroupUnchecked, Object shadowedAction, - Object resourceSetUnchecked) + Object resourceSetUnchecked, + Object toolchainUnchecked) throws EvalException; @StarlarkMethod(