Skip to content

Commit

Permalink
breaking: feat(gazelle): Move the plugin to a separate workspace
Browse files Browse the repository at this point in the history
Summary:
* Move go.mod to gazelle.
* Move gazelle definition.
* Move the gazelle plugin to a separate folder, just like bazel-skylib does, which helps with naming of the externally visible targets.
* Fix file distribution for the gazelle module.
* Update the example test.
* Include rules_python_gazelle_plugin during integration tests
* Update ignored packages
* Update CI configuration
  • Loading branch information
aignas committed Jan 4, 2023
1 parent 9022291 commit 5ae27f4
Show file tree
Hide file tree
Showing 432 changed files with 295 additions and 182 deletions.
11 changes: 3 additions & 8 deletions .bazelci/presubmit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,11 @@ buildifier:
# As a regression test for #225, check that wheel targets still build when
# their package path is qualified with the repo name.
- "@rules_python//examples/wheel/..."
- "-//gazelle/..."
build_flags:
- "--keep_going"
test_targets:
- "--"
- "..."
# The gazelle tests are not compatible with Windows, so we only test them
# on Linux. The build file generation, which uses this Gazelle extension,
# runs on all platforms, and is asserted by the build_file_generation
# integration tests below.
- "-//gazelle/..."
test_flags:
- "--test_tag_filters=-integration-test"
.reusable_build_test_all: &reusable_build_test_all
Expand All @@ -30,8 +24,9 @@ tasks:
gazelle_extension:
name: Test the Gazelle extension
platform: ubuntu2004
build_targets: ["//gazelle/..."]
test_targets: ["//gazelle/..."]
build_targets: ["//..."]
test_targets: ["//..."]
working_directory: gazelle
ubuntu:
<<: *reusable_config
name: Default test on Ubuntu
Expand Down
4 changes: 2 additions & 2 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
# This lets us glob() up all the files inside the examples to make them inputs to tests
# (Note, we cannot use `common --deleted_packages` because the bazel version command doesn't support it)
# To update these lines, run tools/bazel_integration_test/update_deleted_packages.sh
build --deleted_packages=examples/build_file_generation,examples/build_file_generation/get_url,examples/bzlmod,examples/multi_python_versions,examples/multi_python_versions/libs/my_lib,examples/multi_python_versions/requirements,examples/multi_python_versions/tests,examples/pip_install,examples/pip_parse,examples/pip_parse_vendored,examples/pip_repository_annotations,examples/py_import,examples/relative_requirements,tests/compile_pip_requirements,tests/pip_repository_entry_points,tests/pip_deps
query --deleted_packages=examples/build_file_generation,examples/build_file_generation/get_url,examples/bzlmod,examples/multi_python_versions,examples/multi_python_versions/libs/my_lib,examples/multi_python_versions/requirements,examples/multi_python_versions/tests,examples/pip_install,examples/pip_parse,examples/pip_parse_vendored,examples/pip_repository_annotations,examples/py_import,examples/relative_requirements,tests/compile_pip_requirements,tests/pip_repository_entry_points,tests/pip_deps
build --deleted_packages=examples/build_file_generation,examples/build_file_generation/random_number_generator,examples/bzlmod,examples/multi_python_versions/libs/my_lib,examples/multi_python_versions/requirements,examples/multi_python_versions/tests,examples/pip_install,examples/pip_parse,examples/pip_parse_vendored,examples/pip_repository_annotations,examples/wheel,examples/wheel/lib,examples/wheel/private,tests/compile_pip_requirements,tests/load_from_macro,tests/pip_repository_entry_points
query --deleted_packages=examples/build_file_generation,examples/build_file_generation/random_number_generator,examples/bzlmod,examples/multi_python_versions/libs/my_lib,examples/multi_python_versions/requirements,examples/multi_python_versions/tests,examples/pip_install,examples/pip_parse,examples/pip_parse_vendored,examples/pip_repository_annotations,examples/wheel,examples/wheel/lib,examples/wheel/private,tests/compile_pip_requirements,tests/load_from_macro,tests/pip_repository_entry_points

test --test_output=errors

Expand Down
20 changes: 1 addition & 19 deletions BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.

