Add the (no-op) 'exec_groups' attribute to the rule() function.
Currently not linked up to any logic behind the scenes. Usage of attribute hidden behind new --experimental_execution_groups flag.
PiperOrigin-RevId: 302672390
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
index aaef7d5..0667618 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
@@ -294,6 +294,7 @@
Object analysisTest,
Object buildSetting,
Object cfg,
+ Object execGroups,
StarlarkThread thread)
throws EvalException {
BazelStarlarkContext bazelContext = BazelStarlarkContext.from(thread);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
index dfb5139..5fc5bbf 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkSemanticsOptions.java
@@ -265,6 +265,17 @@
public boolean experimentalSiblingRepositoryLayout;
@Option(
+ name = "experimental_exec_groups",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.EXECUTION},
+ metadataTags = {OptionMetadataTag.EXPERIMENTAL},
+ help =
+ "If set to true, allows rule authors define and access multiple execution groups "
+ + "during rule definition. This work is ongoing.")
+ public boolean experimentalExecGroups;
+
+ @Option(
name = "experimental_allow_tags_propagation",
oldName = "incompatible_allow_tags_propagation",
defaultValue = "false",
@@ -677,6 +688,7 @@
.experimentalRepoRemoteExec(experimentalRepoRemoteExec)
.experimentalDisableExternalPackage(experimentalDisableExternalPackage)
.experimentalSiblingRepositoryLayout(experimentalSiblingRepositoryLayout)
+ .experimentalExecGroups(experimentalExecGroups)
.incompatibleApplicableLicenses(incompatibleApplicableLicenses)
.incompatibleDepsetUnion(incompatibleDepsetUnion)
.incompatibleDisableTargetProviderFields(incompatibleDisableTargetProviderFields)
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
index e557592..8f1b8b6 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleFunctionsApi.java
@@ -328,7 +328,18 @@
positional = false,
doc =
"If set, points to the configuration transition the rule will "
- + "apply to its own configuration before analysis.")
+ + "apply to its own configuration before analysis."),
+ @Param(
+ name = "exec_groups",
+ type = Dict.class,
+ named = true,
+ noneable = true,
+ defaultValue = "None",
+ positional = false,
+ enableOnlyWithFlag = FlagIdentifier.EXPERIMENTAL_EXEC_GROUPS,
+ valueWhenDisabled = "None",
+ // TODO(juliexxia): beef up this description when we actually hook up to something"
+ doc = "Dictionary to declare execution groups. DO NOT USE - not function yet.")
},
useStarlarkThread = true)
BaseFunction rule(
@@ -348,6 +359,7 @@
Object analysisTest,
Object buildSetting,
Object cfg,
+ Object execGroups,
StarlarkThread thread)
throws EvalException;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
index 41ef0d7..d1b04ad 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/StarlarkSemantics.java
@@ -70,6 +70,7 @@
public static final String EXPERIMENTAL_STARLARK_UNUSED_INPUTS_LIST =
"experimental_starlark_unused_inputs_list";
public static final String EXPERIMENTAL_REPO_REMOTE_EXEC = "experimental_repo_remote_exec";
+ public static final String EXPERIMENTAL_EXEC_GROUPS = "experimental_exec_groups";
public static final String INCOMPATIBLE_APPLICABLE_LICENSES =
"incompatible_applicable_licenses";
public static final String INCOMPATIBLE_DISABLE_DEPSET_INPUTS =
@@ -121,6 +122,8 @@
return experimentalStarlarkUnusedInputsList();
case FlagIdentifier.EXPERIMENTAL_REPO_REMOTE_EXEC:
return experimentalRepoRemoteExec();
+ case FlagIdentifier.EXPERIMENTAL_EXEC_GROUPS:
+ return experimentalExecGroups();
case FlagIdentifier.INCOMPATIBLE_APPLICABLE_LICENSES:
return incompatibleApplicableLicenses();
case FlagIdentifier.INCOMPATIBLE_DISABLE_DEPSET_INPUTS:
@@ -212,6 +215,8 @@
public abstract boolean experimentalSiblingRepositoryLayout();
+ public abstract boolean experimentalExecGroups();
+
public abstract boolean incompatibleAlwaysCheckDepsetElements();
public abstract boolean incompatibleApplicableLicenses();
@@ -318,6 +323,7 @@
.experimentalRepoRemoteExec(false)
.experimentalDisableExternalPackage(false)
.experimentalSiblingRepositoryLayout(false)
+ .experimentalExecGroups(false)
.incompatibleAlwaysCheckDepsetElements(true)
.incompatibleApplicableLicenses(false)
.incompatibleDepsetUnion(true)
@@ -386,6 +392,8 @@
public abstract Builder experimentalSiblingRepositoryLayout(boolean value);
+ public abstract Builder experimentalExecGroups(boolean value);
+
public abstract Builder incompatibleAlwaysCheckDepsetElements(boolean value);
public abstract Builder incompatibleApplicableLicenses(boolean value);
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
index 72cc829..a535549 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
@@ -147,6 +147,7 @@
Object analysisTest,
Object buildSetting,
Object cfg,
+ Object execGroups,
StarlarkThread thread)
throws EvalException {
ImmutableMap.Builder<String, FakeDescriptor> attrsMapBuilder = ImmutableMap.builder();
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index 6a183e8..d3d2e05 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -139,6 +139,7 @@
"--incompatible_allow_tags_propagation=" + rand.nextBoolean(), // flag, Java names differ
"--experimental_cc_shared_library=" + rand.nextBoolean(),
"--experimental_repo_remote_exec=" + rand.nextBoolean(),
+ "--experimental_exec_groups=" + rand.nextBoolean(),
"--incompatible_always_check_depset_elements=" + rand.nextBoolean(),
"--incompatible_applicable_licenses=" + rand.nextBoolean(),
"--incompatible_depset_for_libraries_to_link_getter=" + rand.nextBoolean(),
@@ -193,6 +194,7 @@
.experimentalAllowTagsPropagation(rand.nextBoolean())
.experimentalCcSharedLibrary(rand.nextBoolean())
.experimentalRepoRemoteExec(rand.nextBoolean())
+ .experimentalExecGroups(rand.nextBoolean())
.incompatibleAlwaysCheckDepsetElements(rand.nextBoolean())
.incompatibleApplicableLicenses(rand.nextBoolean())
.incompatibleDepsetForLibrariesToLinkGetter(rand.nextBoolean())