From 9cd2c399b667c1ae74e9af99f041f6bad06825a4 Mon Sep 17 00:00:00 2001 From: Eric Arellano Date: Thu, 30 Jul 2020 18:31:54 -0700 Subject: [PATCH 1/2] Test for rule graph issues with each distinct backend [ci skip-rust] [ci skip-build-wheels] --- src/python/pants/init/BUILD | 7 ++++ .../init/load_backends_integration_test.py | 41 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/python/pants/init/load_backends_integration_test.py diff --git a/src/python/pants/init/BUILD b/src/python/pants/init/BUILD index 78e3a336039..bfa81aaaa08 100644 --- a/src/python/pants/init/BUILD +++ b/src/python/pants/init/BUILD @@ -25,3 +25,10 @@ target( 'src/python/pants/core', ], ) + +python_integration_tests( + name="integration", + uses_pants_run=True, + # TODO(#10504): Lower this to ~120 once fixed. + timeout=450, +) diff --git a/src/python/pants/init/load_backends_integration_test.py b/src/python/pants/init/load_backends_integration_test.py new file mode 100644 index 00000000000..aebc963acc7 --- /dev/null +++ b/src/python/pants/init/load_backends_integration_test.py @@ -0,0 +1,41 @@ +# Copyright 2020 Pants project contributors (see CONTRIBUTORS.md). +# Licensed under the Apache License, Version 2.0 (see LICENSE). + +from pathlib import Path +from typing import List + +from pants.testutil.pants_run_integration_test import PantsRunIntegrationTest + + +class LoadBackendsIntegrationTest(PantsRunIntegrationTest): + """Ensure that the rule graph can be loaded properly for each backend.""" + + @staticmethod + def discover_backends() -> List[str]: + register_pys = Path().glob("src/python/**/register.py") + backends = { + str(register_py.parent).replace("src/python/", "").replace("/", ".") + for register_py in register_pys + } + always_activated = {"pants.core", "pants.backend.project_info", "pants.backend.pants_info"} + return sorted(backends - always_activated) + + def assert_backends_load(self, backends: List[str]) -> None: + result = self.run_pants( + ["--no-verify-config", "--version"], config={"GLOBAL": {"backend_packages": backends}} + ) + self.assert_success(result, msg=f"Failed to load: {backends}") + + def test_no_backends_loaded(self) -> None: + self.assert_backends_load([]) + + def test_all_backends_loaded(self) -> None: + """This should catch all ambiguity issues.""" + all_backends = self.discover_backends() + self.assert_backends_load(all_backends) + + def test_each_distinct_backend_loads(self) -> None: + """This should catch graph incompleteness errors, i.e. when a required rule is not + registered.""" + for backend in self.discover_backends(): + self.assert_backends_load([backend]) From c6094d25cdfc73cc8209de372afdea339aae19a3 Mon Sep 17 00:00:00 2001 From: Eric Arellano Date: Thu, 30 Jul 2020 18:40:19 -0700 Subject: [PATCH 2/2] Stop loading AWS Lambda backend We don't use it, so there's no reason to load it, now that we have this test. # Rust tests and lints will be skipped. Delete if not intended. [ci skip-rust] # Building wheels and fs_util will be skipped. Delete if not intended. [ci skip-build-wheels] --- build-support/bin/generate_docs.py | 3 ++- pants.toml | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build-support/bin/generate_docs.py b/build-support/bin/generate_docs.py index e7d5c13b505..e0ccec68c3c 100644 --- a/build-support/bin/generate_docs.py +++ b/build-support/bin/generate_docs.py @@ -27,7 +27,8 @@ class ReferenceGenerator: ./pants \ --backend-packages="-['internal_backend.rules_for_testing', 'internal_backend.utilities']" \ --backend-packages="+['pants.backend.python.lint.bandit', \ - 'pants.backend.python.lint.pylint', 'pants.backend.codegen.protobuf.python']" \ + 'pants.backend.python.lint.pylint', 'pants.backend.codegen.protobuf.python', \ + 'pants.backend.awslambda.python']" \ --no-verify-config help-all > /tmp/help_info to generate the data, and then: diff --git a/pants.toml b/pants.toml index 5d77fb591eb..de3ff8d3d37 100644 --- a/pants.toml +++ b/pants.toml @@ -5,7 +5,6 @@ print_exception_stacktrace = true pythonpath = ["%(buildroot)s/pants-plugins/src/python"] backend_packages.add = [ - "pants.backend.awslambda.python", "pants.backend.python", "pants.backend.python.lint.black", "pants.backend.python.lint.docformatter",