load("@bazel_gazelle//:def.bzl", "gazelle")
load(":version.bzl", "BAZEL_VERSION")

package(default_visibility = ["//visibility:public"])
Expand All @@ -32,13 +31,13 @@ filegroup(
"WORKSPACE",
"internal_deps.bzl",
"internal_setup.bzl",
"//gazelle:distribution",
"//python:distribution",
"//python/pip_install:distribution",
"//third_party/github.com/bazelbuild/bazel-skylib/lib:distribution",
"//third_party/github.com/bazelbuild/bazel-skylib/rules:distribution",
"//third_party/github.com/bazelbuild/bazel-skylib/rules/private:distribution",
"//tools:distribution",
"@rules_python_gazelle_plugin//:distribution",
],
visibility = [
"//examples:__pkg__",
Expand All @@ -64,23 +63,6 @@ filegroup(
visibility = ["//visibility:public"],
)

# Gazelle configuration options.
# See https://github.com/bazelbuild/bazel-gazelle#running-gazelle-with-bazel
# gazelle:prefix github.com/bazelbuild/rules_python
# gazelle:exclude bazel-out
# gazelle:exclude examples/**
gazelle(name = "gazelle")

gazelle(
name = "gazelle_update_repos",
args = [
"-from_file=go.mod",
"-to_macro=gazelle/deps.bzl%gazelle_deps",
"-prune",
],
command = "update-repos",
)

genrule(
name = "assert_bazelversion",
srcs = [".bazelversion"],
Expand Down
19 changes: 14 additions & 5 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ python_register_multi_toolchains(
python_versions = MINOR_MAPPING.values(),
)

load("//gazelle:deps.bzl", "gazelle_deps")

# gazelle:repository_macro gazelle/deps.bzl%gazelle_deps
gazelle_deps()

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# Used for Bazel CI
Expand All @@ -58,3 +53,17 @@ rbe_preconfig(
name = "buildkite_config",
toolchain = "ubuntu1804-bazel-java11",
)

local_repository(
name = "rules_python_gazelle_plugin",
path = "gazelle",
)

# The rules_python gazelle extension has some third-party go dependencies
# which we need to fetch in order to compile it.
load("@rules_python_gazelle_plugin//:deps.bzl", _py_gazelle_deps = "gazelle_deps")

# See: https://github.com/bazelbuild/rules_python/blob/main/gazelle/README.md
# This rule loads and compiles various go dependencies that running gazelle
# for python requirements.
_py_gazelle_deps()
8 changes: 4 additions & 4 deletions examples/build_file_generation/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
# ruleset. When the symbol is loaded you can use the rule.
load("@bazel_gazelle//:def.bzl", "gazelle")
load("@pip//:requirements.bzl", "all_whl_requirements")
load("@rules_python//gazelle:def.bzl", "GAZELLE_PYTHON_RUNTIME_DEPS")
load("@rules_python//gazelle/manifest:defs.bzl", "gazelle_python_manifest")
load("@rules_python//gazelle/modules_mapping:def.bzl", "modules_mapping")
load("@rules_python//python:defs.bzl", "py_binary", "py_library", "py_test")
load("@rules_python//python:pip.bzl", "compile_pip_requirements")
load("@rules_python_gazelle_plugin//:def.bzl", "GAZELLE_PYTHON_RUNTIME_DEPS")
load("@rules_python_gazelle_plugin//manifest:defs.bzl", "gazelle_python_manifest")
load("@rules_python_gazelle_plugin//modules_mapping:def.bzl", "modules_mapping")

compile_pip_requirements(
name = "requirements",
Expand Down Expand Up @@ -53,7 +53,7 @@ gazelle_python_manifest(
gazelle(
name = "gazelle",
data = GAZELLE_PYTHON_RUNTIME_DEPS,
gazelle = "@rules_python//gazelle:gazelle_python_binary",
gazelle = "@rules_python_gazelle_plugin//python:gazelle_binary",
)

# This rule is auto-generated and managed by Gazelle,
Expand Down
15 changes: 14 additions & 1 deletion examples/build_file_generation/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ local_repository(
path = "../..",
)

local_repository(
name = "rules_python_gazelle_plugin",
path = "../../gazelle",
)

# When not using this example in the rules_python git repo you would load the python
# ruleset using the following StarLark.
# See https://github.com/bazelbuild/rules_python#getting-started for the latest
Expand All @@ -81,6 +86,14 @@ local_repository(
# strip_prefix = "rules_python-0.16.1",
# url = "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.16.1.tar.gz",
# )
#
# load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
# http_archive(
# name = "rules_python_gazelle_plugin",
# sha256 = "497ca47374f48c8b067d786b512ac10a276211810f4a580178ee9b9ad139323a",
# strip_prefix = "rules_python-0.16.1/gazelle",
# url = "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.16.1.tar.gz",
# )

# Next we load the toolchain from rules_python.
load("@rules_python//python:repositories.bzl", "python_register_toolchains")
Expand Down Expand Up @@ -124,7 +137,7 @@ install_deps()

# The rules_python gazelle extension has some third-party go dependencies
# which we need to fetch in order to compile it.
load("@rules_python//gazelle:deps.bzl", _py_gazelle_deps = "gazelle_deps")
load("@rules_python_gazelle_plugin//:deps.bzl", _py_gazelle_deps = "gazelle_deps")

# See: https://github.com/bazelbuild/rules_python/blob/main/gazelle/README.md
# This rule loads and compiles various go dependencies that running gazelle
Expand Down
2 changes: 1 addition & 1 deletion examples/build_file_generation/gazelle_python.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,4 @@ manifest:
zipp.py310compat: zipp
pip_repository:
name: pip
integrity: 4153df7683d64d7d6ad56c14ea1c7f7bec84a2ddf9ef8f075d1bb9313b8d11aa
integrity: 2c84a3cabeaff134a1d045e5a173a3178086f236ab20f895ffbd7f3b7a6e5bb0
13 changes: 13 additions & 0 deletions gazelle/.bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
test --test_output=errors

# Do NOT implicitly create empty __init__.py files in the runfiles tree.
# By default, these are created in every directory containing Python source code
# or shared libraries, and every parent directory of those directories,
# excluding the repo root directory. With this flag set, we are responsible for
# creating (possibly empty) __init__.py files and adding them to the srcs of
# Python targets as required.
build --incompatible_default_to_explicit_init_py

# Windows makes use of runfiles for some rules
build --enable_runfiles
startup --windows_enable_symlinks
52 changes: 52 additions & 0 deletions gazelle/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app

# Emacs garbage
*~

# Bazel directories
/bazel-*
/bazel-bin
/bazel-genfiles
/bazel-out
/bazel-testlogs
user.bazelrc

# vim swap files
*.swp
*.swo

# Go/Gazelle files
# These otherwise match patterns above
!go.mod
!BUILD.out

# Python cache
**/__pycache__/
98 changes: 26 additions & 72 deletions gazelle/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,81 +1,35 @@
load("@bazel_gazelle//:def.bzl", "gazelle_binary")
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
load("@rules_python//python:defs.bzl", "py_binary")
load("@bazel_gazelle//:def.bzl", "gazelle")

go_library(
name = "gazelle",
srcs = [
"configure.go",
"fix.go",
"generate.go",
"kinds.go",
"language.go",
"parser.go",
"resolve.go",
"std_modules.go",
"target.go",
],
importpath = "github.com/bazelbuild/rules_python/gazelle",
visibility = ["//visibility:public"],
deps = [
"//gazelle/manifest",
"//gazelle/pythonconfig",
"@bazel_gazelle//config:go_default_library",
"@bazel_gazelle//label:go_default_library",
"@bazel_gazelle//language:go_default_library",
"@bazel_gazelle//repo:go_default_library",
"@bazel_gazelle//resolve:go_default_library",
"@bazel_gazelle//rule:go_default_library",
"@com_github_bazelbuild_buildtools//build:go_default_library",
"@com_github_bmatcuk_doublestar//:doublestar",
"@com_github_emirpasic_gods//lists/singlylinkedlist",
"@com_github_emirpasic_gods//sets/treeset",
"@com_github_emirpasic_gods//utils",
"@com_github_google_uuid//:uuid",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
],
)

py_binary(
name = "parse",
srcs = ["parse.py"],
visibility = ["//visibility:public"],
)
# Gazelle configuration options.
# See https://github.com/bazelbuild/bazel-gazelle#running-gazelle-with-bazel
# gazelle:prefix github.com/bazelbuild/rules_python/gazelle
# gazelle:exclude bazel-out
gazelle(name = "gazelle")

py_binary(
name = "std_modules",
srcs = ["std_modules.py"],
visibility = ["//visibility:public"],
)

go_test(
name = "gazelle_test",
srcs = ["python_test.go"],
data = [
":gazelle_python_binary",
":parse",
":std_modules",
] + glob(["testdata/**"]),
deps = [
"@bazel_gazelle//testtools:go_default_library",
"@com_github_emirpasic_gods//lists/singlylinkedlist",
"@com_github_ghodss_yaml//:yaml",
"@io_bazel_rules_go//go/tools/bazel:go_default_library",
gazelle(
name = "gazelle_update_repos",
args = [
"-from_file=go.mod",
"-to_macro=deps.bzl%gazelle_deps",
"-prune",
],
)

gazelle_binary(
name = "gazelle_python_binary",
languages = ["//gazelle"],
visibility = ["//visibility:public"],
command = "update-repos",
)

filegroup(
name = "distribution",
srcs = glob(["**"]) + [
"//gazelle/manifest:distribution",
"//gazelle/modules_mapping:distribution",
"//gazelle/pythonconfig:distribution",
srcs = [
":BUILD.bazel",
":README.md",
":WORKSPACE",
":def.bzl",
":deps.bzl",
":go.mod",
":go.sum",
"//manifest:distribution",
"//modules_mapping:distribution",
"//python:distribution",
"//pythonconfig:distribution",
],
visibility = ["//:__pkg__"],
visibility = ["@rules_python//:__pkg__"],
)
10 changes: 5 additions & 5 deletions gazelle/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Add this to your `WORKSPACE`:
```starlark
# To compile the rules_python gazelle extension from source,
# we must fetch some third-party go dependencies that it uses.
load("@rules_python//gazelle:deps.bzl", _py_gazelle_deps = "gazelle_deps")
load("@rules_python_gazelle_plugin//:deps.bzl", _py_gazelle_deps = "gazelle_deps")

_py_gazelle_deps()
```
Expand All @@ -40,8 +40,8 @@ To keep the metadata updated, put this in your `BUILD.bazel` file next to `gazel

```starlark
load("@pip//:requirements.bzl", "all_whl_requirements")
load("@rules_python//gazelle/manifest:defs.bzl", "gazelle_python_manifest")
load("@rules_python//gazelle/modules_mapping:def.bzl", "modules_mapping")
load("@rules_python_gazelle_plugin//manifest:defs.bzl", "gazelle_python_manifest")
load("@rules_python_gazelle_plugin//modules_mapping:def.bzl", "modules_mapping")

# This rule fetches the metadata for python packages we depend on. That data is
# required for the gazelle_python_manifest rule to update our manifest file.
Expand Down Expand Up @@ -75,7 +75,7 @@ with the rules_python extension included. This typically goes in your root

```
load("@bazel_gazelle//:def.bzl", "gazelle")
load("@rules_python//gazelle:def.bzl", "GAZELLE_PYTHON_RUNTIME_DEPS")
load("@rules_python_gazelle_plugin//:def.bzl", "GAZELLE_PYTHON_RUNTIME_DEPS")
# Our gazelle target points to the python gazelle binary.
# This is the simple case where we only need one language supported.
Expand All @@ -85,7 +85,7 @@ load("@rules_python//gazelle:def.bzl", "GAZELLE_PYTHON_RUNTIME_DEPS")
gazelle(
name = "gazelle",
data = GAZELLE_PYTHON_RUNTIME_DEPS,
gazelle = "@rules_python//gazelle:gazelle_python_binary",
gazelle = "@rules_python_gazelle_plugin//python:gazelle_binary",
)
```

Expand Down
Loading

0 comments on commit 5ae27f4

Please sign in to comment.