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 14216ac627938b..6db9d86bc1ebf4 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 @@ -390,7 +390,7 @@ public class StarlarkSemanticsOptions extends OptionsBase implements Serializabl @Option( name = "incompatible_new_actions_api", - defaultValue = "false", + defaultValue = "true", documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS, effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS}, metadataTags = { 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 22ce113f2dac15..0f7d4de6d6450d 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 @@ -236,7 +236,7 @@ public static Builder builderWithDefaults() { .incompatibleDisallowRuleExecutionPlatformConstraintsAllowed(false) .incompatibleDisallowStructProviderSyntax(false) .incompatibleExpandDirectories(true) - .incompatibleNewActionsApi(false) + .incompatibleNewActionsApi(true) .incompatibleNoAttrLicense(true) .incompatibleNoKwargsInBuildFiles(false) .incompatibleNoOutputAttrDefault(true) diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java index d45368d92e0575..bb8a6eae87be4f 100644 --- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java +++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java @@ -125,21 +125,21 @@ /** * Main entry point for the Skydoc binary. * - *

Skydoc generates human-readable documentation for relevant details of skylark files by - * running a skylark interpreter with a fake implementation of the build API.

+ *

Skydoc generates human-readable documentation for relevant details of skylark files by running + * a skylark interpreter with a fake implementation of the build API. * *

Currently, Skydoc generates documentation for skylark rule definitions (discovered by - * invocations of the build API function {@code rule()}.

+ * invocations of the build API function {@code rule()}. + * + *

Usage: * - *

Usage:

*
  *   skydoc {target_skylark_file_label} {output_file} [symbol_name]...
  * 
- *

- * Generates documentation for all exported symbols of the target skylark file that are - * specified in the list of symbol names. If no symbol names are supplied, outputs documentation - * for all exported symbols in the target skylark file. - *

+ * + *

Generates documentation for all exported symbols of the target skylark file that are specified + * in the list of symbol names. If no symbol names are supplied, outputs documentation for all + * exported symbols in the target skylark file. */ public class SkydocMain { @@ -170,6 +170,7 @@ public static void main(String[] args) StarlarkSemanticsOptions semanticsOptions = parser.getOptions(StarlarkSemanticsOptions.class); semanticsOptions.incompatibleDepsetUnion = false; semanticsOptions.incompatibleDisableDeprecatedAttrParams = false; + semanticsOptions.incompatibleNewActionsApi = false; SkydocOptions skydocOptions = parser.getOptions(SkydocOptions.class); String targetFileLabelString; @@ -198,8 +199,7 @@ public static void main(String[] args) depRoots = ImmutableList.copyOf(skydocOptions.depRoots); } - Label targetFileLabel = - Label.parseAbsolute(targetFileLabelString, ImmutableMap.of()); + Label targetFileLabel = Label.parseAbsolute(targetFileLabelString, ImmutableMap.of()); ImmutableMap.Builder ruleInfoMap = ImmutableMap.builder(); ImmutableMap.Builder providerInfoMap = ImmutableMap.builder(); @@ -271,9 +271,8 @@ private static void printRuleInfos( } private static void printProviderInfos( - PrintWriter printWriter, - MarkdownRenderer renderer, - Map providerInfos) throws IOException { + PrintWriter printWriter, MarkdownRenderer renderer, Map providerInfos) + throws IOException { for (Entry entry : providerInfos.entrySet()) { printProviderInfo(printWriter, renderer, entry.getKey(), entry.getValue()); printWriter.println(); @@ -299,14 +298,17 @@ private static void printUserDefinedFunctions( } private static void printRuleInfo( - PrintWriter printWriter, MarkdownRenderer renderer, - String exportedName, RuleInfo ruleInfo) throws IOException { + PrintWriter printWriter, MarkdownRenderer renderer, String exportedName, RuleInfo ruleInfo) + throws IOException { printWriter.println(renderer.render(exportedName, ruleInfo)); } private static void printProviderInfo( - PrintWriter printWriter, MarkdownRenderer renderer, - String exportedName, ProviderInfo providerInfo) throws IOException { + PrintWriter printWriter, + MarkdownRenderer renderer, + String exportedName, + ProviderInfo providerInfo) + throws IOException { printWriter.println(renderer.render(exportedName, providerInfo)); } @@ -347,14 +349,12 @@ public Environment eval( List providerInfoList = new ArrayList<>(); Environment env = recursiveEval(semantics, label, ruleInfoList, providerInfoList); - Map ruleFunctions = ruleInfoList.stream() - .collect(Collectors.toMap( - RuleInfo::getIdentifierFunction, - Functions.identity())); - Map providerInfos = providerInfoList.stream() - .collect(Collectors.toMap( - ProviderInfo::getIdentifier, - Functions.identity())); + Map ruleFunctions = + ruleInfoList.stream() + .collect(Collectors.toMap(RuleInfo::getIdentifierFunction, Functions.identity())); + Map providerInfos = + providerInfoList.stream() + .collect(Collectors.toMap(ProviderInfo::getIdentifier, Functions.identity())); // Sort the bindings so their ordering is deterministic. TreeMap sortedBindings = new TreeMap<>(env.getGlobals().getExportedBindings()); @@ -492,10 +492,11 @@ private Environment evalSkylarkBody( * @param providerInfoList the list of {@link ProviderInfo} objects, to which provider() * invocation information will be added */ - private static GlobalFrame globalFrame(List ruleInfoList, - List providerInfoList) { + private static GlobalFrame globalFrame( + List ruleInfoList, List providerInfoList) { TopLevelBootstrap topLevelBootstrap = - new TopLevelBootstrap(new FakeBuildApiGlobals(), + new TopLevelBootstrap( + new FakeBuildApiGlobals(), new FakeSkylarkAttrApi(), new FakeSkylarkCommandLineApi(), new FakeSkylarkNativeModuleApi(), @@ -504,16 +505,18 @@ private static GlobalFrame globalFrame(List ruleInfoList, new FakeOutputGroupInfoProvider(), new FakeActionsInfoProvider(), new FakeDefaultInfoProvider()); - AndroidBootstrap androidBootstrap = new AndroidBootstrap(new FakeAndroidSkylarkCommon(), - new FakeApkInfoProvider(), - new FakeAndroidInstrumentationInfoProvider(), - new FakeAndroidDeviceBrokerInfoProvider(), - new FakeAndroidResourcesInfoProvider(), - new FakeAndroidNativeLibsInfoProvider()); + AndroidBootstrap androidBootstrap = + new AndroidBootstrap( + new FakeAndroidSkylarkCommon(), + new FakeApkInfoProvider(), + new FakeAndroidInstrumentationInfoProvider(), + new FakeAndroidDeviceBrokerInfoProvider(), + new FakeAndroidResourcesInfoProvider(), + new FakeAndroidNativeLibsInfoProvider()); AppleBootstrap appleBootstrap = new AppleBootstrap(new FakeAppleCommon()); ConfigBootstrap configBootstrap = - new ConfigBootstrap(new FakeConfigSkylarkCommon(), new FakeConfigApi(), - new FakeConfigGlobalLibrary()); + new ConfigBootstrap( + new FakeConfigSkylarkCommon(), new FakeConfigApi(), new FakeConfigGlobalLibrary()); CcBootstrap ccBootstrap = new CcBootstrap(new FakeCcModule()); JavaBootstrap javaBootstrap = new JavaBootstrap( diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java index 9379951222badf..ae2bab09be0907 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java @@ -448,7 +448,7 @@ public void testOutputFilterWithDebug() throws Exception { "java/b/rules.bzl", "def _impl(ctx):", " print('debug in b')", - " ctx.file_action(", + " ctx.actions.write(", " output = ctx.outputs.my_output,", " content = 'foo',", " )", diff --git a/src/test/java/com/google/devtools/build/lib/query2/aquery/ActionGraphProtoOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/aquery/ActionGraphProtoOutputFormatterCallbackTest.java index 03c944624e4fec..34092731f63be2 100644 --- a/src/test/java/com/google/devtools/build/lib/query2/aquery/ActionGraphProtoOutputFormatterCallbackTest.java +++ b/src/test/java/com/google/devtools/build/lib/query2/aquery/ActionGraphProtoOutputFormatterCallbackTest.java @@ -483,7 +483,7 @@ public void testCppActionTemplate_includesActionTemplateMnemonic() throws Except "test/a.bzl", "def _impl(ctx):", " directory = ctx.actions.declare_directory(ctx.attr.name + \"_artifact.cc\")", - " ctx.action(", + " ctx.actions.run_shell(", " inputs = ctx.files.srcs,", " outputs = [directory],", " mnemonic = 'MoveTreeArtifact',", diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java index 302e166b904a0c..159f659333bc89 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/java/proto/SkylarkJavaLiteProtoLibraryTest.java @@ -89,6 +89,8 @@ public final void setUpMocks() throws Exception { @Before public final void setupSkylarkRule() throws Exception { + setSkylarkSemanticsOptions("--incompatible_new_actions_api=false"); + File[] files = Runfiles.location(RULE_DIRECTORY).listFiles(); for (File file : files) { scratch.file(RULE_DIRECTORY + "/" + file.getName(), Files.readAllBytes(file.toPath())); diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java index baa1c16e36513f..b83c2bb563bf70 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java @@ -391,15 +391,6 @@ public void testCreateSpawnActionUnknownParam() throws Exception { "ruleContext.actions.run(outputs=[], bad_param = 'some text', executable = f)"); } - @Test - public void testCreateSpawnActionNoExecutable() throws Exception { - SkylarkRuleContext ruleContext = createRuleContext("//foo:foo"); - checkErrorContains( - ruleContext, - "You must specify either 'command' or 'executable' argument", - "ruleContext.action(outputs=[])"); - } - private Object createTestSpawnAction(SkylarkRuleContext ruleContext) throws Exception { return evalRuleContextCode( ruleContext, diff --git a/src/test/shell/bazel/external_path_test.sh b/src/test/shell/bazel/external_path_test.sh index 3cf8592d1b8b69..735c68c50f3247 100755 --- a/src/test/shell/bazel/external_path_test.sh +++ b/src/test/shell/bazel/external_path_test.sh @@ -337,8 +337,8 @@ cat $1 | tr 'a-z' 'A-Z' > $2 EOF cat > rule/to_upper.bzl <<'EOF' def _to_upper_impl(ctx): - output = ctx.new_file(ctx.label.name + ".txt") - ctx.action( + output = ctx.actions.declare_file(ctx.label.name + ".txt") + ctx.actions.run_shell( inputs = ctx.files.src + ctx.files._toupper_sh, outputs = [output], command = ["/bin/sh"] + [f.path for f in ctx.files._toupper_sh] \ @@ -489,8 +489,8 @@ genrule( EOF cat > rule/to_html.bzl <<'EOF' def _to_html_impl(ctx): - output = ctx.new_file(ctx.label.name + ".html") - ctx.action( + output = ctx.actions.declare_file(ctx.label.name + ".html") + ctx.actions.run_shell( inputs = ctx.files.src + ctx.files._to_html + ctx.files._preamb + ctx.files._postamb, outputs = [output], command = ["/bin/sh"] + [f.path for f in ctx.files._to_html] \ @@ -642,8 +642,8 @@ genrule( EOF cat > rule/add_preamb.bzl <<'EOF' def _add_preamb_impl(ctx): - output = ctx.new_file(ctx.label.name + ".txt") - ctx.action( + output = ctx.actions.declare_file(ctx.label.name + ".txt") + ctx.actions.run_shell( inputs = ctx.files.src + ctx.files._add_preamb + ctx.files._preamb, outputs = [output], command = ["/bin/sh"] + [f.path for f in ctx.files._add_preamb] \ diff --git a/src/test/shell/integration/aquery_test.sh b/src/test/shell/integration/aquery_test.sh index 150f7eee43524f..3a6d8ae3395eef 100755 --- a/src/test/shell/integration/aquery_test.sh +++ b/src/test/shell/integration/aquery_test.sh @@ -251,7 +251,7 @@ bar_aspect = aspect(implementation = _aspect_impl, ) def _bar_impl(ctx): - ctx.file_action(content = "hello world", output = ctx.outputs.out) + ctx.actions.write(content = "hello world", output = ctx.outputs.out) return struct(files = depset(transitive = [dep[DummyProvider].dummies for dep in ctx.attr.deps])) bar_rule = rule( @@ -798,7 +798,7 @@ function test_aquery_cpp_action_template_treeartifact_output() { cat > "$pkg/a.bzl" <<'EOF' def _impl(ctx): directory = ctx.actions.declare_directory(ctx.attr.name + "_artifact.cc") - ctx.action( + ctx.actions.run_shell( inputs = ctx.files.srcs, outputs = [directory], mnemonic = 'MoveTreeArtifact', diff --git a/src/test/shell/integration/implicit_dependency_reporting_test.sh b/src/test/shell/integration/implicit_dependency_reporting_test.sh index 842b65df54cf83..07a826e3413ff5 100755 --- a/src/test/shell/integration/implicit_dependency_reporting_test.sh +++ b/src/test/shell/integration/implicit_dependency_reporting_test.sh @@ -65,8 +65,8 @@ test_custom_message() { touch WORKSPACE cat > rule.bzl <<'EOF' def _rule_impl(ctx): - out = ctx.new_file(ctx.label.name + ".txt") - ctx.action( + out = ctx.actions.declare_file(ctx.label.name + ".txt") + ctx.actions.run_shell( inputs = ctx.files._data, outputs = [out], command = ["cp"] + [f.path for f in ctx.files._data] + [out.path],