From 16d55a0cbb7dc832d6316a461ccdf7ff20f03c49 Mon Sep 17 00:00:00 2001 From: Elvis Wianda Date: Thu, 6 Jun 2024 18:05:42 -0400 Subject: [PATCH] CICD-770 --- .github/workflows/ci.yaml | 2 +- BUILD | 30 - BUILD.bazel | 38 + MODULE.bazel | 21 +- MODULE.bazel.lock | 1530 ++++++++--------- WORKSPACE | 55 +- def.bzl | 19 + gazelle/deps.bzl => deps.bzl | 186 +- gazelle/BUILD.bazel | 83 +- gazelle/README.md | 190 -- gazelle/__main__.py | 32 - gazelle/bazel_gazelle.pr1095.patch | 19 - gazelle/def.bzl | 7 - gazelle/fix.go | 24 - gazelle/generate.go | 165 -- gazelle/language.go | 19 - gazelle/lifecycle.go | 63 - gazelle/manifest/test/run.sh | 8 - gazelle/modules_mapping/BUILD.bazel | 24 - gazelle/modules_mapping/generator.py | 82 - gazelle/modules_mapping/test_generator.py | 40 - .../django_types-0.15.0-py3-none-any.whl | Bin 381173 -> 0 bytes .../testdata/pytest-7.1.1-py3-none-any.whl | Bin 297001 -> 0 bytes gazelle/parser.go | 360 ---- gazelle/python_test.go | 4 +- gazelle/pythonconfig/BUILD.bazel | 16 - gazelle/std_modules.go | 107 -- gazelle/std_modules.py | 51 - gazelle/testdata/py_module/BUILD.in | 1 - gazelle/testdata/py_module/BUILD.out | 28 - gazelle/testdata/py_module/README.md | 3 - gazelle/testdata/py_module/WORKSPACE | 1 - gazelle/testdata/py_module/__init__.py | 3 - gazelle/testdata/py_module/__main__.py | 10 - gazelle/testdata/py_module/__test__.py | 13 - gazelle/testdata/py_module/foo.py | 2 - gazelle/testdata/py_module/test.yaml | 3 - gazelle/testdata/pycheck/BUILD.in | 1 - gazelle/testdata/pycheck/BUILD.out | 41 - gazelle/testdata/pycheck/README.md | 3 - gazelle/testdata/pycheck/WORKSPACE | 1 - gazelle/testdata/pycheck/__init__.py | 3 - gazelle/testdata/pycheck/__main__.py | 7 - gazelle/testdata/pycheck/__test__.py | 13 - gazelle/testdata/pycheck/foo.py | 2 - gazelle/testdata/pycheck/test.yaml | 3 - gazelle/testdata/simple/BUILD.out | 10 +- go.mod | 24 +- go.sum | 56 +- {gazelle/manifest => manifest}/BUILD.bazel | 15 +- manifest/copy_to_source.py | 36 + {gazelle/manifest => manifest}/defs.bzl | 132 +- .../generate/BUILD.bazel | 8 +- .../generate/generate.go | 64 +- .../manifest => manifest}/hasher/BUILD.bazel | 4 +- {gazelle/manifest => manifest}/hasher/main.go | 0 {gazelle/manifest => manifest}/manifest.go | 22 +- .../manifest => manifest}/manifest_test.go | 4 +- .../manifest => manifest}/test/BUILD.bazel | 2 +- {gazelle/manifest => manifest}/test/test.go | 2 +- .../testdata/gazelle_python.yaml | 0 .../testdata/requirements.txt | 0 modules_mapping/BUILD.bazel | 15 + .../def.bzl | 29 +- modules_mapping/generator.py | 133 ++ python/BUILD.bazel | 114 ++ {gazelle => python}/configure.go | 87 +- python/extensions.bzl | 5 + python/file_parser.go | 201 +++ python/file_parser_test.go | 256 +++ python/fix.go | 32 + python/gazelle_test.bzl | 49 + python/generate.go | 461 +++++ {gazelle => python}/kinds.go | 62 +- python/language.go | 32 + python/parser.go | 260 +++ python/private/BUILD.bazel | 0 python/private/extensions.bzl | 9 + python/python_test.go | 204 +++ python/resolve.go | 318 ++++ python/std_modules.go | 40 + python/std_modules_test.go | 27 + {gazelle => python}/target.go | 81 +- pythonconfig/BUILD.bazel | 28 + .../pythonconfig.go | 241 ++- pythonconfig/pythonconfig_test.go | 26 + .../pythonconfig => pythonconfig}/types.go | 14 + 87 files changed, 3745 insertions(+), 2671 deletions(-) delete mode 100644 BUILD create mode 100644 BUILD.bazel create mode 100644 def.bzl rename gazelle/deps.bzl => deps.bzl (61%) delete mode 100644 gazelle/README.md delete mode 100644 gazelle/__main__.py delete mode 100644 gazelle/bazel_gazelle.pr1095.patch delete mode 100644 gazelle/def.bzl delete mode 100644 gazelle/fix.go delete mode 100644 gazelle/generate.go delete mode 100644 gazelle/language.go delete mode 100644 gazelle/lifecycle.go delete mode 100755 gazelle/manifest/test/run.sh delete mode 100644 gazelle/modules_mapping/BUILD.bazel delete mode 100644 gazelle/modules_mapping/generator.py delete mode 100644 gazelle/modules_mapping/test_generator.py delete mode 100644 gazelle/modules_mapping/testdata/django_types-0.15.0-py3-none-any.whl delete mode 100644 gazelle/modules_mapping/testdata/pytest-7.1.1-py3-none-any.whl delete mode 100644 gazelle/parser.go delete mode 100644 gazelle/pythonconfig/BUILD.bazel delete mode 100644 gazelle/std_modules.go delete mode 100644 gazelle/std_modules.py delete mode 100644 gazelle/testdata/py_module/BUILD.in delete mode 100644 gazelle/testdata/py_module/BUILD.out delete mode 100644 gazelle/testdata/py_module/README.md delete mode 100644 gazelle/testdata/py_module/WORKSPACE delete mode 100644 gazelle/testdata/py_module/__init__.py delete mode 100644 gazelle/testdata/py_module/__main__.py delete mode 100644 gazelle/testdata/py_module/__test__.py delete mode 100644 gazelle/testdata/py_module/foo.py delete mode 100644 gazelle/testdata/py_module/test.yaml delete mode 100644 gazelle/testdata/pycheck/BUILD.in delete mode 100644 gazelle/testdata/pycheck/BUILD.out delete mode 100644 gazelle/testdata/pycheck/README.md delete mode 100644 gazelle/testdata/pycheck/WORKSPACE delete mode 100644 gazelle/testdata/pycheck/__init__.py delete mode 100644 gazelle/testdata/pycheck/__main__.py delete mode 100644 gazelle/testdata/pycheck/__test__.py delete mode 100644 gazelle/testdata/pycheck/foo.py delete mode 100644 gazelle/testdata/pycheck/test.yaml rename {gazelle/manifest => manifest}/BUILD.bazel (56%) create mode 100644 manifest/copy_to_source.py rename {gazelle/manifest => manifest}/defs.bzl (57%) rename {gazelle/manifest => manifest}/generate/BUILD.bazel (61%) rename {gazelle/manifest => manifest}/generate/generate.go (78%) rename {gazelle/manifest => manifest}/hasher/BUILD.bazel (66%) rename {gazelle/manifest => manifest}/hasher/main.go (100%) rename {gazelle/manifest => manifest}/manifest.go (89%) rename {gazelle/manifest => manifest}/manifest_test.go (95%) rename {gazelle/manifest => manifest}/test/BUILD.bazel (55%) rename {gazelle/manifest => manifest}/test/test.go (97%) rename {gazelle/manifest => manifest}/testdata/gazelle_python.yaml (100%) rename {gazelle/manifest => manifest}/testdata/requirements.txt (100%) create mode 100644 modules_mapping/BUILD.bazel rename {gazelle/modules_mapping => modules_mapping}/def.bzl (61%) create mode 100644 modules_mapping/generator.py create mode 100644 python/BUILD.bazel rename {gazelle => python}/configure.go (69%) create mode 100644 python/extensions.bzl create mode 100644 python/file_parser.go create mode 100644 python/file_parser_test.go create mode 100644 python/fix.go create mode 100644 python/gazelle_test.bzl create mode 100644 python/generate.go rename {gazelle => python}/kinds.go (64%) create mode 100644 python/language.go create mode 100644 python/parser.go create mode 100644 python/private/BUILD.bazel create mode 100644 python/private/extensions.bzl create mode 100644 python/python_test.go create mode 100644 python/resolve.go create mode 100644 python/std_modules.go create mode 100644 python/std_modules_test.go rename {gazelle => python}/target.go (63%) create mode 100644 pythonconfig/BUILD.bazel rename {gazelle/pythonconfig => pythonconfig}/pythonconfig.go (62%) create mode 100644 pythonconfig/pythonconfig_test.go rename {gazelle/pythonconfig => pythonconfig}/types.go (80%) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 10ec711..998a912 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -32,4 +32,4 @@ jobs: env: # Bazelisk will download bazel to here XDG_CACHE_HOME: ~/.cache/bazel-repo - run: bazel test //... --jobs 1 # limit number of jobs to prevent broken pipe error + run: bazel test //... diff --git a/BUILD b/BUILD deleted file mode 100644 index 721aa3d..0000000 --- a/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2017 The Bazel Authors. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -load("@bazel_gazelle//:def.bzl", "gazelle") - -# Gazelle configuration options. -# See https://github.com/bazelbuild/bazel-gazelle#running-gazelle-with-bazel -# gazelle:prefix github.com/benchsci/rules_python_gazelle -# gazelle:exclude bazel-out -gazelle(name = "gazelle") - -gazelle( - name = "update_go_deps", - args = [ - "-from_file=go.mod", - "-to_macro=gazelle/deps.bzl%gazelle_deps", - "-prune", - ], - command = "update-repos", -) diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 0000000..f74338d --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,38 @@ +load("@bazel_gazelle//:def.bzl", "gazelle") + +# 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", +) + +gazelle( + name = "gazelle_update_repos", + args = [ + "-from_file=go.mod", + "-to_macro=deps.bzl%go_deps", + "-prune", + ], + command = "update-repos", +) + +filegroup( + name = "distribution", + srcs = [ + ":BUILD.bazel", + ":MODULE.bazel", + ":README.md", + ":WORKSPACE", + ":def.bzl", + ":deps.bzl", + ":go.mod", + ":go.sum", + "//manifest:distribution", + "//modules_mapping:distribution", + "//python:distribution", + "//pythonconfig:distribution", + ], + visibility = ["@rules_python//:__pkg__"], +) diff --git a/MODULE.bazel b/MODULE.bazel index 1ca7548..45efaff 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -4,7 +4,8 @@ module( compatibility_level = 1, ) -bazel_dep(name = "rules_python", version = "0.27.1") +bazel_dep(name = "bazel_skylib", version = "1.6.1") +bazel_dep(name = "rules_python", version = "0.32.2") bazel_dep(name = "rules_go", version = "0.41.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "gazelle", version = "0.33.0", repo_name = "bazel_gazelle") @@ -13,15 +14,21 @@ go_deps.from_file(go_mod = "//:go.mod") use_repo( go_deps, "com_github_bazelbuild_buildtools", + "com_github_bmatcuk_doublestar_v4", "com_github_emirpasic_gods", "com_github_ghodss_yaml", - "com_github_google_uuid", + "com_github_smacker_go_tree_sitter", + "com_github_stretchr_testify", "in_gopkg_yaml_v2", + "org_golang_x_sync", ) -# (Optional) Register a specific python toolchain instead of using the host version -python = use_extension("@rules_python//python/extensions:python.bzl", "python") -python.toolchain( - python_version = "3.9", +python_stdlib_list = use_extension("//python:extensions.bzl", "python_stdlib_list") +use_repo( + python_stdlib_list, + "python_stdlib_list_3_10", + "python_stdlib_list_3_11", + "python_stdlib_list_3_12", + "python_stdlib_list_3_8", + "python_stdlib_list_3_9", ) -use_repo(python, "python_3_9") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 5476575..9c6b15c 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1,6 +1,6 @@ { - "lockFileVersion": 3, - "moduleFileHash": "a3a9a2e2ebf4d6f4bf4a956892ef8d4df8fc690c73004fe7ae4564cd87d35a2f", + "lockFileVersion": 6, + "moduleFileHash": "36a9dc9d53f872e231c3dfc3dcf7e90949b064cdaf5f83bb3e48bfa190bab448", "flags": { "cmdRegistries": [ "https://bcr.bazel.build/" @@ -13,7 +13,7 @@ "compatibilityMode": "ERROR" }, "localOverrideHashes": { - "bazel_tools": "922ea6752dc9105de5af957f7a99a6933c0a6a712d23df6aad16a9c399f7e787" + "bazel_tools": "1ae69322ac3823527337acf02016e8ee95813d8d356f47060255b8956fa642f0" }, "moduleDepGraph": { "": { @@ -30,15 +30,18 @@ "usingModule": "", "location": { "file": "@@//:MODULE.bazel", - "line": 11, + "line": 12, "column": 24 }, "imports": { "com_github_bazelbuild_buildtools": "com_github_bazelbuild_buildtools", + "com_github_bmatcuk_doublestar_v4": "com_github_bmatcuk_doublestar_v4", "com_github_emirpasic_gods": "com_github_emirpasic_gods", "com_github_ghodss_yaml": "com_github_ghodss_yaml", - "com_github_google_uuid": "com_github_google_uuid", - "in_gopkg_yaml_v2": "in_gopkg_yaml_v2" + "com_github_smacker_go_tree_sitter": "com_github_smacker_go_tree_sitter", + "com_github_stretchr_testify": "com_github_stretchr_testify", + "in_gopkg_yaml_v2": "in_gopkg_yaml_v2", + "org_golang_x_sync": "org_golang_x_sync" }, "devImports": [], "tags": [ @@ -50,7 +53,7 @@ "devDependency": false, "location": { "file": "@@//:MODULE.bazel", - "line": 12, + "line": 13, "column": 18 } } @@ -59,48 +62,70 @@ "hasNonDevUseExtension": true }, { - "extensionBzlFile": "@rules_python//python/extensions:python.bzl", - "extensionName": "python", + "extensionBzlFile": "@com_github_benchsci_rules_python_gazelle//python:extensions.bzl", + "extensionName": "python_stdlib_list", "usingModule": "", "location": { "file": "@@//:MODULE.bazel", - "line": 23, - "column": 23 + "line": 26, + "column": 35 }, "imports": { - "python_3_9": "python_3_9" + "python_stdlib_list_3_10": "python_stdlib_list_3_10", + "python_stdlib_list_3_11": "python_stdlib_list_3_11", + "python_stdlib_list_3_12": "python_stdlib_list_3_12", + "python_stdlib_list_3_8": "python_stdlib_list_3_8", + "python_stdlib_list_3_9": "python_stdlib_list_3_9" }, "devImports": [], - "tags": [ - { - "tagName": "toolchain", - "attributeValues": { - "python_version": "3.9" - }, - "devDependency": false, - "location": { - "file": "@@//:MODULE.bazel", - "line": 24, - "column": 17 - } - } - ], + "tags": [], "hasDevUseExtension": false, "hasNonDevUseExtension": true } ], "deps": { - "rules_python": "rules_python@0.27.1", + "bazel_skylib": "bazel_skylib@1.6.1", + "rules_python": "rules_python@0.32.2", "io_bazel_rules_go": "rules_go@0.41.0", "bazel_gazelle": "gazelle@0.33.0", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" } }, - "rules_python@0.27.1": { + "bazel_skylib@1.6.1": { + "name": "bazel_skylib", + "version": "1.6.1", + "key": "bazel_skylib@1.6.1", + "repoName": "bazel_skylib", + "executionPlatformsToRegister": [], + "toolchainsToRegister": [ + "//toolchains/unittest:cmd_toolchain", + "//toolchains/unittest:bash_toolchain" + ], + "extensionUsages": [], + "deps": { + "platforms": "platforms@0.0.7", + "bazel_tools": "bazel_tools@_", + "local_config_platform": "local_config_platform@_" + }, + "repoSpec": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.6.1/bazel-skylib-1.6.1.tar.gz" + ], + "integrity": "sha256-nziIakBUjG6WwQa3UvJCEw7hGqoGila6flb0UR8z5PI=", + "strip_prefix": "", + "remote_patches": {}, + "remote_patch_strip": 0 + } + } + }, + "rules_python@0.32.2": { "name": "rules_python", - "version": "0.27.1", - "key": "rules_python@0.27.1", + "version": "0.32.2", + "key": "rules_python@0.32.2", "repoName": "rules_python", "executionPlatformsToRegister": [], "toolchainsToRegister": [ @@ -110,10 +135,10 @@ { "extensionBzlFile": "@rules_python//python/private/bzlmod:internal_deps.bzl", "extensionName": "internal_deps", - "usingModule": "rules_python@0.27.1", + "usingModule": "rules_python@0.32.2", "location": { - "file": "https://bcr.bazel.build/modules/rules_python/0.27.1/MODULE.bazel", - "line": 17, + "file": "https://bcr.bazel.build/modules/rules_python/0.32.2/MODULE.bazel", + "line": 16, "column": 30 }, "imports": { @@ -141,8 +166,8 @@ "attributeValues": {}, "devDependency": false, "location": { - "file": "https://bcr.bazel.build/modules/rules_python/0.27.1/MODULE.bazel", - "line": 18, + "file": "https://bcr.bazel.build/modules/rules_python/0.32.2/MODULE.bazel", + "line": 17, "column": 22 } } @@ -153,13 +178,15 @@ { "extensionBzlFile": "@rules_python//python/extensions:python.bzl", "extensionName": "python", - "usingModule": "rules_python@0.27.1", + "usingModule": "rules_python@0.32.2", "location": { - "file": "https://bcr.bazel.build/modules/rules_python/0.27.1/MODULE.bazel", - "line": 43, + "file": "https://bcr.bazel.build/modules/rules_python/0.32.2/MODULE.bazel", + "line": 42, "column": 23 }, "imports": { + "python_3_11": "python_3_11", + "python_versions": "python_versions", "pythons_hub": "pythons_hub" }, "devImports": [], @@ -172,37 +199,72 @@ }, "devDependency": false, "location": { - "file": "https://bcr.bazel.build/modules/rules_python/0.27.1/MODULE.bazel", - "line": 49, + "file": "https://bcr.bazel.build/modules/rules_python/0.32.2/MODULE.bazel", + "line": 48, "column": 17 } } ], "hasDevUseExtension": false, "hasNonDevUseExtension": true + }, + { + "extensionBzlFile": "@rules_python//python/extensions:pip.bzl", + "extensionName": "pip", + "usingModule": "rules_python@0.32.2", + "location": { + "file": "https://bcr.bazel.build/modules/rules_python/0.32.2/MODULE.bazel", + "line": 60, + "column": 20 + }, + "imports": { + "rules_python_publish_deps": "rules_python_publish_deps" + }, + "devImports": [], + "tags": [ + { + "tagName": "parse", + "attributeValues": { + "experimental_index_url": "https://pypi.org/simple", + "hub_name": "rules_python_publish_deps", + "python_version": "3.11", + "requirements_darwin": "//tools/publish:requirements_darwin.txt", + "requirements_lock": "//tools/publish:requirements.txt", + "requirements_windows": "//tools/publish:requirements_windows.txt" + }, + "devDependency": false, + "location": { + "file": "https://bcr.bazel.build/modules/rules_python/0.32.2/MODULE.bazel", + "line": 61, + "column": 10 + } + } + ], + "hasDevUseExtension": false, + "hasNonDevUseExtension": true } ], "deps": { - "bazel_features": "bazel_features@1.1.1", - "bazel_skylib": "bazel_skylib@1.3.0", + "bazel_features": "bazel_features@1.9.1", + "bazel_skylib": "bazel_skylib@1.6.1", + "rules_cc": "rules_cc@0.0.9", "platforms": "platforms@0.0.7", - "rules_proto": "rules_proto@5.3.0-21.7", + "rules_proto": "rules_proto@6.0.0-rc1", "com_google_protobuf": "protobuf@21.7", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1", "urls": [ - "https://github.com/bazelbuild/rules_python/releases/download/0.27.1/rules_python-0.27.1.tar.gz" + "https://github.com/bazelbuild/rules_python/releases/download/0.32.2/rules_python-0.32.2.tar.gz" ], - "integrity": "sha256-6FrjDeM2JaY+yn/ECpT+qEXmQYiOUvMra+6pHosbJ5M=", - "strip_prefix": "rules_python-0.27.1", + "integrity": "sha256-SRLO1w3BoqjkuGzsIzsZLKBT6CvHLYd7mOEmFW6PIo0=", + "strip_prefix": "rules_python-0.32.2", "remote_patches": { - "https://bcr.bazel.build/modules/rules_python/0.27.1/patches/module_dot_bazel_version.patch": "sha256-Ier7Gb4zhbS273tClCov24gNYdheo4FdegZwaHBrQy0=" + "https://bcr.bazel.build/modules/rules_python/0.32.2/patches/module_dot_bazel_version.patch": "sha256-lfZaBBRr2RFX7bO0wsVwW9urJGDBxoJHEwQ2tMN862k=" }, "remote_patch_strip": 1 } @@ -318,19 +380,18 @@ } ], "deps": { - "bazel_skylib": "bazel_skylib@1.3.0", + "bazel_skylib": "bazel_skylib@1.6.1", "platforms": "platforms@0.0.7", - "rules_proto": "rules_proto@5.3.0-21.7", + "rules_proto": "rules_proto@6.0.0-rc1", "com_google_protobuf": "protobuf@21.7", "gazelle": "gazelle@0.33.0", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0", "urls": [ "https://github.com/bazelbuild/rules_go/releases/download/v0.41.0/rules_go-v0.41.0.zip" ], @@ -442,18 +503,17 @@ } ], "deps": { - "bazel_skylib": "bazel_skylib@1.3.0", + "bazel_skylib": "bazel_skylib@1.6.1", "com_google_protobuf": "protobuf@21.7", "io_bazel_rules_go": "rules_go@0.41.0", - "rules_proto": "rules_proto@5.3.0-21.7", + "rules_proto": "rules_proto@6.0.0-rc1", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "gazelle~0.33.0", "urls": [ "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.33.0/bazel-gazelle-v0.33.0.tar.gz" ], @@ -481,7 +541,7 @@ "usingModule": "bazel_tools@_", "location": { "file": "@@bazel_tools//:MODULE.bazel", - "line": 17, + "line": 18, "column": 29 }, "imports": { @@ -499,7 +559,7 @@ "usingModule": "bazel_tools@_", "location": { "file": "@@bazel_tools//:MODULE.bazel", - "line": 21, + "line": 22, "column": 32 }, "imports": { @@ -516,7 +576,7 @@ "usingModule": "bazel_tools@_", "location": { "file": "@@bazel_tools//:MODULE.bazel", - "line": 24, + "line": 25, "column": 32 }, "imports": { @@ -538,7 +598,7 @@ "usingModule": "bazel_tools@_", "location": { "file": "@@bazel_tools//:MODULE.bazel", - "line": 35, + "line": 36, "column": 39 }, "imports": { @@ -555,7 +615,7 @@ "usingModule": "bazel_tools@_", "location": { "file": "@@bazel_tools//:MODULE.bazel", - "line": 39, + "line": 40, "column": 48 }, "imports": { @@ -572,7 +632,7 @@ "usingModule": "bazel_tools@_", "location": { "file": "@@bazel_tools//:MODULE.bazel", - "line": 42, + "line": 43, "column": 42 }, "imports": { @@ -583,14 +643,32 @@ "tags": [], "hasDevUseExtension": false, "hasNonDevUseExtension": true + }, + { + "extensionBzlFile": "@buildozer//:buildozer_binary.bzl", + "extensionName": "buildozer_binary", + "usingModule": "bazel_tools@_", + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 47, + "column": 33 + }, + "imports": { + "buildozer_binary": "buildozer_binary" + }, + "devImports": [], + "tags": [], + "hasDevUseExtension": false, + "hasNonDevUseExtension": true } ], "deps": { "rules_cc": "rules_cc@0.0.9", - "rules_java": "rules_java@7.1.0", + "rules_java": "rules_java@7.4.0", "rules_license": "rules_license@0.0.7", - "rules_proto": "rules_proto@5.3.0-21.7", - "rules_python": "rules_python@0.27.1", + "rules_proto": "rules_proto@6.0.0-rc1", + "rules_python": "rules_python@0.32.2", + "buildozer": "buildozer@6.4.0.2", "platforms": "platforms@0.0.7", "com_google_protobuf": "protobuf@21.7", "zlib": "zlib@1.3", @@ -611,10 +689,37 @@ "bazel_tools": "bazel_tools@_" } }, - "bazel_features@1.1.1": { + "platforms@0.0.7": { + "name": "platforms", + "version": "0.0.7", + "key": "platforms@0.0.7", + "repoName": "platforms", + "executionPlatformsToRegister": [], + "toolchainsToRegister": [], + "extensionUsages": [], + "deps": { + "rules_license": "rules_license@0.0.7", + "bazel_tools": "bazel_tools@_", + "local_config_platform": "local_config_platform@_" + }, + "repoSpec": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz" + ], + "integrity": "sha256-OlYcmee9vpFzqmU/1Xn+hJ8djWc5V4CrR3Cx84FDHVE=", + "strip_prefix": "", + "remote_patches": {}, + "remote_patch_strip": 0 + } + } + }, + "bazel_features@1.9.1": { "name": "bazel_features", - "version": "1.1.1", - "key": "bazel_features@1.1.1", + "version": "1.9.1", + "key": "bazel_features@1.9.1", "repoName": "bazel_features", "executionPlatformsToRegister": [], "toolchainsToRegister": [], @@ -622,10 +727,10 @@ { "extensionBzlFile": "@bazel_features//private:extensions.bzl", "extensionName": "version_extension", - "usingModule": "bazel_features@1.1.1", + "usingModule": "bazel_features@1.9.1", "location": { - "file": "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel", - "line": 6, + "file": "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel", + "line": 15, "column": 24 }, "imports": { @@ -639,112 +744,102 @@ } ], "deps": { + "bazel_skylib": "bazel_skylib@1.6.1", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "bazel_features~1.1.1", "urls": [ - "https://github.com/bazel-contrib/bazel_features/releases/download/v1.1.1/bazel_features-v1.1.1.tar.gz" + "https://github.com/bazel-contrib/bazel_features/releases/download/v1.9.1/bazel_features-v1.9.1.tar.gz" ], - "integrity": "sha256-YsJuQn5cvHUQJERpJ2IuOYqdzfMsZDJSOIFXCdEcEag=", - "strip_prefix": "bazel_features-1.1.1", + "integrity": "sha256-13h9oomn+0lzUiEa0gDsn2mIIqngdXpJdv2fcT/zcrM=", + "strip_prefix": "bazel_features-1.9.1", "remote_patches": { - "https://bcr.bazel.build/modules/bazel_features/1.1.1/patches/module_dot_bazel_version.patch": "sha256-+56MAEsc7bYN/Pzhn252ZQUxiRzZg9bynXj1qpsmCYs=" + "https://bcr.bazel.build/modules/bazel_features/1.9.1/patches/module_dot_bazel_version.patch": "sha256-a2ofwS5r2Qq+WxzVa7sLbRXhfT3JoYxSlUVQH/nL454=" }, "remote_patch_strip": 1 } } }, - "bazel_skylib@1.3.0": { - "name": "bazel_skylib", - "version": "1.3.0", - "key": "bazel_skylib@1.3.0", - "repoName": "bazel_skylib", + "rules_cc@0.0.9": { + "name": "rules_cc", + "version": "0.0.9", + "key": "rules_cc@0.0.9", + "repoName": "rules_cc", "executionPlatformsToRegister": [], "toolchainsToRegister": [ - "//toolchains/unittest:cmd_toolchain", - "//toolchains/unittest:bash_toolchain" + "@local_config_cc_toolchains//:all" ], - "extensionUsages": [], - "deps": { - "platforms": "platforms@0.0.7", - "bazel_tools": "bazel_tools@_", - "local_config_platform": "local_config_platform@_" - }, - "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "name": "bazel_skylib~1.3.0", - "urls": [ - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz" - ], - "integrity": "sha256-dNVE2W9KW7Yw1GXKi7z+Ix41lOWq5X4e2/F6brPKJQY=", - "strip_prefix": "", - "remote_patches": {}, - "remote_patch_strip": 0 + "extensionUsages": [ + { + "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl", + "extensionName": "cc_configure_extension", + "usingModule": "rules_cc@0.0.9", + "location": { + "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel", + "line": 9, + "column": 29 + }, + "imports": { + "local_config_cc_toolchains": "local_config_cc_toolchains" + }, + "devImports": [], + "tags": [], + "hasDevUseExtension": false, + "hasNonDevUseExtension": true } - } - }, - "platforms@0.0.7": { - "name": "platforms", - "version": "0.0.7", - "key": "platforms@0.0.7", - "repoName": "platforms", - "executionPlatformsToRegister": [], - "toolchainsToRegister": [], - "extensionUsages": [], + ], "deps": { - "rules_license": "rules_license@0.0.7", + "platforms": "platforms@0.0.7", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "platforms", "urls": [ - "https://github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz" + "https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz" ], - "integrity": "sha256-OlYcmee9vpFzqmU/1Xn+hJ8djWc5V4CrR3Cx84FDHVE=", - "strip_prefix": "", - "remote_patches": {}, + "integrity": "sha256-IDeHW5pEVtzkp50RKorohbvEqtlo5lh9ym5k86CQDN8=", + "strip_prefix": "rules_cc-0.0.9", + "remote_patches": { + "https://bcr.bazel.build/modules/rules_cc/0.0.9/patches/module_dot_bazel_version.patch": "sha256-mM+qzOI0SgAdaJBlWOSMwMPKpaA9b7R37Hj/tp5bb4g=" + }, "remote_patch_strip": 0 } } }, - "rules_proto@5.3.0-21.7": { + "rules_proto@6.0.0-rc1": { "name": "rules_proto", - "version": "5.3.0-21.7", - "key": "rules_proto@5.3.0-21.7", + "version": "6.0.0-rc1", + "key": "rules_proto@6.0.0-rc1", "repoName": "rules_proto", "executionPlatformsToRegister": [], "toolchainsToRegister": [], "extensionUsages": [], "deps": { - "bazel_skylib": "bazel_skylib@1.3.0", - "com_google_protobuf": "protobuf@21.7", - "rules_cc": "rules_cc@0.0.9", + "rules_license": "rules_license@0.0.7", + "bazel_skylib": "bazel_skylib@1.6.1", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_proto~5.3.0-21.7", "urls": [ - "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz" + "https://github.com/bazelbuild/rules_proto/releases/download/6.0.0-rc1/rules_proto-6.0.0-rc1.tar.gz" ], - "integrity": "sha256-3D+yBqLLNEG0heseQjFlsjEjWh6psDG0Qzz3vB+kYN0=", - "strip_prefix": "rules_proto-5.3.0-21.7", - "remote_patches": {}, - "remote_patch_strip": 0 + "integrity": "sha256-kEqAl/rkKmkMjgjYBSEOQMzLBp9fmg9nJ89PqnvtLJw=", + "strip_prefix": "rules_proto-6.0.0-rc1", + "remote_patches": { + "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/patches/module_dot_bazel_version.patch": "sha256-OepRECTunWiz3WREvMK/pOvpt/HRZ6g87fKfokcnQGE=" + }, + "remote_patch_strip": 1 } } }, @@ -799,11 +894,11 @@ } ], "deps": { - "bazel_skylib": "bazel_skylib@1.3.0", - "rules_python": "rules_python@0.27.1", + "bazel_skylib": "bazel_skylib@1.6.1", + "rules_python": "rules_python@0.32.2", "rules_cc": "rules_cc@0.0.9", - "rules_proto": "rules_proto@5.3.0-21.7", - "rules_java": "rules_java@7.1.0", + "rules_proto": "rules_proto@6.0.0-rc1", + "rules_java": "rules_java@7.4.0", "rules_pkg": "rules_pkg@0.7.0", "com_google_abseil": "abseil-cpp@20211102.0", "zlib": "zlib@1.3", @@ -814,10 +909,9 @@ "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "protobuf~21.7", "urls": [ "https://github.com/protocolbuffers/protobuf/releases/download/v21.7/protobuf-all-21.7.zip" ], @@ -833,60 +927,10 @@ } } }, - "rules_cc@0.0.9": { - "name": "rules_cc", - "version": "0.0.9", - "key": "rules_cc@0.0.9", - "repoName": "rules_cc", - "executionPlatformsToRegister": [], - "toolchainsToRegister": [ - "@local_config_cc_toolchains//:all" - ], - "extensionUsages": [ - { - "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl", - "extensionName": "cc_configure_extension", - "usingModule": "rules_cc@0.0.9", - "location": { - "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel", - "line": 9, - "column": 29 - }, - "imports": { - "local_config_cc_toolchains": "local_config_cc_toolchains" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true - } - ], - "deps": { - "platforms": "platforms@0.0.7", - "bazel_tools": "bazel_tools@_", - "local_config_platform": "local_config_platform@_" - }, - "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "name": "rules_cc~0.0.9", - "urls": [ - "https://github.com/bazelbuild/rules_cc/releases/download/0.0.9/rules_cc-0.0.9.tar.gz" - ], - "integrity": "sha256-IDeHW5pEVtzkp50RKorohbvEqtlo5lh9ym5k86CQDN8=", - "strip_prefix": "rules_cc-0.0.9", - "remote_patches": { - "https://bcr.bazel.build/modules/rules_cc/0.0.9/patches/module_dot_bazel_version.patch": "sha256-mM+qzOI0SgAdaJBlWOSMwMPKpaA9b7R37Hj/tp5bb4g=" - }, - "remote_patch_strip": 0 - } - } - }, - "rules_java@7.1.0": { + "rules_java@7.4.0": { "name": "rules_java", - "version": "7.1.0", - "key": "rules_java@7.1.0", + "version": "7.4.0", + "key": "rules_java@7.4.0", "repoName": "rules_java", "executionPlatformsToRegister": [], "toolchainsToRegister": [ @@ -919,9 +963,9 @@ { "extensionBzlFile": "@rules_java//java:extensions.bzl", "extensionName": "toolchains", - "usingModule": "rules_java@7.1.0", + "usingModule": "rules_java@7.4.0", "location": { - "file": "https://bcr.bazel.build/modules/rules_java/7.1.0/MODULE.bazel", + "file": "https://bcr.bazel.build/modules/rules_java/7.4.0/MODULE.bazel", "line": 19, "column": 27 }, @@ -963,21 +1007,20 @@ "deps": { "platforms": "platforms@0.0.7", "rules_cc": "rules_cc@0.0.9", - "bazel_skylib": "bazel_skylib@1.3.0", - "rules_proto": "rules_proto@5.3.0-21.7", + "bazel_skylib": "bazel_skylib@1.6.1", + "rules_proto": "rules_proto@6.0.0-rc1", "rules_license": "rules_license@0.0.7", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0", "urls": [ - "https://github.com/bazelbuild/rules_java/releases/download/7.1.0/rules_java-7.1.0.tar.gz" + "https://github.com/bazelbuild/rules_java/releases/download/7.4.0/rules_java-7.4.0.tar.gz" ], - "integrity": "sha256-o3pOX2OrgnFuXdau75iO2EYcegC46TYnImKJn1h81OE=", + "integrity": "sha256-l27wi0nJKXQfIBeQ5Z44B8cq2B9CjIvJU82+/1/tFes=", "strip_prefix": "", "remote_patches": {}, "remote_patch_strip": 0 @@ -997,17 +1040,82 @@ "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/rules_license/releases/download/0.0.7/rules_license-0.0.7.tar.gz" + ], + "integrity": "sha256-RTHezLkTY5ww5cdRKgVNXYdWmNrrddjPkPKEN1/nw2A=", + "strip_prefix": "", + "remote_patches": {}, + "remote_patch_strip": 0 + } + } + }, + "buildozer@6.4.0.2": { + "name": "buildozer", + "version": "6.4.0.2", + "key": "buildozer@6.4.0.2", + "repoName": "buildozer", + "executionPlatformsToRegister": [], + "toolchainsToRegister": [], + "extensionUsages": [ + { + "extensionBzlFile": "@buildozer//:buildozer_binary.bzl", + "extensionName": "buildozer_binary", + "usingModule": "buildozer@6.4.0.2", + "location": { + "file": "https://bcr.bazel.build/modules/buildozer/6.4.0.2/MODULE.bazel", + "line": 7, + "column": 33 + }, + "imports": { + "buildozer_binary": "buildozer_binary" + }, + "devImports": [], + "tags": [ + { + "tagName": "buildozer", + "attributeValues": { + "sha256": { + "darwin-amd64": "d29e347ecd6b5673d72cb1a8de05bf1b06178dd229ff5eb67fad5100c840cc8e", + "darwin-arm64": "9b9e71bdbec5e7223871e913b65d12f6d8fa026684daf991f00e52ed36a6978d", + "linux-amd64": "8dfd6345da4e9042daa738d7fdf34f699c5dfce4632f7207956fceedd8494119", + "linux-arm64": "6559558fded658c8fa7432a9d011f7c4dcbac6b738feae73d2d5c352e5f605fa", + "windows-amd64": "e7f05bf847f7c3689dd28926460ce6e1097ae97380ac8e6ae7147b7b706ba19b" + }, + "version": "6.4.0" + }, + "devDependency": false, + "location": { + "file": "https://bcr.bazel.build/modules/buildozer/6.4.0.2/MODULE.bazel", + "line": 8, + "column": 27 + } + } + ], + "hasDevUseExtension": false, + "hasNonDevUseExtension": true + } + ], + "deps": { + "bazel_tools": "bazel_tools@_", + "local_config_platform": "local_config_platform@_" + }, + "repoSpec": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_license~0.0.7", "urls": [ - "https://github.com/bazelbuild/rules_license/releases/download/0.0.7/rules_license-0.0.7.tar.gz" + "https://github.com/fmeum/buildozer/releases/download/v6.4.0.2/buildozer-v6.4.0.2.tar.gz" ], - "integrity": "sha256-RTHezLkTY5ww5cdRKgVNXYdWmNrrddjPkPKEN1/nw2A=", - "strip_prefix": "", - "remote_patches": {}, - "remote_patch_strip": 0 + "integrity": "sha256-k7tFKQMR2AygxpmZfH0yEPnQmF3efFgD9rBPkj+Yz/8=", + "strip_prefix": "buildozer-6.4.0.2", + "remote_patches": { + "https://bcr.bazel.build/modules/buildozer/6.4.0.2/patches/module_dot_bazel_version.patch": "sha256-gKANF2HMilj7bWmuXs4lbBIAAansuWC4IhWGB/CerjU=" + }, + "remote_patch_strip": 1 } } }, @@ -1026,10 +1134,9 @@ "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "zlib~1.3", "urls": [ "https://github.com/madler/zlib/releases/download/v1.3/zlib-1.3.tar.gz" ], @@ -1073,16 +1180,15 @@ } ], "deps": { - "bazel_skylib": "bazel_skylib@1.3.0", + "bazel_skylib": "bazel_skylib@1.6.1", "platforms": "platforms@0.0.7", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "apple_support~1.5.0", "urls": [ "https://github.com/bazelbuild/apple_support/releases/download/1.5.0/apple_support.1.5.0.tar.gz" ], @@ -1102,17 +1208,16 @@ "toolchainsToRegister": [], "extensionUsages": [], "deps": { - "rules_python": "rules_python@0.27.1", - "bazel_skylib": "bazel_skylib@1.3.0", + "rules_python": "rules_python@0.32.2", + "bazel_skylib": "bazel_skylib@1.6.1", "rules_license": "rules_license@0.0.7", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_pkg~0.7.0", "urls": [ "https://github.com/bazelbuild/rules_pkg/releases/download/0.7.0/rules_pkg-0.7.0.tar.gz" ], @@ -1140,10 +1245,9 @@ "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "abseil-cpp~20211102.0", "urls": [ "https://github.com/abseil/abseil-cpp/archive/refs/tags/20211102.0.tar.gz" ], @@ -1165,8 +1269,8 @@ "toolchainsToRegister": [], "extensionUsages": [], "deps": { - "bazel_skylib": "bazel_skylib@1.3.0", - "rules_proto": "rules_proto@5.3.0-21.7", + "bazel_skylib": "bazel_skylib@1.6.1", + "rules_proto": "rules_proto@6.0.0-rc1", "com_google_protobuf": "protobuf@21.7", "com_google_absl": "abseil-cpp@20211102.0", "platforms": "platforms@0.0.7", @@ -1174,10 +1278,9 @@ "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "upb~0.0.0-20220923-a547704", "urls": [ "https://github.com/protocolbuffers/upb/archive/a5477045acaa34586420942098f5fecd3570f577.tar.gz" ], @@ -1216,7 +1319,7 @@ "hasNonDevUseExtension": true }, { - "extensionBzlFile": ":extensions.bzl", + "extensionBzlFile": "@rules_jvm_external//:extensions.bzl", "extensionName": "maven", "usingModule": "rules_jvm_external@4.4.2", "location": { @@ -1255,16 +1358,15 @@ } ], "deps": { - "bazel_skylib": "bazel_skylib@1.3.0", + "bazel_skylib": "bazel_skylib@1.6.1", "io_bazel_stardoc": "stardoc@0.5.1", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_jvm_external~4.4.2", "urls": [ "https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/4.4.2.zip" ], @@ -1291,10 +1393,9 @@ "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "googletest~1.11.0", "urls": [ "https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz" ], @@ -1316,16 +1417,15 @@ "toolchainsToRegister": [], "extensionUsages": [], "deps": { - "bazel_skylib": "bazel_skylib@1.3.0", - "rules_java": "rules_java@7.1.0", + "bazel_skylib": "bazel_skylib@1.6.1", + "rules_java": "rules_java@7.4.0", "bazel_tools": "bazel_tools@_", "local_config_platform": "local_config_platform@_" }, "repoSpec": { - "bzlFile": "@bazel_tools//tools/build_defs/repo:http.bzl", + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "stardoc~0.5.1", "urls": [ "https://github.com/bazelbuild/stardoc/releases/download/0.5.1/stardoc-0.5.1.tar.gz" ], @@ -1340,104 +1440,113 @@ } }, "moduleExtensions": { - "@@apple_support~1.5.0//crosstool:setup.bzl%apple_cc_configure_extension": { + "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { "general": { "bzlTransitiveDigest": "pMLFCYaRPkgXPQ8vtuNkMfiHfPmRBy6QJfnid4sWfv0=", - "accumulatedFileDigests": {}, + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "local_config_apple_cc": { - "bzlFile": "@@apple_support~1.5.0//crosstool:setup.bzl", + "bzlFile": "@@apple_support~//crosstool:setup.bzl", "ruleClassName": "_apple_cc_autoconf", - "attributes": { - "name": "apple_support~1.5.0~apple_cc_configure_extension~local_config_apple_cc" - } + "attributes": {} }, "local_config_apple_cc_toolchains": { - "bzlFile": "@@apple_support~1.5.0//crosstool:setup.bzl", + "bzlFile": "@@apple_support~//crosstool:setup.bzl", "ruleClassName": "_apple_cc_autoconf_toolchains", - "attributes": { - "name": "apple_support~1.5.0~apple_cc_configure_extension~local_config_apple_cc_toolchains" - } + "attributes": {} } - } + }, + "recordedRepoMappingEntries": [ + [ + "apple_support~", + "bazel_tools", + "bazel_tools" + ] + ] } }, "@@bazel_tools//tools/cpp:cc_configure.bzl%cc_configure_extension": { "general": { - "bzlTransitiveDigest": "O9sf6ilKWU9Veed02jG9o2HM/xgV/UAyciuFBuxrFRY=", - "accumulatedFileDigests": {}, + "bzlTransitiveDigest": "PHpT2yqMGms2U4L3E/aZ+WcQalmZWm+ILdP3yiLsDhA=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "local_config_cc": { "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl", "ruleClassName": "cc_autoconf", - "attributes": { - "name": "bazel_tools~cc_configure_extension~local_config_cc" - } + "attributes": {} }, "local_config_cc_toolchains": { "bzlFile": "@@bazel_tools//tools/cpp:cc_configure.bzl", "ruleClassName": "cc_autoconf_toolchains", - "attributes": { - "name": "bazel_tools~cc_configure_extension~local_config_cc_toolchains" - } + "attributes": {} } - } + }, + "recordedRepoMappingEntries": [ + [ + "bazel_tools", + "bazel_tools", + "bazel_tools" + ] + ] } }, "@@bazel_tools//tools/osx:xcode_configure.bzl%xcode_configure_extension": { "general": { "bzlTransitiveDigest": "Qh2bWTU6QW6wkrd87qrU4YeY+SG37Nvw3A0PR4Y0L2Y=", - "accumulatedFileDigests": {}, + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "local_config_xcode": { "bzlFile": "@@bazel_tools//tools/osx:xcode_configure.bzl", "ruleClassName": "xcode_autoconf", "attributes": { - "name": "bazel_tools~xcode_configure_extension~local_config_xcode", "xcode_locator": "@bazel_tools//tools/osx:xcode_locator.m", "remote_xcode": "" } } - } + }, + "recordedRepoMappingEntries": [] } }, "@@bazel_tools//tools/sh:sh_configure.bzl%sh_configure_extension": { "general": { "bzlTransitiveDigest": "hp4NgmNjEg5+xgvzfh6L83bt9/aiiWETuNpwNuF1MSU=", - "accumulatedFileDigests": {}, + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "local_config_sh": { "bzlFile": "@@bazel_tools//tools/sh:sh_configure.bzl", "ruleClassName": "sh_config", - "attributes": { - "name": "bazel_tools~sh_configure_extension~local_config_sh" - } + "attributes": {} } - } + }, + "recordedRepoMappingEntries": [] } }, - "@@gazelle~0.33.0//:extensions.bzl%go_deps": { + "@@gazelle~//:extensions.bzl%go_deps": { "general": { - "bzlTransitiveDigest": "0+dZMjfS4Y46rpY0W44rDC3p1dnaLjwpPoJbXts5ojE=", - "accumulatedFileDigests": { - "@@//:go.mod": "ce1f85453c22e1eb9f747899fe5918fded7c6138d0d3476ab2359db1df03dfb0", - "@@gazelle~0.33.0//:go.sum": "afb3c20626470bff206a91f35b0994f514f7a05ca44d9105f5ccb84e0d3ca197", - "@@gazelle~0.33.0//:go.mod": "e915e3f980bea175c80cc30fa7433e69f1251a9ce03046579d7b24588a93e75f", - "@@//:go.sum": "bf2fa472ea998a8e4db4ee753f51b585b1fe6c3a0292e9db8640a98236489f2b", - "@@rules_go~0.41.0//:go.mod": "a7143f329c2a3e0b983ce74a96c0c25b0d0c59d236d75f7e1b069aadd988d55e", - "@@rules_go~0.41.0//:go.sum": "022d36c9ebcc7b5dee1e9b85b3da9c9f3a529ee6f979946d66e4955b8d54614a" + "bzlTransitiveDigest": "Mvn5AAcPCYGfDLXuggkKZJaddA+KvF8zwG9bh4qGgu8=", + "recordedFileInputs": { + "@@//go.mod": "0c277d9255625d22ad237e281eb5bda22a6ba9a22c6e18f11bdee0e2d3a91791", + "@@rules_go~//go.mod": "a7143f329c2a3e0b983ce74a96c0c25b0d0c59d236d75f7e1b069aadd988d55e", + "@@gazelle~//go.sum": "afb3c20626470bff206a91f35b0994f514f7a05ca44d9105f5ccb84e0d3ca197", + "@@//go.sum": "1c1682f15fa617d06478571894c7424bf2a85052d70aa0b31d6d305430b68fc5", + "@@rules_go~//go.sum": "022d36c9ebcc7b5dee1e9b85b3da9c9f3a529ee6f979946d66e4955b8d54614a", + "@@gazelle~//go.mod": "e915e3f980bea175c80cc30fa7433e69f1251a9ce03046579d7b24588a93e75f" }, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "org_golang_x_tools_go_vcs": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_x_tools_go_vcs", "importpath": "golang.org/x/tools/go/vcs", "build_directives": [], "build_file_generation": "auto", @@ -1449,10 +1558,9 @@ } }, "com_github_ghodss_yaml": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_ghodss_yaml", "importpath": "github.com/ghodss/yaml", "build_directives": [], "build_file_generation": "auto", @@ -1464,10 +1572,9 @@ } }, "com_github_fsnotify_fsnotify": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_fsnotify_fsnotify", "importpath": "github.com/fsnotify/fsnotify", "build_directives": [], "build_file_generation": "auto", @@ -1479,25 +1586,23 @@ } }, "com_github_bmatcuk_doublestar_v4": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_bmatcuk_doublestar_v4", "importpath": "github.com/bmatcuk/doublestar/v4", "build_directives": [], "build_file_generation": "auto", "patches": [], "patch_args": [], - "sum": "h1:HTuxyug8GyFbRkrffIpzNCSK4luc0TY3wzXvzIZhEXc=", + "sum": "h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=", "replace": "", - "version": "v4.6.0" + "version": "v4.6.1" } }, "com_github_pmezard_go_difflib": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_pmezard_go_difflib", "importpath": "github.com/pmezard/go-difflib", "build_directives": [], "build_file_generation": "auto", @@ -1508,26 +1613,24 @@ "version": "v1.0.0" } }, - "in_gopkg_check_v1": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "com_github_davecgh_go_spew": { + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~in_gopkg_check_v1", - "importpath": "gopkg.in/check.v1", + "importpath": "github.com/davecgh/go-spew", "build_directives": [], "build_file_generation": "auto", "patches": [], "patch_args": [], - "sum": "h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=", + "sum": "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=", "replace": "", - "version": "v1.0.0-20180628173108-788fd7840127" + "version": "v1.1.1" } }, "org_golang_x_tools": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_x_tools", "importpath": "golang.org/x/tools", "build_directives": [], "build_file_generation": "auto", @@ -1539,25 +1642,23 @@ } }, "com_github_bazelbuild_buildtools": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_bazelbuild_buildtools", "importpath": "github.com/bazelbuild/buildtools", "build_directives": [], "build_file_generation": "auto", "patches": [], "patch_args": [], - "sum": "h1:6Z/4LXt5mdhuFAx4QhwM0D5pTs1ljYGmhgF3O9OCMF0=", + "sum": "h1:HTepWP/jhtWTC1gvK0RnvKCgjh4gLqiwaOwGozAXcbw=", "replace": "", - "version": "v0.0.0-20230831140646-386244e73fc4" + "version": "v0.0.0-20231103205921-433ea8554e82" } }, "org_golang_x_net": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_x_net", "importpath": "golang.org/x/net", "build_directives": [], "build_file_generation": "auto", @@ -1569,10 +1670,9 @@ } }, "org_golang_google_genproto": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_google_genproto", "importpath": "google.golang.org/genproto", "build_directives": [], "build_file_generation": "auto", @@ -1584,10 +1684,9 @@ } }, "com_github_gogo_protobuf": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_gogo_protobuf", "importpath": "github.com/gogo/protobuf", "build_directives": [ "gazelle:proto disable" @@ -1600,41 +1699,52 @@ "version": "v1.3.2" } }, - "in_gopkg_yaml_v2": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "com_github_smacker_go_tree_sitter": { + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~in_gopkg_yaml_v2", - "importpath": "gopkg.in/yaml.v2", + "importpath": "github.com/smacker/go-tree-sitter", "build_directives": [], "build_file_generation": "auto", "patches": [], "patch_args": [], - "sum": "h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=", + "sum": "h1:7QZKUmQfnxncZIJGyvX8M8YeMfn8kM10j3J/2KwVTN4=", "replace": "", - "version": "v2.2.8" + "version": "v0.0.0-20240422154435-0628b34cbf9c" } }, - "com_github_golang_mock": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "com_github_stretchr_testify": { + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_golang_mock", - "importpath": "github.com/golang/mock", + "importpath": "github.com/stretchr/testify", "build_directives": [], "build_file_generation": "auto", "patches": [], "patch_args": [], - "sum": "h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=", + "sum": "h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=", "replace": "", - "version": "v1.6.0" + "version": "v1.9.0" + } + }, + "in_gopkg_yaml_v2": { + "bzlFile": "@@gazelle~//internal:go_repository.bzl", + "ruleClassName": "go_repository", + "attributes": { + "importpath": "gopkg.in/yaml.v2", + "build_directives": [], + "build_file_generation": "auto", + "patches": [], + "patch_args": [], + "sum": "h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=", + "replace": "", + "version": "v2.4.0" } }, "org_golang_x_sync": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_x_sync", "importpath": "golang.org/x/sync", "build_directives": [], "build_file_generation": "auto", @@ -1645,43 +1755,40 @@ "version": "v0.3.0" } }, - "org_golang_google_grpc": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "com_github_golang_mock": { + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_google_grpc", - "importpath": "google.golang.org/grpc", - "build_directives": [ - "gazelle:proto disable" - ], + "importpath": "github.com/golang/mock", + "build_directives": [], "build_file_generation": "auto", "patches": [], "patch_args": [], - "sum": "h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zYfxKK+W+YU=", + "sum": "h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=", "replace": "", - "version": "v1.50.0" + "version": "v1.6.0" } }, - "com_github_kr_pretty": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "org_golang_google_grpc": { + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_kr_pretty", - "importpath": "github.com/kr/pretty", - "build_directives": [], + "importpath": "google.golang.org/grpc", + "build_directives": [ + "gazelle:proto disable" + ], "build_file_generation": "auto", "patches": [], "patch_args": [], - "sum": "h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=", + "sum": "h1:fPVVDxY9w++VjTZsYvXWqEf9Rqar/e+9zYfxKK+W+YU=", "replace": "", - "version": "v0.1.0" + "version": "v1.50.0" } }, "com_github_google_go_cmp": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_google_go_cmp", "importpath": "github.com/google/go-cmp", "build_directives": [], "build_file_generation": "auto", @@ -1693,10 +1800,9 @@ } }, "org_golang_x_text": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_x_text", "importpath": "golang.org/x/text", "build_directives": [], "build_file_generation": "auto", @@ -1707,26 +1813,10 @@ "version": "v0.3.3" } }, - "com_github_google_uuid": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", - "ruleClassName": "go_repository", - "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_google_uuid", - "importpath": "github.com/google/uuid", - "build_directives": [], - "build_file_generation": "auto", - "patches": [], - "patch_args": [], - "sum": "h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=", - "replace": "", - "version": "v1.3.0" - } - }, "org_golang_google_protobuf": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_google_protobuf", "importpath": "google.golang.org/protobuf", "build_directives": [], "build_file_generation": "auto", @@ -1738,25 +1828,23 @@ } }, "com_github_emirpasic_gods": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_emirpasic_gods", "importpath": "github.com/emirpasic/gods", "build_directives": [], "build_file_generation": "auto", "patches": [], "patch_args": [], - "sum": "h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=", + "sum": "h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=", "replace": "", - "version": "v1.12.0" + "version": "v1.18.1" } }, "org_golang_x_mod": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_x_mod", "importpath": "golang.org/x/mod", "build_directives": [], "build_file_generation": "auto", @@ -1767,11 +1855,24 @@ "version": "v0.12.0" } }, + "in_gopkg_yaml_v3": { + "bzlFile": "@@gazelle~//internal:go_repository.bzl", + "ruleClassName": "go_repository", + "attributes": { + "importpath": "gopkg.in/yaml.v3", + "build_directives": [], + "build_file_generation": "auto", + "patches": [], + "patch_args": [], + "sum": "h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=", + "replace": "", + "version": "v3.0.1" + } + }, "com_github_golang_protobuf": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~com_github_golang_protobuf", "importpath": "github.com/golang/protobuf", "build_directives": [], "build_file_generation": "auto", @@ -1783,50 +1884,49 @@ } }, "bazel_gazelle_go_repository_config": { - "bzlFile": "@@gazelle~0.33.0//internal/bzlmod:go_deps.bzl", + "bzlFile": "@@gazelle~//internal/bzlmod:go_deps.bzl", "ruleClassName": "_go_repository_config", "attributes": { - "name": "gazelle~0.33.0~go_deps~bazel_gazelle_go_repository_config", "importpaths": { - "@gazelle~0.33.0": "github.com/bazelbuild/bazel-gazelle", + "@gazelle~": "github.com/bazelbuild/bazel-gazelle", "com_github_bazelbuild_buildtools": "github.com/bazelbuild/buildtools", - "@rules_go~0.41.0": "github.com/bazelbuild/rules_go", + "@rules_go~": "github.com/bazelbuild/rules_go", + "com_github_bmatcuk_doublestar_v4": "github.com/bmatcuk/doublestar/v4", "com_github_emirpasic_gods": "github.com/emirpasic/gods", "com_github_ghodss_yaml": "github.com/ghodss/yaml", - "com_github_google_uuid": "github.com/google/uuid", + "com_github_smacker_go_tree_sitter": "github.com/smacker/go-tree-sitter", + "com_github_stretchr_testify": "github.com/stretchr/testify", + "org_golang_x_sync": "golang.org/x/sync", "in_gopkg_yaml_v2": "gopkg.in/yaml.v2", + "com_github_davecgh_go_spew": "github.com/davecgh/go-spew", "com_github_google_go_cmp": "github.com/google/go-cmp", - "com_github_kr_pretty": "github.com/kr/pretty", + "com_github_pmezard_go_difflib": "github.com/pmezard/go-difflib", "org_golang_x_mod": "golang.org/x/mod", - "in_gopkg_check_v1": "gopkg.in/check.v1", + "org_golang_x_sys": "golang.org/x/sys", + "org_golang_x_tools": "golang.org/x/tools", + "in_gopkg_yaml_v3": "gopkg.in/yaml.v3", "com_github_gogo_protobuf": "github.com/gogo/protobuf", "com_github_golang_mock": "github.com/golang/mock", "com_github_golang_protobuf": "github.com/golang/protobuf", "org_golang_google_protobuf": "google.golang.org/protobuf", "org_golang_x_net": "golang.org/x/net", - "org_golang_x_sys": "golang.org/x/sys", "org_golang_x_text": "golang.org/x/text", "org_golang_google_genproto": "google.golang.org/genproto", "org_golang_google_grpc": "google.golang.org/grpc", - "org_golang_x_tools": "golang.org/x/tools", - "com_github_bmatcuk_doublestar_v4": "github.com/bmatcuk/doublestar/v4", "com_github_fsnotify_fsnotify": "github.com/fsnotify/fsnotify", - "com_github_pmezard_go_difflib": "github.com/pmezard/go-difflib", - "org_golang_x_sync": "golang.org/x/sync", "org_golang_x_tools_go_vcs": "golang.org/x/tools/go/vcs" }, "module_names": { - "@rules_go~0.41.0": "rules_go", - "@gazelle~0.33.0": "gazelle" + "@rules_go~": "rules_go", + "@gazelle~": "gazelle" }, "build_naming_conventions": {} } }, "org_golang_x_sys": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository.bzl", + "bzlFile": "@@gazelle~//internal:go_repository.bzl", "ruleClassName": "go_repository", "attributes": { - "name": "gazelle~0.33.0~go_deps~org_golang_x_sys", "importpath": "golang.org/x/sys", "build_directives": [], "build_file_generation": "auto", @@ -1841,61 +1941,87 @@ "moduleExtensionMetadata": { "explicitRootModuleDirectDeps": [ "com_github_bazelbuild_buildtools", + "com_github_bmatcuk_doublestar_v4", "com_github_emirpasic_gods", "com_github_ghodss_yaml", - "com_github_google_uuid", + "com_github_smacker_go_tree_sitter", + "com_github_stretchr_testify", + "org_golang_x_sync", "in_gopkg_yaml_v2" ], "explicitRootModuleDirectDevDeps": [], - "useAllRepos": "NO" - } + "useAllRepos": "NO", + "reproducible": false + }, + "recordedRepoMappingEntries": [ + [ + "gazelle~", + "bazel_tools", + "bazel_tools" + ] + ] } }, - "@@gazelle~0.33.0//internal/bzlmod:non_module_deps.bzl%non_module_deps": { + "@@gazelle~//internal/bzlmod:non_module_deps.bzl%non_module_deps": { "general": { "bzlTransitiveDigest": "idtJXxcHUd75fcvggtK/s6naCFjcaysxF0U5OKBm2LE=", - "accumulatedFileDigests": {}, + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "bazel_gazelle_is_bazel_module": { - "bzlFile": "@@gazelle~0.33.0//internal:is_bazel_module.bzl", + "bzlFile": "@@gazelle~//internal:is_bazel_module.bzl", "ruleClassName": "is_bazel_module", "attributes": { - "name": "gazelle~0.33.0~non_module_deps~bazel_gazelle_is_bazel_module", "is_bazel_module": true } }, "bazel_gazelle_go_repository_tools": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository_tools.bzl", + "bzlFile": "@@gazelle~//internal:go_repository_tools.bzl", "ruleClassName": "go_repository_tools", "attributes": { - "name": "gazelle~0.33.0~non_module_deps~bazel_gazelle_go_repository_tools", - "go_cache": "@@gazelle~0.33.0~non_module_deps~bazel_gazelle_go_repository_cache//:go.env" + "go_cache": "@@gazelle~~non_module_deps~bazel_gazelle_go_repository_cache//:go.env" } }, "bazel_gazelle_go_repository_cache": { - "bzlFile": "@@gazelle~0.33.0//internal:go_repository_cache.bzl", + "bzlFile": "@@gazelle~//internal:go_repository_cache.bzl", "ruleClassName": "go_repository_cache", "attributes": { - "name": "gazelle~0.33.0~non_module_deps~bazel_gazelle_go_repository_cache", - "go_sdk_name": "@rules_go~0.41.0~go_sdk~go_default_sdk", + "go_sdk_name": "@rules_go~~go_sdk~go_default_sdk", "go_env": {} } } - } + }, + "recordedRepoMappingEntries": [ + [ + "gazelle~", + "bazel_gazelle_go_repository_cache", + "gazelle~~non_module_deps~bazel_gazelle_go_repository_cache" + ], + [ + "gazelle~", + "go_host_compatible_sdk_label", + "rules_go~~go_sdk~go_host_compatible_sdk_label" + ], + [ + "rules_go~~go_sdk~go_host_compatible_sdk_label", + "go_default_sdk", + "rules_go~~go_sdk~go_default_sdk" + ] + ] } }, - "@@rules_go~0.41.0//go:extensions.bzl%go_sdk": { + "@@rules_go~//go:extensions.bzl%go_sdk": { "general": { - "bzlTransitiveDigest": "QaU0mhA+aom4ENV5sBUAEDa9IQt53GtspLCjl89277c=", - "accumulatedFileDigests": {}, + "bzlTransitiveDigest": "eGDLbciJngLG8USN6/HoLZ91MLuFliA9P4tEvCXvuec=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "go_default_sdk": { - "bzlFile": "@@rules_go~0.41.0//go/private:sdk.bzl", + "bzlFile": "@@rules_go~//go/private:sdk.bzl", "ruleClassName": "go_download_sdk_rule", "attributes": { - "name": "rules_go~0.41.0~go_sdk~go_default_sdk", "goos": "", "goarch": "", "sdks": {}, @@ -1906,18 +2032,16 @@ } }, "go_host_compatible_sdk_label": { - "bzlFile": "@@rules_go~0.41.0//go/private:extensions.bzl", + "bzlFile": "@@rules_go~//go/private:extensions.bzl", "ruleClassName": "host_compatible_toolchain", "attributes": { - "name": "rules_go~0.41.0~go_sdk~go_host_compatible_sdk_label", "toolchain": "@go_default_sdk//:ROOT" } }, "go_toolchains": { - "bzlFile": "@@rules_go~0.41.0//go/private:sdk.bzl", + "bzlFile": "@@rules_go~//go/private:sdk.bzl", "ruleClassName": "go_multiple_toolchains", "attributes": { - "name": "rules_go~0.41.0~go_sdk~go_toolchains", "prefixes": [ "_0000_go_default_sdk_" ], @@ -1938,20 +2062,27 @@ ] } } - } + }, + "recordedRepoMappingEntries": [ + [ + "rules_go~", + "bazel_tools", + "bazel_tools" + ] + ] } }, - "@@rules_go~0.41.0//go/private:extensions.bzl%non_module_dependencies": { + "@@rules_go~//go/private:extensions.bzl%non_module_dependencies": { "general": { - "bzlTransitiveDigest": "CZeQbYwfBEc0H27WqrnwfsnHiarm8whm1PFFxE1fMl4=", - "accumulatedFileDigests": {}, + "bzlTransitiveDigest": "GXCPP6l+bsdqcRscjGNCRds6cxpRP2wigCJx3uwfGn0=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "bazel_skylib": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~bazel_skylib", "urls": [ "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.4.2/bazel-skylib-1.4.2.tar.gz", "https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.2/bazel-skylib-1.4.2.tar.gz" @@ -1964,7 +2095,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~com_github_gogo_protobuf", "urls": [ "https://mirror.bazel.build/github.com/gogo/protobuf/archive/refs/tags/v1.3.2.zip", "https://github.com/gogo/protobuf/archive/refs/tags/v1.3.2.zip" @@ -1972,7 +2102,7 @@ "sha256": "f89f8241af909ce3226562d135c25b28e656ae173337b3e58ede917aa26e1e3c", "strip_prefix": "protobuf-1.3.2", "patches": [ - "@@rules_go~0.41.0//third_party:com_github_gogo_protobuf-gazelle.patch" + "@@rules_go~//third_party:com_github_gogo_protobuf-gazelle.patch" ], "patch_args": [ "-p1" @@ -1983,7 +2113,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~org_golang_x_xerrors", "urls": [ "https://mirror.bazel.build/github.com/golang/xerrors/archive/04be3eba64a22a838cdb17b8dca15a52871c08b4.zip", "https://github.com/golang/xerrors/archive/04be3eba64a22a838cdb17b8dca15a52871c08b4.zip" @@ -1991,7 +2120,7 @@ "sha256": "ffad2b06ef2e09d040da2ff08077865e99ab95d4d0451737fc8e33706bb01634", "strip_prefix": "xerrors-04be3eba64a22a838cdb17b8dca15a52871c08b4", "patches": [ - "@@rules_go~0.41.0//third_party:org_golang_x_xerrors-gazelle.patch" + "@@rules_go~//third_party:org_golang_x_xerrors-gazelle.patch" ], "patch_args": [ "-p1" @@ -2002,7 +2131,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~com_github_golang_protobuf", "urls": [ "https://mirror.bazel.build/github.com/golang/protobuf/archive/refs/tags/v1.5.3.zip", "https://github.com/golang/protobuf/archive/refs/tags/v1.5.3.zip" @@ -2010,7 +2138,7 @@ "sha256": "2dced4544ae5372281e20f1e48ca76368355a01b31353724718c4d6e3dcbb430", "strip_prefix": "protobuf-1.5.3", "patches": [ - "@@rules_go~0.41.0//third_party:com_github_golang_protobuf-gazelle.patch" + "@@rules_go~//third_party:com_github_golang_protobuf-gazelle.patch" ], "patch_args": [ "-p1" @@ -2018,31 +2146,27 @@ } }, "io_bazel_rules_nogo": { - "bzlFile": "@@rules_go~0.41.0//go/private:nogo.bzl", + "bzlFile": "@@rules_go~//go/private:nogo.bzl", "ruleClassName": "go_register_nogo", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~io_bazel_rules_nogo", "nogo": "@io_bazel_rules_go//:default_nogo" } }, "gogo_special_proto": { - "bzlFile": "@@rules_go~0.41.0//proto:gogo.bzl", + "bzlFile": "@@rules_go~//proto:gogo.bzl", "ruleClassName": "gogo_special_proto", - "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~gogo_special_proto" - } + "attributes": {} }, "com_github_golang_mock": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~com_github_golang_mock", "urls": [ "https://mirror.bazel.build/github.com/golang/mock/archive/refs/tags/v1.7.0-rc.1.zip", "https://github.com/golang/mock/archive/refs/tags/v1.7.0-rc.1.zip" ], "patches": [ - "@@rules_go~0.41.0//third_party:com_github_golang_mock-gazelle.patch" + "@@rules_go~//third_party:com_github_golang_mock-gazelle.patch" ], "patch_args": [ "-p1" @@ -2055,7 +2179,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~org_golang_google_protobuf", "sha256": "cb1a05581c33b3705ede6c08edf9b9c1dbc579559ba30f532704c324e42bf801", "urls": [ "https://mirror.bazel.build/github.com/protocolbuffers/protobuf-go/archive/refs/tags/v1.30.0.zip", @@ -2063,7 +2186,7 @@ ], "strip_prefix": "protobuf-go-1.30.0", "patches": [ - "@@rules_go~0.41.0//third_party:org_golang_google_protobuf-gazelle.patch" + "@@rules_go~//third_party:org_golang_google_protobuf-gazelle.patch" ], "patch_args": [ "-p1" @@ -2074,7 +2197,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~com_github_mwitkow_go_proto_validators", "urls": [ "https://mirror.bazel.build/github.com/mwitkow/go-proto-validators/archive/refs/tags/v0.3.2.zip", "https://github.com/mwitkow/go-proto-validators/archive/refs/tags/v0.3.2.zip" @@ -2087,7 +2209,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~org_golang_x_tools", "urls": [ "https://mirror.bazel.build/github.com/golang/tools/archive/refs/tags/v0.7.0.zip", "https://github.com/golang/tools/archive/refs/tags/v0.7.0.zip" @@ -2095,8 +2216,8 @@ "sha256": "9f20a20f29f4008d797a8be882ef82b69cf8f7f2b96dbdfe3814c57d8280fa4b", "strip_prefix": "tools-0.7.0", "patches": [ - "@@rules_go~0.41.0//third_party:org_golang_x_tools-deletegopls.patch", - "@@rules_go~0.41.0//third_party:org_golang_x_tools-gazelle.patch" + "@@rules_go~//third_party:org_golang_x_tools-deletegopls.patch", + "@@rules_go~//third_party:org_golang_x_tools-gazelle.patch" ], "patch_args": [ "-p1" @@ -2107,7 +2228,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~org_golang_x_sys", "urls": [ "https://mirror.bazel.build/github.com/golang/sys/archive/refs/tags/v0.8.0.zip", "https://github.com/golang/sys/archive/refs/tags/v0.8.0.zip" @@ -2115,7 +2235,7 @@ "sha256": "58ef1f478ba923715bc493f2e0a431d4b2d428f1e3409f6acaac452945f6fd2f", "strip_prefix": "sys-0.8.0", "patches": [ - "@@rules_go~0.41.0//third_party:org_golang_x_sys-gazelle.patch" + "@@rules_go~//third_party:org_golang_x_sys-gazelle.patch" ], "patch_args": [ "-p1" @@ -2126,7 +2246,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_go~0.41.0~non_module_dependencies~org_golang_google_genproto", "urls": [ "https://mirror.bazel.build/github.com/googleapis/go-genproto/archive/e85fd2cbaebc35e54b279b5e9b1057db87dacd57.zip", "https://github.com/googleapis/go-genproto/archive/e85fd2cbaebc35e54b279b5e9b1057db87dacd57.zip" @@ -2134,59 +2253,62 @@ "sha256": "da966a75fdc2f9d8006bc51e683490ff969ff637bbc030812cd9c5697e3a7cab", "strip_prefix": "go-genproto-e85fd2cbaebc35e54b279b5e9b1057db87dacd57", "patches": [ - "@@rules_go~0.41.0//third_party:org_golang_google_genproto-gazelle.patch" + "@@rules_go~//third_party:org_golang_google_genproto-gazelle.patch" ], "patch_args": [ "-p1" ] } } - } + }, + "recordedRepoMappingEntries": [ + [ + "rules_go~", + "bazel_tools", + "bazel_tools" + ] + ] } }, - "@@rules_java~7.1.0//java:extensions.bzl%toolchains": { + "@@rules_java~//java:extensions.bzl%toolchains": { "general": { - "bzlTransitiveDigest": "iUIRqCK7tkhvcDJCAfPPqSd06IHG0a8HQD0xeQyVAqw=", - "accumulatedFileDigests": {}, + "bzlTransitiveDigest": "tJHbmWnq7m+9eUBnUdv7jZziQ26FmcGL9C5/hU3Q9UQ=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "remotejdk21_linux_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_linux//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_linux//:jdk\",\n)\n" } }, "remotejdk17_linux_s390x_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_s390x_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_s390x//:jdk\",\n)\n" } }, "remotejdk17_macos_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_macos//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_macos//:jdk\",\n)\n" } }, "remotejdk21_macos_aarch64_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_aarch64_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_macos_aarch64//:jdk\",\n)\n" } }, "remotejdk17_linux_aarch64_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_aarch64_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_aarch64//:jdk\",\n)\n" } }, @@ -2194,21 +2316,19 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_aarch64", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", - "sha256": "2a7a99a3ea263dbd8d32a67d1e6e363ba8b25c645c826f5e167a02bbafaff1fa", - "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-macosx_aarch64", + "sha256": "e8260516de8b60661422a725f1df2c36ef888f6fb35393566b00e7325db3d04e", + "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-macosx_aarch64", "urls": [ - "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz", - "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_aarch64.tar.gz" + "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_aarch64.tar.gz", + "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_aarch64.tar.gz" ] } }, "remotejdk17_linux_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux//:jdk\",\n)\n" } }, @@ -2216,7 +2336,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_aarch64", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", "sha256": "314b04568ec0ae9b36ba03c9cbd42adc9e1265f74678923b19297d66eb84dcca", "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_aarch64", @@ -2230,11 +2349,10 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remote_java_tools_windows", - "sha256": "c5c70c214a350f12cbf52da8270fa43ba629b795f3dd328028a38f8f0d39c2a1", + "sha256": "fe2f88169696d6c6fc6e90ba61bb46be7d0ae3693cbafdf336041bf56679e8d1", "urls": [ - "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_windows-v13.1.zip", - "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_windows-v13.1.zip" + "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_windows-v13.4.zip", + "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_windows-v13.4.zip" ] } }, @@ -2242,7 +2360,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_win", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", "sha256": "43408193ce2fa0862819495b5ae8541085b95660153f2adcf91a52d3a1710e83", "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-win_x64", @@ -2253,10 +2370,9 @@ } }, "remotejdk11_win_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_win_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_win//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_win//:jdk\",\n)\n" } }, @@ -2264,7 +2380,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_aarch64", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", "sha256": "54174439f2b3fddd11f1048c397fe7bb45d4c9d66d452d6889b013d04d21c4de", "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_aarch64", @@ -2278,7 +2393,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_linux", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", "sha256": "b9482f2304a1a68a614dfacddcf29569a72f0fac32e6c74f83dc1b9a157b8340", "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_x64", @@ -2289,18 +2403,16 @@ } }, "remotejdk11_linux_s390x_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_s390x_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:s390x\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_s390x//:jdk\",\n)\n" } }, "remotejdk11_linux_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux//:jdk\",\n)\n" } }, @@ -2308,7 +2420,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_macos", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", "sha256": "bcaab11cfe586fae7583c6d9d311c64384354fb2638eb9a012eca4c3f1a1d9fd", "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_x64", @@ -2322,7 +2433,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_win_arm64", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", "sha256": "b8a28e6e767d90acf793ea6f5bed0bb595ba0ba5ebdf8b99f395266161e53ec2", "strip_prefix": "jdk-11.0.13+8", @@ -2335,7 +2445,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_macos", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", "sha256": "640453e8afe8ffe0fb4dceb4535fb50db9c283c64665eebb0ba68b19e65f4b1f", "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-macosx_x64", @@ -2349,29 +2458,26 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_macos", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", - "sha256": "9639b87db586d0c89f7a9892ae47f421e442c64b97baebdff31788fbe23265bd", - "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-macosx_x64", + "sha256": "3ad8fe288eb57d975c2786ae453a036aa46e47ab2ac3d81538ebae2a54d3c025", + "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-macosx_x64", "urls": [ - "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz", - "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-macosx_x64.tar.gz" + "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_x64.tar.gz", + "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-macosx_x64.tar.gz" ] } }, "remotejdk21_macos_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_macos_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_macos//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_macos//:jdk\",\n)\n" } }, "remotejdk17_macos_aarch64_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_macos_aarch64_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_macos_aarch64//:jdk\",\n)\n" } }, @@ -2379,7 +2485,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_win", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", "sha256": "192f2afca57701de6ec496234f7e45d971bf623ff66b8ee4a5c81582054e5637", "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_x64", @@ -2390,18 +2495,16 @@ } }, "remotejdk11_macos_aarch64_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_aarch64_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_macos_aarch64//:jdk\",\n)\n" } }, "remotejdk11_linux_ppc64le_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_ppc64le_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_ppc64le//:jdk\",\n)\n" } }, @@ -2409,13 +2512,12 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_linux", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", - "sha256": "0c0eadfbdc47a7ca64aeab51b9c061f71b6e4d25d2d87674512e9b6387e9e3a6", - "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-linux_x64", + "sha256": "5ad730fbee6bb49bfff10bf39e84392e728d89103d3474a7e5def0fd134b300a", + "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-linux_x64", "urls": [ - "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz", - "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_x64.tar.gz" + "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_x64.tar.gz", + "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_x64.tar.gz" ] } }, @@ -2423,11 +2525,10 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remote_java_tools_linux", - "sha256": "d134da9b04c9023fb6e56a5d4bffccee73f7bc9572ddc4e747778dacccd7a5a7", + "sha256": "ba10f09a138cf185d04cbc807d67a3da42ab13d618c5d1ce20d776e199c33a39", "urls": [ - "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_linux-v13.1.zip", - "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_linux-v13.1.zip" + "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_linux-v13.4.zip", + "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_linux-v13.4.zip" ] } }, @@ -2435,13 +2536,12 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_win", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", - "sha256": "e9959d500a0d9a7694ac243baf657761479da132f0f94720cbffd092150bd802", - "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-win_x64", + "sha256": "f7cc15ca17295e69c907402dfe8db240db446e75d3b150da7bf67243cded93de", + "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-win_x64", "urls": [ - "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip", - "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-win_x64.zip" + "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.zip", + "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.zip" ] } }, @@ -2449,21 +2549,19 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_aarch64", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 21,\n)\n", - "sha256": "1fb64b8036c5d463d8ab59af06bf5b6b006811e6012e3b0eb6bccf57f1c55835", - "strip_prefix": "zulu21.28.85-ca-jdk21.0.0-linux_aarch64", + "sha256": "ce7df1af5d44a9f455617c4b8891443fbe3e4b269c777d8b82ed66f77167cfe0", + "strip_prefix": "zulu21.32.17-ca-jdk21.0.2-linux_aarch64", "urls": [ - "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz", - "https://cdn.azul.com/zulu/bin/zulu21.28.85-ca-jdk21.0.0-linux_aarch64.tar.gz" + "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_aarch64.tar.gz", + "https://mirror.bazel.build/cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_aarch64.tar.gz" ] } }, "remotejdk11_linux_aarch64_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_aarch64_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_linux_aarch64//:jdk\",\n)\n" } }, @@ -2471,7 +2569,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_s390x", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", "sha256": "a58fc0361966af0a5d5a31a2d8a208e3c9bb0f54f345596fd80b99ea9a39788b", "strip_prefix": "jdk-11.0.15+10", @@ -2485,7 +2582,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_aarch64", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", "sha256": "6531cef61e416d5a7b691555c8cf2bdff689201b8a001ff45ab6740062b44313", "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-linux_aarch64", @@ -2496,10 +2592,9 @@ } }, "remotejdk17_win_arm64_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_win_arm64_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_win_arm64//:jdk\",\n)\n" } }, @@ -2507,7 +2602,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_linux", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", "sha256": "a34b404f87a08a61148b38e1416d837189e1df7a040d949e743633daf4695a3c", "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-linux_x64", @@ -2518,18 +2612,16 @@ } }, "remotejdk11_macos_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_macos//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:macos\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_macos//:jdk\",\n)\n" } }, "remotejdk17_linux_ppc64le_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_ppc64le_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:ppc\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_linux_ppc64le//:jdk\",\n)\n" } }, @@ -2537,7 +2629,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_win_arm64", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", "sha256": "6802c99eae0d788e21f52d03cab2e2b3bf42bc334ca03cbf19f71eb70ee19f85", "strip_prefix": "zulu17.44.53-ca-jdk17.0.8.1-win_aarch64", @@ -2551,11 +2642,10 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remote_java_tools_darwin_arm64", - "sha256": "dab5bb87ec43e980faea6e1cec14bafb217b8e2f5346f53aa784fd715929a930", + "sha256": "076a7e198ad077f8c7d997986ef5102427fae6bbfce7a7852d2e080ed8767528", "urls": [ - "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_darwin_arm64-v13.1.zip", - "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_darwin_arm64-v13.1.zip" + "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_darwin_arm64-v13.4.zip", + "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_darwin_arm64-v13.4.zip" ] } }, @@ -2563,7 +2653,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_ppc64le", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", "sha256": "00a4c07603d0218cd678461b5b3b7e25b3253102da4022d31fc35907f21a2efd", "strip_prefix": "jdk-17.0.8.1+1", @@ -2574,26 +2663,23 @@ } }, "remotejdk21_linux_aarch64_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_linux_aarch64_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:linux\", \"@platforms//cpu:aarch64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_linux_aarch64//:jdk\",\n)\n" } }, "remotejdk11_win_arm64_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_win_arm64_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_11\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"11\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:arm64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk11_win_arm64//:jdk\",\n)\n" } }, "local_jdk": { - "bzlFile": "@@rules_java~7.1.0//toolchains:local_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:local_java_repository.bzl", "ruleClassName": "_local_java_repository_rule", "attributes": { - "name": "rules_java~7.1.0~toolchains~local_jdk", "java_home": "", "version": "", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = {RUNTIME_VERSION},\n)\n" @@ -2603,11 +2689,10 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remote_java_tools_darwin_x86_64", - "sha256": "0db40d8505a2b65ef0ed46e4256757807db8162f7acff16225be57c1d5726dbc", + "sha256": "4523aec4d09c587091a2dae6f5c9bc6922c220f3b6030e5aba9c8f015913cc65", "urls": [ - "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools_darwin_x86_64-v13.1.zip", - "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools_darwin_x86_64-v13.1.zip" + "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools_darwin_x86_64-v13.4.zip", + "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools_darwin_x86_64-v13.4.zip" ] } }, @@ -2615,11 +2700,10 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remote_java_tools", - "sha256": "286bdbbd66e616fc4ed3f90101418729a73baa7e8c23a98ffbef558f74c0ad14", + "sha256": "e025fd260ac39b47c111f5212d64ec0d00d85dec16e49368aae82fc626a940cf", "urls": [ - "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.1/java_tools-v13.1.zip", - "https://github.com/bazelbuild/java_tools/releases/download/java_v13.1/java_tools-v13.1.zip" + "https://mirror.bazel.build/bazel_java_tools/releases/java/v13.4/java_tools-v13.4.zip", + "https://github.com/bazelbuild/java_tools/releases/download/java_v13.4/java_tools-v13.4.zip" ] } }, @@ -2627,7 +2711,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_linux_s390x", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 17,\n)\n", "sha256": "ffacba69c6843d7ca70d572489d6cc7ab7ae52c60f0852cedf4cf0d248b6fc37", "strip_prefix": "jdk-17.0.8.1+1", @@ -2638,10 +2721,9 @@ } }, "remotejdk17_win_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk17_win_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_17\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"17\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk17_win//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk17_win//:jdk\",\n)\n" } }, @@ -2649,7 +2731,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_linux_ppc64le", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", "sha256": "a8fba686f6eb8ae1d1a9566821dbd5a85a1108b96ad857fdbac5c1e4649fc56f", "strip_prefix": "jdk-11.0.15+10", @@ -2663,7 +2744,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk11_macos_aarch64", "build_file_content": "load(\"@rules_java//java:defs.bzl\", \"java_runtime\")\n\npackage(default_visibility = [\"//visibility:public\"])\n\nexports_files([\"WORKSPACE\", \"BUILD.bazel\"])\n\nfilegroup(\n name = \"jre\",\n srcs = glob(\n [\n \"jre/bin/**\",\n \"jre/lib/**\",\n ],\n allow_empty = True,\n # In some configurations, Java browser plugin is considered harmful and\n # common antivirus software blocks access to npjp2.dll interfering with Bazel,\n # so do not include it in JRE on Windows.\n exclude = [\"jre/bin/plugin2/**\"],\n ),\n)\n\nfilegroup(\n name = \"jdk-bin\",\n srcs = glob(\n [\"bin/**\"],\n # The JDK on Windows sometimes contains a directory called\n # \"%systemroot%\", which is not a valid label.\n exclude = [\"**/*%*/**\"],\n ),\n)\n\n# This folder holds security policies.\nfilegroup(\n name = \"jdk-conf\",\n srcs = glob(\n [\"conf/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-include\",\n srcs = glob(\n [\"include/**\"],\n allow_empty = True,\n ),\n)\n\nfilegroup(\n name = \"jdk-lib\",\n srcs = glob(\n [\"lib/**\", \"release\"],\n allow_empty = True,\n exclude = [\n \"lib/missioncontrol/**\",\n \"lib/visualvm/**\",\n ],\n ),\n)\n\njava_runtime(\n name = \"jdk\",\n srcs = [\n \":jdk-bin\",\n \":jdk-conf\",\n \":jdk-include\",\n \":jdk-lib\",\n \":jre\",\n ],\n # Provide the 'java` binary explicitly so that the correct path is used by\n # Bazel even when the host platform differs from the execution platform.\n # Exactly one of the two globs will be empty depending on the host platform.\n # When --incompatible_disallow_empty_glob is enabled, each individual empty\n # glob will fail without allow_empty = True, even if the overall result is\n # non-empty.\n java = glob([\"bin/java.exe\", \"bin/java\"], allow_empty = True)[0],\n version = 11,\n)\n", "sha256": "7632bc29f8a4b7d492b93f3bc75a7b61630894db85d136456035ab2a24d38885", "strip_prefix": "zulu11.66.15-ca-jdk11.0.20-macosx_aarch64", @@ -2674,53 +2754,45 @@ } }, "remotejdk21_win_toolchain_config_repo": { - "bzlFile": "@@rules_java~7.1.0//toolchains:remote_java_repository.bzl", + "bzlFile": "@@rules_java~//toolchains:remote_java_repository.bzl", "ruleClassName": "_toolchain_config", "attributes": { - "name": "rules_java~7.1.0~toolchains~remotejdk21_win_toolchain_config_repo", "build_file": "\nconfig_setting(\n name = \"prefix_version_setting\",\n values = {\"java_runtime_version\": \"remotejdk_21\"},\n visibility = [\"//visibility:private\"],\n)\nconfig_setting(\n name = \"version_setting\",\n values = {\"java_runtime_version\": \"21\"},\n visibility = [\"//visibility:private\"],\n)\nalias(\n name = \"version_or_prefix_version_setting\",\n actual = select({\n \":version_setting\": \":version_setting\",\n \"//conditions:default\": \":prefix_version_setting\",\n }),\n visibility = [\"//visibility:private\"],\n)\ntoolchain(\n name = \"toolchain\",\n target_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:runtime_toolchain_type\",\n toolchain = \"@remotejdk21_win//:jdk\",\n)\ntoolchain(\n name = \"bootstrap_runtime_toolchain\",\n # These constraints are not required for correctness, but prevent fetches of remote JDK for\n # different architectures. As every Java compilation toolchain depends on a bootstrap runtime in\n # the same configuration, this constraint will not result in toolchain resolution failures.\n exec_compatible_with = [\"@platforms//os:windows\", \"@platforms//cpu:x86_64\"],\n target_settings = [\":version_or_prefix_version_setting\"],\n toolchain_type = \"@bazel_tools//tools/jdk:bootstrap_runtime_toolchain_type\",\n toolchain = \"@remotejdk21_win//:jdk\",\n)\n" } } - } + }, + "recordedRepoMappingEntries": [ + [ + "rules_java~", + "bazel_tools", + "bazel_tools" + ], + [ + "rules_java~", + "remote_java_tools", + "rules_java~~toolchains~remote_java_tools" + ] + ] } }, - "@@rules_python~0.27.1//python/extensions:python.bzl%python": { + "@@rules_python~//python/extensions:python.bzl%python": { "general": { - "bzlTransitiveDigest": "sBUIrhzhZtq8rynvWnwm1dcZK05YfGluNUI/gOjLs2A=", - "accumulatedFileDigests": {}, + "bzlTransitiveDigest": "QIgyqZIIKqo2p1U8K64RdUfCLCKWDVsrlc/GfE1CJho=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "python_3_11_s390x-unknown-linux-gnu": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", + "bzlFile": "@@rules_python~//python:repositories.bzl", "ruleClassName": "python_repository", "attributes": { - "name": "rules_python~0.27.1~python~python_3_11_s390x-unknown-linux-gnu", - "sha256": "f9f19823dba3209cedc4647b00f46ed0177242917db20fb7fb539970e384531c", + "sha256": "3f7a0dd64fa292977c4da09e865ee504a48e55dbc2dbfd9ff4b991af891e4446", "patches": [], "platform": "s390x-unknown-linux-gnu", - "python_version": "3.11.6", - "release_filename": "20231002/cpython-3.11.6+20231002-s390x-unknown-linux-gnu-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-s390x-unknown-linux-gnu-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "coverage_tool": "", - "ignore_root_user_error": false - } - }, - "python_3_11_aarch64-unknown-linux-gnu": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "name": "rules_python~0.27.1~python~python_3_11_aarch64-unknown-linux-gnu", - "sha256": "3e26a672df17708c4dc928475a5974c3fb3a34a9b45c65fb4bd1e50504cc84ec", - "patches": [], - "platform": "aarch64-unknown-linux-gnu", - "python_version": "3.11.6", - "release_filename": "20231002/cpython-3.11.6+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz", + "python_version": "3.11.9", + "release_filename": "20240415/cpython-3.11.9+20240415-s390x-unknown-linux-gnu-install_only.tar.gz", "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz" + "https://github.com/indygreg/python-build-standalone/releases/download/20240415/cpython-3.11.9+20240415-s390x-unknown-linux-gnu-install_only.tar.gz" ], "distutils_content": "", "strip_prefix": "python", @@ -2728,13 +2800,12 @@ "ignore_root_user_error": false } }, - "python_3_9": { - "bzlFile": "@@rules_python~0.27.1//python/private:toolchains_repo.bzl", - "ruleClassName": "toolchain_aliases", + "python_3_11_host": { + "bzlFile": "@@rules_python~//python/private:toolchains_repo.bzl", + "ruleClassName": "host_toolchain", "attributes": { - "name": "rules_python~0.27.1~python~python_3_9", - "python_version": "3.9.18", - "user_repository_name": "python_3_9", + "python_version": "3.11.9", + "user_repository_name": "python_3_11", "platforms": [ "aarch64-apple-darwin", "aarch64-unknown-linux-gnu", @@ -2746,61 +2817,34 @@ ] } }, - "python_3_11_aarch64-apple-darwin": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "name": "rules_python~0.27.1~python~python_3_11_aarch64-apple-darwin", - "sha256": "916c35125b5d8323a21526d7a9154ca626453f63d0878e95b9f613a95006c990", - "patches": [], - "platform": "aarch64-apple-darwin", - "python_version": "3.11.6", - "release_filename": "20231002/cpython-3.11.6+20231002-aarch64-apple-darwin-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-aarch64-apple-darwin-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "coverage_tool": "", - "ignore_root_user_error": false - } - }, - "pythons_hub": { - "bzlFile": "@@rules_python~0.27.1//python/private/bzlmod:pythons_hub.bzl", - "ruleClassName": "hub_repo", + "python_3_11": { + "bzlFile": "@@rules_python~//python/private:toolchains_repo.bzl", + "ruleClassName": "toolchain_aliases", "attributes": { - "name": "rules_python~0.27.1~python~pythons_hub", - "default_python_version": "3.9", - "toolchain_prefixes": [ - "_0000_python_3_11_", - "_0001_python_3_9_" - ], - "toolchain_python_versions": [ - "3.11", - "3.9" - ], - "toolchain_set_python_version_constraints": [ - "True", - "False" - ], - "toolchain_user_repository_names": [ - "python_3_11", - "python_3_9" + "python_version": "3.11.9", + "user_repository_name": "python_3_11", + "platforms": [ + "aarch64-apple-darwin", + "aarch64-unknown-linux-gnu", + "ppc64le-unknown-linux-gnu", + "s390x-unknown-linux-gnu", + "x86_64-apple-darwin", + "x86_64-pc-windows-msvc", + "x86_64-unknown-linux-gnu" ] } }, - "python_3_11_x86_64-pc-windows-msvc": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", + "python_3_11_aarch64-unknown-linux-gnu": { + "bzlFile": "@@rules_python~//python:repositories.bzl", "ruleClassName": "python_repository", "attributes": { - "name": "rules_python~0.27.1~python~python_3_11_x86_64-pc-windows-msvc", - "sha256": "3933545e6d41462dd6a47e44133ea40995bc6efeed8c2e4cbdf1a699303e95ea", + "sha256": "b3a7199ac2615d75fb906e5ba556432efcf24baf8651fc70370d9f052d4069ee", "patches": [], - "platform": "x86_64-pc-windows-msvc", - "python_version": "3.11.6", - "release_filename": "20231002/cpython-3.11.6+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz", + "platform": "aarch64-unknown-linux-gnu", + "python_version": "3.11.9", + "release_filename": "20240415/cpython-3.11.9+20240415-aarch64-unknown-linux-gnu-install_only.tar.gz", "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz" + "https://github.com/indygreg/python-build-standalone/releases/download/20240415/cpython-3.11.9+20240415-aarch64-unknown-linux-gnu-install_only.tar.gz" ], "distutils_content": "", "strip_prefix": "python", @@ -2808,37 +2852,17 @@ "ignore_root_user_error": false } }, - "python_3_9_aarch64-apple-darwin": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", + "python_3_11_aarch64-apple-darwin": { + "bzlFile": "@@rules_python~//python:repositories.bzl", "ruleClassName": "python_repository", "attributes": { - "name": "rules_python~0.27.1~python~python_3_9_aarch64-apple-darwin", - "sha256": "fdc4054837e37b69798c2ef796222a480bc1f80e8ad3a01a95d0168d8282a007", + "sha256": "7af7058f7c268b4d87ed7e08c2c7844ef8460863b3e679db3afdce8bb1eedfae", "patches": [], "platform": "aarch64-apple-darwin", - "python_version": "3.9.18", - "release_filename": "20231002/cpython-3.9.18+20231002-aarch64-apple-darwin-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.9.18+20231002-aarch64-apple-darwin-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "coverage_tool": "", - "ignore_root_user_error": false - } - }, - "python_3_9_x86_64-pc-windows-msvc": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "name": "rules_python~0.27.1~python~python_3_9_x86_64-pc-windows-msvc", - "sha256": "02ea7bb64524886bd2b05d6b6be4401035e4ba4319146f274f0bcd992822cd75", - "patches": [], - "platform": "x86_64-pc-windows-msvc", - "python_version": "3.9.18", - "release_filename": "20231002/cpython-3.9.18+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz", + "python_version": "3.11.9", + "release_filename": "20240415/cpython-3.11.9+20240415-aarch64-apple-darwin-install_only.tar.gz", "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.9.18+20231002-x86_64-pc-windows-msvc-shared-install_only.tar.gz" + "https://github.com/indygreg/python-build-standalone/releases/download/20240415/cpython-3.11.9+20240415-aarch64-apple-darwin-install_only.tar.gz" ], "distutils_content": "", "strip_prefix": "python", @@ -2846,18 +2870,17 @@ "ignore_root_user_error": false } }, - "python_3_9_ppc64le-unknown-linux-gnu": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", + "python_3_11_ppc64le-unknown-linux-gnu": { + "bzlFile": "@@rules_python~//python:repositories.bzl", "ruleClassName": "python_repository", "attributes": { - "name": "rules_python~0.27.1~python~python_3_9_ppc64le-unknown-linux-gnu", - "sha256": "101c38b22fb2f5a0945156da4259c8e9efa0c08de9d7f59afa51e7ce6e22a1cc", + "sha256": "03f62d1e2d400c9662cdd12ae33a6f328c34ae8e2b872f8563a144834742bd6a", "patches": [], "platform": "ppc64le-unknown-linux-gnu", - "python_version": "3.9.18", - "release_filename": "20231002/cpython-3.9.18+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz", + "python_version": "3.11.9", + "release_filename": "20240415/cpython-3.11.9+20240415-ppc64le-unknown-linux-gnu-install_only.tar.gz", "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.9.18+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz" + "https://github.com/indygreg/python-build-standalone/releases/download/20240415/cpython-3.11.9+20240415-ppc64le-unknown-linux-gnu-install_only.tar.gz" ], "distutils_content": "", "strip_prefix": "python", @@ -2865,18 +2888,17 @@ "ignore_root_user_error": false } }, - "python_3_9_aarch64-unknown-linux-gnu": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", + "python_3_11_x86_64-apple-darwin": { + "bzlFile": "@@rules_python~//python:repositories.bzl", "ruleClassName": "python_repository", "attributes": { - "name": "rules_python~0.27.1~python~python_3_9_aarch64-unknown-linux-gnu", - "sha256": "1e0a3e8ce8e58901a259748c0ab640d2b8294713782d14229e882c6898b2fb36", + "sha256": "9afd734f63a23783cf0257bef25c9231ffc80e7747486dc54cf72f325213fd15", "patches": [], - "platform": "aarch64-unknown-linux-gnu", - "python_version": "3.9.18", - "release_filename": "20231002/cpython-3.9.18+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz", + "platform": "x86_64-apple-darwin", + "python_version": "3.11.9", + "release_filename": "20240415/cpython-3.11.9+20240415-x86_64-apple-darwin-install_only.tar.gz", "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.9.18+20231002-aarch64-unknown-linux-gnu-install_only.tar.gz" + "https://github.com/indygreg/python-build-standalone/releases/download/20240415/cpython-3.11.9+20240415-x86_64-apple-darwin-install_only.tar.gz" ], "distutils_content": "", "strip_prefix": "python", @@ -2884,123 +2906,45 @@ "ignore_root_user_error": false } }, - "python_3_11": { - "bzlFile": "@@rules_python~0.27.1//python/private:toolchains_repo.bzl", - "ruleClassName": "toolchain_aliases", - "attributes": { - "name": "rules_python~0.27.1~python~python_3_11", - "python_version": "3.11.6", - "user_repository_name": "python_3_11", - "platforms": [ - "aarch64-apple-darwin", - "aarch64-unknown-linux-gnu", - "ppc64le-unknown-linux-gnu", - "s390x-unknown-linux-gnu", - "x86_64-apple-darwin", - "x86_64-pc-windows-msvc", - "x86_64-unknown-linux-gnu" - ] - } - }, - "python_3_11_ppc64le-unknown-linux-gnu": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", - "ruleClassName": "python_repository", + "pythons_hub": { + "bzlFile": "@@rules_python~//python/private/bzlmod:pythons_hub.bzl", + "ruleClassName": "hub_repo", "attributes": { - "name": "rules_python~0.27.1~python~python_3_11_ppc64le-unknown-linux-gnu", - "sha256": "7937035f690a624dba4d014ffd20c342e843dd46f89b0b0a1e5726b85deb8eaf", - "patches": [], - "platform": "ppc64le-unknown-linux-gnu", - "python_version": "3.11.6", - "release_filename": "20231002/cpython-3.11.6+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-ppc64le-unknown-linux-gnu-install_only.tar.gz" + "default_python_version": "3.11", + "toolchain_prefixes": [ + "_0000_python_3_11_" ], - "distutils_content": "", - "strip_prefix": "python", - "coverage_tool": "", - "ignore_root_user_error": false - } - }, - "python_3_11_x86_64-apple-darwin": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "name": "rules_python~0.27.1~python~python_3_11_x86_64-apple-darwin", - "sha256": "178cb1716c2abc25cb56ae915096c1a083e60abeba57af001996e8bc6ce1a371", - "patches": [], - "platform": "x86_64-apple-darwin", - "python_version": "3.11.6", - "release_filename": "20231002/cpython-3.11.6+20231002-x86_64-apple-darwin-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-x86_64-apple-darwin-install_only.tar.gz" + "toolchain_python_versions": [ + "3.11" ], - "distutils_content": "", - "strip_prefix": "python", - "coverage_tool": "", - "ignore_root_user_error": false + "toolchain_set_python_version_constraints": [ + "False" + ], + "toolchain_user_repository_names": [ + "python_3_11" + ] } }, "python_versions": { - "bzlFile": "@@rules_python~0.27.1//python/private:toolchains_repo.bzl", + "bzlFile": "@@rules_python~//python/private:toolchains_repo.bzl", "ruleClassName": "multi_toolchain_aliases", "attributes": { - "name": "rules_python~0.27.1~python~python_versions", "python_versions": { - "3.9": "python_3_9", "3.11": "python_3_11" } } }, - "python_3_9_x86_64-apple-darwin": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "name": "rules_python~0.27.1~python~python_3_9_x86_64-apple-darwin", - "sha256": "82231cb77d4a5c8081a1a1d5b8ae440abe6993514eb77a926c826e9a69a94fb1", - "patches": [], - "platform": "x86_64-apple-darwin", - "python_version": "3.9.18", - "release_filename": "20231002/cpython-3.9.18+20231002-x86_64-apple-darwin-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.9.18+20231002-x86_64-apple-darwin-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "coverage_tool": "", - "ignore_root_user_error": false - } - }, - "python_3_9_x86_64-unknown-linux-gnu": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", - "ruleClassName": "python_repository", - "attributes": { - "name": "rules_python~0.27.1~python~python_3_9_x86_64-unknown-linux-gnu", - "sha256": "f3ff38b1ccae7dcebd8bbf2e533c9a984fac881de0ffd1636fbb61842bd924de", - "patches": [], - "platform": "x86_64-unknown-linux-gnu", - "python_version": "3.9.18", - "release_filename": "20231002/cpython-3.9.18+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz", - "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.9.18+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz" - ], - "distutils_content": "", - "strip_prefix": "python", - "coverage_tool": "", - "ignore_root_user_error": false - } - }, - "python_3_9_s390x-unknown-linux-gnu": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", + "python_3_11_x86_64-pc-windows-msvc": { + "bzlFile": "@@rules_python~//python:repositories.bzl", "ruleClassName": "python_repository", "attributes": { - "name": "rules_python~0.27.1~python~python_3_9_s390x-unknown-linux-gnu", - "sha256": "eee31e55ffbc1f460d7b17f05dd89e45a2636f374a6f8dc29ea13d0497f7f586", + "sha256": "368474c69f476e7de4adaf50b61d9fcf6ec8b4db88cc43c5f71c860b3cd29c69", "patches": [], - "platform": "s390x-unknown-linux-gnu", - "python_version": "3.9.18", - "release_filename": "20231002/cpython-3.9.18+20231002-s390x-unknown-linux-gnu-install_only.tar.gz", + "platform": "x86_64-pc-windows-msvc", + "python_version": "3.11.9", + "release_filename": "20240415/cpython-3.11.9+20240415-x86_64-pc-windows-msvc-shared-install_only.tar.gz", "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.9.18+20231002-s390x-unknown-linux-gnu-install_only.tar.gz" + "https://github.com/indygreg/python-build-standalone/releases/download/20240415/cpython-3.11.9+20240415-x86_64-pc-windows-msvc-shared-install_only.tar.gz" ], "distutils_content": "", "strip_prefix": "python", @@ -3009,17 +2953,16 @@ } }, "python_3_11_x86_64-unknown-linux-gnu": { - "bzlFile": "@@rules_python~0.27.1//python:repositories.bzl", + "bzlFile": "@@rules_python~//python:repositories.bzl", "ruleClassName": "python_repository", "attributes": { - "name": "rules_python~0.27.1~python~python_3_11_x86_64-unknown-linux-gnu", - "sha256": "ee37a7eae6e80148c7e3abc56e48a397c1664f044920463ad0df0fc706eacea8", + "sha256": "78b1c16a9fd032997ba92a60f46a64f795cd18ff335659dfdf6096df277b24d5", "patches": [], "platform": "x86_64-unknown-linux-gnu", - "python_version": "3.11.6", - "release_filename": "20231002/cpython-3.11.6+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz", + "python_version": "3.11.9", + "release_filename": "20240415/cpython-3.11.9+20240415-x86_64-unknown-linux-gnu-install_only.tar.gz", "urls": [ - "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6+20231002-x86_64-unknown-linux-gnu-install_only.tar.gz" + "https://github.com/indygreg/python-build-standalone/releases/download/20240415/cpython-3.11.9+20240415-x86_64-unknown-linux-gnu-install_only.tar.gz" ], "distutils_content": "", "strip_prefix": "python", @@ -3027,20 +2970,32 @@ "ignore_root_user_error": false } } - } + }, + "recordedRepoMappingEntries": [ + [ + "rules_python~", + "bazel_skylib", + "bazel_skylib~" + ], + [ + "rules_python~", + "bazel_tools", + "bazel_tools" + ] + ] } }, - "@@rules_python~0.27.1//python/private/bzlmod:internal_deps.bzl%internal_deps": { + "@@rules_python~//python/private/bzlmod:internal_deps.bzl%internal_deps": { "general": { - "bzlTransitiveDigest": "xr7pKQvGhawsuA61pquXxuhuxlzM5QyWfF9UXfyr2Y4=", - "accumulatedFileDigests": {}, + "bzlTransitiveDigest": "fDqhuyt2dROfO6qL4WlobPgyJCNlwP0fPCgW6fEpFMg=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { "pypi__wheel": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__wheel", "url": "https://files.pythonhosted.org/packages/b8/8b/31273bf66016be6ad22bb7345c37ff350276cfd46e389a0c2ac5da9d9073/wheel-0.41.2-py3-none-any.whl", "sha256": "75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8", "type": "zip", @@ -3051,7 +3006,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__click", "url": "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", "sha256": "ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", "type": "zip", @@ -3062,7 +3016,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__importlib_metadata", "url": "https://files.pythonhosted.org/packages/cc/37/db7ba97e676af155f5fcb1a35466f446eadc9104e25b83366e8088c9c926/importlib_metadata-6.8.0-py3-none-any.whl", "sha256": "3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", "type": "zip", @@ -3073,7 +3026,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__pyproject_hooks", "url": "https://files.pythonhosted.org/packages/d5/ea/9ae603de7fbb3df820b23a70f6aff92bf8c7770043254ad8d2dc9d6bcba4/pyproject_hooks-1.0.0-py3-none-any.whl", "sha256": "283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8", "type": "zip", @@ -3084,7 +3036,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__pep517", "url": "https://files.pythonhosted.org/packages/ee/2f/ef63e64e9429111e73d3d6cbee80591672d16f2725e648ebc52096f3d323/pep517-0.13.0-py3-none-any.whl", "sha256": "4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b", "type": "zip", @@ -3095,7 +3046,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__packaging", "url": "https://files.pythonhosted.org/packages/ab/c3/57f0601a2d4fe15de7a553c00adbc901425661bf048f2a22dfc500caf121/packaging-23.1-py3-none-any.whl", "sha256": "994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", "type": "zip", @@ -3106,9 +3056,8 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__pip_tools", - "url": "https://files.pythonhosted.org/packages/e8/df/47e6267c6b5cdae867adbdd84b437393e6202ce4322de0a5e0b92960e1d6/pip_tools-7.3.0-py3-none-any.whl", - "sha256": "8717693288720a8c6ebd07149c93ab0be1fced0b5191df9e9decd3263e20d85e", + "url": "https://files.pythonhosted.org/packages/0d/dc/38f4ce065e92c66f058ea7a368a9c5de4e702272b479c0992059f7693941/pip_tools-7.4.1-py3-none-any.whl", + "sha256": "4c690e5fbae2f21e87843e89c26191f0d9454f362d8acdbd695716493ec8b3a9", "type": "zip", "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" } @@ -3117,7 +3066,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__setuptools", "url": "https://files.pythonhosted.org/packages/4f/ab/0bcfebdfc3bfa8554b2b2c97a555569c4c1ebc74ea288741ea8326c51906/setuptools-68.1.2-py3-none-any.whl", "sha256": "3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b", "type": "zip", @@ -3128,7 +3076,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__zipp", "url": "https://files.pythonhosted.org/packages/8c/08/d3006317aefe25ea79d3b76c9650afabaf6d63d1c8443b236e7405447503/zipp-3.16.2-py3-none-any.whl", "sha256": "679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0", "type": "zip", @@ -3139,7 +3086,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__colorama", "url": "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", "type": "zip", @@ -3150,25 +3096,21 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__build", - "url": "https://files.pythonhosted.org/packages/58/91/17b00d5fac63d3dca605f1b8269ba3c65e98059e1fd99d00283e42a454f0/build-0.10.0-py3-none-any.whl", - "sha256": "af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171", + "url": "https://files.pythonhosted.org/packages/e2/03/f3c8ba0a6b6e30d7d18c40faab90807c9bb5e9a1e3b2fe2008af624a9c97/build-1.2.1-py3-none-any.whl", + "sha256": "75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4", "type": "zip", "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" } }, "rules_python_internal": { - "bzlFile": "@@rules_python~0.27.1//python/private:internal_config_repo.bzl", + "bzlFile": "@@rules_python~//python/private:internal_config_repo.bzl", "ruleClassName": "internal_config_repo", - "attributes": { - "name": "rules_python~0.27.1~internal_deps~rules_python_internal" - } + "attributes": {} }, "pypi__pip": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__pip", "url": "https://files.pythonhosted.org/packages/50/c2/e06851e8cc28dcad7c155f4753da8833ac06a5c704c109313b8d5a62968a/pip-23.2.1-py3-none-any.whl", "sha256": "7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be", "type": "zip", @@ -3179,7 +3121,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__installer", "url": "https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl", "sha256": "05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53", "type": "zip", @@ -3190,7 +3131,6 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__more_itertools", "url": "https://files.pythonhosted.org/packages/5a/cb/6dce742ea14e47d6f565589e859ad225f2a5de576d7696e0623b784e226b/more_itertools-10.1.0-py3-none-any.whl", "sha256": "64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6", "type": "zip", @@ -3201,14 +3141,20 @@ "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "name": "rules_python~0.27.1~internal_deps~pypi__tomli", "url": "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", "sha256": "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", "type": "zip", "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:defs.bzl\", \"py_library\")\n\npy_library(\n name = \"lib\",\n srcs = glob([\"**/*.py\"]),\n data = glob([\"**/*\"], exclude=[\n # These entries include those put into user-installed dependencies by\n # data_exclude in /python/pip_install/tools/bazel.py\n # to avoid non-determinism following pip install's behavior.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\n \"**/* *\",\n \"**/*.dist-info/RECORD\",\n \"BUILD\",\n \"WORKSPACE\",\n ]),\n # This makes this directory a top-level in the python import\n # search path for anything that depends on this.\n imports = [\".\"],\n)\n" } } - } + }, + "recordedRepoMappingEntries": [ + [ + "rules_python~", + "bazel_tools", + "bazel_tools" + ] + ] } } } diff --git a/WORKSPACE b/WORKSPACE index 5f26926..d9f0645 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,65 +1,44 @@ -# Copyright 2023 The benchsci Authors. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -workspace(name = "com_github_benchsci_rules_python_gazelle") +workspace(name = "rules_python_gazelle_plugin") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", - sha256 = "91585017debb61982f7054c9688857a2ad1fd823fc3f9cb05048b0025c47d023", + sha256 = "278b7ff5a826f3dc10f04feaf0b70d48b68748ccd512d7f98bf442077f043fe3", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.42.0/rules_go-v0.42.0.zip", - "https://github.com/bazelbuild/rules_go/releases/download/v0.42.0/rules_go-v0.42.0.zip", + "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.41.0/rules_go-v0.41.0.zip", + "https://github.com/bazelbuild/rules_go/releases/download/v0.41.0/rules_go-v0.41.0.zip", ], ) http_archive( name = "bazel_gazelle", - sha256 = "b7387f72efb59f876e4daae42f1d3912d0d45563eac7cb23d1de0b094ab588cf", + sha256 = "29d5dafc2a5582995488c6735115d1d366fcd6a0fc2e2a153f02988706349825", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.34.0/bazel-gazelle-v0.34.0.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.34.0/bazel-gazelle-v0.34.0.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.31.0/bazel-gazelle-v0.31.0.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.31.0/bazel-gazelle-v0.31.0.tar.gz", ], ) -load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") -load("//gazelle:deps.bzl", "gazelle_deps") - -# gazelle:repository_macro gazelle/deps.bzl%gazelle_deps -gazelle_deps() +load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies") go_rules_dependencies() -go_register_toolchains(version = "1.20.5") +go_register_toolchains(version = "1.19.4") gazelle_dependencies() -http_archive( +local_repository( name = "rules_python", - sha256 = "9d04041ac92a0985e344235f5d946f71ac543f1b1565f2cdbc9a2aaee8adf55b", - strip_prefix = "rules_python-0.26.0", - url = "https://github.com/bazelbuild/rules_python/releases/download/0.26.0/rules_python-0.26.0.tar.gz", + path = "..", ) -load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains") - -# Add python 3.11 toolchain -python_register_toolchains( - name = "python_3_11", - python_version = "3.11", -) +load("@rules_python//python:repositories.bzl", "py_repositories") py_repositories() + +load("//:deps.bzl", _py_gazelle_deps = "gazelle_deps") + +# gazelle:repository_macro deps.bzl%go_deps +_py_gazelle_deps() diff --git a/def.bzl b/def.bzl new file mode 100644 index 0000000..084b5a4 --- /dev/null +++ b/def.bzl @@ -0,0 +1,19 @@ +# Copyright 2023 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""This module contains the Gazelle runtime dependencies for the Python extension. +""" + +GAZELLE_PYTHON_RUNTIME_DEPS = [ +] diff --git a/gazelle/deps.bzl b/deps.bzl similarity index 61% rename from gazelle/deps.bzl rename to deps.bzl index 63ad6c3..f4f4c24 100644 --- a/gazelle/deps.bzl +++ b/deps.bzl @@ -1,6 +1,68 @@ -load("@bazel_gazelle//:deps.bzl", "go_repository") +# Copyright 2023 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"This file managed by `bazel run //:gazelle_update_repos`" + +load( + "@bazel_gazelle//:deps.bzl", + _go_repository = "go_repository", +) +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") + +def go_repository(name, **kwargs): + if name not in native.existing_rules(): + _go_repository(name = name, **kwargs) + +def python_stdlib_list_deps(): + "Fetch python stdlib list dependencies" + http_file( + name = "python_stdlib_list_3_8", + sha256 = "ee6dc367011ff298b906dbaab408940aa57086d5f8f47278f4b7523b9aa13ae3", + url = "https://raw.githubusercontent.com/pypi/stdlib-list/8cbc2067a4a0f9eee57fb541e4cd7727724b7db4/stdlib_list/lists/3.8.txt", + downloaded_file_path = "3.8.txt", + ) + http_file( + name = "python_stdlib_list_3_9", + sha256 = "a4340e5ffe2e75bb18f548028cef6e6ac15384c44ae0a776e04dd869da1d1fd7", + url = "https://raw.githubusercontent.com/pypi/stdlib-list/8cbc2067a4a0f9eee57fb541e4cd7727724b7db4/stdlib_list/lists/3.9.txt", + downloaded_file_path = "3.9.txt", + ) + http_file( + name = "python_stdlib_list_3_10", + sha256 = "0b867738b78ac98944237de2600093a1c6ef259d1810017e46f01a29f3d199e7", + url = "https://raw.githubusercontent.com/pypi/stdlib-list/8cbc2067a4a0f9eee57fb541e4cd7727724b7db4/stdlib_list/lists/3.10.txt", + downloaded_file_path = "3.10.txt", + ) + http_file( + name = "python_stdlib_list_3_11", + sha256 = "3c1dbf991b17178d6ed3772f4fa8f64302feaf9c3385fef328a0c7ab736a79b1", + url = "https://raw.githubusercontent.com/pypi/stdlib-list/8cbc2067a4a0f9eee57fb541e4cd7727724b7db4/stdlib_list/lists/3.11.txt", + downloaded_file_path = "3.11.txt", + ) + http_file( + name = "python_stdlib_list_3_12", + sha256 = "6d3d53194218b43ee1d04bf9a4f0b6a9309bb59cdcaddede7d9cfe8b6835d34a", + url = "https://raw.githubusercontent.com/pypi/stdlib-list/8cbc2067a4a0f9eee57fb541e4cd7727724b7db4/stdlib_list/lists/3.12.txt", + downloaded_file_path = "3.12.txt", + ) def gazelle_deps(): + go_deps() + python_stdlib_list_deps() + +def go_deps(): + "Fetch go dependencies" go_repository( name = "co_honnef_go_tools", importpath = "honnef.co/go/tools", @@ -10,14 +72,16 @@ def gazelle_deps(): go_repository( name = "com_github_bazelbuild_bazel_gazelle", importpath = "github.com/bazelbuild/bazel-gazelle", - sum = "h1:WnJGYk1bMIjw8FCYA/UxKBK/Y6hUnOItrtR+vjFIIKo=", - version = "v0.33.0", + sum = "h1:ROyUyUHzoEdvoOs1e0haxJx1l5EjZX6AOqiKdVlaBbg=", + version = "v0.31.1", ) + go_repository( name = "com_github_bazelbuild_buildtools", + build_naming_convention = "go_default_library", importpath = "github.com/bazelbuild/buildtools", - sum = "h1:6Z/4LXt5mdhuFAx4QhwM0D5pTs1ljYGmhgF3O9OCMF0=", - version = "v0.0.0-20230831140646-386244e73fc4", + sum = "h1:HTepWP/jhtWTC1gvK0RnvKCgjh4gLqiwaOwGozAXcbw=", + version = "v0.0.0-20231103205921-433ea8554e82", ) go_repository( name = "com_github_bazelbuild_rules_go", @@ -25,12 +89,14 @@ def gazelle_deps(): sum = "h1:JzlRxsFNhlX+g4drDRPhIaU5H5LnI978wdMJ0vK4I+k=", version = "v0.41.0", ) + go_repository( name = "com_github_bmatcuk_doublestar_v4", importpath = "github.com/bmatcuk/doublestar/v4", - sum = "h1:HTuxyug8GyFbRkrffIpzNCSK4luc0TY3wzXvzIZhEXc=", - version = "v4.6.0", + sum = "h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=", + version = "v4.6.1", ) + go_repository( name = "com_github_burntsushi_toml", importpath = "github.com/BurntSushi/toml", @@ -67,11 +133,18 @@ def gazelle_deps(): sum = "h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI=", version = "v0.3.4", ) + go_repository( + name = "com_github_davecgh_go_spew", + importpath = "github.com/davecgh/go-spew", + sum = "h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=", + version = "v1.1.1", + ) + go_repository( name = "com_github_emirpasic_gods", importpath = "github.com/emirpasic/gods", - sum = "h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=", - version = "v1.12.0", + sum = "h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=", + version = "v1.18.1", ) go_repository( name = "com_github_envoyproxy_go_control_plane", @@ -91,6 +164,7 @@ def gazelle_deps(): sum = "h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=", version = "v1.6.0", ) + go_repository( name = "com_github_ghodss_yaml", importpath = "github.com/ghodss/yaml", @@ -121,42 +195,44 @@ def gazelle_deps(): sum = "h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=", version = "v0.5.9", ) - go_repository( - name = "com_github_google_uuid", - importpath = "github.com/google/uuid", - sum = "h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=", - version = "v1.3.0", - ) - go_repository( - name = "com_github_kr_pretty", - importpath = "github.com/kr/pretty", - sum = "h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=", - version = "v0.1.0", - ) - go_repository( - name = "com_github_kr_pty", - importpath = "github.com/kr/pty", - sum = "h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=", - version = "v1.1.1", - ) - go_repository( - name = "com_github_kr_text", - importpath = "github.com/kr/text", - sum = "h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=", - version = "v0.1.0", - ) go_repository( name = "com_github_pmezard_go_difflib", importpath = "github.com/pmezard/go-difflib", sum = "h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=", version = "v1.0.0", ) + go_repository( name = "com_github_prometheus_client_model", importpath = "github.com/prometheus/client_model", sum = "h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=", version = "v0.0.0-20190812154241-14fe0d1b01d4", ) + go_repository( + name = "com_github_smacker_go_tree_sitter", + importpath = "github.com/smacker/go-tree-sitter", + sum = "h1:7QZKUmQfnxncZIJGyvX8M8YeMfn8kM10j3J/2KwVTN4=", + version = "v0.0.0-20240422154435-0628b34cbf9c", + ) + go_repository( + name = "com_github_stretchr_objx", + importpath = "github.com/stretchr/objx", + sum = "h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=", + version = "v0.5.2", + ) + go_repository( + name = "com_github_stretchr_testify", + importpath = "github.com/stretchr/testify", + sum = "h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=", + version = "v1.9.0", + ) + + go_repository( + name = "com_github_yuin_goldmark", + importpath = "github.com/yuin/goldmark", + sum = "h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=", + version = "v1.4.13", + ) go_repository( name = "com_google_cloud_go", importpath = "cloud.google.com/go", @@ -166,15 +242,22 @@ def gazelle_deps(): go_repository( name = "in_gopkg_check_v1", importpath = "gopkg.in/check.v1", - sum = "h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=", - version = "v1.0.0-20180628173108-788fd7840127", + sum = "h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=", + version = "v0.0.0-20161208181325-20d25e280405", ) go_repository( name = "in_gopkg_yaml_v2", importpath = "gopkg.in/yaml.v2", - sum = "h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=", - version = "v2.2.8", + sum = "h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=", + version = "v2.4.0", ) + go_repository( + name = "in_gopkg_yaml_v3", + importpath = "gopkg.in/yaml.v3", + sum = "h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=", + version = "v3.0.1", + ) + go_repository( name = "net_starlark_go", importpath = "go.starlark.net", @@ -226,14 +309,14 @@ def gazelle_deps(): go_repository( name = "org_golang_x_mod", importpath = "golang.org/x/mod", - sum = "h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=", - version = "v0.12.0", + sum = "h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=", + version = "v0.10.0", ) go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", - sum = "h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=", - version = "v0.0.0-20210405180319-a5a99cb37ef4", + sum = "h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=", + version = "v0.10.0", ) go_repository( name = "org_golang_x_oauth2", @@ -244,14 +327,14 @@ def gazelle_deps(): go_repository( name = "org_golang_x_sync", importpath = "golang.org/x/sync", - sum = "h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=", - version = "v0.3.0", + sum = "h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=", + version = "v0.2.0", ) go_repository( name = "org_golang_x_sys", importpath = "golang.org/x/sys", - sum = "h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=", - version = "v0.12.0", + sum = "h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=", + version = "v0.8.0", ) go_repository( name = "org_golang_x_text", @@ -261,15 +344,12 @@ def gazelle_deps(): ) go_repository( name = "org_golang_x_tools", + build_directives = [ + "gazelle:exclude **/testdata/**/*", + ], importpath = "golang.org/x/tools", - sum = "h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=", - version = "v0.1.12", - ) - go_repository( - name = "org_golang_x_tools_go_vcs", - importpath = "golang.org/x/tools/go/vcs", - sum = "h1:cOIJqWBl99H1dH5LWizPa+0ImeeJq3t3cJjaeOWUAL4=", - version = "v0.1.0-deprecated", + sum = "h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo=", + version = "v0.9.1", ) go_repository( name = "org_golang_x_xerrors", diff --git a/gazelle/BUILD.bazel b/gazelle/BUILD.bazel index d71ddbe..e2834ba 100644 --- a/gazelle/BUILD.bazel +++ b/gazelle/BUILD.bazel @@ -1,73 +1,4 @@ -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") - -go_library( - name = "gazelle", - srcs = [ - "configure.go", - "fix.go", - "generate.go", - "kinds.go", - "language.go", - "lifecycle.go", - "parser.go", - "resolve.go", - "std_modules.go", - "target.go", - ], - embedsrcs = [":helper.zip"], # keep - importpath = "github.com/benchsci/rules_python_gazelle/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_emirpasic_gods//sets/treeset:go_default_library", - "@com_github_emirpasic_gods//utils:go_default_library", - "@com_github_google_uuid//:go_default_library", - "@io_bazel_rules_go//go/tools/bazel:go_default_library", - ], -) - -py_binary( - name = "parse", - srcs = ["parse.py"], - main = "parse.py", - visibility = ["//visibility:public"], -) - -py_binary( - name = "std_modules", - srcs = ["std_modules.py"], - main = "std_modules.py", - visibility = ["//visibility:public"], -) - -py_binary( - name = "helper", - srcs = [ - "__main__.py", - "parse.py", - "std_modules.py", - ], - # This is to make sure that the current directory is added to PYTHONPATH - imports = ["."], - main = "__main__.py", - visibility = ["//visibility:public"], -) - -filegroup( - name = "helper.zip", - srcs = [":helper"], - output_group = "python_zip_file", -) +load("@io_bazel_rules_go//go:def.bzl", "go_test") TEST_DEPS = [ "@bazel_gazelle//testtools:go_default_library", @@ -77,9 +8,7 @@ TEST_DEPS = [ ] TEST_DATA = [ - ":gazelle_python_binary", - ":parse", - ":std_modules", + "//python:gazelle_binary", ] [ @@ -92,13 +21,5 @@ TEST_DATA = [ for t in [ "simple", "django_test", - "pycheck", - "py_module", ] ] - -gazelle_binary( - name = "gazelle_python_binary", - languages = ["//gazelle"], - visibility = ["//visibility:public"], -) diff --git a/gazelle/README.md b/gazelle/README.md deleted file mode 100644 index 7d138e3..0000000 --- a/gazelle/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# Python Gazelle plugin - -This directory contains a plugin for -[Gazelle](https://github.com/bazelbuild/bazel-gazelle) -that generates BUILD file content for Python code. - -## Installation - -First, you'll need to add Gazelle to your `WORKSPACE` file. -Follow the instructions at https://github.com/bazelbuild/bazel-gazelle#running-gazelle-with-bazel - -Next, we need to fetch the third-party Go libraries that the python extension -depends on. - -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") - -_py_gazelle_deps() -``` - -Next, we'll fetch metadata about your Python dependencies, so that gazelle can -determine which package a given import statement comes from. This is provided -by the `modules_mapping` rule. We'll make a target for consuming this -`modules_mapping`, and writing it as a manifest file for Gazelle to read. -This is checked into the repo for speed, as it takes some time to calculate -in a large monorepo. - -Create a file `gazelle_python.yaml` next to your `requirements.txt` -file. (You can just use `touch` at this point, it just needs to exist.) - -Then put this in your `BUILD.bazel` file next to the `requirements.txt`: - -```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") - -# 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. -modules_mapping( - name = "modules_map", - wheels = all_whl_requirements, -) - -# Gazelle python extension needs a manifest file mapping from -# an import to the installed package that provides it. -# This macro produces two targets: -# - //:gazelle_python_manifest.update can be used with `bazel run` -# to recalculate the manifest -# - //:gazelle_python_manifest.test is a test target ensuring that -# the manifest doesn't need to be updated -gazelle_python_manifest( - name = "gazelle_python_manifest", - modules_mapping = ":modules_map", - # This is what we called our `pip_install` rule, where third-party - # python libraries are loaded in BUILD files. - pip_repository_name = "pip", - # When using pip_parse instead of pip_install, set the following. - # pip_repository_incremental = True, - # This should point to wherever we declare our python dependencies - # (the same as what we passed to the modules_mapping rule in WORKSPACE) - requirements = "//:requirements_lock.txt", -) -``` - -Finally, you create a target that you'll invoke to run the Gazelle tool -with the rules_python extension included. This typically goes in your root -`/BUILD.bazel` file: - -``` -load("@bazel_gazelle//:def.bzl", "gazelle") -load("@rules_python//gazelle: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. -# If you also had proto, go, or other gazelle-supported languages, -# you would also need a gazelle_binary rule. -# See https://github.com/bazelbuild/bazel-gazelle/blob/master/extend.rst#example -gazelle( - name = "gazelle", - data = GAZELLE_PYTHON_RUNTIME_DEPS, - gazelle = "@rules_python//gazelle:gazelle_python_binary", -) -``` - -That's it, now you can finally run `bazel run //:gazelle` anytime -you edit Python code, and it should update your `BUILD` files correctly. - -A fully-working example is in [`examples/build_file_generation`](examples/build_file_generation). - -## Usage - -Gazelle is non-destructive. -It will try to leave your edits to BUILD files alone, only making updates to `py_*` targets. -However it will remove dependencies that appear to be unused, so it's a -good idea to check in your work before running Gazelle so you can easily -revert any changes it made. - -The rules_python extension assumes some conventions about your Python code. -These are noted below, and might require changes to your existing code. - -Note that the `gazelle` program has multiple commands. At present, only the `update` command (the default) does anything for Python code. - -### Directives - -You can configure the extension using directives, just like for other -languages. These are just comments in the `BUILD.bazel` file which -govern behavior of the extension when processing files under that -folder. - -See https://github.com/bazelbuild/bazel-gazelle#directives -for some general directives that may be useful. -In particular, the `resolve` directive is language-specific -and can be used with Python. -Examples of these directives in use can be found in the -/gazelle/testdata folder in the rules_python repo. - -Python-specific directives are as follows: - -| **Directive** | **Default value** | -|--------------------------------------|-------------------| -| `# gazelle:python_extension` | `enabled` | -| Controls whether the Python extension is enabled or not. Sub-packages inherit this value. Can be either "enabled" or "disabled". | | -| `# gazelle:python_root` | n/a | -| Sets a Bazel package as a Python root. This is used on monorepos with multiple Python projects that don't share the top-level of the workspace as the root. | | -| `# gazelle:python_manifest_file_name`| `gazelle_python.yaml` | -| Overrides the default manifest file name. | | -| `# gazelle:python_ignore_files` | n/a | -| Controls the files which are ignored from the generated targets. | | -| `# gazelle:python_ignore_dependencies`| n/a | -| Controls the ignored dependencies from the generated targets. | | -| `# gazelle:python_validate_import_statements`| `true` | -| Controls whether the Python import statements should be validated. Can be "true" or "false" | | -| `# gazelle:python_generation_mode`| `package` | -| Controls the target generation mode. Can be "package" or "project" | | -| `# gazelle:python_library_naming_convention`| `$package_name$` | -| Controls the `py_library` naming convention. It interpolates $package_name$ with the Bazel package name. E.g. if the Bazel package name is `foo`, setting this to `$package_name$_my_lib` would result in a generated target named `foo_my_lib`. | | -| `# gazelle:python_binary_naming_convention` | `$package_name$_bin` | -| Controls the `py_binary` naming convention. Follows the same interpolation rules as `python_library_naming_convention`. | | -| `# gazelle:python_test_naming_convention` | `$package_name$_test` | -| Controls the `py_test` naming convention. Follows the same interpolation rules as `python_library_naming_convention`. | | -| `# gazelle:resolve py ...` | n/a | -| Instructs the plugin what target to add as a dependency to satisfy a given import statement. The syntax is `# gazelle:resolve py import-string label` where `import-string` is the symbol in the python `import` statement, and `label` is the Bazel label that Gazelle should write in `deps`. | | - -### Libraries - -Python source files are those ending in `.py` but not ending in `_test.py`. - -First, we look for the nearest ancestor BUILD file starting from the folder -containing the Python source file. - -If there is no `py_library` in this BUILD file, one is created, using the -package name as the target's name. This makes it the default target in the -package. - -Next, all source files are collected into the `srcs` of the `py_library`. - -Finally, the `import` statements in the source files are parsed, and -dependencies are added to the `deps` attribute. - -### Tests - -Python test files are those ending in `_test.py`. - -A `py_test` target is added containing all test files as `srcs`. - -### Binaries - -When a `__main__.py` file is encountered, this indicates the entry point -of a Python program. - -A `py_binary` target will be created, named `[package]_bin`. - -## Developing on the extension - -Gazelle extensions are written in Go. Ours is a hybrid, which also spawns -a Python interpreter as a subprocess to parse python files. - -The Go dependencies are managed by the go.mod file. -After changing that file, run `go mod tidy` to get a `go.sum` file, -then run `bazel run //:update_go_deps` to convert that to the `gazelle/deps.bzl` file. -The latter is loaded in our `/WORKSPACE` to define the external repos -that we can load Go dependencies from. - -Then after editing Go code, run `bazel run //:gazelle` to generate/update -go_* rules in the BUILD.bazel files in our repo. diff --git a/gazelle/__main__.py b/gazelle/__main__.py deleted file mode 100644 index 18bc1ca..0000000 --- a/gazelle/__main__.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2023 The Bazel Authors. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# parse.py is a long-living program that communicates over STDIN and STDOUT. -# STDIN receives parse requests, one per line. It outputs the parsed modules and -# comments from all the files from each request. - -import sys - -import parse -import std_modules - -if __name__ == "__main__": - if len(sys.argv) < 2: - sys.exit("Please provide subcommand, either print or std_modules") - if sys.argv[1] == "parse": - sys.exit(parse.main(sys.stdin, sys.stdout)) - elif sys.argv[1] == "std_modules": - sys.exit(std_modules.main(sys.stdin, sys.stdout)) - else: - sys.exit("Unknown subcommand: " + sys.argv[1]) diff --git a/gazelle/bazel_gazelle.pr1095.patch b/gazelle/bazel_gazelle.pr1095.patch deleted file mode 100644 index a417c94..0000000 --- a/gazelle/bazel_gazelle.pr1095.patch +++ /dev/null @@ -1,19 +0,0 @@ -commit b1c61c0b77648f7345a7c42cce941e32d87c84bf -Author: Alex Eagle -Date: Wed Aug 18 17:55:13 2021 -0700 - - Merge the private attribute - -diff --git a/rule/merge.go b/rule/merge.go -index d5fbe94..e13e547 100644 ---- a/rule/merge.go -+++ b/rule/merge.go -@@ -79,6 +79,8 @@ func MergeRules(src, dst *Rule, mergeable map[string]bool, filename string) { - } - } - } -+ -+ dst.private = src.private - } - - // mergeExprs combines information from src and dst and returns a merged diff --git a/gazelle/def.bzl b/gazelle/def.bzl deleted file mode 100644 index 4cdae9c..0000000 --- a/gazelle/def.bzl +++ /dev/null @@ -1,7 +0,0 @@ -"""This module contains the Gazelle runtime dependencies for the Python extension. -""" - -GAZELLE_PYTHON_RUNTIME_DEPS = [ - "@com_github_benchsci_rules_python_gazelle//gazelle:parse", - "@com_github_benchsci_rules_python_gazelle//gazelle:std_modules", -] diff --git a/gazelle/fix.go b/gazelle/fix.go deleted file mode 100644 index b9a7814..0000000 --- a/gazelle/fix.go +++ /dev/null @@ -1,24 +0,0 @@ -package python - -import ( - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/rule" -) - -// Fix repairs deprecated usage of language-specific rules in f. This is -// called before the file is indexed. Unless c.ShouldFix is true, fixes -// that delete or rename rules should not be performed. -func (py *Python) Fix(c *config.Config, f *rule.File) { - for _, r := range f.Rules { - // delete deprecated js_import rule - if r.Kind() == "old_django_test" { - r.Delete() - } - } - for _, l := range f.Loads { - - if l.Has("old_django_test") { - l.Remove("old_django_test") - } - } -} diff --git a/gazelle/generate.go b/gazelle/generate.go deleted file mode 100644 index 6c17d31..0000000 --- a/gazelle/generate.go +++ /dev/null @@ -1,165 +0,0 @@ -package python - -import ( - "log" - "path/filepath" - "strings" - - "github.com/bazelbuild/bazel-gazelle/config" - "github.com/bazelbuild/bazel-gazelle/label" - "github.com/bazelbuild/bazel-gazelle/language" - "github.com/bazelbuild/bazel-gazelle/rule" - "github.com/emirpasic/gods/sets/treeset" - godsutils "github.com/emirpasic/gods/utils" - "github.com/google/uuid" - - "github.com/benchsci/rules_python_gazelle/gazelle/pythonconfig" -) - -// GenerateRules extracts build metadata from source files in a directory. -// GenerateRules is called in each directory where an update is requested -// in depth-first post-order. -func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateResult { - cfgs := args.Config.Exts[languageName].(pythonconfig.Configs) - cfg := cfgs[args.Rel] - - if !cfg.ExtensionEnabled() { - return language.GenerateResult{} - } - check_deps := treeset.NewWith(godsutils.StringComparator) - - pythonProjectRoot := cfg.PythonProjectRoot() - - pyFilenames := treeset.NewWith(godsutils.StringComparator) - pyLibrarySources := treeset.NewWith(godsutils.StringComparator) - pyLibraryDeps := treeset.NewWith(moduleComparator) - - parser0 := newPython3Parser(args.Config.RepoRoot, args.Rel, cfg.IgnoresDependency) - - var result language.GenerateResult - result.Gen = make([]*rule.Rule, 0) - - django_test_deps := treeset.NewWith(moduleComparator) - django_test_files := treeset.NewWith(godsutils.StringComparator) - - for _, f := range args.RegularFiles { - if cfg.IgnoresFile(filepath.Base(f)) { - continue - } - ext := filepath.Ext(f) - - if ext != ".py" { - continue - } - pyFilenames.Add(f) - } - parserOutput, err := parser0.parseMultipe(pyFilenames) - if err != nil { - log.Fatalf("ERROR: %v\n", err) - } - for _, parserOut := range parserOutput { - f := parserOut.FileName - ext := filepath.Ext(f) - - deps := parserOut.Modules - targetName := strings.TrimSuffix(f, ext) - - if parserOut.RuleType == "py_test" { - - pyTestTarget := newTargetBuilder(getKind(args.Config, pyTestKind), targetName, pythonProjectRoot, args.Rel). - addSrc(f). - setMain(f). - addModuleDependencies(deps) - - pyTest := pyTestTarget.build() - check_deps.Add(label.Label{Repo: "", Pkg: "", Name: targetName, Relative: true}.String()) - - result.Gen = append(result.Gen, pyTest) - result.Imports = append(result.Imports, pyTest.PrivateAttr(config.GazelleImportsKey)) - - } else if parserOut.RuleType == "py_binary" { - - pyBinaryTarget := newTargetBuilder(getKind(args.Config, pyBinaryKind), targetName, pythonProjectRoot, args.Rel). - setMain(f). - addSrc(f). - addModuleDependencies(deps) - - pyBinary := pyBinaryTarget.build() - - result.Gen = append(result.Gen, pyBinary) - result.Imports = append(result.Imports, pyBinary.PrivateAttr(config.GazelleImportsKey)) - check_deps.Add(label.Label{Repo: "", Pkg: "", Name: targetName, Relative: true}.String()) - } else if parserOut.RuleType == "django_test" { - django_test_files.Add(f) - it := deps.Iterator() - for it.Next() { - django_test_deps.Add(it.Value().(module)) - } - - } else { - - if !cfg.PyModule() { - - pyLibrary := newTargetBuilder(getKind(args.Config, pyLibraryKind), targetName, pythonProjectRoot, args.Rel). - setUUID(uuid.Must(uuid.NewUUID()).String()). - addSrc(f). - addModuleDependencies(deps). - build() - - result.Gen = append(result.Gen, pyLibrary) - result.Imports = append(result.Imports, pyLibrary.PrivateAttr(config.GazelleImportsKey)) - check_deps.Add(label.Label{Repo: "", Pkg: "", Name: targetName, Relative: true}.String()) - } else { - - it := deps.Iterator() - for it.Next() { - pyLibraryDeps.Add(it.Value().(module)) - } - pyLibrarySources.Add(f) - } - } - - } - if !pyLibrarySources.Empty() { - targetName := filepath.Base(args.Dir) - pyLibrary := newTargetBuilder(getKind(args.Config, pyLibraryKind), targetName, pythonProjectRoot, args.Rel). - setUUID(uuid.Must(uuid.NewUUID()).String()). - addSrcs(pyLibrarySources). - addModuleDependencies(pyLibraryDeps). - build() - - result.Gen = append(result.Gen, pyLibrary) - result.Imports = append(result.Imports, pyLibrary.PrivateAttr(config.GazelleImportsKey)) - - } - if !django_test_files.Empty() { - djangoTestTarget := newTargetBuilder(getKind(args.Config, djangoTestKind), "django_test", pythonProjectRoot, args.Rel). - addSrcs(django_test_files). - setConftest(cfg.PytestConfTest()). - addModuleDependencies(django_test_deps).build() - - result.Gen = append(result.Gen, djangoTestTarget) - result.Imports = append(result.Imports, djangoTestTarget.PrivateAttr(config.GazelleImportsKey)) - check_deps.Add(label.Label{Repo: "", Pkg: "", Name: "django_test", Relative: true}.String()) - } - if !check_deps.Empty() && cfg.PyCheck() == "enabled" { - pyCheck := newTargetBuilder(getKind(args.Config, pyCheckKind), "check", pythonProjectRoot, args.Rel). - setUUID(uuid.Must(uuid.NewUUID()).String()). - addSrcs(check_deps). - build() - - result.Gen = append(result.Gen, pyCheck) - result.Imports = append(result.Imports, pyCheck.PrivateAttr(config.GazelleImportsKey)) - } - - return result -} - -func getKind(c *config.Config, kind_name string) string { - // Extract kind_name from KindMap - if kind, ok := c.KindMap[kind_name]; ok { - return kind.KindName - - } - return kind_name -} diff --git a/gazelle/language.go b/gazelle/language.go deleted file mode 100644 index 3b13278..0000000 --- a/gazelle/language.go +++ /dev/null @@ -1,19 +0,0 @@ -package python - -import ( - "github.com/bazelbuild/bazel-gazelle/language" -) - -// Python satisfies the language.Language interface. It is the Gazelle extension -// for Python rules. -type Python struct { - Configurer - Resolver - LifeCycleManager -} - -// NewLanguage initializes a new Python that satisfies the language.Language -// interface. This is the entrypoint for the extension initialization. -func NewLanguage() language.Language { - return &Python{} -} diff --git a/gazelle/lifecycle.go b/gazelle/lifecycle.go deleted file mode 100644 index 6d628e9..0000000 --- a/gazelle/lifecycle.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2023 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package python - -import ( - "context" - _ "embed" - "github.com/bazelbuild/bazel-gazelle/language" - "log" - "os" -) - -var ( - //go:embed helper.zip - helperZip []byte - helperPath string -) - -type LifeCycleManager struct { - language.BaseLifecycleManager - pyzFilePath string -} - -func (l *LifeCycleManager) Before(ctx context.Context) { - helperPath = os.Getenv("GAZELLE_PYTHON_HELPER") - if helperPath == "" { - pyzFile, err := os.CreateTemp("", "python_zip_") - if err != nil { - log.Fatalf("failed to write parser zip: %v", err) - } - defer pyzFile.Close() - helperPath = pyzFile.Name() - l.pyzFilePath = helperPath - if _, err := pyzFile.Write(helperZip); err != nil { - log.Fatalf("cannot write %q: %v", helperPath, err) - } - } - startParserProcess(ctx) - startStdModuleProcess(ctx) -} - -func (l *LifeCycleManager) DoneGeneratingRules() { - shutdownParserProcess() -} - -func (l *LifeCycleManager) AfterResolvingDeps(ctx context.Context) { - shutdownStdModuleProcess() - if l.pyzFilePath != "" { - os.Remove(l.pyzFilePath) - } -} diff --git a/gazelle/manifest/test/run.sh b/gazelle/manifest/test/run.sh deleted file mode 100755 index 4b24b51..0000000 --- a/gazelle/manifest/test/run.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash - -# This file exists to allow passing the runfile paths to the Go program via -# environment variables. - -set -o errexit -o nounset - -"${_TEST_BINARY}" --requirements "${_TEST_REQUIREMENTS}" --manifest "${_TEST_MANIFEST}" \ No newline at end of file diff --git a/gazelle/modules_mapping/BUILD.bazel b/gazelle/modules_mapping/BUILD.bazel deleted file mode 100644 index 0ef8db8..0000000 --- a/gazelle/modules_mapping/BUILD.bazel +++ /dev/null @@ -1,24 +0,0 @@ -load("@rules_python//python:defs.bzl", "py_binary", "py_test") - -py_binary( - name = "generator", - srcs = ["generator.py"], - imports = ["."], - main = "generator.py", - visibility = ["//visibility:public"], -) - -py_test( - name = "test_generator", - srcs = ["test_generator.py"], - data = glob(["testdata/**"]), - imports = ["."], - main = "test_generator.py", - deps = [":generator"], -) - -filegroup( - name = "distribution", - srcs = glob(["**"]), - visibility = ["//:__pkg__"], -) diff --git a/gazelle/modules_mapping/generator.py b/gazelle/modules_mapping/generator.py deleted file mode 100644 index 9208bd6..0000000 --- a/gazelle/modules_mapping/generator.py +++ /dev/null @@ -1,82 +0,0 @@ -import json -import pathlib -import sys -import zipfile - - -# Generator is the modules_mapping.json file generator. -class Generator: - stderr = None - output_file = None - - def __init__(self, stderr, output_file): - self.stderr = stderr - self.output_file = output_file - - # dig_wheel analyses the wheel .whl file determining the modules it provides - # by looking at the directory structure. - def dig_wheel(self, whl): - mapping = {} - wheel_name = get_wheel_name(whl) - if wheel_name.endswith(("_stubs", "_types")): - mapping[wheel_name.lower()] = wheel_name.lower() - with zipfile.ZipFile(whl, "r") as zip_file: - for path in zip_file.namelist(): - if is_metadata(path): - continue - ext = pathlib.Path(path).suffix - if ext == ".py" or ext == ".so": - # Note the '/' here means that the __init__.py is not in the - # root of the wheel, therefore we can index the directory - # where this file is as an importable package. - if path.endswith("/__init__.py"): - module = path[: -len("/__init__.py")].replace("/", ".") - mapping[module] = wheel_name - # Always index the module file. - if ext == ".so": - # Also remove extra metadata that is embeded as part of - # the file name as an extra extension. - ext = "".join(pathlib.Path(path).suffixes) - module = path[: -len(ext)].replace("/", ".") - mapping[module] = wheel_name - return mapping - - # run is the entrypoint for the generator. - def run(self, wheels): - mapping = {} - for whl in wheels: - try: - mapping.update(self.dig_wheel(whl)) - except AssertionError as error: - print(error, file=self.stderr) - return 1 - mapping_json = json.dumps(mapping) - with open(self.output_file, "w") as f: - f.write(mapping_json) - return 0 - - -def get_wheel_name(path): - pp = pathlib.PurePath(path) - if pp.suffix != ".whl": - raise RuntimeError( - "{} is not a valid wheel file name: the wheel doesn't follow ".format( - pp.name - ) - + "https://www.python.org/dev/peps/pep-0427/#file-name-convention" - ) - return pp.name[: pp.name.find("-")] - - -# is_metadata checks if the path is in a metadata directory. -# Ref: https://www.python.org/dev/peps/pep-0427/#file-contents. -def is_metadata(path): - top_level = path.split("/")[0].lower() - return top_level.endswith(".dist-info") or top_level.endswith(".data") - - -if __name__ == "__main__": - output_file = sys.argv[1] - wheels = sys.argv[2:] - generator = Generator(sys.stderr, output_file) - exit(generator.run(wheels)) diff --git a/gazelle/modules_mapping/test_generator.py b/gazelle/modules_mapping/test_generator.py deleted file mode 100644 index 50200fc..0000000 --- a/gazelle/modules_mapping/test_generator.py +++ /dev/null @@ -1,40 +0,0 @@ -import pathlib -import unittest - -from generator import Generator - - -class GeneratorTest(unittest.TestCase): - def test_generator(self): - whl = pathlib.Path( - pathlib.Path(__file__).parent, "testdata", "pytest-7.1.1-py3-none-any.whl" - ) - gen = Generator(None, None) - mapping = gen.dig_wheel(whl) - self.assertLessEqual( - { - "_pytest": "pytest", - "_pytest.__init__": "pytest", - "_pytest._argcomplete": "pytest", - }.items(), - mapping.items(), - ) - - def test_stub_generator(self): - whl = pathlib.Path( - pathlib.Path(__file__).parent, - "testdata", - "django_types-0.15.0-py3-none-any.whl", - ) - gen = Generator(None, None) - mapping = gen.dig_wheel(whl) - self.assertLessEqual( - { - "django_types": "django_types", - }.items(), - mapping.items(), - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/gazelle/modules_mapping/testdata/django_types-0.15.0-py3-none-any.whl b/gazelle/modules_mapping/testdata/django_types-0.15.0-py3-none-any.whl deleted file mode 100644 index 96468a86c9d3e5018b1961ee6bcaa258103e11d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381173 zcmagFV~}mjwk=$?ZQHhO+qPDDmCaSQZQHhOt+H*bs;|zzU)*>1e&^jYBYMP)`D4t? zY%N>Q?5z(4X|*3Zudi=uXX&i3 zPv`K{QuY@k6p$c{=zAtn5!w*|FccaZ8+EGzHVU(}fg97L$xv5UHG{$ZZWlN|TE=Wj zrKLbtJ?ex$nUH=Wq=j9R5CLY3lJA)miE3 z8R-cb_0dV%QFs)oKY>z(m@Hh<9Y-UtC}O|a zrGjCupZ4oDbgP`hzGL47Tm!SQRe_d6*HJy-wv{PPrAf{}x;kAbdT0ojsUwHQNKzqD zXp5e4^3pEedv3iV=+ZhG7`9#3DLqX$hhSa31*))NWV{xRVTZza{gz?ZS~pTpmp!{l z&$?~$@3s0$q{VfCr%IEl3{x;4$#tWP0bmqSMCUIqoUCYL7qKh}pJxaLb6l&{%>M zBF;Guv0&~9(|ckIcLV%)bkJPUo1%aK05reZ{O|eTXlich&%`ioOCAs+Bi;mo83BJVA;k11D6v;cg6>sXv@^8-p_#5?Y~ zx4gV-7qCR?Wr*j=7hAv$t+C|l{6K&UA>fyAR-~~ih;fXtztlxA(X0w`B5^Psz6s2A zcUA+_NxHYq=0OajYTdqmz96QKAX?X)Fpf>z#h_er*>0S@NrODpA*5I5!zIUhkH`I` zIHnlu=ni%{5q`c$4T;2R8sKF(O>4pRdzk2S@ZOKh0k>{{hA+qOGSKwE40=guy*KU$ zUDHG6bpS~$z*#DDS(f-XF?N_Cg$Jv%FzT6Z6pxq&^Vv=ve9o$TL0)EXVi%KQ#(AuJ`)Xu4p__V2q!d86z=LF zTzoiC30jOfBc!y2zO3vXzaH16w4s?xV8ul6o8->o<8D^9ufut8v$wBfor2 zUem40{tADOC}}#(7ijE6Yc*+JOnliG$(KF<@=%G+s+QD?UU5bx3!n?g?21{IpWXiy znOk1&3%1+}{1z&X1DY?5Yau$O3)E7M=pmtubs1@~$SOwq9A@KN*h7hH`UwteV zg5IR}{+4WB)4DR#N6*BHe?VLZ@tb$1j%!KRb+1#SQ?Lm;a=$70xL0 zRE2hyvY62EQImR%e2y&CWYeD|X)DU)Oko z(epLB)lH-vlvgJC3ChdM^LJmJ{^;1UdpsPU8jyMTIuJY8C}f%lu*kwPdZS4oxhWcD zV@fi@H_5oGf*|ssX|Br&Rl3+C7%!x+Z*AhaiTu2t9Q)&Js2$Cmxw#Q}+xW#%AM`6b zkR-a9X?(CD1LTS+QLF-%P0K#00aAbiwOa=ivDDUtC^!R3{pAOHL<6iDS_RKtJwf!K zl82p~m*j5SoGMwsC7m48?Cnodv20L7E0b{SqP&S5=Z@b~Q&833Z3%HX5gJuRIzO$G z2DRgGU0HJSsU}Zm5&!f~a2cT#zHn|KO0r*srDd2hh2Kacnb)E3$I*UePK+kt?jCd? zeDR23{9?_1g@<`Ac9LHF@^tbs*=hIe^rcV!ffMnC5Mmg+$Y(>+D(?jlx_1@qbxYEawI~0bvIM=-#OpyBc{Z^Q#RNJlcu;;G7+YZ3=Rq-% zVurJfI;tx=68EIi#w%djz<8eoVu74TFt{hP;Jr_N(3{<#PIj{6S{r&_Xfm5~WUY=w zrjKDbBEQShEHfeN!LSCg4Tt;TfmHM=Ctzc6sdThNB+xcLg`QUk;)NIi3F^2ECT+G0 zzUbc#Z3SfS4sBFqL~~&6$J+_6$c28cGQIB;)`@3)0^1+KTP8b$_J0XXy`#NnMQbM2?tT9wCKdoH5q5i8^E zu&0gY)p$IK^*P`TE%C;vbdGYsrqIqmbU|rH(yWH-OyUKn;1xaYsq51}!Nlv1Lx`Yr z75RtaDp&iCF-vc+u=+uC?UBLpj)I~R%&Lqmh&{oOj>sllPv1ARF)`nNQ?5$#J4A74 z?#%1Au-p>q(bngnu}HUT;GvPg{$-PP|OaNrcHupYrX3wk9}xRz?J@tVloO()*%wl?yS5lqtC5@A*xihX2Cg7*Yx7U zRkxjxtkREJJxDk`hD+J5S!q6p=Yj7>d*>w*DdDokdszw3Tq0fzHMCQw7O2&cdoMqt;_PueG1f? zvdxL3$~>Ao>0B;+D>}@nnJNB^$%j!Yo_|1K0`e{qXH|C=e$WM}l3kNMvLjE&l%2?# z@TD@py%qZ@)ExC?5)XEhfp@*I>YXHM=hv=lOP{<4t))ym;1+QVb|izVw;nRJ{6Tqd zzIY%6r+FIAVl!ON%T!@qU4i8cj%H-qDNiOlTSwShv_Aq5q@(yka#7wuljPZgaZ)%ro}7$z}%MTP`aU-u(&W z1gGLzx1$cY&!r9EQ5S?@mK9KEK)4TlkklFAycPmtYJ4IH;2vgM?ZGeGWf!w%2tw7# zl>?#!YJduclCiP09;0+ODP+l*tFL->TlO*(^cEL)ezQBG+e-XJ9-vqI6Ksx(O+t4p z*nrv%(~rp7eD|495Dxg&)e}K_CD808HuN;rtys1?(xAvuYstPh!{vDiS~mdYFc}2J z7gO~4S_G&>v|f8W>K$ir6(%Mmk~4eapxv*C{aQPSwhxU`s#D)4kkuf!Q_i&Y48r$S zFHgsNBKnXWAmuYegqfSZ~~fbmMx>$8vZKrLPwR0=W_HRqV|m%-e_)S*V@+e z{7S?D<~B8ye7R$VTJdio3JY`K%s|BG{He0XF96!kWaMG5$fU8=OyNF1U zuTupJ)TIsfg$Tk9hpU2U)4H<1k8;COYj|+A!CuYZvQlf3)%B@l8ER@;o~+E)pF&SN zec#dnr%Th=RP1d$osVF%={%M<3B`Z#(W<H}QGfVT=K5`SM{cD*i)jK?KSf=b8^Px}a2Ko}$xLjY3(}$mUwCzA43*Nl zFJ83PA1`jH?3YHYshtsc3vw`wfgHigsn>PQr3ydr(-0dQe}_L>xYb;-I>sq)he!hf zFw~*vDKRR3Sg4%R3Fo+lcrf05(;gStj>QXP;-_vyFq-tE5w{`6$NFhlJ&p~+3V2Id zx7C(S!@7HW<)#Mj!O;RX5F?JWVgutj>QhMqWT>1Sq#kpRm>eS;Jc<4^+K5kgbj?_$ zjR+)e3$%JkRYetMd5x_664D_~GV==!;{cM+>&3w+zljQNFy;3Q-RU56Gklu?ouv5X zwikyJ#z$PlgMrWz@@#r9>!J(Rt|NNv6PaUHC|&bua3VLU@=9t!*>y~6n{_p%fu*Mb z?;K~@bpKu#l-&$qV`#ks#||q&j?~nXMv!0-3IWNXM!Sls#GdId=N0Kq@6nBqUKirG z9E~yWxT<2RcQjE^^0>F_&sjPqwL4LeALMZUwfGMJZ}hu1DQMnVI)9!)0_3muCfz+< z7TP!>_5*M)5XAKGEe13$aBhizdh1}>-`P=Z4Q{9m_}FCW`?;dDb3F01>&_qDs|onxm4puvj3 zuZdRXvNWMzs~B+2*m~;aJAb;X<;Pgr=6Zo1{xn73R(bdy9o? z(c~8-Iw+ofiClF$s=s)Drh~xQ23>a%6#x&;exU;{`OS#-YL+gEHO8+4T1x72T*r~e z!6-EJ{xW|BjAI{ng4L}IZ8*?vXv1&^zU@Is(;96PBRiBr?IN8F4v_o}$Jdew)#$iFl7`}zky~)FrONArU9#^k*w|% zkyWCM65^Nxs8&l!in4LSr4mdub${30#7ptBl!OQ9LBR@09Jm0PD*WhAV?ICKw_#y@ zj|6v`$5#zkN%&m#hHQRCTRkHe5k=6zYrXNO)NTF6e~ffbPYRQv;6JZ5?!a^~uZ^mu z3REK_S;o7@RkTh3^noRO-psg^ex?&O6%$#R=vxWJ9^nj6Y_SYG|i)+RtQz`ENojVTj1`H5n zjw!KR_xRPp53kTzJ`AmbZtujyN9n+z)aQ)e4U}?qyEdk%0RHm4USB0z=|Vq-ZvR*X zKLLaf;@wXEWvi5RbM&7sm1=?zDM`mvRS`Jp4|$Hr1nyHzwmW7Ux*2kT+hTr??ejhh zi;PkZXn%G;@?8|$W4ZvGA1M%1sM<&k>fqtU`OM>e&jOLiV}^rLNBG<*e}QhIx{sS)9g z;)ZIhY`zwkh38;ybeX zhWqp7rlh@x)PTusdCxYUi8pXBzhCnch_@}Kc_~(OfCcgSpUUZeZ+cmll&gYfL*NUQ zwNf}LqD3YV^W_mg%jfFbPLQ!x(L+)n9aIsNWMVBewv#;U;X6pkZmdh;H-1%(m$aOn zR{gTGCNVj}Y}~}29+MT%i9OeP0mUvQf3DUdkrf5K0rJK6YL`edc*e9yhg*fdMNJCZ zUtr#LNRmf~&PxUN@qYD+)cI(p=q_%V;DKPY_jnH>BXu*ST?C@*YgSfkTYspin;5a{ z2|Cn|+0vi1(nU;+2`f-wHNlBxbG-C|&f0d6OBz++>rgbiA)Mp4)6Ai9f^*5?fcLE# zI%PF<>Gph4T`5jpV(0JbW~sLOx@I(fH{^0d%V9r?v|+b7z^A#3c+Ih<2SqzxKv^as z;Nn9&DiBE$2AQLqIY~_e67*l@?`gcJ=0=u-t}Dxph*5t~Z{ZjO3~q4-D2u^XfnSb8 zcwOYzs3OTRE3YOEu#6jL`ydD>Jl{SA{2U5EqX;@ru87A|1*C`{E}ZvU+GQq|k4D z+dF^O@ACYb>d|NYWZLfXd_L@OYYJ8G(E%Py(v4+cPy5J8`C(a|vob0e>#*#ei(^B7 zs9ZwV$zg@_)FTXZE=H+D&%^0Fi2io{L&g_*sL#QU`y#I-a0qX~-e?kWzgjkVddZ0-gzz7zTg;gJ#&5ZEDsDjwpC%Cb1w=%pj6<@Q@T z{}L}ux&N`@n?;7Rje@NEVva&_u}>{reSr;2({NpGR1mAKd-8)@-jh!-Y%aeKHk|G-~F&Yp+Ag z2Mgg1HHlTQe3Q^%#q#(d@=?gfh#yB}*EEJNVam~F4a>tP??}qkp{mbD?BAVnF=m@U z|J0XG`4nYHcoQX*1i*vEn^y%A1*5!j2)ts9cQfpz&0zE?jL!!Ai;G3f61Q47ykl})uFQM9so8-_mb;GVC zw(+B{UeH)j@op$5opQpHbNAD|&q4F9!$DAB)SMRpZ^abk(i^B~q_I%}9& zy<@4?W*l-R=YJOSd!5GDeFEP#;#Mq{E|H|VDZ+$)wMO;Y3z||ddrfyY)tfkdug=q0|av!rBL4M z>4u}Fl<{?+obS`OcCuTQUR2kHhR5y@5B~j6TrjC7x$Nd6(rq)(K2?W)F=UHr;hPF{ z+k|~2SyaAb`$j9JTSoscfl9H$o7bi@rV+j3Hn?ol#knZu^js?hV8r6G_)_&T(#4Ie z@q7#2s(YPDyYazhXTVZQ#4GCnaP_3lUlGM+e9{LgUA*ZJ`Q}e} zmBE}?=_+Pc=jA3DX21Ew*)X?OtFe70Vp{dHP|Rk^j3lehf=R4AmV3!PjuQFPBWcOvOAixq3&Ozj(9ztx&?ucX3mfk z%V7vF;5x^~RZ43Y6lgTSTm^|Cj79?&*h1Dvx{c?M?buvXdJ)>vRij#38uiYj24zET zD}Ry&Gyppp(kU?t>RuB*7FtnEFhBb!l}@Gw`-&G!scuj2W9w-^TXtLiSTM5t^Ep?a zwQh&%tQ*a*ep<&jnxZQ}7{Q2E0Mk~8w&GomlZ-y><*F!S=A8+N5lx>qEAn@WbgTWMVeWi8NiNwnG<4`_E4v-X8j~1KgnZe@TEq?*4>gyI2#_VgCT?$e6MhWn5>f(g% zDZ87k({p8XpCc+1&I$43zH|<(p{y>3C964tB_!tTr>Y}Dw*-N?vT#y#w-zi!Tb5wF z`Ca-B$}@_Y0-7$^eHVm2>(gf^XBy8*q?SHQ^W&X+I_c@`5oihukdTQWXD5ML*Cs-#^%oZm zAbtD+P@u@;e&sqnRzQ?-z$&QOVfKBcc7j$J@ZnN$2ZS09s0;ALe;hs+Gg@kKo^clo z{&u@6W!#9oZuW>4lbmfpU zG%;zl+y0cB`HLKL#(EwqR1|o23nY&6m*GKq$HkkM=3>gg!J`2?aS)BZZOy(Z7-yCi zhoq2Ef7WTV35Ee|^R7c^F|=|yk%%r*6{NM zAUvu!{q}yldrTc8Mopzx7dwbGU7$9Ph+6UDxEJ3LoaW7fzplXc9cgUsSf!d_M&%!I zN5@%n_CCScrrqQRk8iZHS;A{A>Y;s0p62-4Ll%A(!lbsq@V0|_pl|k=t462gAm6uX zPc;PLVAw0nb>B;UZZ6+Dg>FsU_>r&-ipG)V5xpCrG98~xSJX)^gZMN^unTuRgJFUg zM-^xYFp93A)|Vbj@iClkS8fI6ykWx7Nltmn9)e~4;sC?@nKU%3d_3x*AgSQein>Vm z%%5B}Hw3z#@6VVAY9^WxQ*S49kf*xC9U`@$$Y&X~0!|p2|JTS`B>C^4*;o$FDCkqb~^zcCV}bYA=UG z-6Hl1B$5UGq!+0X?S5peun!ZKfdOlK;RL)4otSCzRel@Wsm0ov)v2WPE}693e`az~ z#OEh?=o?Y%AgTlAX}UacS(e_C^x`F&%OTYq$AT=A&(8vmtVRFjq2+htbFjuAzssjJ z*(GTfF@37K1p0W-)=hUhp!AriUK?3R&yrs@JGo+iz+)Ls?ys=|n{o0!;+Tj6PCfn+ z&|fTVnQXFppktbAHCs68qw!;;?#dwtEiK;X?EWc-evIXmX+KP3MRddI)1@2DvPT*5 zY!vt<81&G+b~n;p)|#YHy=pPZnOlA}6HC8hcXj*=OulFW)-YHIwM@EF`&?Cmbn0AT zu~><4=euYfUR>J2jTQEm)TP$(2NKYd1|ZgRCwuMMOfY=fFMx#A3>U!0FejEW3n$gKG2 zOD^yv?Ws&Y!G8TfE9)nA7fMN^e;2IL-{O@+jfCxjD4oR1>N3hcgOxR?b2qb>RgOBJ zmcX(M_DWX$Q8v%U0@TiM+Bck}fG$;`HL%X_CNqZyr) z{%`AjvSLxuVN8Z@ckk}UgHz1&gVTKr5VQz-3d*V9fibEL>chiB>p%SW1-cMRyKiHR z0t5hn_}|(wE{-;TxBZLa73KRG5JtY;F}hpO`1V);dTACaJ_{it!Jk@a%FT8%(i_gW zqb<+Na>GvoD9^PQc3tmZ9$y^+>e^M(qlx|xfnz$L;qjUZn2P-dKWec_4RK^bNtmsm zpK_togzJ{ZHCj`^p_s`)w4vp8>m+D`e=6?1i*5)>l2LT3wtu$8V<;-u}TF zi)!Lx=v0cB5^qj+FZ zw3MB|2Nj%63O8;AoNP|okEA9?SCjjalg>6JDo-qNf5-F)w>%b9;YQB-MPg@Lp7A`8 z8k=aY@L~sSb~npSw}!^5*)QDdq?ZJ=@YeO|6pz#YNc&(RG~({I8K?zxiH*=Za+B%X z2DUiV5pX@g>{g9V_$1E%451NX2l=Nowh1$we=e|KaJT9FPP;y&+>PENJGaIM<%@AY zpv|3s%Px~8|M%qkvr4>DP|Z^-cf-*8zna@hULHxrGWiU49n2)h0m z!FPrPyiJlzpvOzImmNYlm^B?+BrD{D=KVfpg2Nt)Gq3unIwIm5`T?^XWpLd$0wex> z;4m-pCN{cjqkQB*>mSR=JQj+7DMl|nYYdE4yOE`A=p#uD z_UI)e$LS;_VvJu-<&sxfN`}sxAC&P7;)x(s%W4BxCAL!SE3`8~W|8^8R-t|(q)NJ5 zTRv-l{VOQZSlWi#1v!*`o%)yR?p`9Z>+7%T>DR@M>oxqpufl5x27K)I>^r}M@c+FE zPR@qTmd1arLv$b1H)TbxUn6*}!e9OT0^BbJLF9`pJJsgB11|47;f)Z}GH+iH=b)U-%9lk8i*$6VkBO?oGl0& z4Bd7hG!h}IJkLpqAqxg1zW}0?q|nTuJvF>ldC7&nmq}5zS8{^qi;|3uLl^K*jn2C?J-e_ zJ9ghT_wYA6^z6|00bT1r(!`j8MZz^*joY6XuwxP%UBd18BSf7!Cv_h`UcK={j|5B~ z{D)+4v21aWxe+`kT45DcTx=nQu&)~Hct?Yk+n;`OVu2Rb!`>y33v)zZy(lgF-`e1V zw<@iYp)(0?I`9N!Q3|wKjA??qA8N$7rdveyTK9)u&C;F9Q47imyIG{DU-{J%j5lV_ zeoDJhw~5yPZ1|JhGPK{9NGtAJZib)C+nqm&v_8J*LXYDbICV){rlG#FWyvqJNZxi& zB^)+x5ar|HIPar>?lI7-t%=8_jP;*~{3>Q&P)#c`Z;r8aEF(1_f-ip`|Ne0$I+Ay^ zQcP9&`E3PMOZjew*pb=74oc8CDR8&>1K_-QURN7n0IcYrx^pW_Yi@7yfJ6Ed0o#=!X-53>Iq3qxaPOMAP&3~t@nnTT(K{tF6DD(7QB z4+I`sJhVDG_t<(7<|@r}elp_umK_%B!gT3TuO0T+Dd#@S-*eU*fo$8LAx*f{s~*eK z{6R<;*M$(pEvz1VKwfY$Q-TIOJ(#(Z zc(e&KUKiFDd;zaKZbUVyl_=9Gt=Fa5HGbUOy3NX~0z@482f=v>B@GR}*CP5m{#}y! zAN>4Rli9y^>|gm!VoYjMdS*qMhJr%vfAp9A)o^yaCp9feL#GA-CUsEAReWG}BuK*Y zTZ*Ns6~&K$l$ExQrG%uLqk&{eDzCLrqEGF+1pwX*pk57TfTgNe>K~wu@*+Xlegl^F z-G%n=Qt0>vK!nfarR39>&jR)^1_ z9sd{E})0gmDCJNR*9r6u)pvGloOU* zkEcLb0@toVH!a9u1XeDWClQA;o@=DCyy2N2CWjZNM4XOBn~xRHRt#T!@m!&R{TQ`vgjac!_zLT_xnEPH)3t?GUk{l>PKcg`T{kg-=t~6kL zp`Ur0=u=nyX*8@MmohPsQk%C$E{^taMOdt^XHgn4>%rIv2wZ;q3yC2EVY5G>9XYHa z*9aX=@q>ZjCnR*9wNtvx*=2WXo-}`bx+g@d;)rRlGNBXV8mnm}h-8@glH_B>AsSuC zGXC5xt;uJeP#m6x2hXuE1Dabsrt-rM9^Bq=xp!!UzjP)$qf*o zcwei>^4dZ_0VhwIU?J;c6)5Yc7v~+i8c`4^7=P*Io@-5-BhEuvkD#LUs|W~$&Ycqk-G3UY{fzMKdw(micf>^~=2{L%{&CXw84JK;tIPg_>f zm?}@4O%9LaOh9>=7AK;qnqS^YMRcRyhzQ?(9f5Q10r%u1t_t%H`vijPP6RW~oL-=2 zr+d6YiN4#eR3*OHzRdAD9NydSqYwv{R5G*RZm-ozTmveQat*Kxj8~0Uus|s5@|^%_ zTXH7KWFuFj7DaL2zxR zk5y8hwTm}TWk}bfk1nRV`lB!XL}8J1IU(QA{Zhk-1vjZNJMqX+n86?|{GNpvvc}mo zgInrL`U&=Tk&H!@S+n`ZZTLI>1AeCN#-B7^76F=Qm@~f!f56z-&JYK3z&X8NvNWT{p9| zaW?%gzHO;Z*)K4l^gP$x{74Xj!y)!(V}q3iB5Q_(TQX@Iv$j54?{md?y{^;WBaure z-)9*ua@h{uxqj}hU$&CB(RFMi^wOuY9V@Ctb{q;apaz6&J8F|1tpc5@oQHfJjN;x& zN~RtY5yGpOui#xKr9rd4u72q|5G!hnSG!jokKj!y69Pu2d#!{*NYP`epNq9iqXDr< z;LCu82iw8t+uk0Sf%+9i6QSDv+%3~?1V;4C>|qU;e*)BYTT+l-2G&P|(zn;miO1}0 zc*b?&`xpvd8!1Yc$|&(07Cm~_MsU-(4K?=X`WSb7vE@C|Q&A5Y@$gyS`?!FhbnzNq zCNMJ_wSg?fVZ64~%uSRpOqk1jmh*rSTVZ2LzWwn^iTCN1oELz67Y?FX>J@1{PqN~q z8{6p3{LrdZRs#F=7&<9#wc)6?S!ubA<{C3TwN+IjQk`12Di3%dRX8{2yr4tOpspWV z9#u-7P6{s!{@{Z01>(I)Z*=JyWxpPTmS&2S$RhArb<{yY$8R^twy64*z)PN&y_;LG z^JX(V9a_i}>f_2U&utaO<0PqP?rP|~#cC?ciQg(qA4d5B;eK8;jIqP&62da7Du9I4 zVUQz(NJ((JhV;0?p;@V{9#P0MHvm9X99EZ4xe3MV=ZSo2-S;jJa~SnK2GxCZvBv7y z+N#dKS#5AeqR*yv>13`qh-zy=lBbt2y6kz{hjA1;bBCCu4tx9Sac7mBirT7}FRsam z=_7eoejn}0Y<}5Ii*<@#GH!AN(qU$8sBx|$gca`_alpCG$k-2Kn^6>Oj!K1LqOvnF zO|BM}He@ZQVv1Hddyuoy?`v#kH?j_$ibC6M&R34Oq8F)=T4=km4w}-H16dev207Z? zvsgmEAHQ^Bkewfry6-{Z{#vY-+mCze^9LZ4uSjdfBV!JzZ($ay4B{N~pR?@f#0RC# zuNXdH5%I3-d@Hut)$J(fgwBs@TnF+;*y4SvLjj1?uN<&&yL=Qe^1 z9@HfTeWMg+-!1#q12a9HC;7E?5ZR4pT)j@{NG{52X6=C~!{+$g4(^@g%-H>ljM4WW z2i%%GMOd$It$6(olJEFm4!CCaj<$bEeN@z6QX%@B*>4;d3$GBKCuDR4rYfOiC1O*n z`@=kT(BJ~e`Opiuv;6{s|c7>!fV>X{$VhrjW07Rb}?+bb2zMB8YR?(>;onYTb zb5!L2C><82HV*&4bPQ?O+HX*yd|v7IjWpgp!iP0l>e^Rm+gcY@EmWh3hGE3luMY#w zvwit=f&jC*#+Ps05!S)a^o1Vt;6yhZRf0LL%$osQY%$UGi8f61k(N_6mP^2W78OnQ zMUiZ7XHbv1!|^HSiCt+)Y6h0$Y}#wXzHFDi(`cWk-O4Z8q-Ok_a;NS02darkH&hBY zl9db=MITVBx3&$R9q!SnvkipZ%;UG3z}WP1lOP#wVj^+SmaKqt8{*veIE4JoJcLce zeS#i9Io=0v9QE65SSXhjF&-SmS2@}9j;P^c@9y*H3Qh0R&E@rUf9vb!X>Vc)hr&5I z2^9%QCox?I_jZy`M?ZUtIhSwr*OW_lFSi0pa2=FVoRW}=Bbf+CY7%^*mrfnJ@dcir zwbfCJQ*&lx<(8TR5{#|X8$82nfW-S_D2HGw>yq6dassPgESriD2XnG_?|Em(LPe&V zCDetPnCScFsGVVBbF1l;ULLe)x@uv!R(Z^`EZsNWF-<#2H4V0!Iy{(Y5)&dRxsAluub`(!GA`vnDf9AR4BMw z6_6`2D)s<Eh3&@CS=WRiH?o&+P2hL|JJBt&lQ!N`*gQCMKn1o zpvoMJg6V+Mj%hFD5UxE6g$VO!rrUc*Oy(O-$0r^;NXz;&gij z^9~%T72LkFa1t1}y*K;?rrm3Av|50wc2Vx&YTcBa5qET>z{u4s1S0L}v%N}#tV%qn zOJ(M|32Tr6;Fz@boYIdKzI6oe=Bml6@(z9`j|e;uP;Zsasc5luBf+irEkmCD)RQk# zF!vTwqN?`iwzQ5^wKECx<#5PM;%>yNw~yPlj>|bbSLGvE^`3*7fG?Yf>Gl|lcFJGY zl6P@E|Iop2>HF_W0n`7kgSM9D-^bp6-7o)k=l^HvppH}_v+?^R?fR`x|Ka9iYj0v| z^Iy`MxM8)=fDm&1h?1{PYx3P8Nr$mvDZ5ZSdq4$}Ct|EFnjBC_Gqq6z$44TU`xsS} zCZF!>17F=_RmY3lYQta;FQuJ1wg5v9pG++|1XEL_oxAQdLTt|4q^AxVVfZ9!T7cAi z?o?$&FiDaΞ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≀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�z-$>KMuihemb@#?sPJS%G~i9WrP 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

X+B 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�&zp#p{or6X*;5#%d-{G($z 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 diff --git a/gazelle/parser.go b/gazelle/parser.go deleted file mode 100644 index f649677..0000000 --- a/gazelle/parser.go +++ /dev/null @@ -1,360 +0,0 @@ -package python - -import ( - "bufio" - "context" - _ "embed" - "encoding/json" - "fmt" - "io" - "log" - "os" - "os/exec" - "sort" - "strings" - "sync" - - "github.com/emirpasic/gods/sets/treeset" - godsutils "github.com/emirpasic/gods/utils" -) - -var ( - parserCmd *exec.Cmd - parserStdin io.WriteCloser - parserStdout io.Reader - parserMutex sync.Mutex -) - -func startParserProcess(ctx context.Context) { - // due to #691, we need a system interpreter to boostrap, part of which is - // to locate the hermetic interpreter. - parserCmd = exec.CommandContext(ctx, "python3", helperPath, "parse") - parserCmd.Stderr = os.Stderr - - stdin, err := parserCmd.StdinPipe() - if err != nil { - log.Printf("failed to initialize parser: %v\n", err) - os.Exit(1) - } - parserStdin = stdin - - stdout, err := parserCmd.StdoutPipe() - if err != nil { - log.Printf("failed to initialize parser: %v\n", err) - os.Exit(1) - } - parserStdout = stdout - - if err := parserCmd.Start(); err != nil { - log.Printf("failed to initialize parser: %v\n", err) - os.Exit(1) - } -} - -func shutdownParserProcess() { - if err := parserStdin.Close(); err != nil { - fmt.Fprintf(os.Stderr, "error closing parser: %v", err) - } - - if err := parserCmd.Wait(); err != nil { - log.Printf("failed to wait for parser: %v\n", err) - } -} - -// python3Parser implements a parser for Python files that extracts the modules -// as seen in the import statements. -type python3Parser struct { - // The value of language.GenerateArgs.Config.RepoRoot. - repoRoot string - // The value of language.GenerateArgs.Rel. - relPackagePath string - // The function that determines if a dependency is ignored from a Gazelle - // directive. It's the signature of pythonconfig.Config.IgnoresDependency. - ignoresDependency func(dep string) bool -} - -// newPython3Parser constructs a new python3Parser. -func newPython3Parser( - repoRoot string, - relPackagePath string, - ignoresDependency func(dep string) bool, -) *python3Parser { - return &python3Parser{ - repoRoot: repoRoot, - relPackagePath: relPackagePath, - ignoresDependency: ignoresDependency, - } -} - -// parseSingle parses a single Python file and returns the extracted modules -// from the import statements as well as the parsed comments. -func (p *python3Parser) parseSingle(pyFilename string) (*parserOut, error) { - pyFilenames := treeset.NewWith(godsutils.StringComparator) - pyFilenames.Add(pyFilename) - return p.parse(pyFilenames) -} - -// parse parses multiple Python files and returns the extracted modules from -// the import statements as well as the parsed comments. -func (p *python3Parser) parseMultipe(pyFilenames *treeset.Set) ([]parserOutput, error) { - parserMutex.Lock() - defer parserMutex.Unlock() - - req := map[string]interface{}{ - "repo_root": p.repoRoot, - "rel_package_path": p.relPackagePath, - "filenames": pyFilenames.Values(), - } - encoder := json.NewEncoder(parserStdin) - if err := encoder.Encode(&req); err != nil { - return nil, fmt.Errorf("failed to parse: %w", err) - } - - reader := bufio.NewReader(parserStdout) - data, err := reader.ReadBytes(0) - if err != nil { - return nil, fmt.Errorf("failed to parse: %w", err) - } - data = data[:len(data)-1] - - var allRes []parserResponse - var output []parserOutput - - if err := json.Unmarshal(data, &allRes); err != nil { - return nil, fmt.Errorf("failed to parse: %w", err) - } - - for _, res := range allRes { - modules := treeset.NewWith(moduleComparator) - annotations := annotationsFromComments(res.Comments) - rule_type := res.RuleType - - for _, m := range res.Modules { - // Check for ignored dependencies set via an annotation to the Python - // module. - if annotations.ignores(m.Name) { - continue - } - - // Check for ignored dependencies set via a Gazelle directive in a BUILD - // file. - if p.ignoresDependency(m.Name) { - continue - } - - modules.Add(m) - - } - parO := parserOutput{FileName: res.FileName, Modules: modules, RuleType: rule_type} - output = append(output, parO) - } - - sort.Slice(output, func(i, j int) bool { - return output[i].FileName < output[j].FileName - - }) - - return output, nil -} - -// parse parses multiple Python files and returns the extracted modules from -// the import statements as well as the parsed comments. -func (p *python3Parser) parse(pyFilenames *treeset.Set) (*parserOut, error) { - parserMutex.Lock() - defer parserMutex.Unlock() - - modules := treeset.NewWith(moduleComparator) - - req := map[string]interface{}{ - "repo_root": p.repoRoot, - "rel_package_path": p.relPackagePath, - "filenames": pyFilenames.Values(), - } - encoder := json.NewEncoder(parserStdin) - if err := encoder.Encode(&req); err != nil { - return nil, fmt.Errorf("failed to parse: %w", err) - } - - reader := bufio.NewReader(parserStdout) - data, err := reader.ReadBytes(0) - if err != nil { - return nil, fmt.Errorf("failed to parse: %w", err) - } - data = data[:len(data)-1] - var allRes []parserResponse - if err := json.Unmarshal(data, &allRes); err != nil { - return nil, fmt.Errorf("failed to parse: %w", err) - } - - rule_type := "py_library" - for _, res := range allRes { - annotations := annotationsFromComments(res.Comments) - rule_type = res.RuleType - - for _, m := range res.Modules { - // Check for ignored dependencies set via an annotation to the Python - // module. - if annotations.ignores(m.Name) { - continue - } - - // Check for ignored dependencies set via a Gazelle directive in a BUILD - // file. - if p.ignoresDependency(m.Name) { - continue - } - - modules.Add(m) - } - } - parO := parserOut{Modules: modules, RuleType: rule_type} - - return &parO, nil -} - -// parserResponse represents a response returned by the parser.py for a given -// parsed Python module. -type parserOut struct { - // The modules depended by the parsed module. - Modules *treeset.Set - RuleType string -} - -// parsed Python module. -type parserOutput struct { - // The modules depended by the parsed module. - Modules *treeset.Set - RuleType string - FileName string -} - -// parserResponse represents a response returned by the parser.py for a given -// parsed Python module. -type parserResponse struct { - // The modules depended by the parsed module. - Modules []module `json:"modules"` - // The comments contained in the parsed module. This contains the - // annotations as they are comments in the Python module. - Comments []comment `json:"comments"` - - RuleType string `json:"rules_type"` - - FileName string `json:"filename"` -} - -// module represents a fully-qualified, dot-separated, Python module as seen on -// the import statement, alongside the line number where it happened. -type module struct { - // The fully-qualified, dot-separated, Python module name as seen on import - // statements. - Name string `json:"name"` - // The line number where the import happened. - LineNumber uint32 `json:"lineno"` - // The path to the module file relative to the Bazel workspace root. - Filepath string `json:"filepath"` - - SubName []string `json:"subname"` -} - -// moduleComparator compares modules by name. - -func linenoComparator(a, b interface{}) int { - return godsutils.UInt32Comparator(a.(module).LineNumber, b.(module).LineNumber) -} - -// StringComparator provides a fast comparison on strings -func moduleComparator(a, b interface{}) int { - s1 := fmt.Sprintf("%v-%v-%v", a.(module).LineNumber, a.(module).Name, a.(module).SubName) - s2 := fmt.Sprintf("%v-%v-%v", b.(module).LineNumber, b.(module).Name, b.(module).SubName) - min := len(s2) - if len(s1) < len(s2) { - min = len(s1) - } - diff := 0 - for i := 0; i < min && diff == 0; i++ { - diff = int(s1[i]) - int(s2[i]) - } - if diff == 0 { - diff = len(s1) - len(s2) - } - if diff < 0 { - return -1 - } - if diff > 0 { - return 1 - } - return 0 -} - -// annotationKind represents Gazelle annotation kinds. -type annotationKind string - -const ( - // The Gazelle annotation prefix. - annotationPrefix string = "gazelle:" - // The ignore annotation kind. E.g. '# gazelle:ignore '. - annotationKindIgnore annotationKind = "ignore" -) - -// comment represents a Python comment. -type comment string - -// asAnnotation returns an annotation object if the comment has the -// annotationPrefix. -func (c *comment) asAnnotation() *annotation { - uncomment := strings.TrimLeft(string(*c), "# ") - if !strings.HasPrefix(uncomment, annotationPrefix) { - return nil - } - withoutPrefix := strings.TrimPrefix(uncomment, annotationPrefix) - annotationParts := strings.SplitN(withoutPrefix, " ", 2) - return &annotation{ - kind: annotationKind(annotationParts[0]), - value: annotationParts[1], - } -} - -// annotation represents a single Gazelle annotation parsed from a Python -// comment. -type annotation struct { - kind annotationKind - value string -} - -// annotations represent the collection of all Gazelle annotations parsed out of -// the comments of a Python module. -type annotations struct { - // The parsed modules to be ignored by Gazelle. - ignore map[string]struct{} -} - -// annotationsFromComments returns all the annotations parsed out of the -// comments of a Python module. -func annotationsFromComments(comments []comment) *annotations { - ignore := make(map[string]struct{}) - for _, comment := range comments { - annotation := comment.asAnnotation() - if annotation != nil { - if annotation.kind == annotationKindIgnore { - modules := strings.Split(annotation.value, ",") - for _, m := range modules { - if m == "" { - continue - } - m = strings.TrimSpace(m) - ignore[m] = struct{}{} - } - } - } - } - return &annotations{ - ignore: ignore, - } -} - -// ignored returns true if the given module was ignored via the ignore -// annotation. -func (a *annotations) ignores(module string) bool { - _, ignores := a.ignore[module] - return ignores -} diff --git a/gazelle/python_test.go b/gazelle/python_test.go index ad1cdce..2dbb603 100644 --- a/gazelle/python_test.go +++ b/gazelle/python_test.go @@ -41,7 +41,7 @@ import ( const ( extensionDir = "gazelle/" testDataPath = extensionDir + "testdata/" - gazelleBinaryName = "gazelle_python_binary" + gazelleBinaryName = "gazelle_binary" ) var gazellePath = mustFindGazelle() @@ -195,7 +195,7 @@ func testPath(t *testing.T, name string, files []bazel.RunfileEntry) { } func mustFindGazelle() string { - gazellePath, ok := bazel.FindBinary(extensionDir, gazelleBinaryName) + gazellePath, ok := bazel.FindBinary("python", gazelleBinaryName) if !ok { panic("could not find gazelle binary") } diff --git a/gazelle/pythonconfig/BUILD.bazel b/gazelle/pythonconfig/BUILD.bazel deleted file mode 100644 index b7cab8a..0000000 --- a/gazelle/pythonconfig/BUILD.bazel +++ /dev/null @@ -1,16 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "pythonconfig", - srcs = [ - "pythonconfig.go", - "types.go", - ], - importpath = "github.com/benchsci/rules_python_gazelle/gazelle/pythonconfig", - visibility = ["//visibility:public"], - deps = [ - "//gazelle/manifest", - "@bazel_gazelle//label:go_default_library", - "@com_github_emirpasic_gods//lists/singlylinkedlist:go_default_library", - ], -) diff --git a/gazelle/std_modules.go b/gazelle/std_modules.go deleted file mode 100644 index 8a016af..0000000 --- a/gazelle/std_modules.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2023 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package python - -import ( - "bufio" - "context" - _ "embed" - "fmt" - "io" - "log" - "os" - "os/exec" - "strconv" - "strings" - "sync" -) - -var ( - stdModulesCmd *exec.Cmd - stdModulesStdin io.WriteCloser - stdModulesStdout io.Reader - stdModulesMutex sync.Mutex - stdModulesSeen map[string]struct{} -) - -func startStdModuleProcess(ctx context.Context) { - stdModulesSeen = make(map[string]struct{}) - - // due to #691, we need a system interpreter to boostrap, part of which is - // to locate the hermetic interpreter. - stdModulesCmd = exec.CommandContext(ctx, "python3", helperPath, "std_modules") - stdModulesCmd.Stderr = os.Stderr - // All userland site-packages should be ignored. - stdModulesCmd.Env = []string{"PYTHONNOUSERSITE=1"} - - stdin, err := stdModulesCmd.StdinPipe() - if err != nil { - log.Printf("failed to initialize std_modules: %v\n", err) - os.Exit(1) - } - stdModulesStdin = stdin - - stdout, err := stdModulesCmd.StdoutPipe() - if err != nil { - log.Printf("failed to initialize std_modules: %v\n", err) - os.Exit(1) - } - stdModulesStdout = stdout - - if err := stdModulesCmd.Start(); err != nil { - log.Printf("failed to initialize std_modules: %v\n", err) - os.Exit(1) - } -} - -func shutdownStdModuleProcess() { - if err := stdModulesStdin.Close(); err != nil { - fmt.Fprintf(os.Stderr, "error closing std module: %v", err) - } - - if err := stdModulesCmd.Wait(); err != nil { - log.Printf("failed to wait for std_modules: %v\n", err) - } -} - -func isStdModule(m module) (bool, error) { - if _, seen := stdModulesSeen[m.Name]; seen { - return true, nil - } - stdModulesMutex.Lock() - defer stdModulesMutex.Unlock() - - fmt.Fprintf(stdModulesStdin, "%s\n", m.Name) - - stdoutReader := bufio.NewReader(stdModulesStdout) - line, err := stdoutReader.ReadString('\n') - if err != nil { - return false, err - } - if len(line) == 0 { - return false, fmt.Errorf("unexpected empty output from std_modules") - } - - isStd, err := strconv.ParseBool(strings.TrimSpace(line)) - if err != nil { - return false, err - } - - if isStd { - stdModulesSeen[m.Name] = struct{}{} - return true, nil - } - return false, nil -} diff --git a/gazelle/std_modules.py b/gazelle/std_modules.py deleted file mode 100644 index 779a325..0000000 --- a/gazelle/std_modules.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2023 The Bazel Authors. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# std_modules.py is a long-living program that communicates over STDIN and -# STDOUT. STDIN receives module names, one per line. For each module statement -# it evaluates, it outputs true/false for whether the module is part of the -# standard library or not. - -import os -import sys -from contextlib import redirect_stdout - - -def is_std_modules(module): - # If for some reason a module (such as pygame, see https://github.com/pygame/pygame/issues/542) - # prints to stdout upon import, - # the output of this script should still be parseable by golang. - # Therefore, redirect stdout while running the import. - with redirect_stdout(os.devnull): - try: - __import__(module, globals(), locals(), [], 0) - return True - except Exception: - return False - - -def main(stdin, stdout): - for module in stdin: - module = module.strip() - # Don't print the boolean directly as it is capitalized in Python. - print( - "true" if is_std_modules(module) else "false", - end="\n", - file=stdout, - ) - stdout.flush() - - -if __name__ == "__main__": - exit(main(sys.stdin, sys.stdout)) diff --git a/gazelle/testdata/py_module/BUILD.in b/gazelle/testdata/py_module/BUILD.in deleted file mode 100644 index b151086..0000000 --- a/gazelle/testdata/py_module/BUILD.in +++ /dev/null @@ -1 +0,0 @@ -# gazelle:py_module enabled diff --git a/gazelle/testdata/py_module/BUILD.out b/gazelle/testdata/py_module/BUILD.out deleted file mode 100644 index 213a672..0000000 --- a/gazelle/testdata/py_module/BUILD.out +++ /dev/null @@ -1,28 +0,0 @@ -load("@rules_python//python:defs.bzl", "py_binary", "py_library", "pytest") - -# gazelle:py_module enabled - -py_binary( - name = "__main__", - srcs = ["__main__.py"], - main = "__main__.py", - deps = [":py_module"], -) - -pytest( - name = "__test__", - srcs = ["__test__.py"], - main = "__test__.py", - deps = [ - ":__main__", - ":py_module", - ], -) - -py_library( - name = "py_module", - srcs = [ - "__init__.py", - "foo.py", - ], -) diff --git a/gazelle/testdata/py_module/README.md b/gazelle/testdata/py_module/README.md deleted file mode 100644 index 0cfbbeb..0000000 --- a/gazelle/testdata/py_module/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Simple test - -This test case asserts that a simple `py_test` is generated as expected. diff --git a/gazelle/testdata/py_module/WORKSPACE b/gazelle/testdata/py_module/WORKSPACE deleted file mode 100644 index faff6af..0000000 --- a/gazelle/testdata/py_module/WORKSPACE +++ /dev/null @@ -1 +0,0 @@ -# This is a Bazel workspace for the Gazelle test data. diff --git a/gazelle/testdata/py_module/__init__.py b/gazelle/testdata/py_module/__init__.py deleted file mode 100644 index 6a49193..0000000 --- a/gazelle/testdata/py_module/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from foo import foo - -_ = foo diff --git a/gazelle/testdata/py_module/__main__.py b/gazelle/testdata/py_module/__main__.py deleted file mode 100644 index d4b7650..0000000 --- a/gazelle/testdata/py_module/__main__.py +++ /dev/null @@ -1,10 +0,0 @@ -# For test purposes only. -from foo import foo - - -def main(): - foo() - - -if __name__ == "__main__": - main() diff --git a/gazelle/testdata/py_module/__test__.py b/gazelle/testdata/py_module/__test__.py deleted file mode 100644 index 00f48ec..0000000 --- a/gazelle/testdata/py_module/__test__.py +++ /dev/null @@ -1,13 +0,0 @@ -import unittest - -from __init__ import foo -from __main__ import main - - -class FooTest(unittest.TestCase): - def test_foo(self): - self.assertEqual("foo", foo()) - - -if __name__ == "__main__": - unittest.main() diff --git a/gazelle/testdata/py_module/foo.py b/gazelle/testdata/py_module/foo.py deleted file mode 100644 index cf68624..0000000 --- a/gazelle/testdata/py_module/foo.py +++ /dev/null @@ -1,2 +0,0 @@ -def foo(): - return "foo" diff --git a/gazelle/testdata/py_module/test.yaml b/gazelle/testdata/py_module/test.yaml deleted file mode 100644 index 36dd656..0000000 --- a/gazelle/testdata/py_module/test.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -expect: - exit_code: 0 diff --git a/gazelle/testdata/pycheck/BUILD.in b/gazelle/testdata/pycheck/BUILD.in deleted file mode 100644 index 5b77948..0000000 --- a/gazelle/testdata/pycheck/BUILD.in +++ /dev/null @@ -1 +0,0 @@ -# gazelle:py_check enabled diff --git a/gazelle/testdata/pycheck/BUILD.out b/gazelle/testdata/pycheck/BUILD.out deleted file mode 100644 index ebdc5c4..0000000 --- a/gazelle/testdata/pycheck/BUILD.out +++ /dev/null @@ -1,41 +0,0 @@ -load("@rules_python//python:defs.bzl", "py_binary", "py_library", "pytest") -load("@com_github_benchsci_rules_python_gazelle:defs.bzl", "py_check") - -# gazelle:py_check enabled - -py_library( - name = "__init__", - srcs = ["__init__.py"], - deps = [":foo"], -) - -py_binary( - name = "__main__", - srcs = ["__main__.py"], - main = "__main__.py", -) - -pytest( - name = "__test__", - srcs = ["__test__.py"], - main = "__test__.py", - deps = [ - ":__init__", - ":__main__", - ], -) - -py_library( - name = "foo", - srcs = ["foo.py"], -) - -py_check( - name = "check", - srcs = [ - ":__init__", - ":__main__", - ":__test__", - ":foo", - ], -) diff --git a/gazelle/testdata/pycheck/README.md b/gazelle/testdata/pycheck/README.md deleted file mode 100644 index 0cfbbeb..0000000 --- a/gazelle/testdata/pycheck/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Simple test - -This test case asserts that a simple `py_test` is generated as expected. diff --git a/gazelle/testdata/pycheck/WORKSPACE b/gazelle/testdata/pycheck/WORKSPACE deleted file mode 100644 index faff6af..0000000 --- a/gazelle/testdata/pycheck/WORKSPACE +++ /dev/null @@ -1 +0,0 @@ -# This is a Bazel workspace for the Gazelle test data. diff --git a/gazelle/testdata/pycheck/__init__.py b/gazelle/testdata/pycheck/__init__.py deleted file mode 100644 index 6a49193..0000000 --- a/gazelle/testdata/pycheck/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from foo import foo - -_ = foo diff --git a/gazelle/testdata/pycheck/__main__.py b/gazelle/testdata/pycheck/__main__.py deleted file mode 100644 index 38ffdf7..0000000 --- a/gazelle/testdata/pycheck/__main__.py +++ /dev/null @@ -1,7 +0,0 @@ -# For test purposes only. -def main(): - pass - - -if __name__ == "__main__": - main() diff --git a/gazelle/testdata/pycheck/__test__.py b/gazelle/testdata/pycheck/__test__.py deleted file mode 100644 index 00f48ec..0000000 --- a/gazelle/testdata/pycheck/__test__.py +++ /dev/null @@ -1,13 +0,0 @@ -import unittest - -from __init__ import foo -from __main__ import main - - -class FooTest(unittest.TestCase): - def test_foo(self): - self.assertEqual("foo", foo()) - - -if __name__ == "__main__": - unittest.main() diff --git a/gazelle/testdata/pycheck/foo.py b/gazelle/testdata/pycheck/foo.py deleted file mode 100644 index cf68624..0000000 --- a/gazelle/testdata/pycheck/foo.py +++ /dev/null @@ -1,2 +0,0 @@ -def foo(): - return "foo" diff --git a/gazelle/testdata/pycheck/test.yaml b/gazelle/testdata/pycheck/test.yaml deleted file mode 100644 index 36dd656..0000000 --- a/gazelle/testdata/pycheck/test.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -expect: - exit_code: 0 diff --git a/gazelle/testdata/simple/BUILD.out b/gazelle/testdata/simple/BUILD.out index 4522f61..47bc468 100644 --- a/gazelle/testdata/simple/BUILD.out +++ b/gazelle/testdata/simple/BUILD.out @@ -12,6 +12,11 @@ py_binary( main = "__main__.py", ) +py_library( + name = "foo", + srcs = ["foo.py"], +) + pytest( name = "__test__", srcs = ["__test__.py"], @@ -21,8 +26,3 @@ pytest( ":__main__", ], ) - -py_library( - name = "foo", - srcs = ["foo.py"], -) diff --git a/go.mod b/go.mod index 9178af8..0dc2166 100644 --- a/go.mod +++ b/go.mod @@ -1,20 +1,26 @@ -module github.com/benchsci/rules_python_gazelle +module github.com/benchsci/rules_python_gazelle/gazelle go 1.19 require ( - github.com/bazelbuild/bazel-gazelle v0.33.0 - github.com/bazelbuild/buildtools v0.0.0-20230831140646-386244e73fc4 + github.com/bazelbuild/bazel-gazelle v0.31.1 + github.com/bazelbuild/buildtools v0.0.0-20231103205921-433ea8554e82 github.com/bazelbuild/rules_go v0.41.0 - github.com/emirpasic/gods v1.12.0 + github.com/bmatcuk/doublestar/v4 v4.6.1 + github.com/emirpasic/gods v1.18.1 github.com/ghodss/yaml v1.0.0 - github.com/google/uuid v1.3.0 - gopkg.in/yaml.v2 v2.2.8 + github.com/smacker/go-tree-sitter v0.0.0-20240422154435-0628b34cbf9c + github.com/stretchr/testify v1.9.0 + golang.org/x/sync v0.2.0 + gopkg.in/yaml.v2 v2.4.0 ) require ( + github.com/davecgh/go-spew v1.1.1 // indirect github.com/google/go-cmp v0.5.9 // indirect - github.com/kr/pretty v0.1.0 // indirect - golang.org/x/mod v0.12.0 // indirect - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/tools v0.9.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index f6e7fe1..46e0127 100644 --- a/go.sum +++ b/go.sum @@ -1,18 +1,23 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/bazelbuild/bazel-gazelle v0.33.0 h1:WnJGYk1bMIjw8FCYA/UxKBK/Y6hUnOItrtR+vjFIIKo= -github.com/bazelbuild/bazel-gazelle v0.33.0/go.mod h1:6BWjSqjc2gr7YfzMRCbkHiJZy5YRxIKj7iLButu58Jk= -github.com/bazelbuild/buildtools v0.0.0-20230831140646-386244e73fc4 h1:6Z/4LXt5mdhuFAx4QhwM0D5pTs1ljYGmhgF3O9OCMF0= -github.com/bazelbuild/buildtools v0.0.0-20230831140646-386244e73fc4/go.mod h1:689QdV3hBP7Vo9dJMmzhoYIyo/9iMhEmHkJcnaPRCbo= +github.com/bazelbuild/bazel-gazelle v0.31.1 h1:ROyUyUHzoEdvoOs1e0haxJx1l5EjZX6AOqiKdVlaBbg= +github.com/bazelbuild/bazel-gazelle v0.31.1/go.mod h1:Ul0pqz50f5wxz0QNzsZ+mrEu4AVAVJZEB5xLnHgIG9c= +github.com/bazelbuild/buildtools v0.0.0-20231103205921-433ea8554e82 h1:HTepWP/jhtWTC1gvK0RnvKCgjh4gLqiwaOwGozAXcbw= +github.com/bazelbuild/buildtools v0.0.0-20231103205921-433ea8554e82/go.mod h1:689QdV3hBP7Vo9dJMmzhoYIyo/9iMhEmHkJcnaPRCbo= github.com/bazelbuild/rules_go v0.41.0 h1:JzlRxsFNhlX+g4drDRPhIaU5H5LnI978wdMJ0vK4I+k= github.com/bazelbuild/rules_go v0.41.0/go.mod h1:TMHmtfpvyfsxaqfL9WnahCsXMWDMICTw7XeK9yVb+YU= +github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I= +github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= @@ -36,22 +41,25 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/smacker/go-tree-sitter v0.0.0-20240422154435-0628b34cbf9c h1:7QZKUmQfnxncZIJGyvX8M8YeMfn8kM10j3J/2KwVTN4= +github.com/smacker/go-tree-sitter v0.0.0-20240422154435-0628b34cbf9c/go.mod h1:q99oHDsbP0xRwmn7Vmob8gbSMNyvJ83OauXPSuHQuKE= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.starlark.net v0.0.0-20210223155950-e043a3d3c984/go.mod h1:t3mmBBPzAVvK0L0n1drDmrQsJ8FoIx4INCqVMTr/Zo0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -60,16 +68,20 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -golang.org/x/tools/go/vcs v0.1.0-deprecated h1:cOIJqWBl99H1dH5LWizPa+0ImeeJq3t3cJjaeOWUAL4= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -89,10 +101,12 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/gazelle/manifest/BUILD.bazel b/manifest/BUILD.bazel similarity index 56% rename from gazelle/manifest/BUILD.bazel rename to manifest/BUILD.bazel index 42ab3a4..8195f40 100644 --- a/gazelle/manifest/BUILD.bazel +++ b/manifest/BUILD.bazel @@ -1,13 +1,18 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") +exports_files([ + # This gets wrapped up into a py_binary with args inside of the gazelle_python_manifest macro. + "copy_to_source.py", +]) + go_library( name = "manifest", srcs = ["manifest.go"], importpath = "github.com/benchsci/rules_python_gazelle/gazelle/manifest", visibility = ["//visibility:public"], deps = [ - "@com_github_emirpasic_gods//sets/treeset:go_default_library", - "@in_gopkg_yaml_v2//:go_default_library", + "@com_github_emirpasic_gods//sets/treeset", + "@in_gopkg_yaml_v2//:yaml_v2", ], ) @@ -21,9 +26,9 @@ go_test( filegroup( name = "distribution", srcs = glob(["**"]) + [ - "@com_github_benchsci_rules_python_gazelle//gazelle/manifest/generate:distribution", - "@com_github_benchsci_rules_python_gazelle//gazelle/manifest/hasher:distribution", - "@com_github_benchsci_rules_python_gazelle//gazelle/manifest/test:distribution", + "//manifest/generate:distribution", + "//manifest/hasher:distribution", + "//manifest/test:distribution", ], visibility = ["//:__pkg__"], ) diff --git a/manifest/copy_to_source.py b/manifest/copy_to_source.py new file mode 100644 index 0000000..4ebb958 --- /dev/null +++ b/manifest/copy_to_source.py @@ -0,0 +1,36 @@ +"""Copy a generated file to the source tree. + +Run like: + copy_to_source path/to/generated_file path/to/source_file_to_overwrite +""" + +import os +import shutil +import stat +import sys +from pathlib import Path + + +def copy_to_source(generated_relative_path: Path, target_relative_path: Path) -> None: + """Copy the generated file to the target file path. + + Expands the relative paths by looking at Bazel env vars to figure out which absolute paths to use. + """ + # This script normally gets executed from the runfiles dir, so find the absolute path to the generated file based on that. + generated_absolute_path = Path.cwd() / generated_relative_path + + # Similarly, the target is relative to the source directory. + target_absolute_path = os.getenv("BUILD_WORKSPACE_DIRECTORY") / target_relative_path + + print(f"Copying {generated_absolute_path} to {target_absolute_path}") + target_absolute_path.parent.mkdir(parents=True, exist_ok=True) + shutil.copy(generated_absolute_path, target_absolute_path) + + target_absolute_path.chmod(0o664) + + +if __name__ == "__main__": + if len(sys.argv) != 3: + sys.exit("Usage: copy_to_source ") + + copy_to_source(Path(sys.argv[1]), Path(sys.argv[2])) diff --git a/gazelle/manifest/defs.bzl b/manifest/defs.bzl similarity index 57% rename from gazelle/manifest/defs.bzl rename to manifest/defs.bzl index d1fa8dd..ccabfd2 100644 --- a/gazelle/manifest/defs.bzl +++ b/manifest/defs.bzl @@ -16,32 +16,34 @@ for updating and testing the Gazelle manifest file. """ -load("@io_bazel_rules_go//go:def.bzl", "GoSource", "go_binary", "go_test") +load("@bazel_skylib//rules:diff_test.bzl", "diff_test") +load("@io_bazel_rules_go//go:def.bzl", "GoSource", "go_test") +load("@rules_python//python:defs.bzl", "py_binary") def gazelle_python_manifest( name, - requirements, modules_mapping, + requirements = [], pip_repository_name = "", pip_deps_repository_name = "", manifest = ":gazelle_python.yaml", - use_pip_repository_aliases = True, **kwargs): """A macro for defining the updating and testing targets for the Gazelle manifest file. Args: name: the name used as a base for the targets. + modules_mapping: the target for the generated modules_mapping.json file. requirements: the target for the requirements.txt file or a list of requirements files that will be concatenated before passing on to - the manifest generator. + the manifest generator. If unset, no integrity field is added to the + manifest, meaning testing it is just as expensive as generating it, + but modifying it is much less likely to result in a merge conflict. pip_repository_name: the name of the pip_install or pip_repository target. - use_pip_repository_aliases: boolean flag to enable using user-friendly - python package aliases. pip_deps_repository_name: deprecated - the old pip_install target name. - modules_mapping: the target for the generated modules_mapping.json file. - manifest: the target for the Gazelle manifest file. - **kwargs: other bazel attributes passed to the target target generated by - this macro. + manifest: the Gazelle manifest file. + defaults to the same value as manifest. + **kwargs: other bazel attributes passed to the generate and test targets + generated by this macro. """ if pip_deps_repository_name != "": # buildifier: disable=print @@ -55,12 +57,17 @@ def gazelle_python_manifest( # This is a temporary check while pip_deps_repository_name exists as deprecated. fail("pip_repository_name must be set in //{}:{}".format(native.package_name(), name)) + test_target = "{}.test".format(name) update_target = "{}.update".format(name) update_target_label = "//{}:{}".format(native.package_name(), update_target) - manifest_generator_hash = Label("@com_github_benchsci_rules_python_gazelle//gazelle/manifest/generate:generate_lib_sources_hash") + manifest_genrule = name + ".genrule" + generated_manifest = name + ".generated_manifest" + manifest_generator = Label("//manifest/generate:generate") + manifest_generator_hash = Label("//manifest/generate:generate_lib_sources_hash") - if type(requirements) == "list": + if requirements and type(requirements) == "list": + # This runs if requirements is a list or is unset (default value is empty list) native.genrule( name = name + "_requirements_gen", srcs = sorted(requirements), @@ -71,62 +78,71 @@ def gazelle_python_manifest( requirements = name + "_requirements_gen" update_args = [ - "--manifest-generator-hash", - "$(rootpath {})".format(manifest_generator_hash), - "--requirements", - "$(rootpath {})".format(requirements), - "--pip-repository-name", - pip_repository_name, - "--modules-mapping", - "$(rootpath {})".format(modules_mapping), - "--output", - "$(rootpath {})".format(manifest), - "--update-target", - update_target_label, + "--manifest-generator-hash=$(execpath {})".format(manifest_generator_hash), + "--requirements=$(rootpath {})".format(requirements) if requirements else "--requirements=", + "--pip-repository-name={}".format(pip_repository_name), + "--modules-mapping=$(execpath {})".format(modules_mapping), + "--output=$(execpath {})".format(generated_manifest), + "--update-target={}".format(update_target_label), ] - if use_pip_repository_aliases: - update_args += [ - "--use-pip-repository-aliases", - "true", - ] - - go_binary( - name = update_target, - embed = ["@com_github_benchsci_rules_python_gazelle//gazelle/manifest/generate:generate_lib"], - data = [ - manifest, + native.genrule( + name = manifest_genrule, + outs = [generated_manifest], + cmd = "$(execpath {}) {}".format(manifest_generator, " ".join(update_args)), + tools = [manifest_generator], + srcs = [ modules_mapping, - requirements, manifest_generator_hash, - ], - args = update_args, - visibility = ["//visibility:private"], - tags = ["manual"], + ] + ([requirements] if requirements else []), ) - attrs = { - "env": { - "_TEST_MANIFEST": "$(rootpath {})".format(manifest), - "_TEST_MANIFEST_GENERATOR_HASH": "$(rootpath {})".format(manifest_generator_hash), - "_TEST_REQUIREMENTS": "$(rootpath {})".format(requirements), - }, - "size": "small", - } - go_test( - name = "{}.test".format(name), - srcs = [Label("@com_github_benchsci_rules_python_gazelle//gazelle/manifest/test:test.go")], + py_binary( + name = update_target, + srcs = [Label("//manifest:copy_to_source.py")], + main = Label("//manifest:copy_to_source.py"), + args = [ + "$(rootpath {})".format(generated_manifest), + "$(rootpath {})".format(manifest), + ], data = [ + generated_manifest, manifest, - requirements, - manifest_generator_hash, ], - rundir = ".", - deps = [Label("@com_github_benchsci_rules_python_gazelle//gazelle/manifest")], - # kwargs could contain test-specific attributes like size or timeout - **dict(attrs, **kwargs) + **kwargs ) + if requirements: + attrs = { + "env": { + "_TEST_MANIFEST": "$(rootpath {})".format(manifest), + "_TEST_MANIFEST_GENERATOR_HASH": "$(rootpath {})".format(manifest_generator_hash), + "_TEST_REQUIREMENTS": "$(rootpath {})".format(requirements), + }, + "size": "small", + } + go_test( + name = test_target, + srcs = [Label("//manifest/test:test.go")], + data = [ + manifest, + requirements, + manifest_generator_hash, + ], + rundir = ".", + deps = [Label("//manifest")], + # kwargs could contain test-specific attributes like size or timeout + **dict(attrs, **kwargs) + ) + else: + diff_test( + name = test_target, + file1 = generated_manifest, + file2 = manifest, + failure_message = "Gazelle manifest is out of date. Run 'bazel run {}' to update it.".format(native.package_relative_label(update_target)), + **kwargs + ) + native.filegroup( name = name, srcs = [manifest], @@ -181,7 +197,7 @@ sources_hash = rule( ), "_hasher": attr.label( cfg = "exec", - default = Label("@com_github_benchsci_rules_python_gazelle//gazelle/manifest/hasher"), + default = Label("//manifest/hasher"), executable = True, ), }, diff --git a/gazelle/manifest/generate/BUILD.bazel b/manifest/generate/BUILD.bazel similarity index 61% rename from gazelle/manifest/generate/BUILD.bazel rename to manifest/generate/BUILD.bazel index 296d1e2..96248f4 100644 --- a/gazelle/manifest/generate/BUILD.bazel +++ b/manifest/generate/BUILD.bazel @@ -1,12 +1,12 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") -load("@com_github_benchsci_rules_python_gazelle//gazelle/manifest:defs.bzl", "sources_hash") +load("//manifest:defs.bzl", "sources_hash") go_library( name = "generate_lib", srcs = ["generate.go"], - importpath = "github.com/benchsci/rules_python_gazelle/gazelle/manifest/generate", + importpath = "github.com/bazelbuild/rules_python/gazelle/manifest/generate", visibility = ["//visibility:public"], - deps = ["//gazelle/manifest"], + deps = ["//manifest"], ) sources_hash( @@ -24,5 +24,5 @@ go_binary( filegroup( name = "distribution", srcs = glob(["**"]), - visibility = ["@com_github_benchsci_rules_python_gazelle//gazelle/manifest:__pkg__"], + visibility = ["//manifest:__pkg__"], ) diff --git a/gazelle/manifest/generate/generate.go b/manifest/generate/generate.go similarity index 78% rename from gazelle/manifest/generate/generate.go rename to manifest/generate/generate.go index cf0d03b..66c74ca 100644 --- a/gazelle/manifest/generate/generate.go +++ b/manifest/generate/generate.go @@ -31,18 +31,11 @@ import ( "github.com/benchsci/rules_python_gazelle/gazelle/manifest" ) -func init() { - if os.Getenv("BUILD_WORKSPACE_DIRECTORY") == "" { - log.Fatalln("ERROR: this program must run under Bazel") - } -} - func main() { var ( manifestGeneratorHashPath string requirementsPath string pipRepositoryName string - usePipRepositoryAliases bool modulesMappingPath string outputPath string updateTarget string @@ -63,11 +56,6 @@ func main() { "pip-repository-name", "", "The name of the pip_install or pip_repository target.") - flag.BoolVar( - &usePipRepositoryAliases, - "use-pip-repository-aliases", - true, - "Whether to use the pip-repository aliases, which are generated when passing 'incompatible_generate_aliases = True'.") flag.StringVar( &modulesMappingPath, "modules-mapping", @@ -85,10 +73,6 @@ func main() { "The Bazel target to update the YAML manifest file.") flag.Parse() - if requirementsPath == "" { - log.Fatalln("ERROR: --requirements must be set") - } - if modulesMappingPath == "" { log.Fatalln("ERROR: --modules-mapping must be set") } @@ -107,12 +91,13 @@ func main() { } header := generateHeader(updateTarget) + repository := manifest.PipRepository{ + Name: pipRepositoryName, + } manifestFile := manifest.NewFile(&manifest.Manifest{ ModulesMapping: modulesMapping, - PipRepository: &manifest.PipRepository{ - Name: pipRepositoryName, - }, + PipRepository: &repository, }) if err := writeOutput( outputPath, @@ -160,12 +145,7 @@ func writeOutput( manifestGeneratorHashPath string, requirementsPath string, ) error { - stat, err := os.Stat(outputPath) - if err != nil { - return fmt.Errorf("failed to write output: %w", err) - } - - outputFile, err := os.OpenFile(outputPath, os.O_WRONLY|os.O_TRUNC, stat.Mode()) + outputFile, err := os.OpenFile(outputPath, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644) if err != nil { return fmt.Errorf("failed to write output: %w", err) } @@ -175,20 +155,26 @@ func writeOutput( return fmt.Errorf("failed to write output: %w", err) } - manifestGeneratorHash, err := os.Open(manifestGeneratorHashPath) - if err != nil { - return fmt.Errorf("failed to write output: %w", err) - } - defer manifestGeneratorHash.Close() - - requirements, err := os.Open(requirementsPath) - if err != nil { - return fmt.Errorf("failed to write output: %w", err) - } - defer requirements.Close() - - if err := manifestFile.Encode(outputFile, manifestGeneratorHash, requirements); err != nil { - return fmt.Errorf("failed to write output: %w", err) + if requirementsPath != "" { + manifestGeneratorHash, err := os.Open(manifestGeneratorHashPath) + if err != nil { + return fmt.Errorf("failed to write output: %w", err) + } + defer manifestGeneratorHash.Close() + + requirements, err := os.Open(requirementsPath) + if err != nil { + return fmt.Errorf("failed to write output: %w", err) + } + defer requirements.Close() + + if err := manifestFile.EncodeWithIntegrity(outputFile, manifestGeneratorHash, requirements); err != nil { + return fmt.Errorf("failed to write output: %w", err) + } + } else { + if err := manifestFile.EncodeWithoutIntegrity(outputFile); err != nil { + return fmt.Errorf("failed to write output: %w", err) + } } return nil diff --git a/gazelle/manifest/hasher/BUILD.bazel b/manifest/hasher/BUILD.bazel similarity index 66% rename from gazelle/manifest/hasher/BUILD.bazel rename to manifest/hasher/BUILD.bazel index 93cebb5..2e7b125 100644 --- a/gazelle/manifest/hasher/BUILD.bazel +++ b/manifest/hasher/BUILD.bazel @@ -3,7 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") go_library( name = "hasher_lib", srcs = ["main.go"], - importpath = "github.com/benchsci/rules_python_gazelle/gazelle/manifest/hasher", + importpath = "github.com/bazelbuild/rules_python/gazelle/manifest/hasher", visibility = ["//visibility:private"], ) @@ -16,5 +16,5 @@ go_binary( filegroup( name = "distribution", srcs = glob(["**"]), - visibility = ["@com_github_benchsci_rules_python_gazelle//gazelle/manifest:__pkg__"], + visibility = ["//manifest:__pkg__"], ) diff --git a/gazelle/manifest/hasher/main.go b/manifest/hasher/main.go similarity index 100% rename from gazelle/manifest/hasher/main.go rename to manifest/hasher/main.go diff --git a/gazelle/manifest/manifest.go b/manifest/manifest.go similarity index 89% rename from gazelle/manifest/manifest.go rename to manifest/manifest.go index e95ef06..26b0dfb 100644 --- a/gazelle/manifest/manifest.go +++ b/manifest/manifest.go @@ -31,7 +31,7 @@ type File struct { // Integrity is the hash of the requirements.txt file and the Manifest for // ensuring the integrity of the entire gazelle_python.yaml file. This // controls the testing to keep the gazelle_python.yaml file up-to-date. - Integrity string `yaml:"integrity"` + Integrity string `yaml:"integrity,omitempty"` } // NewFile creates a new File with a given Manifest. @@ -40,12 +40,21 @@ func NewFile(manifest *Manifest) *File { } // Encode encodes the manifest file to the given writer. -func (f *File) Encode(w io.Writer, manifestGeneratorHashFile, requirements io.Reader) error { +func (f *File) EncodeWithIntegrity(w io.Writer, manifestGeneratorHashFile, requirements io.Reader) error { integrityBytes, err := f.calculateIntegrity(manifestGeneratorHashFile, requirements) if err != nil { return fmt.Errorf("failed to encode manifest file: %w", err) } f.Integrity = fmt.Sprintf("%x", integrityBytes) + + return f.encode(w) +} + +func (f *File) EncodeWithoutIntegrity(w io.Writer) error { + return f.encode(w) +} + +func (f *File) encode(w io.Writer) error { encoder := yaml.NewEncoder(w) defer encoder.Close() if err := encoder.Encode(f); err != nil { @@ -133,18 +142,15 @@ type Manifest struct { // ModulesMapping is the mapping from importable modules to which Python // wheel name provides these modules. ModulesMapping ModulesMapping `yaml:"modules_mapping"` - // PipDepsRepositoryName is the name of the pip_install repository target. + // PipDepsRepositoryName is the name of the pip_parse repository target. // DEPRECATED PipDepsRepositoryName string `yaml:"pip_deps_repository_name,omitempty"` - // PipRepository contains the information for pip_install or pip_repository + // PipRepository contains the information for pip_parse or pip_repository // target. PipRepository *PipRepository `yaml:"pip_repository,omitempty"` } type PipRepository struct { - // The name of the pip_install or pip_repository target. + // The name of the pip_parse or pip_repository target. Name string - // UsePipRepositoryAliases allows to use aliases generated pip_repository - // when passing incompatible_generate_aliases = True. - UsePipRepositoryAliases *bool `yaml:"use_pip_repository_aliases,omitempty"` } diff --git a/gazelle/manifest/manifest_test.go b/manifest/manifest_test.go similarity index 95% rename from gazelle/manifest/manifest_test.go rename to manifest/manifest_test.go index 1861abe..1caa04e 100644 --- a/gazelle/manifest/manifest_test.go +++ b/manifest/manifest_test.go @@ -40,7 +40,7 @@ var modulesMapping = manifest.ModulesMapping{ const pipDepsRepositoryName = "test_repository_name" func TestFile(t *testing.T) { - t.Run("Encode", func(t *testing.T) { + t.Run("EncodeWithIntegrity", func(t *testing.T) { f := manifest.NewFile(&manifest.Manifest{ ModulesMapping: modulesMapping, PipDepsRepositoryName: pipDepsRepositoryName, @@ -53,7 +53,7 @@ func TestFile(t *testing.T) { t.FailNow() } defer requirements.Close() - if err := f.Encode(&b, manifestGeneratorHashFile, requirements); err != nil { + if err := f.EncodeWithIntegrity(&b, manifestGeneratorHashFile, requirements); err != nil { log.Println(err) t.FailNow() } diff --git a/gazelle/manifest/test/BUILD.bazel b/manifest/test/BUILD.bazel similarity index 55% rename from gazelle/manifest/test/BUILD.bazel rename to manifest/test/BUILD.bazel index c681c02..28c6c54 100644 --- a/gazelle/manifest/test/BUILD.bazel +++ b/manifest/test/BUILD.bazel @@ -5,5 +5,5 @@ exports_files(["test.go"]) filegroup( name = "distribution", srcs = glob(["**"]), - visibility = ["@com_github_benchsci_rules_python_gazelle//gazelle/manifest:__pkg__"], + visibility = ["//manifest:__pkg__"], ) diff --git a/gazelle/manifest/test/test.go b/manifest/test/test.go similarity index 97% rename from gazelle/manifest/test/test.go rename to manifest/test/test.go index 9c2c570..72cb260 100644 --- a/gazelle/manifest/test/test.go +++ b/manifest/test/test.go @@ -26,7 +26,7 @@ import ( "path/filepath" "testing" - "github.com/benchsci/rules_python_gazelle/gazelle/manifest" + "github.com/bazelbuild/rules_python/gazelle/manifest" ) func TestGazelleManifestIsUpdated(t *testing.T) { diff --git a/gazelle/manifest/testdata/gazelle_python.yaml b/manifest/testdata/gazelle_python.yaml similarity index 100% rename from gazelle/manifest/testdata/gazelle_python.yaml rename to manifest/testdata/gazelle_python.yaml diff --git a/gazelle/manifest/testdata/requirements.txt b/manifest/testdata/requirements.txt similarity index 100% rename from gazelle/manifest/testdata/requirements.txt rename to manifest/testdata/requirements.txt diff --git a/modules_mapping/BUILD.bazel b/modules_mapping/BUILD.bazel new file mode 100644 index 0000000..d78b1fb --- /dev/null +++ b/modules_mapping/BUILD.bazel @@ -0,0 +1,15 @@ +load("@rules_python//python:defs.bzl", "py_binary") + +# gazelle:exclude *.py + +py_binary( + name = "generator", + srcs = ["generator.py"], + visibility = ["//visibility:public"], +) + +filegroup( + name = "distribution", + srcs = glob(["**"]), + visibility = ["//:__pkg__"], +) diff --git a/gazelle/modules_mapping/def.bzl b/modules_mapping/def.bzl similarity index 61% rename from gazelle/modules_mapping/def.bzl rename to modules_mapping/def.bzl index 0a9b1b7..4da6267 100644 --- a/gazelle/modules_mapping/def.bzl +++ b/modules_mapping/def.bzl @@ -1,3 +1,17 @@ +# Copyright 2023 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + """Definitions for the modules_mapping.json generation. The modules_mapping.json file is a mapping from Python modules to the wheel @@ -16,9 +30,9 @@ def _modules_mapping_impl(ctx): [whl for whl in ctx.files.wheels], transitive = [dep[DefaultInfo].files for dep in ctx.attr.wheels] + [dep[DefaultInfo].data_runfiles.files for dep in ctx.attr.wheels], ) - args.add(modules_mapping.path) - args.add_all([whl.path for whl in all_wheels.to_list()]) - + args.add("--output_file", modules_mapping.path) + args.add_all("--exclude_patterns", ctx.attr.exclude_patterns) + args.add_all("--wheels", [whl.path for whl in all_wheels.to_list()]) ctx.actions.run( inputs = all_wheels.to_list(), outputs = [modules_mapping], @@ -31,6 +45,11 @@ def _modules_mapping_impl(ctx): modules_mapping = rule( _modules_mapping_impl, attrs = { + "exclude_patterns": attr.string_list( + default = ["^_|(\\._)+"], + doc = "A set of regex patterns to match against each calculated module path. By default, exclude the modules starting with underscores.", + mandatory = False, + ), "modules_mapping_name": attr.string( default = "modules_mapping.json", doc = "The name for the output JSON file.", @@ -42,8 +61,8 @@ modules_mapping = rule( mandatory = True, ), "_generator": attr.label( - cfg = "host", - default = "//gazelle/modules_mapping:generator", + cfg = "exec", + default = "//modules_mapping:generator", executable = True, ), }, diff --git a/modules_mapping/generator.py b/modules_mapping/generator.py new file mode 100644 index 0000000..be57eac --- /dev/null +++ b/modules_mapping/generator.py @@ -0,0 +1,133 @@ +# Copyright 2023 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +import json +import pathlib +import re +import sys +import zipfile + + +# Generator is the modules_mapping.json file generator. +class Generator: + stderr = None + output_file = None + excluded_patterns = None + mapping = {} + + def __init__(self, stderr, output_file, excluded_patterns): + self.stderr = stderr + self.output_file = output_file + self.excluded_patterns = [re.compile(pattern) for pattern in excluded_patterns] + + # dig_wheel analyses the wheel .whl file determining the modules it provides + # by looking at the directory structure. + def dig_wheel(self, whl): + with zipfile.ZipFile(whl, "r") as zip_file: + for path in zip_file.namelist(): + if is_metadata(path): + if data_has_purelib_or_platlib(path): + self.module_for_path(path, whl) + else: + continue + else: + self.module_for_path(path, whl) + + def module_for_path(self, path, whl): + ext = pathlib.Path(path).suffix + if ext == ".py" or ext == ".so": + if "purelib" in path or "platlib" in path: + root = "/".join(path.split("/")[2:]) + else: + root = path + + wheel_name = get_wheel_name(whl) + + if root.endswith("/__init__.py"): + # Note the '/' here means that the __init__.py is not in the + # root of the wheel, therefore we can index the directory + # where this file is as an importable package. + module = root[: -len("/__init__.py")].replace("/", ".") + if not self.is_excluded(module): + self.mapping[module] = wheel_name + + # Always index the module file. + if ext == ".so": + # Also remove extra metadata that is embeded as part of + # the file name as an extra extension. + ext = "".join(pathlib.Path(root).suffixes) + module = root[: -len(ext)].replace("/", ".") + if not self.is_excluded(module): + self.mapping[module] = wheel_name + + def is_excluded(self, module): + for pattern in self.excluded_patterns: + if pattern.search(module): + return True + return False + + # run is the entrypoint for the generator. + def run(self, wheels): + for whl in wheels: + try: + self.dig_wheel(whl) + except AssertionError as error: + print(error, file=self.stderr) + return 1 + mapping_json = json.dumps(self.mapping) + with open(self.output_file, "w") as f: + f.write(mapping_json) + return 0 + + +def get_wheel_name(path): + pp = pathlib.PurePath(path) + if pp.suffix != ".whl": + raise RuntimeError( + "{} is not a valid wheel file name: the wheel doesn't follow ".format( + pp.name + ) + + "https://www.python.org/dev/peps/pep-0427/#file-name-convention" + ) + return pp.name[: pp.name.find("-")] + + +# is_metadata checks if the path is in a metadata directory. +# Ref: https://www.python.org/dev/peps/pep-0427/#file-contents. +def is_metadata(path): + top_level = path.split("/")[0].lower() + return top_level.endswith(".dist-info") or top_level.endswith(".data") + + +# The .data is allowed to contain a full purelib or platlib directory +# These get unpacked into site-packages, so require indexing too. +# This is the same if "Root-Is-Purelib: true" is set and the files are at the root. +# Ref: https://peps.python.org/pep-0427/#what-s-the-deal-with-purelib-vs-platlib +def data_has_purelib_or_platlib(path): + maybe_lib = path.split("/")[1].lower() + return is_metadata(path) and (maybe_lib == "purelib" or maybe_lib == "platlib") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + prog="generator", + description="Generates the modules mapping used by the Gazelle manifest.", + ) + parser.add_argument("--output_file", type=str) + parser.add_argument("--exclude_patterns", nargs="+", default=[]) + parser.add_argument("--wheels", nargs="+", default=[]) + args = parser.parse_args() + generator = Generator(sys.stderr, args.output_file, args.exclude_patterns) + exit(generator.run(args.wheels)) diff --git a/python/BUILD.bazel b/python/BUILD.bazel new file mode 100644 index 0000000..2b84dc1 --- /dev/null +++ b/python/BUILD.bazel @@ -0,0 +1,114 @@ +load("@bazel_gazelle//:def.bzl", "gazelle_binary") +load("@bazel_skylib//rules:copy_file.bzl", "copy_file") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") +load(":gazelle_test.bzl", "gazelle_test") + +go_library( + name = "python", + srcs = [ + "configure.go", + "file_parser.go", + "fix.go", + "generate.go", + "kinds.go", + "language.go", + "parser.go", + "resolve.go", + "std_modules.go", + "target.go", + ], + # NOTE @aignas 2023-12-03: currently gazelle does not support embedding + # generated files, but 3.11.txt is generated by a build rule. + # + # You will get a benign error like when running gazelle locally: + # > 8 gazelle: .../rules_python/gazelle/python/std_modules.go:24:3: pattern 3.11.txt: matched no files + # + # See following for more info: + # https://github.com/bazelbuild/bazel-gazelle/issues/1513 + embedsrcs = ["stdlib_list.txt"], # keep # TODO: use user-defined version? + importpath = "github.com/benchsci/rules_python_gazelle/gazelle/python", + visibility = ["//visibility:public"], + deps = [ + "//manifest", + "//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_v4//:doublestar", + "@com_github_emirpasic_gods//lists/singlylinkedlist", + "@com_github_emirpasic_gods//sets/treeset", + "@com_github_emirpasic_gods//utils", + "@com_github_smacker_go_tree_sitter//:go-tree-sitter", + "@com_github_smacker_go_tree_sitter//python", + "@org_golang_x_sync//errgroup", + ], +) + +copy_file( + name = "stdlib_list", + src = select( + { + "@rules_python//python/config_settings:is_python_3.10": "@python_stdlib_list_3_10//file", + "@rules_python//python/config_settings:is_python_3.11": "@python_stdlib_list_3_11//file", + "@rules_python//python/config_settings:is_python_3.12": "@python_stdlib_list_3_12//file", + "@rules_python//python/config_settings:is_python_3.8": "@python_stdlib_list_3_8//file", + "@rules_python//python/config_settings:is_python_3.9": "@python_stdlib_list_3_9//file", + # This is the same behaviour as previously + "//conditions:default": "@python_stdlib_list_3_11//file", + }, + ), + out = "stdlib_list.txt", + allow_symlink = True, +) + +# gazelle:exclude testdata/ + +gazelle_test( + name = "python_test", + srcs = ["python_test.go"], + data = [ + ":gazelle_binary", + ], + test_dirs = glob( + # Use this so that we don't need to manually maintain the list. + ["testdata/*"], + exclude = ["testdata/*.md"], + # The directories aren't inputs themselves; we just want their + # names. + exclude_directories = 0, + ), + deps = [ + "@bazel_gazelle//testtools:go_default_library", + "@com_github_ghodss_yaml//:yaml", + "@io_bazel_rules_go//go/runfiles:go_default_library", + "@io_bazel_rules_go//go/tools/bazel:go_default_library", + ], +) + +gazelle_binary( + name = "gazelle_binary", + languages = [":python"], + visibility = ["//visibility:public"], +) + +filegroup( + name = "distribution", + srcs = glob(["**"]), + visibility = ["//:__pkg__"], +) + +go_test( + name = "default_test", + srcs = [ + "file_parser_test.go", + "std_modules_test.go", + ], + embed = [":python"], + deps = [ + "@com_github_stretchr_testify//assert", + ], +) diff --git a/gazelle/configure.go b/python/configure.go similarity index 69% rename from gazelle/configure.go rename to python/configure.go index 104c67f..61b8a9b 100644 --- a/gazelle/configure.go +++ b/python/configure.go @@ -1,3 +1,17 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package python import ( @@ -11,9 +25,9 @@ import ( "github.com/bazelbuild/bazel-gazelle/config" "github.com/bazelbuild/bazel-gazelle/rule" - "github.com/benchsci/rules_python_gazelle/gazelle/manifest" "github.com/benchsci/rules_python_gazelle/gazelle/pythonconfig" + "github.com/bmatcuk/doublestar/v4" ) // Configurer satisfies the config.Configurer interface. It's the @@ -45,12 +59,14 @@ func (py *Configurer) KnownDirectives() []string { pythonconfig.IgnoreDependenciesDirective, pythonconfig.ValidateImportStatementsDirective, pythonconfig.GenerationMode, + pythonconfig.GenerationModePerFileIncludeInit, pythonconfig.LibraryNamingConvention, pythonconfig.BinaryNamingConvention, pythonconfig.TestNamingConvention, pythonconfig.PytestConfTest, - pythonconfig.PyCheck, - pythonconfig.PyModule, + pythonconfig.DefaultVisibilty, + pythonconfig.Visibility, + pythonconfig.TestFilePattern, } } @@ -92,7 +108,7 @@ func (py *Configurer) Configure(c *config.Config, rel string, f *rule.File) { case "exclude": // We record the exclude directive for coarse-grained packages // since we do manual tree traversal in this mode. - config.AddExcludedPattern(strings.TrimSpace(d.Value)) + config.AddExcludedPattern(filepath.Join(rel, strings.TrimSpace(d.Value))) case pythonconfig.PythonExtensionDirective: switch d.Value { case "enabled": @@ -104,30 +120,9 @@ func (py *Configurer) Configure(c *config.Config, rel string, f *rule.File) { pythonconfig.PythonExtensionDirective, d.Value) log.Fatal(err) } - case pythonconfig.PyModule: - switch d.Value { - case "enabled": - config.SetPyModule(true) - case "disabled": - config.SetPyModule(false) - default: - err := fmt.Errorf("invalid value for directive %q: %s: possible values are enabled/disabled", - pythonconfig.PyModule, d.Value) - log.Fatal(err) - } - case pythonconfig.PyCheck: - switch d.Value { - case "enabled": - config.SetPyCheck(d.Value) - case "disabled": - config.SetPyCheck(d.Value) - default: - err := fmt.Errorf("invalid value for directive %q: %s: possible values are enabled/disabled", - pythonconfig.PyCheck, d.Value) - log.Fatal(err) - } case pythonconfig.PythonRootDirective: config.SetPythonProjectRoot(rel) + config.SetDefaultVisibility([]string{fmt.Sprintf(pythonconfig.DefaultVisibilityFmtString, rel)}) case pythonconfig.PythonManifestFileNameDirective: gazelleManifestFilename = strings.TrimSpace(d.Value) case pythonconfig.IgnoreFilesDirective: @@ -148,13 +143,24 @@ func (py *Configurer) Configure(c *config.Config, rel string, f *rule.File) { switch pythonconfig.GenerationModeType(strings.TrimSpace(d.Value)) { case pythonconfig.GenerationModePackage: config.SetCoarseGrainedGeneration(false) + config.SetPerFileGeneration(false) + case pythonconfig.GenerationModeFile: + config.SetCoarseGrainedGeneration(false) + config.SetPerFileGeneration(true) case pythonconfig.GenerationModeProject: config.SetCoarseGrainedGeneration(true) + config.SetPerFileGeneration(false) default: err := fmt.Errorf("invalid value for directive %q: %s", pythonconfig.GenerationMode, d.Value) log.Fatal(err) } + case pythonconfig.GenerationModePerFileIncludeInit: + v, err := strconv.ParseBool(strings.TrimSpace(d.Value)) + if err != nil { + log.Fatal(err) + } + config.SetPerFileGenerationIncludeInit(v) case pythonconfig.LibraryNamingConvention: config.SetLibraryNamingConvention(strings.TrimSpace(d.Value)) case pythonconfig.BinaryNamingConvention: @@ -163,6 +169,35 @@ func (py *Configurer) Configure(c *config.Config, rel string, f *rule.File) { config.SetTestNamingConvention(strings.TrimSpace(d.Value)) case pythonconfig.PytestConfTest: config.SetPytestConfTest(strings.TrimSpace(d.Value)) + case pythonconfig.DefaultVisibilty: + switch directiveArg := strings.TrimSpace(d.Value); directiveArg { + case "NONE": + config.SetDefaultVisibility([]string{}) + case "DEFAULT": + pythonProjectRoot := config.PythonProjectRoot() + defaultVisibility := fmt.Sprintf(pythonconfig.DefaultVisibilityFmtString, pythonProjectRoot) + config.SetDefaultVisibility([]string{defaultVisibility}) + default: + // Handle injecting the python root. Assume that the user used the + // exact string "$python_root$". + labels := strings.ReplaceAll(directiveArg, "$python_root$", config.PythonProjectRoot()) + config.SetDefaultVisibility(strings.Split(labels, ",")) + } + case pythonconfig.Visibility: + labels := strings.ReplaceAll(strings.TrimSpace(d.Value), "$python_root$", config.PythonProjectRoot()) + config.AppendVisibility(labels) + case pythonconfig.TestFilePattern: + value := strings.TrimSpace(d.Value) + if value == "" { + log.Fatal("directive 'python_test_file_pattern' requires a value") + } + globStrings := strings.Split(value, ",") + for _, g := range globStrings { + if !doublestar.ValidatePattern(g) { + log.Fatalf("invalid glob pattern '%s'", g) + } + } + config.SetTestFilePattern(globStrings) } } diff --git a/python/extensions.bzl b/python/extensions.bzl new file mode 100644 index 0000000..8d339c0 --- /dev/null +++ b/python/extensions.bzl @@ -0,0 +1,5 @@ +"python_stdlib_list module extension for use with bzlmod" + +load("//python/private:extensions.bzl", _python_stdlib_list = "python_stdlib_list") + +python_stdlib_list = _python_stdlib_list diff --git a/python/file_parser.go b/python/file_parser.go new file mode 100644 index 0000000..a2b22c2 --- /dev/null +++ b/python/file_parser.go @@ -0,0 +1,201 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "context" + "fmt" + "os" + "path/filepath" + "strings" + + sitter "github.com/smacker/go-tree-sitter" + "github.com/smacker/go-tree-sitter/python" +) + +const ( + sitterNodeTypeString = "string" + sitterNodeTypeComment = "comment" + sitterNodeTypeIdentifier = "identifier" + sitterNodeTypeDottedName = "dotted_name" + sitterNodeTypeIfStatement = "if_statement" + sitterNodeTypeAliasedImport = "aliased_import" + sitterNodeTypeWildcardImport = "wildcard_import" + sitterNodeTypeImportStatement = "import_statement" + sitterNodeTypeComparisonOperator = "comparison_operator" + sitterNodeTypeImportFromStatement = "import_from_statement" +) + +type ParserOutput struct { + FileName string + Modules []module + Comments []comment + HasMain bool +} + +type FileParser struct { + code []byte + relFilepath string + output ParserOutput +} + +func NewFileParser() *FileParser { + return &FileParser{} +} + +func ParseCode(code []byte) (*sitter.Node, error) { + parser := sitter.NewParser() + parser.SetLanguage(python.GetLanguage()) + + tree, err := parser.ParseCtx(context.Background(), nil, code) + if err != nil { + return nil, err + } + + return tree.RootNode(), nil +} + +func (p *FileParser) parseMain(ctx context.Context, node *sitter.Node) bool { + for i := 0; i < int(node.ChildCount()); i++ { + if err := ctx.Err(); err != nil { + return false + } + child := node.Child(i) + if child.Type() == sitterNodeTypeIfStatement && + child.Child(1).Type() == sitterNodeTypeComparisonOperator && child.Child(1).Child(1).Type() == "==" { + statement := child.Child(1) + a, b := statement.Child(0), statement.Child(2) + // convert "'__main__' == __name__" to "__name__ == '__main__'" + if b.Type() == sitterNodeTypeIdentifier { + a, b = b, a + } + if a.Type() == sitterNodeTypeIdentifier && a.Content(p.code) == "__name__" && + // at github.com/smacker/go-tree-sitter@latest (after v0.0.0-20240422154435-0628b34cbf9c we used) + // "__main__" is the second child of b. But now, it isn't. + // we cannot use the latest go-tree-sitter because of the top level reference in scanner.c. + // https://github.com/smacker/go-tree-sitter/blob/04d6b33fe138a98075210f5b770482ded024dc0f/python/scanner.c#L1 + b.Type() == sitterNodeTypeString && string(p.code[b.StartByte()+1:b.EndByte()-1]) == "__main__" { + return true + } + } + } + return false +} + +func parseImportStatement(node *sitter.Node, code []byte) (module, bool) { + switch node.Type() { + case sitterNodeTypeDottedName: + return module{ + Name: node.Content(code), + LineNumber: node.StartPoint().Row + 1, + }, true + case sitterNodeTypeAliasedImport: + return parseImportStatement(node.Child(0), code) + case sitterNodeTypeWildcardImport: + return module{ + Name: "*", + LineNumber: node.StartPoint().Row + 1, + }, true + } + return module{}, false +} + +func (p *FileParser) parseImportStatements(node *sitter.Node) bool { + if node.Type() == sitterNodeTypeImportStatement { + for j := 1; j < int(node.ChildCount()); j++ { + m, ok := parseImportStatement(node.Child(j), p.code) + if !ok { + continue + } + m.Filepath = p.relFilepath + if strings.HasPrefix(m.Name, ".") { + continue + } + p.output.Modules = append(p.output.Modules, m) + } + } else if node.Type() == sitterNodeTypeImportFromStatement { + from := node.Child(1).Content(p.code) + if strings.HasPrefix(from, ".") { + return true + } + for j := 3; j < int(node.ChildCount()); j++ { + m, ok := parseImportStatement(node.Child(j), p.code) + if !ok { + continue + } + m.Filepath = p.relFilepath + m.From = from + m.Name = fmt.Sprintf("%s.%s", from, m.Name) + p.output.Modules = append(p.output.Modules, m) + } + } else { + return false + } + return true +} + +func (p *FileParser) parseComments(node *sitter.Node) bool { + if node.Type() == sitterNodeTypeComment { + p.output.Comments = append(p.output.Comments, comment(node.Content(p.code))) + return true + } + return false +} + +func (p *FileParser) SetCodeAndFile(code []byte, relPackagePath, filename string) { + p.code = code + p.relFilepath = filepath.Join(relPackagePath, filename) + p.output.FileName = filename +} + +func (p *FileParser) parse(ctx context.Context, node *sitter.Node) { + if node == nil { + return + } + for i := 0; i < int(node.ChildCount()); i++ { + if err := ctx.Err(); err != nil { + return + } + child := node.Child(i) + if p.parseImportStatements(child) { + continue + } + if p.parseComments(child) { + continue + } + p.parse(ctx, child) + } +} + +func (p *FileParser) Parse(ctx context.Context) (*ParserOutput, error) { + rootNode, err := ParseCode(p.code) + if err != nil { + return nil, err + } + + p.output.HasMain = p.parseMain(ctx, rootNode) + + p.parse(ctx, rootNode) + return &p.output, nil +} + +func (p *FileParser) ParseFile(ctx context.Context, repoRoot, relPackagePath, filename string) (*ParserOutput, error) { + code, err := os.ReadFile(filepath.Join(repoRoot, relPackagePath, filename)) + if err != nil { + return nil, err + } + p.SetCodeAndFile(code, relPackagePath, filename) + return p.Parse(ctx) +} diff --git a/python/file_parser_test.go b/python/file_parser_test.go new file mode 100644 index 0000000..3682cff --- /dev/null +++ b/python/file_parser_test.go @@ -0,0 +1,256 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestParseImportStatements(t *testing.T) { + t.Parallel() + units := []struct { + name string + code string + filepath string + result []module + }{ + { + name: "not has import", + code: "a = 1\nb = 2", + filepath: "", + result: nil, + }, + { + name: "has import", + code: "import unittest\nimport os.path\nfrom foo.bar import abc.xyz", + filepath: "abc.py", + result: []module{ + { + Name: "unittest", + LineNumber: 1, + Filepath: "abc.py", + From: "", + }, + { + Name: "os.path", + LineNumber: 2, + Filepath: "abc.py", + From: "", + }, + { + Name: "foo.bar.abc.xyz", + LineNumber: 3, + Filepath: "abc.py", + From: "foo.bar", + }, + }, + }, + { + name: "has import in def", + code: `def foo(): + import unittest +`, + filepath: "abc.py", + result: []module{ + { + Name: "unittest", + LineNumber: 2, + Filepath: "abc.py", + From: "", + }, + }, + }, + { + name: "invalid syntax", + code: "import os\nimport", + filepath: "abc.py", + result: []module{ + { + Name: "os", + LineNumber: 1, + Filepath: "abc.py", + From: "", + }, + }, + }, + { + name: "import as", + code: "import os as b\nfrom foo import bar as c# 123", + filepath: "abc.py", + result: []module{ + { + Name: "os", + LineNumber: 1, + Filepath: "abc.py", + From: "", + }, + { + Name: "foo.bar", + LineNumber: 2, + Filepath: "abc.py", + From: "foo", + }, + }, + }, + // align to https://docs.python.org/3/reference/simple_stmts.html#index-34 + { + name: "complex import", + code: "from unittest import *\nfrom foo import (bar as c, baz, qux as d)\nfrom . import abc", + result: []module{ + { + Name: "unittest.*", + LineNumber: 1, + From: "unittest", + }, + { + Name: "foo.bar", + LineNumber: 2, + From: "foo", + }, + { + Name: "foo.baz", + LineNumber: 2, + From: "foo", + }, + { + Name: "foo.qux", + LineNumber: 2, + From: "foo", + }, + }, + }, + } + for _, u := range units { + t.Run(u.name, func(t *testing.T) { + p := NewFileParser() + code := []byte(u.code) + p.SetCodeAndFile(code, "", u.filepath) + output, err := p.Parse(context.Background()) + assert.NoError(t, err) + assert.Equal(t, u.result, output.Modules) + }) + } +} + +func TestParseComments(t *testing.T) { + t.Parallel() + units := []struct { + name string + code string + result []comment + }{ + { + name: "not has comment", + code: "a = 1\nb = 2", + result: nil, + }, + { + name: "has comment", + code: "# a = 1\n# b = 2", + result: []comment{"# a = 1", "# b = 2"}, + }, + { + name: "has comment in if", + code: "if True:\n # a = 1\n # b = 2", + result: []comment{"# a = 1", "# b = 2"}, + }, + { + name: "has comment inline", + code: "import os# 123\nfrom pathlib import Path as b#456", + result: []comment{"# 123", "#456"}, + }, + } + for _, u := range units { + t.Run(u.name, func(t *testing.T) { + p := NewFileParser() + code := []byte(u.code) + p.SetCodeAndFile(code, "", "") + output, err := p.Parse(context.Background()) + assert.NoError(t, err) + assert.Equal(t, u.result, output.Comments) + }) + } +} + +func TestParseMain(t *testing.T) { + t.Parallel() + units := []struct { + name string + code string + result bool + }{ + { + name: "not has main", + code: "a = 1\nb = 2", + result: false, + }, + { + name: "has main in function", + code: `def foo(): + if __name__ == "__main__": + a = 3 +`, + result: false, + }, + { + name: "has main", + code: ` +import unittest + +from lib import main + + +class ExampleTest(unittest.TestCase): + def test_main(self): + self.assertEqual( + "", + main([["A", 1], ["B", 2]]), + ) + + +if __name__ == "__main__": + unittest.main() +`, + result: true, + }, + } + for _, u := range units { + t.Run(u.name, func(t *testing.T) { + p := NewFileParser() + code := []byte(u.code) + p.SetCodeAndFile(code, "", "") + output, err := p.Parse(context.Background()) + assert.NoError(t, err) + assert.Equal(t, u.result, output.HasMain) + }) + } +} + +func TestParseFull(t *testing.T) { + p := NewFileParser() + code := []byte(`from bar import abc`) + p.SetCodeAndFile(code, "foo", "a.py") + output, err := p.Parse(context.Background()) + assert.NoError(t, err) + assert.Equal(t, ParserOutput{ + Modules: []module{{Name: "bar.abc", LineNumber: 1, Filepath: "foo/a.py", From: "bar"}}, + Comments: nil, + HasMain: false, + FileName: "a.py", + }, *output) +} diff --git a/python/fix.go b/python/fix.go new file mode 100644 index 0000000..e0b8bb0 --- /dev/null +++ b/python/fix.go @@ -0,0 +1,32 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "github.com/bazelbuild/bazel-gazelle/config" + "github.com/bazelbuild/bazel-gazelle/rule" +) + +// Fix repairs deprecated usage of language-specific rules in f. This is +// called before the file is indexed. Unless c.ShouldFix is true, fixes +// that delete or rename rules should not be performed. +func (py *Python) Fix(c *config.Config, f *rule.File) { + // TODO(f0rmiga): implement. + for _, t := range f.Rules { + if t.Kind() == "py_library" && t.Attr("main") != nil { + t.DelAttr("main") + } + } +} diff --git a/python/gazelle_test.bzl b/python/gazelle_test.bzl new file mode 100644 index 0000000..7c0c242 --- /dev/null +++ b/python/gazelle_test.bzl @@ -0,0 +1,49 @@ +# Copyright 2023 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"" + +load("@io_bazel_rules_go//go:def.bzl", "go_test") + +def gazelle_test(*, name, test_dirs, **kwargs): + """A simple macro to better cache gazelle integration tests + + Args: + name (str): The name of the test suite target to be created and + the prefix to all of the individual test targets. + test_dirs (list[str]): The list of dirs in the 'testdata' + directory that we should create separate 'go_test' cases for. + Each of them will be prefixed with '{name}'. + **kwargs: extra arguments passed to 'go_test'. + """ + tests = [] + + data = kwargs.pop("data", []) + + for dir in test_dirs: + _, _, basename = dir.rpartition("/") + + test = "{}_{}".format(name, basename) + tests.append(test) + + go_test( + name = test, + data = native.glob(["{}/**".format(dir)]) + data, + **kwargs + ) + + native.test_suite( + name = name, + tests = tests, + ) diff --git a/python/generate.go b/python/generate.go new file mode 100644 index 0000000..9ab8bdd --- /dev/null +++ b/python/generate.go @@ -0,0 +1,461 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "bufio" + "fmt" + "io/fs" + "log" + "os" + "path/filepath" + "regexp" + "sort" + "strings" + + "github.com/bazelbuild/bazel-gazelle/config" + "github.com/bazelbuild/bazel-gazelle/label" + "github.com/bazelbuild/bazel-gazelle/language" + "github.com/bazelbuild/bazel-gazelle/rule" + "github.com/bmatcuk/doublestar/v4" + "github.com/emirpasic/gods/lists/singlylinkedlist" + "github.com/emirpasic/gods/sets/treeset" + godsutils "github.com/emirpasic/gods/utils" + + "github.com/benchsci/rules_python_gazelle/gazelle/pythonconfig" +) + +const ( + pyLibraryEntrypointFilename = "__init__.py" + pyBinaryEntrypointFilename = "__main__.py" + pyTestEntrypointFilename = "__test__.py" + pyTestEntrypointTargetname = "__test__" + conftestFilename = "conftest.py" + conftestTargetname = "conftest" +) + +var ( + buildFilenames = []string{"BUILD", "BUILD.bazel"} +) + +func GetActualKindName(kind string, args language.GenerateArgs) string { + if kindOverride, ok := args.Config.KindMap[kind]; ok { + return kindOverride.KindName + } + return kind +} + +func matchesAnyGlob(s string, globs []string) bool { + // This function assumes that the globs have already been validated. If a glob is + // invalid, it's considered a non-match and we move on to the next pattern. + for _, g := range globs { + if ok, _ := doublestar.Match(g, s); ok { + return true + } + } + return false +} + +// GenerateRules extracts build metadata from source files in a directory. +// GenerateRules is called in each directory where an update is requested +// in depth-first post-order. +func (py *Python) GenerateRules(args language.GenerateArgs) language.GenerateResult { + cfgs := args.Config.Exts[languageName].(pythonconfig.Configs) + cfg := cfgs[args.Rel] + + if !cfg.ExtensionEnabled() { + return language.GenerateResult{} + } + + if !isBazelPackage(args.Dir) { + if cfg.CoarseGrainedGeneration() { + // Determine if the current directory is the root of the coarse-grained + // generation. If not, return without generating anything. + parent := cfg.Parent() + if parent != nil && parent.CoarseGrainedGeneration() { + return language.GenerateResult{} + } + } else if !hasEntrypointFile(args.Dir) { + return language.GenerateResult{} + } + } + + actualPyBinaryKind := GetActualKindName(pyBinaryKind, args) + actualPyLibraryKind := GetActualKindName(pyLibraryKind, args) + actualPyTestKind := GetActualKindName(pyTestKind, args) + actualDjangoTestKind := GetActualKindName(djangoTestKind, args) + + pythonProjectRoot := cfg.PythonProjectRoot() + + packageName := filepath.Base(args.Dir) + + pyLibraryFilenames := treeset.NewWith(godsutils.StringComparator) + pyTestFilenames := treeset.NewWith(godsutils.StringComparator) + pyFileNames := treeset.NewWith(godsutils.StringComparator) + djangoTestFilesNames := treeset.NewWith(godsutils.StringComparator) + + testFileGlobs := cfg.TestFilePattern() + + for _, f := range args.RegularFiles { + if cfg.IgnoresFile(filepath.Base(f)) { + continue + } + ext := filepath.Ext(f) + if ext == ".py" { + pyFileNames.Add(f) + if isDjangoTestFile(filepath.Join(args.Dir, f)) && matchesAnyGlob(f, testFileGlobs) { + djangoTestFilesNames.Add(f) + + } else if matchesAnyGlob(f, testFileGlobs) { + pyTestFilenames.Add(f) + } else { + pyLibraryFilenames.Add(f) + } + } + } + + // Add files from subdirectories if they meet the criteria. + for _, d := range args.Subdirs { + // boundaryPackages represents child Bazel packages that are used as a + // boundary to stop processing under that tree. + boundaryPackages := make(map[string]struct{}) + err := filepath.WalkDir( + filepath.Join(args.Dir, d), + func(path string, entry fs.DirEntry, err error) error { + if err != nil { + return err + } + // Ignore the path if it crosses any boundary package. Walking + // the tree is still important because subsequent paths can + // represent files that have not crossed any boundaries. + for bp := range boundaryPackages { + if strings.HasPrefix(path, bp) { + return nil + } + } + if entry.IsDir() { + // If we are visiting a directory, we determine if we should + // halt digging the tree based on a few criterias: + // 1. We are using per-file generation. + // 2. The directory has a BUILD or BUILD.bazel files. Then + // it doesn't matter at all what it has since it's a + // separate Bazel package. + // 3. (only for package generation) The directory has an + // __init__.py, __main__.py or __test__.py, meaning a + // BUILD file will be generated. + if cfg.PerFileGeneration() { + return fs.SkipDir + } + + if isBazelPackage(path) { + boundaryPackages[path] = struct{}{} + return nil + } + + if !cfg.CoarseGrainedGeneration() && hasEntrypointFile(path) { + return fs.SkipDir + } + + return nil + } + if filepath.Ext(path) == ".py" { + if cfg.CoarseGrainedGeneration() || !isEntrypointFile(path) { + srcPath, _ := filepath.Rel(args.Dir, path) + repoPath := filepath.Join(args.Rel, srcPath) + excludedPatterns := cfg.ExcludedPatterns() + if excludedPatterns != nil { + it := excludedPatterns.Iterator() + for it.Next() { + excludedPattern := it.Value().(string) + isExcluded, err := doublestar.Match(excludedPattern, repoPath) + if err != nil { + return err + } + if isExcluded { + return nil + } + } + } + baseName := filepath.Base(path) + if matchesAnyGlob(baseName, testFileGlobs) { + pyTestFilenames.Add(srcPath) + } else { + pyLibraryFilenames.Add(srcPath) + } + } + } + return nil + }, + ) + if err != nil { + log.Printf("ERROR: %v\n", err) + return language.GenerateResult{} + } + } + + parser := newPython3Parser(args.Config.RepoRoot, args.Rel, cfg.IgnoresDependency) + + var result language.GenerateResult + result.Gen = make([]*rule.Rule, 0) + + collisionErrors := singlylinkedlist.New() + + appendPyLibrary := func(srcs *treeset.Set, pyLibraryTargetName string) { + allDeps, mainModules, annotations, err := parser.parse(srcs) + if err != nil { + log.Fatalf("ERROR: %v\n", err) + } + + // Creating one py_binary target per main module when __main__.py doesn't exist. + mainFileNames := make([]string, 0, len(mainModules)) + for name := range mainModules { + mainFileNames = append(mainFileNames, name) + + // Remove the file from srcs if we're doing per-file library generation so + // that we don't also generate a py_library target for it. + if cfg.PerFileGeneration() { + srcs.Remove(name) + } + } + sort.Strings(mainFileNames) + for _, filename := range mainFileNames { + pyBinaryTargetName := strings.TrimSuffix(filepath.Base(filename), ".py") + if err := ensureNoCollision(args.File, pyBinaryTargetName, actualPyBinaryKind); err != nil { + fqTarget := label.New("", args.Rel, pyBinaryTargetName) + log.Printf("failed to generate target %q of kind %q: %v", + fqTarget.String(), actualPyBinaryKind, err) + continue + } + pyBinary := newTargetBuilder(pyBinaryKind, pyBinaryTargetName, pythonProjectRoot, args.Rel, pyFileNames). + addSrc(filename). + setMain(filename). + addModuleDependencies(mainModules[filename]). + addResolvedDependencies(annotations.includeDeps). + generateImportsAttribute().build() + result.Gen = append(result.Gen, pyBinary) + result.Imports = append(result.Imports, pyBinary.PrivateAttr(config.GazelleImportsKey)) + } + + // If we're doing per-file generation, srcs could be empty at this point, meaning we shouldn't make a py_library. + if srcs.Empty() { + return + } + + // Check if a target with the same name we are generating already + // exists, and if it is of a different kind from the one we are + // generating. If so, we have to throw an error since Gazelle won't + // generate it correctly. + if err := ensureNoCollision(args.File, pyLibraryTargetName, actualPyLibraryKind); err != nil { + fqTarget := label.New("", args.Rel, pyLibraryTargetName) + err := fmt.Errorf("failed to generate target %q of kind %q: %w. "+ + "Use the '# gazelle:%s' directive to change the naming convention.", + fqTarget.String(), actualPyLibraryKind, err, pythonconfig.LibraryNamingConvention) + collisionErrors.Add(err) + } + + pyLibrary := newTargetBuilder(pyLibraryKind, pyLibraryTargetName, pythonProjectRoot, args.Rel, pyFileNames). + addSrcs(srcs). + addModuleDependencies(allDeps). + addResolvedDependencies(annotations.includeDeps). + generateImportsAttribute(). + build() + + // If py_library is reanmed from py_binary, remove the main attribute + pyLibrary.DelAttr("main") + result.Gen = append(result.Gen, pyLibrary) + result.Imports = append(result.Imports, pyLibrary.PrivateAttr(config.GazelleImportsKey)) + } + + var pyTestTargets []*targetBuilder + newPyTestTargetBuilder := func(srcs *treeset.Set, pyTestTargetName string) *targetBuilder { + deps, _, annotations, err := parser.parse(srcs) + if err != nil { + log.Fatalf("ERROR: %v\n", err) + } + // Check if a target with the same name we are generating already + // exists, and if it is of a different kind from the one we are + // generating. If so, we have to throw an error since Gazelle won't + // generate it correctly. + if err := ensureNoCollision(args.File, pyTestTargetName, actualPyTestKind); err != nil { + fqTarget := label.New("", args.Rel, pyTestTargetName) + err := fmt.Errorf("failed to generate target %q of kind %q: %w. "+ + "Use the '# gazelle:%s' directive to change the naming convention.", + fqTarget.String(), actualPyTestKind, err, pythonconfig.TestNamingConvention) + collisionErrors.Add(err) + } + return newTargetBuilder(pyTestKind, pyTestTargetName, pythonProjectRoot, args.Rel, pyFileNames). + addSrcs(srcs). + addModuleDependencies(deps). + addResolvedDependencies(annotations.includeDeps). + generateImportsAttribute() + } + newDjangoTestBuilder := func(srcs *treeset.Set, djangoTestTargetName string) *targetBuilder { + deps, _, annotations, err := parser.parse(srcs) + if err != nil { + log.Fatalf("ERROR: %v\n", err) + } + // Check if a target with the same name we are generating already + // exists, and if it is of a different kind from the one we are + // generating. If so, we have to throw an error since Gazelle won't + // generate it correctly. + if err := ensureNoCollision(args.File, djangoTestTargetName, actualDjangoTestKind); err != nil { + fqTarget := label.New("", args.Rel, actualDjangoTestKind) + err := fmt.Errorf("failed to generate target %q of kind %q: %w. "+ + "Use the '# gazelle:%s' directive to change the naming convention.", + fqTarget.String(), actualDjangoTestKind, err, pythonconfig.TestNamingConvention) + collisionErrors.Add(err) + } + return newTargetBuilder(djangoTestKind, djangoTestTargetName, pythonProjectRoot, args.Rel, pyFileNames). + addSrcs(srcs). + addModuleDependencies(deps). + addResolvedDependencies(annotations.includeDeps). + generateImportsAttribute() + } + if cfg.PerFileGeneration() { + hasInit, nonEmptyInit := hasLibraryEntrypointFile(args.Dir) + pyLibraryFilenames.Each(func(index int, filename interface{}) { + pyLibraryTargetName := strings.TrimSuffix(filepath.Base(filename.(string)), ".py") + if filename == pyLibraryEntrypointFilename && !nonEmptyInit { + return // ignore empty __init__.py. + } + srcs := treeset.NewWith(godsutils.StringComparator, filename) + if cfg.PerFileGenerationIncludeInit() && hasInit && nonEmptyInit { + srcs.Add(pyLibraryEntrypointFilename) + } + appendPyLibrary(srcs, pyLibraryTargetName) + }) + } else { + appendPyLibrary(pyLibraryFilenames, cfg.RenderLibraryName(packageName)) + } + // Create one py_test target per file + pyTestFilenames.Each(func(index int, testFile interface{}) { + srcs := treeset.NewWith(godsutils.StringComparator, testFile) + pyTestTargetName := strings.TrimSuffix(filepath.Base(testFile.(string)), ".py") + pyTestTarget := newPyTestTargetBuilder(srcs, pyTestTargetName) + + pyTestTarget.setMain(testFile.(string)) + pyTestTargets = append(pyTestTargets, pyTestTarget) + }) + + for _, pyTestTarget := range pyTestTargets { + pyTest := pyTestTarget.build() + + result.Gen = append(result.Gen, pyTest) + result.Imports = append(result.Imports, pyTest.PrivateAttr(config.GazelleImportsKey)) + } + if !djangoTestFilesNames.Empty() { + //pyTestTargetName := cfg.RenderTestName(packageName) + djangoTestTarget := newDjangoTestBuilder(djangoTestFilesNames, "django_test").setConftest(cfg.PytestConfTest()).build() + + result.Gen = append(result.Gen, djangoTestTarget) + result.Imports = append(result.Imports, djangoTestTarget.PrivateAttr(config.GazelleImportsKey)) + } + + if !collisionErrors.Empty() { + it := collisionErrors.Iterator() + for it.Next() { + log.Printf("ERROR: %v\n", it.Value()) + } + os.Exit(1) + } + + return result +} + +// isBazelPackage determines if the directory is a Bazel package by probing for +// the existence of a known BUILD file name. +func isBazelPackage(dir string) bool { + for _, buildFilename := range buildFilenames { + path := filepath.Join(dir, buildFilename) + if _, err := os.Stat(path); err == nil { + return true + } + } + return false +} + +// hasEntrypointFile determines if the directory has any of the established +// entrypoint filenames. +func hasEntrypointFile(dir string) bool { + for _, entrypointFilename := range []string{ + pyLibraryEntrypointFilename, + pyBinaryEntrypointFilename, + pyTestEntrypointFilename, + } { + path := filepath.Join(dir, entrypointFilename) + if _, err := os.Stat(path); err == nil { + return true + } + } + return false +} + +// hasLibraryEntrypointFile returns if the given directory has the library +// entrypoint file, and if it is non-empty. +func hasLibraryEntrypointFile(dir string) (bool, bool) { + stat, err := os.Stat(filepath.Join(dir, pyLibraryEntrypointFilename)) + if os.IsNotExist(err) { + return false, false + } + if err != nil { + log.Fatalf("ERROR: %v\n", err) + } + return true, stat.Size() != 0 +} + +// isEntrypointFile returns whether the given path is an entrypoint file. The +// given path can be absolute or relative. +func isEntrypointFile(path string) bool { + basePath := filepath.Base(path) + switch basePath { + case pyLibraryEntrypointFilename, + pyBinaryEntrypointFilename, + pyTestEntrypointFilename: + return true + default: + return false + } +} + +func ensureNoCollision(file *rule.File, targetName, kind string) error { + if file == nil { + return nil + } + for _, t := range file.Rules { + if t.Name() == targetName && t.Kind() != kind { + return fmt.Errorf("a target of kind %q with the same name already exists", t.Kind()) + } + } + return nil +} + +// isDjangoTestFile returns whether the given path contains the following +// regex regexp.MustCompile(`from django\.test import.*TestCase|pytest\.mark\.django_db|gazelle: django_test`) +func isDjangoTestFile(path string) bool { + re := regexp.MustCompile(`from django\.test import.*TestCase|pytest\.mark\.django_db|gazelle: django_test`) + file, err := os.Open(path) + if err != nil { + log.Fatalf("ERROR: %v\n", err) + panic(err) + } + defer file.Close() + scanner := bufio.NewScanner(file) + for scanner.Scan() { + if re.MatchString(scanner.Text()) { + return true + } + } + return false +} diff --git a/gazelle/kinds.go b/python/kinds.go similarity index 64% rename from gazelle/kinds.go rename to python/kinds.go index 32607f3..ff20943 100644 --- a/gazelle/kinds.go +++ b/python/kinds.go @@ -1,3 +1,17 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package python import ( @@ -9,7 +23,6 @@ const ( pyLibraryKind = "py_library" pyTestKind = "pytest" djangoTestKind = "django_test" - pyCheckKind = "py_check" ) // Kinds returns a map that maps rule names (kinds) and information on how to @@ -22,28 +35,28 @@ var pyKinds = map[string]rule.KindInfo{ pyBinaryKind: { MatchAny: false, NonEmptyAttrs: map[string]bool{ - "deps": true, - "main": true, - "srcs": true, - "imports": true, - "visibility": true, + "deps": true, + "main": true, + "srcs": true, + "imports": true, }, + SubstituteAttrs: map[string]bool{}, MergeableAttrs: map[string]bool{ "srcs": true, - "main": true, }, ResolveAttrs: map[string]bool{ "deps": true, }, }, pyLibraryKind: { - MatchAny: false, + MatchAny: false, + MatchAttrs: []string{"srcs"}, NonEmptyAttrs: map[string]bool{ - "deps": true, - "srcs": true, - "imports": true, - "visibility": true, + "deps": true, + "srcs": true, + "imports": true, }, + SubstituteAttrs: map[string]bool{}, MergeableAttrs: map[string]bool{ "srcs": true, }, @@ -51,28 +64,17 @@ var pyKinds = map[string]rule.KindInfo{ "deps": true, }, }, - pyCheckKind: { - MatchAny: false, - NonEmptyAttrs: map[string]bool{ - "srcs": true, - "visibility": true, - }, - MergeableAttrs: map[string]bool{ - "srcs": true, - }, - }, pyTestKind: { MatchAny: false, NonEmptyAttrs: map[string]bool{ - "deps": true, - "main": true, - "srcs": true, - "imports": true, - "visibility": true, + "deps": true, + "main": true, + "srcs": true, + "imports": true, }, + SubstituteAttrs: map[string]bool{}, MergeableAttrs: map[string]bool{ "srcs": true, - "main": true, }, ResolveAttrs: map[string]bool{ "deps": true, @@ -113,11 +115,11 @@ var pyLoads = []rule.LoadInfo{ pyLibraryKind, pyTestKind, }, - }, { + }, + { Name: "@com_github_benchsci_rules_python_gazelle:defs.bzl", Symbols: []string{ djangoTestKind, - pyCheckKind, }, }, } diff --git a/python/language.go b/python/language.go new file mode 100644 index 0000000..56eb97b --- /dev/null +++ b/python/language.go @@ -0,0 +1,32 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "github.com/bazelbuild/bazel-gazelle/language" +) + +// Python satisfies the language.Language interface. It is the Gazelle extension +// for Python rules. +type Python struct { + Configurer + Resolver +} + +// NewLanguage initializes a new Python that satisfies the language.Language +// interface. This is the entrypoint for the extension initialization. +func NewLanguage() language.Language { + return &Python{} +} diff --git a/python/parser.go b/python/parser.go new file mode 100644 index 0000000..1b2a90d --- /dev/null +++ b/python/parser.go @@ -0,0 +1,260 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "context" + _ "embed" + "fmt" + "strings" + + "github.com/emirpasic/gods/sets/treeset" + godsutils "github.com/emirpasic/gods/utils" + "golang.org/x/sync/errgroup" +) + +// python3Parser implements a parser for Python files that extracts the modules +// as seen in the import statements. +type python3Parser struct { + // The value of language.GenerateArgs.Config.RepoRoot. + repoRoot string + // The value of language.GenerateArgs.Rel. + relPackagePath string + // The function that determines if a dependency is ignored from a Gazelle + // directive. It's the signature of pythonconfig.Config.IgnoresDependency. + ignoresDependency func(dep string) bool +} + +// newPython3Parser constructs a new python3Parser. +func newPython3Parser( + repoRoot string, + relPackagePath string, + ignoresDependency func(dep string) bool, +) *python3Parser { + return &python3Parser{ + repoRoot: repoRoot, + relPackagePath: relPackagePath, + ignoresDependency: ignoresDependency, + } +} + +// parseSingle parses a single Python file and returns the extracted modules +// from the import statements as well as the parsed comments. +func (p *python3Parser) parseSingle(pyFilename string) (*treeset.Set, map[string]*treeset.Set, *annotations, error) { + pyFilenames := treeset.NewWith(godsutils.StringComparator) + pyFilenames.Add(pyFilename) + return p.parse(pyFilenames) +} + +// parse parses multiple Python files and returns the extracted modules from +// the import statements as well as the parsed comments. +func (p *python3Parser) parse(pyFilenames *treeset.Set) (*treeset.Set, map[string]*treeset.Set, *annotations, error) { + modules := treeset.NewWith(moduleComparator) + + g, ctx := errgroup.WithContext(context.Background()) + ch := make(chan struct{}, 6) // Limit the number of concurrent parses. + chRes := make(chan *ParserOutput, len(pyFilenames.Values())) + for _, v := range pyFilenames.Values() { + ch <- struct{}{} + g.Go(func(filename string) func() error { + return func() error { + defer func() { + <-ch + }() + res, err := NewFileParser().ParseFile(ctx, p.repoRoot, p.relPackagePath, filename) + if err != nil { + return err + } + chRes <- res + return nil + } + }(v.(string))) + } + if err := g.Wait(); err != nil { + return nil, nil, nil, err + } + close(ch) + close(chRes) + mainModules := make(map[string]*treeset.Set, len(chRes)) + allAnnotations := new(annotations) + allAnnotations.ignore = make(map[string]struct{}) + for res := range chRes { + if res.HasMain { + mainModules[res.FileName] = treeset.NewWith(moduleComparator) + } + annotations, err := annotationsFromComments(res.Comments) + if err != nil { + return nil, nil, nil, fmt.Errorf("failed to parse annotations: %w", err) + } + + for _, m := range res.Modules { + // Check for ignored dependencies set via an annotation to the Python + // module. + if annotations.ignores(m.Name) || annotations.ignores(m.From) { + continue + } + + // Check for ignored dependencies set via a Gazelle directive in a BUILD + // file. + if p.ignoresDependency(m.Name) || p.ignoresDependency(m.From) { + continue + } + + modules.Add(m) + if res.HasMain { + mainModules[res.FileName].Add(m) + } + } + + // Collect all annotations from each file into a single annotations struct. + for k, v := range annotations.ignore { + allAnnotations.ignore[k] = v + } + allAnnotations.includeDeps = append(allAnnotations.includeDeps, annotations.includeDeps...) + } + + allAnnotations.includeDeps = removeDupesFromStringTreeSetSlice(allAnnotations.includeDeps) + + return modules, mainModules, allAnnotations, nil +} + +// removeDupesFromStringTreeSetSlice takes a []string, makes a set out of the +// elements, and then returns a new []string with all duplicates removed. Order +// is preserved. +func removeDupesFromStringTreeSetSlice(array []string) []string { + s := treeset.NewWith(godsutils.StringComparator) + for _, v := range array { + s.Add(v) + } + dedupe := make([]string, s.Size()) + for i, v := range s.Values() { + dedupe[i] = fmt.Sprint(v) + } + return dedupe +} + +// module represents a fully-qualified, dot-separated, Python module as seen on +// the import statement, alongside the line number where it happened. +type module struct { + // The fully-qualified, dot-separated, Python module name as seen on import + // statements. + Name string `json:"name"` + // The line number where the import happened. + LineNumber uint32 `json:"lineno"` + // The path to the module file relative to the Bazel workspace root. + Filepath string `json:"filepath"` + // If this was a from import, e.g. from foo import bar, From indicates the module + // from which it is imported. + From string `json:"from"` +} + +// moduleComparator compares modules by name. +func moduleComparator(a, b interface{}) int { + return godsutils.StringComparator(a.(module).Name, b.(module).Name) +} + +// annotationKind represents Gazelle annotation kinds. +type annotationKind string + +const ( + // The Gazelle annotation prefix. + annotationPrefix string = "gazelle:" + // The ignore annotation kind. E.g. '# gazelle:ignore '. + annotationKindIgnore annotationKind = "ignore" + annotationKindIncludeDep annotationKind = "include_dep" +) + +// comment represents a Python comment. +type comment string + +// asAnnotation returns an annotation object if the comment has the +// annotationPrefix. +func (c *comment) asAnnotation() (*annotation, error) { + uncomment := strings.TrimLeft(string(*c), "# ") + if !strings.HasPrefix(uncomment, annotationPrefix) { + return nil, nil + } + withoutPrefix := strings.TrimPrefix(uncomment, annotationPrefix) + annotationParts := strings.SplitN(withoutPrefix, " ", 2) + if len(annotationParts) < 2 { + return nil, fmt.Errorf("`%s` requires a value", *c) + } + return &annotation{ + kind: annotationKind(annotationParts[0]), + value: annotationParts[1], + }, nil +} + +// annotation represents a single Gazelle annotation parsed from a Python +// comment. +type annotation struct { + kind annotationKind + value string +} + +// annotations represent the collection of all Gazelle annotations parsed out of +// the comments of a Python module. +type annotations struct { + // The parsed modules to be ignored by Gazelle. + ignore map[string]struct{} + // Labels that Gazelle should include as deps of the generated target. + includeDeps []string +} + +// annotationsFromComments returns all the annotations parsed out of the +// comments of a Python module. +func annotationsFromComments(comments []comment) (*annotations, error) { + ignore := make(map[string]struct{}) + includeDeps := []string{} + for _, comment := range comments { + annotation, err := comment.asAnnotation() + if err != nil { + return nil, err + } + if annotation != nil { + if annotation.kind == annotationKindIgnore { + modules := strings.Split(annotation.value, ",") + for _, m := range modules { + if m == "" { + continue + } + m = strings.TrimSpace(m) + ignore[m] = struct{}{} + } + } + if annotation.kind == annotationKindIncludeDep { + targets := strings.Split(annotation.value, ",") + for _, t := range targets { + if t == "" { + continue + } + t = strings.TrimSpace(t) + includeDeps = append(includeDeps, t) + } + } + } + } + return &annotations{ + ignore: ignore, + includeDeps: includeDeps, + }, nil +} + +// ignored returns true if the given module was ignored via the ignore +// annotation. +func (a *annotations) ignores(module string) bool { + _, ignores := a.ignore[module] + return ignores +} diff --git a/python/private/BUILD.bazel b/python/private/BUILD.bazel new file mode 100644 index 0000000..e69de29 diff --git a/python/private/extensions.bzl b/python/private/extensions.bzl new file mode 100644 index 0000000..5de0713 --- /dev/null +++ b/python/private/extensions.bzl @@ -0,0 +1,9 @@ +"python_stdlib_list module extension for use with bzlmod" + +load("@bazel_skylib//lib:modules.bzl", "modules") +load("//:deps.bzl", "python_stdlib_list_deps") + +python_stdlib_list = modules.as_extension( + python_stdlib_list_deps, + doc = "This extension registers python stdlib list dependencies.", +) diff --git a/python/python_test.go b/python/python_test.go new file mode 100644 index 0000000..dd8c241 --- /dev/null +++ b/python/python_test.go @@ -0,0 +1,204 @@ +/* Copyright 2020 The Bazel Authors. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This test file was first seen on: +// https://github.com/bazelbuild/bazel-skylib/blob/f80bc733d4b9f83d427ce3442be2e07427b2cc8d/gazelle/bzl/BUILD. +// It was modified for the needs of this extension. + +package python_test + +import ( + "bytes" + "context" + "errors" + "os" + "os/exec" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/bazelbuild/bazel-gazelle/testtools" + "github.com/bazelbuild/rules_go/go/tools/bazel" + "github.com/ghodss/yaml" +) + +const ( + extensionDir = "python" + string(os.PathSeparator) + testDataPath = extensionDir + "testdata" + string(os.PathSeparator) + gazelleBinaryName = "gazelle_binary" +) + +func TestGazelleBinary(t *testing.T) { + gazellePath := mustFindGazelle() + tests := map[string][]bazel.RunfileEntry{} + + runfiles, err := bazel.ListRunfiles() + if err != nil { + t.Fatalf("bazel.ListRunfiles() error: %v", err) + } + for _, f := range runfiles { + if strings.HasPrefix(f.ShortPath, testDataPath) { + relativePath := strings.TrimPrefix(f.ShortPath, testDataPath) + parts := strings.SplitN(relativePath, string(os.PathSeparator), 2) + if len(parts) < 2 { + // This file is not a part of a testcase since it must be in a dir that + // is the test case and then have a path inside of that. + continue + } + + tests[parts[0]] = append(tests[parts[0]], f) + } + } + if len(tests) == 0 { + t.Fatal("no tests found") + } + for testName, files := range tests { + testPath(t, gazellePath, testName, files) + } +} + +func testPath(t *testing.T, gazellePath, name string, files []bazel.RunfileEntry) { + t.Run(name, func(t *testing.T) { + t.Parallel() + var inputs, goldens []testtools.FileSpec + + var config *testYAML + for _, f := range files { + path := f.Path + trim := filepath.Join(testDataPath, name) + string(os.PathSeparator) + shortPath := strings.TrimPrefix(f.ShortPath, trim) + info, err := os.Stat(path) + if err != nil { + t.Fatalf("os.Stat(%q) error: %v", path, err) + } + + if info.IsDir() { + continue + } + + content, err := os.ReadFile(path) + if err != nil { + t.Errorf("os.ReadFile(%q) error: %v", path, err) + } + + if filepath.Base(shortPath) == "test.yaml" { + if config != nil { + t.Fatal("only 1 test.yaml is supported") + } + config = new(testYAML) + if err := yaml.Unmarshal(content, config); err != nil { + t.Fatal(err) + } + } + + if strings.HasSuffix(shortPath, ".in") { + inputs = append(inputs, testtools.FileSpec{ + Path: filepath.Join(name, strings.TrimSuffix(shortPath, ".in")), + Content: string(content), + }) + continue + } + + if strings.HasSuffix(shortPath, ".out") { + goldens = append(goldens, testtools.FileSpec{ + Path: filepath.Join(name, strings.TrimSuffix(shortPath, ".out")), + Content: string(content), + }) + continue + } + + inputs = append(inputs, testtools.FileSpec{ + Path: filepath.Join(name, shortPath), + Content: string(content), + }) + goldens = append(goldens, testtools.FileSpec{ + Path: filepath.Join(name, shortPath), + Content: string(content), + }) + } + + testdataDir, cleanup := testtools.CreateFiles(t, inputs) + t.Cleanup(cleanup) + t.Cleanup(func() { + if !t.Failed() { + return + } + + filepath.Walk(testdataDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + t.Logf("%q exists", strings.TrimPrefix(path, testdataDir)) + return nil + }) + }) + + workspaceRoot := filepath.Join(testdataDir, name) + + args := []string{"-build_file_name=BUILD,BUILD.bazel"} + + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + t.Cleanup(cancel) + cmd := exec.CommandContext(ctx, gazellePath, args...) + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + cmd.Dir = workspaceRoot + if err := cmd.Run(); err != nil { + var e *exec.ExitError + if !errors.As(err, &e) { + t.Fatal(err) + } + } + + actualExitCode := cmd.ProcessState.ExitCode() + if config.Expect.ExitCode != actualExitCode { + t.Errorf("expected gazelle exit code: %d\ngot: %d", + config.Expect.ExitCode, actualExitCode) + } + actualStdout := stdout.String() + if strings.TrimSpace(config.Expect.Stdout) != strings.TrimSpace(actualStdout) { + t.Errorf("expected gazelle stdout: %s\ngot: %s", + config.Expect.Stdout, actualStdout) + } + actualStderr := stderr.String() + if strings.TrimSpace(config.Expect.Stderr) != strings.TrimSpace(actualStderr) { + t.Errorf("expected gazelle stderr: %s\ngot: %s", + config.Expect.Stderr, actualStderr) + } + if t.Failed() { + t.FailNow() + } + + testtools.CheckFiles(t, testdataDir, goldens) + }) +} + +func mustFindGazelle() string { + gazellePath, ok := bazel.FindBinary(extensionDir, gazelleBinaryName) + if !ok { + panic("could not find gazelle binary") + } + return gazellePath +} + +type testYAML struct { + Expect struct { + ExitCode int `json:"exit_code"` + Stdout string `json:"stdout"` + Stderr string `json:"stderr"` + } `json:"expect"` +} diff --git a/python/resolve.go b/python/resolve.go new file mode 100644 index 0000000..caeb2d5 --- /dev/null +++ b/python/resolve.go @@ -0,0 +1,318 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "fmt" + "log" + "os" + "path/filepath" + "strings" + + "github.com/bazelbuild/bazel-gazelle/config" + "github.com/bazelbuild/bazel-gazelle/label" + "github.com/bazelbuild/bazel-gazelle/repo" + "github.com/bazelbuild/bazel-gazelle/resolve" + "github.com/bazelbuild/bazel-gazelle/rule" + bzl "github.com/bazelbuild/buildtools/build" + "github.com/emirpasic/gods/sets/treeset" + godsutils "github.com/emirpasic/gods/utils" + + "github.com/benchsci/rules_python_gazelle/gazelle/pythonconfig" +) + +const languageName = "py" + +const ( + // resolvedDepsKey is the attribute key used to pass dependencies that don't + // need to be resolved by the dependency resolver in the Resolver step. + resolvedDepsKey = "_gazelle_python_resolved_deps" +) + +// Resolver satisfies the resolve.Resolver interface. It resolves dependencies +// in rules generated by this extension. +type Resolver struct{} + +// Name returns the name of the language. This is the prefix of the kinds of +// rules generated. E.g. py_library and py_binary. +func (*Resolver) Name() string { return languageName } + +// Imports returns a list of ImportSpecs that can be used to import the rule +// r. This is used to populate RuleIndex. +// +// If nil is returned, the rule will not be indexed. If any non-nil slice is +// returned, including an empty slice, the rule will be indexed. +func (py *Resolver) Imports(c *config.Config, r *rule.Rule, f *rule.File) []resolve.ImportSpec { + cfgs := c.Exts[languageName].(pythonconfig.Configs) + cfg := cfgs[f.Pkg] + srcs := r.AttrStrings("srcs") + provides := make([]resolve.ImportSpec, 0, len(srcs)+1) + for _, src := range srcs { + ext := filepath.Ext(src) + if ext != ".py" { + continue + } + if cfg.PerFileGeneration() && len(srcs) > 1 && src == pyLibraryEntrypointFilename { + // Do not provide import spec from __init__.py when it is being included as + // part of another module. + continue + } + pythonProjectRoot := cfg.PythonProjectRoot() + provide := importSpecFromSrc(pythonProjectRoot, f.Pkg, src) + provides = append(provides, provide) + } + // Provide possible typings + if f.Pkg == "typings" { + provide := resolve.ImportSpec{ + Lang: languageName, + Imp: fmt.Sprintf("typings.%s", r.Name()), + } + provides = append(provides, provide) + + } + if len(provides) == 0 { + return nil + } + return provides +} + +// importSpecFromSrc determines the ImportSpec based on the target that contains the src so that +// the target can be indexed for import statements that match the calculated src relative to the its +// Python project root. +func importSpecFromSrc(pythonProjectRoot, bzlPkg, src string) resolve.ImportSpec { + pythonPkgDir := filepath.Join(bzlPkg, filepath.Dir(src)) + relPythonPkgDir, err := filepath.Rel(pythonProjectRoot, pythonPkgDir) + if err != nil { + panic(fmt.Errorf("unexpected failure: %v", err)) + } + if relPythonPkgDir == "." { + relPythonPkgDir = "" + } + pythonPkg := strings.ReplaceAll(relPythonPkgDir, "/", ".") + filename := filepath.Base(src) + if filename == pyLibraryEntrypointFilename { + if pythonPkg != "" { + return resolve.ImportSpec{ + Lang: languageName, + Imp: pythonPkg, + } + } + } + moduleName := strings.TrimSuffix(filename, ".py") + var imp string + if pythonPkg == "" { + imp = moduleName + } else { + imp = fmt.Sprintf("%s.%s", pythonPkg, moduleName) + } + return resolve.ImportSpec{ + Lang: languageName, + Imp: imp, + } +} + +// Embeds returns a list of labels of rules that the given rule embeds. If +// a rule is embedded by another importable rule of the same language, only +// the embedding rule will be indexed. The embedding rule will inherit +// the imports of the embedded rule. +func (py *Resolver) Embeds(r *rule.Rule, from label.Label) []label.Label { + // TODO(f0rmiga): implement. + return make([]label.Label, 0) +} + +// Resolve translates imported libraries for a given rule into Bazel +// dependencies. Information about imported libraries is returned for each +// rule generated by language.GenerateRules in +// language.GenerateResult.Imports. Resolve generates a "deps" attribute (or +// the appropriate language-specific equivalent) for each import according to +// language-specific rules and heuristics. +func (py *Resolver) Resolve( + c *config.Config, + ix *resolve.RuleIndex, + rc *repo.RemoteCache, + r *rule.Rule, + modulesRaw interface{}, + from label.Label, +) { + // TODO(f0rmiga): may need to be defensive here once this Gazelle extension + // join with the main Gazelle binary with other rules. It may conflict with + // other generators that generate py_* targets. + deps := treeset.NewWith(godsutils.StringComparator) + if modulesRaw != nil { + cfgs := c.Exts[languageName].(pythonconfig.Configs) + cfg := cfgs[from.Pkg] + modules := modulesRaw.(*treeset.Set) + it := modules.Iterator() + explainDependency := os.Getenv("EXPLAIN_DEPENDENCY") + hasFatalError := false + MODULES_LOOP: + for it.Next() { + mod := it.Value().(module) + moduleParts := strings.Split(mod.Name, ".") + possibleModules := []string{mod.Name} + for len(moduleParts) > 1 { + // Iterate back through the possible imports until + // a match is found. + // For example, "from foo.bar import baz" where baz is a module, we should try `foo.bar.baz` first, then + // `foo.bar`, then `foo`. + // In the first case, the import could be file `baz.py` in the directory `foo/bar`. + // Or, the import could be variable `baz` in file `foo/bar.py`. + // The import could also be from a standard module, e.g. `six.moves`, where + // the dependency is actually `six`. + moduleParts = moduleParts[:len(moduleParts)-1] + possibleModules = append(possibleModules, strings.Join(moduleParts, ".")) + } + errs := []error{} + POSSIBLE_MODULE_LOOP: + for _, moduleName := range possibleModules { + imp := resolve.ImportSpec{Lang: languageName, Imp: moduleName} + if override, ok := resolve.FindRuleWithOverride(c, imp, languageName); ok { + if override.Repo == "" { + override.Repo = from.Repo + } + if !override.Equal(from) { + if override.Repo == from.Repo { + override.Repo = "" + } + dep := override.Rel(from.Repo, from.Pkg).String() + deps.Add(dep) + if explainDependency == dep { + log.Printf("Explaining dependency (%s): "+ + "in the target %q, the file %q imports %q at line %d, "+ + "which resolves using the \"gazelle:resolve\" directive.\n", + explainDependency, from.String(), mod.Filepath, moduleName, mod.LineNumber) + } + continue MODULES_LOOP + } + } else { + if dep, distributionName, ok := cfg.FindThirdPartyDependency(moduleName); ok { + deps.Add(dep) + typings := fmt.Sprintf("typings.%s", distributionName) + imp := resolve.ImportSpec{Lang: languageName, Imp: typings} + matches := ix.FindRulesByImportWithConfig(c, imp, languageName) + if len(matches) > 0 { + + matchLabel := matches[0].Label.Rel(from.Repo, from.Pkg) + dep := matchLabel.String() + deps.Add(dep) + } + typeModule := fmt.Sprintf("%s_types", strings.ToLower(distributionName)) + if dep, _, ok := cfg.FindThirdPartyDependency(typeModule); ok { + deps.Add(dep) + + } + stubModule := fmt.Sprintf("%s_stubs", strings.ToLower(distributionName)) + if dep, _, ok := cfg.FindThirdPartyDependency(stubModule); ok { + deps.Add(dep) + } + if explainDependency == dep { + log.Printf("Explaining dependency (%s): "+ + "in the target %q, the file %q imports %q at line %d, "+ + "which resolves from the third-party module %q from the wheel %q.\n", + explainDependency, from.String(), mod.Filepath, moduleName, mod.LineNumber, mod.Name, dep) + } + continue MODULES_LOOP + } else { + matches := ix.FindRulesByImportWithConfig(c, imp, languageName) + if len(matches) == 0 { + // Check if the imported module is part of the standard library. + if isStdModule(module{Name: moduleName}) { + continue MODULES_LOOP + } else if cfg.ValidateImportStatements() { + err := fmt.Errorf( + "%[1]q at line %[2]d from %[3]q is an invalid dependency: possible solutions:\n"+ + "\t1. Add it as a dependency in the requirements.txt file.\n"+ + "\t2. Instruct Gazelle to resolve to a known dependency using the gazelle:resolve directive.\n"+ + "\t3. Ignore it with a comment '# gazelle:ignore %[1]s' in the Python file.\n", + moduleName, mod.LineNumber, mod.Filepath, + ) + errs = append(errs, err) + continue POSSIBLE_MODULE_LOOP + } + } + filteredMatches := make([]resolve.FindResult, 0, len(matches)) + for _, match := range matches { + if match.IsSelfImport(from) { + // Prevent from adding itself as a dependency. + continue MODULES_LOOP + } + filteredMatches = append(filteredMatches, match) + } + if len(filteredMatches) == 0 { + continue POSSIBLE_MODULE_LOOP + } + for _, match := range filteredMatches { + matchLabel := match.Label.Rel(from.Repo, from.Pkg) + dep := matchLabel.String() + deps.Add(dep) + if explainDependency == dep { + log.Printf("Explaining dependency (%s): "+ + "in the target %q, the file %q imports %q at line %d, "+ + "which resolves from the first-party indexed labels.\n", + explainDependency, from.String(), mod.Filepath, mod.Name, mod.LineNumber) + } + } + continue MODULES_LOOP + } + } + } // End possible modules loop. + if len(errs) > 0 { + // If, after trying all possible modules, we still haven't found anything, error out. + joinedErrs := "" + for _, err := range errs { + joinedErrs = fmt.Sprintf("%s%s\n", joinedErrs, err) + } + log.Printf("EEEEEEEEEEEERROR: failed to validate dependencies for target %q: %v\n", from.String(), joinedErrs) + hasFatalError = true + } + } + if hasFatalError { + fmt.Printf("EEEEEEEEEEEERROR: failed to validate dependencies for target %q\n", from.String()) + //os.Exit(1) + } + } + resolvedDeps := r.PrivateAttr(resolvedDepsKey).(*treeset.Set) + if !resolvedDeps.Empty() { + it := resolvedDeps.Iterator() + for it.Next() { + deps.Add(it.Value()) + } + } + if !deps.Empty() { + r.SetAttr("deps", convertDependencySetToExpr(deps)) + } +} + +// targetListFromResults returns a string with the human-readable list of +// targets contained in the given results. +func targetListFromResults(results []resolve.FindResult) string { + list := make([]string, len(results)) + for i, result := range results { + list[i] = result.Label.String() + } + return strings.Join(list, ", ") +} + +// convertDependencySetToExpr converts the given set of dependencies to an +// expression to be used in the deps attribute. +func convertDependencySetToExpr(set *treeset.Set) bzl.Expr { + deps := make([]bzl.Expr, set.Size()) + it := set.Iterator() + for it.Next() { + dep := it.Value().(string) + deps[it.Index()] = &bzl.StringExpr{Value: dep} + } + return &bzl.ListExpr{List: deps} +} diff --git a/python/std_modules.go b/python/std_modules.go new file mode 100644 index 0000000..e10f87b --- /dev/null +++ b/python/std_modules.go @@ -0,0 +1,40 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "bufio" + _ "embed" + "strings" +) + +var ( + //go:embed stdlib_list.txt + stdlibList string + stdModules map[string]struct{} +) + +func init() { + stdModules = make(map[string]struct{}) + scanner := bufio.NewScanner(strings.NewReader(stdlibList)) + for scanner.Scan() { + stdModules[scanner.Text()] = struct{}{} + } +} + +func isStdModule(m module) bool { + _, ok := stdModules[m.Name] + return ok +} diff --git a/python/std_modules_test.go b/python/std_modules_test.go new file mode 100644 index 0000000..bc22638 --- /dev/null +++ b/python/std_modules_test.go @@ -0,0 +1,27 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package python + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestIsStdModule(t *testing.T) { + assert.True(t, isStdModule(module{Name: "unittest"})) + assert.True(t, isStdModule(module{Name: "os.path"})) + assert.False(t, isStdModule(module{Name: "foo"})) +} diff --git a/gazelle/target.go b/python/target.go similarity index 63% rename from gazelle/target.go rename to python/target.go index df66ac9..9d990d7 100644 --- a/gazelle/target.go +++ b/python/target.go @@ -1,3 +1,17 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package python import ( @@ -15,39 +29,32 @@ type targetBuilder struct { name string pythonProjectRoot string bzlPackage string - uuid string srcs *treeset.Set + siblingSrcs *treeset.Set deps *treeset.Set resolvedDeps *treeset.Set visibility *treeset.Set main *string conftest *string imports []string + testonly bool } // newTargetBuilder constructs a new targetBuilder. -func newTargetBuilder(kind, name, pythonProjectRoot, bzlPackage string) *targetBuilder { +func newTargetBuilder(kind, name, pythonProjectRoot, bzlPackage string, siblingSrcs *treeset.Set) *targetBuilder { return &targetBuilder{ kind: kind, name: name, pythonProjectRoot: pythonProjectRoot, bzlPackage: bzlPackage, srcs: treeset.NewWith(godsutils.StringComparator), + siblingSrcs: siblingSrcs, deps: treeset.NewWith(moduleComparator), resolvedDeps: treeset.NewWith(godsutils.StringComparator), visibility: treeset.NewWith(godsutils.StringComparator), } } -// setUUID sets the given UUID for the target. It's used to index the generated -// target based on this value in addition to the other ways the targets can be -// imported. py_{binary,test} targets in the same Bazel package can add a -// virtual dependency to this UUID that gets resolved in the Resolver interface. -func (t *targetBuilder) setUUID(uuid string) *targetBuilder { - t.uuid = uuid - return t -} - // addSrc adds a single src to the target. func (t *targetBuilder) addSrc(src string) *targetBuilder { t.srcs.Add(src) @@ -65,6 +72,15 @@ func (t *targetBuilder) addSrcs(srcs *treeset.Set) *targetBuilder { // addModuleDependency adds a single module dep to the target. func (t *targetBuilder) addModuleDependency(dep module) *targetBuilder { + fileName := dep.Name + ".py" + if dep.From != "" { + fileName = dep.From + ".py" + } + if t.siblingSrcs.Contains(fileName) && fileName != filepath.Base(dep.Filepath) { + // importing another module from the same package, converting to absolute imports to make + // dependency resolution easier + dep.Name = importSpecFromSrc(t.pythonProjectRoot, t.bzlPackage, fileName).Imp + } t.deps.Add(dep) return t } @@ -73,7 +89,7 @@ func (t *targetBuilder) addModuleDependency(dep module) *targetBuilder { func (t *targetBuilder) addModuleDependencies(deps *treeset.Set) *targetBuilder { it := deps.Iterator() for it.Next() { - t.deps.Add(it.Value().(module)) + t.addModuleDependency(it.Value().(module)) } return t } @@ -85,9 +101,20 @@ func (t *targetBuilder) addResolvedDependency(dep string) *targetBuilder { return t } -// addVisibility adds a visibility to the target. -func (t *targetBuilder) addVisibility(visibility string) *targetBuilder { - t.visibility.Add(visibility) +// addResolvedDependencies adds multiple dependencies, that have already been +// resolved or generated, to the target. +func (t *targetBuilder) addResolvedDependencies(deps []string) *targetBuilder { + for _, dep := range deps { + t.addResolvedDependency(dep) + } + return t +} + +// addVisibility adds visibility labels to the target. +func (t *targetBuilder) addVisibility(visibility []string) *targetBuilder { + for _, item := range visibility { + t.visibility.Add(item) + } return t } @@ -103,13 +130,25 @@ func (t *targetBuilder) setConftest(conftest string) *targetBuilder { return t } +// setTestonly sets the testonly attribute to true. +func (t *targetBuilder) setTestonly() *targetBuilder { + t.testonly = true + return t +} + // generateImportsAttribute generates the imports attribute. // These are a list of import directories to be added to the PYTHONPATH. In our // case, the value we add is on Bazel sub-packages to be able to perform imports // relative to the root project package. func (t *targetBuilder) generateImportsAttribute() *targetBuilder { + if t.pythonProjectRoot == "" { + // When gazelle:python_root is not set or is at the root of the repo, we don't need + // to set imports, because that's the Bazel's default. + return t + } p, _ := filepath.Rel(t.bzlPackage, t.pythonProjectRoot) p = filepath.Clean(p) + if p == "." { return t } @@ -120,27 +159,27 @@ func (t *targetBuilder) generateImportsAttribute() *targetBuilder { // build returns the assembled *rule.Rule for the target. func (t *targetBuilder) build() *rule.Rule { r := rule.NewRule(t.kind, t.name) - if t.uuid != "" { - r.SetPrivateAttr(uuidKey, t.uuid) - } if !t.srcs.Empty() { r.SetAttr("srcs", t.srcs.Values()) } if !t.visibility.Empty() { r.SetAttr("visibility", t.visibility.Values()) } - if t.main != nil { - r.SetAttr("main", *t.main) - } if t.conftest != nil { r.SetAttr("conftest", *t.conftest) } + if t.main != nil { + r.SetAttr("main", *t.main) + } if t.imports != nil { r.SetAttr("imports", t.imports) } if !t.deps.Empty() { r.SetPrivateAttr(config.GazelleImportsKey, t.deps) } + if t.testonly { + r.SetAttr("testonly", true) + } r.SetPrivateAttr(resolvedDepsKey, t.resolvedDeps) return r } diff --git a/pythonconfig/BUILD.bazel b/pythonconfig/BUILD.bazel new file mode 100644 index 0000000..6e2160b --- /dev/null +++ b/pythonconfig/BUILD.bazel @@ -0,0 +1,28 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "pythonconfig", + srcs = [ + "pythonconfig.go", + "types.go", + ], + importpath = "github.com/benchsci/rules_python_gazelle/gazelle/pythonconfig", + visibility = ["//visibility:public"], + deps = [ + "//manifest", + "@bazel_gazelle//label:go_default_library", + "@com_github_emirpasic_gods//lists/singlylinkedlist", + ], +) + +go_test( + name = "pythonconfig_test", + srcs = ["pythonconfig_test.go"], + embed = [":pythonconfig"], +) + +filegroup( + name = "distribution", + srcs = glob(["**"]), + visibility = ["//:__pkg__"], +) diff --git a/gazelle/pythonconfig/pythonconfig.go b/pythonconfig/pythonconfig.go similarity index 62% rename from gazelle/pythonconfig/pythonconfig.go rename to pythonconfig/pythonconfig.go index 5b92713..8e42184 100644 --- a/gazelle/pythonconfig/pythonconfig.go +++ b/pythonconfig/pythonconfig.go @@ -1,8 +1,22 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package pythonconfig import ( "fmt" - "path/filepath" + "path" "strings" "github.com/emirpasic/gods/lists/singlylinkedlist" @@ -36,6 +50,10 @@ const ( // GenerationMode represents the directive that controls the target generation // mode. See below for the GenerationModeType constants. GenerationMode = "python_generation_mode" + // GenerationModePerFileIncludeInit represents the directive that augments + // the "per_file" GenerationMode by including the package's __init__.py file. + // This is a boolean directive. + GenerationModePerFileIncludeInit = "python_generation_mode_per_file_include_init" // LibraryNamingConvention represents the directive that controls the // py_library naming convention. It interpolates $package_name$ with the // Bazel package name. E.g. if the Bazel package name is `foo`, setting this @@ -49,10 +67,17 @@ const ( // naming convention. See python_library_naming_convention for more info on // the package name interpolation. TestNamingConvention = "python_test_naming_convention" - - PytestConfTest = "pytest_conftest" - PyCheck = "py_check" - PyModule = "py_module" + PytestConfTest = "pytest_conftest" + // DefaultVisibilty represents the directive that controls what visibility + // labels are added to generated python targets. + DefaultVisibilty = "python_default_visibility" + // Visibility represents the directive that controls what additional + // visibility labels are added to generated targets. It mimics the behavior + // of the `go_visibility` directive. + Visibility = "python_visibility" + // TestFilePattern represents the directive that controls which python + // files are mapped to `py_test` targets. + TestFilePattern = "python_test_file_pattern" ) // GenerationModeType represents one of the generation modes for the Python @@ -68,25 +93,41 @@ const ( // GenerationModeProject defines the mode in which a coarse-grained target will // be generated englobing sub-directories containing Python files. GenerationModeProject GenerationModeType = "project" + GenerationModeFile GenerationModeType = "file" ) const ( packageNameNamingConventionSubstitution = "$package_name$" ) +const ( + // The default visibility label, including a format placeholder for `python_root`. + DefaultVisibilityFmtString = "//%s:__subpackages__" + // The default globs used to determine pt_test targets. + DefaultTestFilePatternString = "__test__.py,test_*.py" +) + // defaultIgnoreFiles is the list of default values used in the // python_ignore_files option. var defaultIgnoreFiles = map[string]struct{}{ "setup.py": {}, } +func SanitizeDistribution(distributionName string) string { + sanitizedDistribution := strings.ToLower(distributionName) + sanitizedDistribution = strings.ReplaceAll(sanitizedDistribution, "-", "_") + sanitizedDistribution = strings.ReplaceAll(sanitizedDistribution, ".", "_") + + return sanitizedDistribution +} + // Configs is an extension of map[string]*Config. It provides finding methods // on top of the mapping. type Configs map[string]*Config // ParentForPackage returns the parent Config for the given Bazel package. func (c *Configs) ParentForPackage(pkg string) *Config { - dir := filepath.Dir(pkg) + dir := path.Dir(pkg) if dir == "." { dir = "" } @@ -99,21 +140,24 @@ type Config struct { parent *Config extensionEnabled bool - pyModule bool - pyCheck string repoRoot string pythonProjectRoot string pytestConfTest string gazelleManifest *manifest.Manifest - excludedPatterns *singlylinkedlist.List - ignoreFiles map[string]struct{} - ignoreDependencies map[string]struct{} - validateImportStatements bool - coarseGrainedGeneration bool - libraryNamingConvention string - binaryNamingConvention string - testNamingConvention string + excludedPatterns *singlylinkedlist.List + ignoreFiles map[string]struct{} + ignoreDependencies map[string]struct{} + validateImportStatements bool + coarseGrainedGeneration bool + perFileGeneration bool + perFileGenerationIncludeInit bool + libraryNamingConvention string + binaryNamingConvention string + testNamingConvention string + defaultVisibility []string + visibility []string + testFilePattern []string } // New creates a new Config. @@ -122,20 +166,23 @@ func New( pythonProjectRoot string, ) *Config { return &Config{ - extensionEnabled: true, - pyModule: false, - pyCheck: "", - repoRoot: repoRoot, - pythonProjectRoot: pythonProjectRoot, - excludedPatterns: singlylinkedlist.New(), - ignoreFiles: make(map[string]struct{}), - ignoreDependencies: make(map[string]struct{}), - validateImportStatements: true, - coarseGrainedGeneration: false, - libraryNamingConvention: packageNameNamingConventionSubstitution, - binaryNamingConvention: fmt.Sprintf("%s_bin", packageNameNamingConventionSubstitution), - testNamingConvention: fmt.Sprintf("%s_test", packageNameNamingConventionSubstitution), - pytestConfTest: ":conftest", + extensionEnabled: true, + repoRoot: repoRoot, + pythonProjectRoot: pythonProjectRoot, + excludedPatterns: singlylinkedlist.New(), + ignoreFiles: make(map[string]struct{}), + ignoreDependencies: make(map[string]struct{}), + validateImportStatements: true, + coarseGrainedGeneration: false, + perFileGeneration: true, + perFileGenerationIncludeInit: false, + libraryNamingConvention: packageNameNamingConventionSubstitution, + binaryNamingConvention: fmt.Sprintf("%s_bin", packageNameNamingConventionSubstitution), + testNamingConvention: fmt.Sprintf("%s_test", packageNameNamingConventionSubstitution), + defaultVisibility: []string{fmt.Sprintf(DefaultVisibilityFmtString, "")}, + visibility: []string{}, + testFilePattern: strings.Split(DefaultTestFilePatternString, ","), + pytestConfTest: ":conftest", } } @@ -148,21 +195,24 @@ func (c *Config) Parent() *Config { // current Config and sets itself as the parent to the child. func (c *Config) NewChild() *Config { return &Config{ - parent: c, - extensionEnabled: c.extensionEnabled, - repoRoot: c.repoRoot, - pythonProjectRoot: c.pythonProjectRoot, - excludedPatterns: c.excludedPatterns, - ignoreFiles: make(map[string]struct{}), - ignoreDependencies: make(map[string]struct{}), - validateImportStatements: c.validateImportStatements, - coarseGrainedGeneration: c.coarseGrainedGeneration, - libraryNamingConvention: c.libraryNamingConvention, - binaryNamingConvention: c.binaryNamingConvention, - testNamingConvention: c.testNamingConvention, - pytestConfTest: c.pytestConfTest, - pyCheck: c.pyCheck, - pyModule: c.pyModule, + parent: c, + extensionEnabled: c.extensionEnabled, + repoRoot: c.repoRoot, + pythonProjectRoot: c.pythonProjectRoot, + excludedPatterns: c.excludedPatterns, + ignoreFiles: make(map[string]struct{}), + ignoreDependencies: make(map[string]struct{}), + validateImportStatements: c.validateImportStatements, + coarseGrainedGeneration: c.coarseGrainedGeneration, + perFileGeneration: c.perFileGeneration, + perFileGenerationIncludeInit: c.perFileGenerationIncludeInit, + libraryNamingConvention: c.libraryNamingConvention, + binaryNamingConvention: c.binaryNamingConvention, + testNamingConvention: c.testNamingConvention, + pytestConfTest: c.pytestConfTest, + defaultVisibility: c.defaultVisibility, + visibility: c.visibility, + testFilePattern: c.testFilePattern, } } @@ -182,14 +232,6 @@ func (c *Config) SetExtensionEnabled(enabled bool) { c.extensionEnabled = enabled } -func (c *Config) PyModule() bool { - return c.pyModule -} - -func (c *Config) SetPyModule(enabled bool) { - c.pyModule = enabled -} - // ExtensionEnabled returns whether the extension is enabled or not. func (c *Config) ExtensionEnabled() bool { return c.extensionEnabled @@ -200,11 +242,6 @@ func (c *Config) SetPythonProjectRoot(pythonProjectRoot string) { c.pythonProjectRoot = pythonProjectRoot } -// PythonProjectRoot returns the Python project root. -func (c *Config) PythonProjectRoot() string { - return c.pythonProjectRoot -} - // SetPytestConfTest sets the conftest file func (c *Config) SetPytestConfTest(pytestConfTest string) { c.pytestConfTest = pytestConfTest @@ -215,22 +252,9 @@ func (c *Config) PytestConfTest() string { return c.pytestConfTest } -// Enable pyCheck rule -func (c *Config) PyCheck() string { - parent := c.parent - for parent != nil { - if parent.pyCheck == "enabled" && c.pyCheck == "" { - return parent.pyCheck - - } - parent = parent.parent - } - return c.pyCheck -} - -// Enable pyCheck rule -func (c *Config) SetPyCheck(enabled string) { - c.pyCheck = enabled +// PythonProjectRoot returns the Python project root. +func (c *Config) PythonProjectRoot() string { + return c.pythonProjectRoot } // SetGazelleManifest sets the Gazelle manifest parsed from the @@ -253,17 +277,10 @@ func (c *Config) FindThirdPartyDependency(modName string) (string, string, bool) } else if gazelleManifest.PipRepository != nil { distributionRepositoryName = gazelleManifest.PipRepository.Name } - sanitizedDistribution := strings.ToLower(distributionName) - sanitizedDistribution = strings.ReplaceAll(sanitizedDistribution, "-", "_") - var lbl label.Label - if repo := gazelleManifest.PipRepository; repo != nil && (repo.UsePipRepositoryAliases != nil && *repo.UsePipRepositoryAliases == false) { - // @_//:pkg - distributionRepositoryName = distributionRepositoryName + "_" + sanitizedDistribution - lbl = label.New(distributionRepositoryName, "", "pkg") - } else { - // @// - lbl = label.New(distributionRepositoryName, sanitizedDistribution, sanitizedDistribution) - } + sanitizedDistribution := SanitizeDistribution(distributionName) + + // @// + lbl := label.New(distributionRepositoryName, sanitizedDistribution, sanitizedDistribution) return lbl.String(), distributionName, true } } @@ -354,6 +371,30 @@ func (c *Config) CoarseGrainedGeneration() bool { return c.coarseGrainedGeneration } +// SetPerFileGneration sets whether a separate py_library target should be +// generated for each file. +func (c *Config) SetPerFileGeneration(perFile bool) { + c.perFileGeneration = perFile +} + +// PerFileGeneration returns whether a separate py_library target should be +// generated for each file. +func (c *Config) PerFileGeneration() bool { + return c.perFileGeneration +} + +// SetPerFileGenerationIncludeInit sets whether py_library targets should +// include __init__.py files when PerFileGeneration() is true. +func (c *Config) SetPerFileGenerationIncludeInit(includeInit bool) { + c.perFileGenerationIncludeInit = includeInit +} + +// PerFileGenerationIncludeInit returns whether py_library targets should +// include __init__.py files when PerFileGeneration() is true. +func (c *Config) PerFileGenerationIncludeInit() bool { + return c.perFileGenerationIncludeInit +} + // SetLibraryNamingConvention sets the py_library target naming convention. func (c *Config) SetLibraryNamingConvention(libraryNamingConvention string) { c.libraryNamingConvention = libraryNamingConvention @@ -386,3 +427,33 @@ func (c *Config) SetTestNamingConvention(testNamingConvention string) { func (c *Config) RenderTestName(packageName string) string { return strings.ReplaceAll(c.testNamingConvention, packageNameNamingConventionSubstitution, packageName) } + +// AppendVisibility adds additional items to the target's visibility. +func (c *Config) AppendVisibility(visibility string) { + c.visibility = append(c.visibility, visibility) +} + +// Visibility returns the target's visibility. +func (c *Config) Visibility() []string { + return append(c.defaultVisibility, c.visibility...) +} + +// SetDefaultVisibility sets the default visibility of the target. +func (c *Config) SetDefaultVisibility(visibility []string) { + c.defaultVisibility = visibility +} + +// DefaultVisibilty returns the target's default visibility. +func (c *Config) DefaultVisibilty() []string { + return c.defaultVisibility +} + +// SetTestFilePattern sets the file patterns that should be mapped to 'py_test' rules. +func (c *Config) SetTestFilePattern(patterns []string) { + c.testFilePattern = patterns +} + +// TestFilePattern returns the patterns that should be mapped to 'py_test' rules. +func (c *Config) TestFilePattern() []string { + return c.testFilePattern +} diff --git a/pythonconfig/pythonconfig_test.go b/pythonconfig/pythonconfig_test.go new file mode 100644 index 0000000..bf31106 --- /dev/null +++ b/pythonconfig/pythonconfig_test.go @@ -0,0 +1,26 @@ +package pythonconfig + +import ( + "testing" +) + +func TestDistributionSanitizing(t *testing.T) { + tests := map[string]struct { + input string + want string + }{ + "upper case": {input: "DistWithUpperCase", want: "distwithuppercase"}, + "dashes": {input: "dist-with-dashes", want: "dist_with_dashes"}, + "dots": {input: "dist.with.dots", want: "dist_with_dots"}, + "mixed": {input: "To-be.sanitized", want: "to_be_sanitized"}, + } + + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + got := SanitizeDistribution(tc.input) + if tc.want != got { + t.Fatalf("expected %q, got %q", tc.want, got) + } + }) + } +} diff --git a/gazelle/pythonconfig/types.go b/pythonconfig/types.go similarity index 80% rename from gazelle/pythonconfig/types.go rename to pythonconfig/types.go index bdb535b..d83d35f 100644 --- a/gazelle/pythonconfig/types.go +++ b/pythonconfig/types.go @@ -1,3 +1,17 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package pythonconfig import (

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 z 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