diff --git a/.bazelversion b/.bazelversion index 815da58..c9277c5 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.4.1 +9.0.0 \ No newline at end of file diff --git a/MODULE.bazel b/MODULE.bazel index 25675fb..6ecbab7 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -6,18 +6,19 @@ module( ) # Python for dupe class checking support -bazel_dep(name = "rules_python", version = "0.40.0") +bazel_dep(name = "rules_python", version = "1.8.0") # For License support bazel_dep(name = "rules_license", version = "1.0.0") # For unittest toolchain -bazel_dep(name = "bazel_skylib", version = "1.1.1") +bazel_dep(name = "bazel_skylib", version = "1.9.0") +bazel_dep(name = "rules_java", version = "9.3.0") # DEV DEPENDENCIES # Maven dependencies for the examples -bazel_dep(name = "rules_jvm_external", version = "6.6", dev_dependency = True) +bazel_dep(name = "rules_jvm_external", version = "6.9", dev_dependency = True) maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven", dev_dependency = True) maven.install( @@ -60,7 +61,6 @@ maven.install( # a filter to exclude this dependency "javax.annotation:javax.annotation-api:1.3.2", - # test deps "junit:junit:4.13.2", "org.hamcrest:hamcrest-core:2.2", @@ -94,4 +94,3 @@ unmanaged_maven.install( lock_file = "//springboot/deps_filter_rules/tests/external_deps:unmanaged_deps_filter_install.json", ) use_repo(unmanaged_maven, "unmanaged_deps_filter") - diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 3e35d02..3193310 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1,5 +1,5 @@ { - "lockFileVersion": 11, + "lockFileVersion": 26, "registryFileHashes": { "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", @@ -9,16 +9,32 @@ "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16", "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", - "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", - "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", - "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", + "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/MODULE.bazel": "73939767a4686cd9a520d16af5ab440071ed75cec1a876bf2fcfaf1f71987a16", + "https://bcr.bazel.build/modules/abseil-cpp/20250127.1/MODULE.bazel": "c4a89e7ceb9bf1e25cf84a9f830ff6b817b72874088bf5141b314726e46a57c1", + "https://bcr.bazel.build/modules/abseil-cpp/20250512.1/MODULE.bazel": "d209fdb6f36ffaf61c509fcc81b19e81b411a999a934a032e10cd009a0226215", + "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/MODULE.bazel": "51f2312901470cdab0dbdf3b88c40cd21c62a7ed58a3de45b365ddc5b11bcab2", + "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/source.json": "cea3901d7e299da7320700abbaafe57a65d039f10d0d7ea601c4a66938ea4b0c", + "https://bcr.bazel.build/modules/apple_support/1.11.1/MODULE.bazel": "1843d7cd8a58369a444fc6000e7304425fba600ff641592161d9f15b179fb896", + "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85", + "https://bcr.bazel.build/modules/apple_support/1.21.0/MODULE.bazel": "ac1824ed5edf17dee2fdd4927ada30c9f8c3b520be1b5fd02a5da15bc10bff3e", + "https://bcr.bazel.build/modules/apple_support/1.21.1/MODULE.bazel": "5809fa3efab15d1f3c3c635af6974044bac8a4919c62238cce06acee8a8c11f1", + "https://bcr.bazel.build/modules/apple_support/1.24.2/MODULE.bazel": "0e62471818affb9f0b26f128831d5c40b074d32e6dda5a0d3852847215a41ca4", + "https://bcr.bazel.build/modules/apple_support/1.24.2/source.json": "2c22c9827093250406c5568da6c54e6fdf0ef06238def3d99c71b12feb057a8d", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", + "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", - "https://bcr.bazel.build/modules/bazel_features/1.19.0/source.json": "d7bf14517c1b25b9d9c580b0f8795fceeae08a7590f507b76aace528e941375d", + "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", + "https://bcr.bazel.build/modules/bazel_features/1.23.0/MODULE.bazel": "fd1ac84bc4e97a5a0816b7fd7d4d4f6d837b0047cf4cbd81652d616af3a6591a", + "https://bcr.bazel.build/modules/bazel_features/1.27.0/MODULE.bazel": "621eeee06c4458a9121d1f104efb80f39d34deff4984e778359c60eaf1a8cb65", + "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d", + "https://bcr.bazel.build/modules/bazel_features/1.3.0/MODULE.bazel": "cdcafe83ec318cda34e02948e81d790aab8df7a929cec6f6969f13a489ccecd9", + "https://bcr.bazel.build/modules/bazel_features/1.30.0/MODULE.bazel": "a14b62d05969a293b80257e72e597c2da7f717e1e69fa8b339703ed6731bec87", + "https://bcr.bazel.build/modules/bazel_features/1.33.0/MODULE.bazel": "8b8dc9d2a4c88609409c3191165bccec0e4cb044cd7a72ccbe826583303459f6", + "https://bcr.bazel.build/modules/bazel_features/1.33.0/source.json": "13617db3930328c2cd2807a0f13d52ca870ac05f96db9668655113265147b2a6", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", @@ -32,72 +48,98 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", - "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", - "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", - "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", + "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/MODULE.bazel": "88ade7293becda963e0e3ea33e7d54d3425127e0a326e0d17da085a5f1f03ff6", + "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/MODULE.bazel": "69ad6927098316848b34a9142bcc975e018ba27f08c4ff403f50c1b6e646ca67", + "https://bcr.bazel.build/modules/bazel_skylib/1.9.0/MODULE.bazel": "72997b29dfd95c3fa0d0c48322d05590418edef451f8db8db5509c57875fb4b7", + "https://bcr.bazel.build/modules/bazel_skylib/1.9.0/source.json": "7ad77c1e8c1b84222d9b3f3cae016a76639435744c19330b0b37c0a3c9da7dc0", + "https://bcr.bazel.build/modules/buildozer/8.2.1/MODULE.bazel": "61e9433c574c2bd9519cad7fa66b9c1d2b8e8d5f3ae5d6528a2c2d26e68d874d", + "https://bcr.bazel.build/modules/buildozer/8.2.1/source.json": "7c33f6a26ee0216f85544b4bca5e9044579e0219b6898dd653f5fb449cf2e484", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", - "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4", "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", + "https://bcr.bazel.build/modules/googletest/1.15.2/MODULE.bazel": "6de1edc1d26cafb0ea1a6ab3f4d4192d91a312fd2d360b63adaa213cd00b2108", + "https://bcr.bazel.build/modules/googletest/1.17.0/MODULE.bazel": "dbec758171594a705933a29fcf69293d2468c49ec1f2ebca65c36f504d72df46", + "https://bcr.bazel.build/modules/googletest/1.17.0/source.json": "38e4454b25fc30f15439c0378e57909ab1fd0a443158aa35aec685da727cd713", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", - "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", + "https://bcr.bazel.build/modules/jsoncpp/1.9.6/MODULE.bazel": "2f8d20d3b7d54143213c4dfc3d98225c42de7d666011528dc8fe91591e2e17b0", + "https://bcr.bazel.build/modules/jsoncpp/1.9.6/source.json": "a04756d367a2126c3541682864ecec52f92cdee80a35735a3cb249ce015ca000", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", + "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/MODULE.bazel": "6f7b417dcc794d9add9e556673ad25cb3ba835224290f4f848f8e2db1e1fca74", + "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/source.json": "f448c6e8963fdfa7eb831457df83ad63d3d6355018f6574fb017e8169deb43a9", + "https://bcr.bazel.build/modules/package_metadata/0.0.3/MODULE.bazel": "77890552ecea9e284b5424c9de827a58099348763a4359e975c359a83d4faa83", + "https://bcr.bazel.build/modules/package_metadata/0.0.3/source.json": "742075a428ad12a3fa18a69014c2f57f01af910c6d9d18646c990200853e641a", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", - "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", + "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", + "https://bcr.bazel.build/modules/platforms/1.0.0/MODULE.bazel": "f05feb42b48f1b3c225e4ccf351f367be0371411a803198ec34a389fb22aa580", + "https://bcr.bazel.build/modules/platforms/1.0.0/source.json": "f4ff1fd412e0246fd38c82328eb209130ead81d62dcd5a9e40910f867f733d96", "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", - "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", - "https://bcr.bazel.build/modules/protobuf/29.0-rc2/source.json": "52101bfd37e38f0d159dee47b71ccbd1f22f7a32192cef5ef2533bb6212f410f", + "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", + "https://bcr.bazel.build/modules/protobuf/29.1/MODULE.bazel": "557c3457560ff49e122ed76c0bc3397a64af9574691cb8201b4e46d4ab2ecb95", "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", - "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", + "https://bcr.bazel.build/modules/protobuf/32.1/MODULE.bazel": "89cd2866a9cb07fee9ff74c41ceace11554f32e0d849de4e23ac55515cfada4d", + "https://bcr.bazel.build/modules/protobuf/33.4/MODULE.bazel": "114775b816b38b6d0ca620450d6b02550c60ceedfdc8d9a229833b34a223dc42", + "https://bcr.bazel.build/modules/protobuf/33.4/source.json": "555f8686b4c7d6b5ba731fbea13bf656b4bfd9a7ff629c1d9d3f6e1d6155de79", "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", - "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/source.json": "be4789e951dd5301282729fe3d4938995dc4c1a81c2ff150afc9f1b0504c6022", + "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34", + "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/source.json": "6900fdc8a9e95866b8c0d4ad4aba4d4236317b5c1cd04c502df3f0d33afed680", "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", - "https://bcr.bazel.build/modules/re2/2023-09-01/source.json": "e044ce89c2883cd957a2969a43e79f7752f9656f6b20050b62f90ede21ec6eb4", + "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/MODULE.bazel": "b4963dda9b31080be1905ef085ecd7dd6cd47c05c79b9cdf83ade83ab2ab271a", + "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/source.json": "2ff292be6ef3340325ce8a045ecc326e92cbfab47c7cbab4bd85d28971b97ac4", + "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa", "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", + "https://bcr.bazel.build/modules/rules_apple/3.16.0/MODULE.bazel": "0d1caf0b8375942ce98ea944be754a18874041e4e0459401d925577624d3a54a", + "https://bcr.bazel.build/modules/rules_apple/4.1.0/MODULE.bazel": "76e10fd4a48038d3fc7c5dc6e63b7063bbf5304a2e3bd42edda6ec660eebea68", + "https://bcr.bazel.build/modules/rules_apple/4.1.0/source.json": "8ee81e1708756f81b343a5eb2b2f0b953f1d25c4ab3d4a68dc02754872e80715", "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", - "https://bcr.bazel.build/modules/rules_cc/0.0.14/MODULE.bazel": "5e343a3aac88b8d7af3b1b6d2093b55c347b8eefc2e7d1442f7a02dc8fea48ac", "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", - "https://bcr.bazel.build/modules/rules_cc/0.0.15/source.json": "48e606af0e02a716974a8b74fba6988d9f0c93af9177e28cf474bfc5fa26ab10", + "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87", + "https://bcr.bazel.build/modules/rules_cc/0.0.17/MODULE.bazel": "2ae1d8f4238ec67d7185d8861cb0a2cdf4bc608697c331b95bf990e69b62e64a", "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", + "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513", + "https://bcr.bazel.build/modules/rules_cc/0.1.2/MODULE.bazel": "557ddc3a96858ec0d465a87c0a931054d7dcfd6583af2c7ed3baf494407fd8d0", + "https://bcr.bazel.build/modules/rules_cc/0.1.5/MODULE.bazel": "88dfc9361e8b5ae1008ac38f7cdfd45ad738e4fa676a3ad67d19204f045a1fd8", + "https://bcr.bazel.build/modules/rules_cc/0.2.0/MODULE.bazel": "b5c17f90458caae90d2ccd114c81970062946f49f355610ed89bebf954f5783c", + "https://bcr.bazel.build/modules/rules_cc/0.2.13/MODULE.bazel": "eecdd666eda6be16a8d9dc15e44b5c75133405e820f620a234acc4b1fdc5aa37", + "https://bcr.bazel.build/modules/rules_cc/0.2.14/MODULE.bazel": "353c99ed148887ee89c54a17d4100ae7e7e436593d104b668476019023b58df8", + "https://bcr.bazel.build/modules/rules_cc/0.2.14/source.json": "55d0a4587c5592fad350f6e698530f4faf0e7dd15e69d43f8d87e220c78bea54", + "https://bcr.bazel.build/modules/rules_cc/0.2.8/MODULE.bazel": "f1df20f0bf22c28192a794f29b501ee2018fa37a3862a1a2132ae2940a23a642", "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", - "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", - "https://bcr.bazel.build/modules/rules_java/6.0.0/MODULE.bazel": "8a43b7df601a7ec1af61d79345c17b31ea1fedc6711fd4abfd013ea612978e39", - "https://bcr.bazel.build/modules/rules_java/6.4.0/MODULE.bazel": "e986a9fe25aeaa84ac17ca093ef13a4637f6107375f64667a15999f77db6c8f6", "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", - "https://bcr.bazel.build/modules/rules_java/7.12.2/source.json": "b0890f9cda8ff1b8e691a3ac6037b5c14b7fd4134765a3946b89f31ea02e5884", "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", - "https://bcr.bazel.build/modules/rules_java/7.3.2/MODULE.bazel": "50dece891cfdf1741ea230d001aa9c14398062f2b7c066470accace78e412bc2", "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", - "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", + "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017", + "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939", + "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2", + "https://bcr.bazel.build/modules/rules_java/9.0.3/MODULE.bazel": "1f98ed015f7e744a745e0df6e898a7c5e83562d6b759dfd475c76456dda5ccea", + "https://bcr.bazel.build/modules/rules_java/9.3.0/MODULE.bazel": "f657c72d65ac449caae9abf2e68e66c0d36f9416848c4c4903d0b3234229e7f2", + "https://bcr.bazel.build/modules/rules_java/9.3.0/source.json": "59ae7e662c3c7042b88bbb42ad12483523e234c65ebe4c51611baa43e85cb248", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", - "https://bcr.bazel.build/modules/rules_jvm_external/5.3/MODULE.bazel": "bf93870767689637164657731849fb887ad086739bd5d360d90007a581d5527d", - "https://bcr.bazel.build/modules/rules_jvm_external/6.1/MODULE.bazel": "75b5fec090dbd46cf9b7d8ea08cf84a0472d92ba3585b476f44c326eda8059c4", "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", - "https://bcr.bazel.build/modules/rules_jvm_external/6.6/MODULE.bazel": "153042249c7060536dc95b6bb9f9bb8063b8a0b0cb7acdb381bddbc2374aed55", - "https://bcr.bazel.build/modules/rules_jvm_external/6.6/source.json": "b1d7ffc3877e5a76e6e48e6bce459cbb1712c90eba14861b112bd299587a534d", - "https://bcr.bazel.build/modules/rules_kotlin/1.9.0/MODULE.bazel": "ef85697305025e5a61f395d4eaede272a5393cee479ace6686dba707de804d59", + "https://bcr.bazel.build/modules/rules_jvm_external/6.7/MODULE.bazel": "e717beabc4d091ecb2c803c2d341b88590e9116b8bf7947915eeb33aab4f96dd", + "https://bcr.bazel.build/modules/rules_jvm_external/6.9/MODULE.bazel": "07c5db05527db7744a54fcffd653e1550d40e0540207a7f7e6d0a4de5bef8274", + "https://bcr.bazel.build/modules/rules_jvm_external/6.9/source.json": "b12970214f3cc144b26610caeb101fa622d910f1ab3d98f0bae1058edbd00bd4", "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", @@ -109,92 +151,80 @@ "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", + "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", - "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", - "https://bcr.bazel.build/modules/rules_proto/7.0.2/source.json": "1e5e7260ae32ef4f2b52fd1d0de8d03b606a44c91b694d2f1afb1d3b28a48ce1", + "https://bcr.bazel.build/modules/rules_proto/7.1.0/MODULE.bazel": "002d62d9108f75bb807cd56245d45648f38275cb3a99dcd45dfb864c5d74cb96", + "https://bcr.bazel.build/modules/rules_proto/7.1.0/source.json": "39f89066c12c24097854e8f57ab8558929f9c8d474d34b2c00ac04630ad8940e", "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", - "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", + "https://bcr.bazel.build/modules/rules_python/0.33.2/MODULE.bazel": "3e036c4ad8d804a4dad897d333d8dce200d943df4827cb849840055be8d2e937", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", - "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", - "https://bcr.bazel.build/modules/rules_python/0.40.0/source.json": "939d4bd2e3110f27bfb360292986bb79fd8dcefb874358ccd6cdaa7bda029320", + "https://bcr.bazel.build/modules/rules_python/1.3.0/MODULE.bazel": "8361d57eafb67c09b75bf4bbe6be360e1b8f4f18118ab48037f2bd50aa2ccb13", + "https://bcr.bazel.build/modules/rules_python/1.4.1/MODULE.bazel": "8991ad45bdc25018301d6b7e1d3626afc3c8af8aaf4bc04f23d0b99c938b73a6", + "https://bcr.bazel.build/modules/rules_python/1.6.0/MODULE.bazel": "7e04ad8f8d5bea40451cf80b1bd8262552aa73f841415d20db96b7241bd027d8", + "https://bcr.bazel.build/modules/rules_python/1.7.0/MODULE.bazel": "d01f995ecd137abf30238ad9ce97f8fc3ac57289c8b24bd0bf53324d937a14f8", + "https://bcr.bazel.build/modules/rules_python/1.8.0/MODULE.bazel": "c151c025dbcc93d8f62ab68ecc313c9176a868a0e6386981bf2a12aec77cbe7b", + "https://bcr.bazel.build/modules/rules_python/1.8.0/source.json": "356397eed5b46971d8c585c92098d70495078a80bf18bebcb4209f44b495f3e6", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", - "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", + "https://bcr.bazel.build/modules/rules_shell/0.6.1/MODULE.bazel": "72e76b0eea4e81611ef5452aa82b3da34caca0c8b7b5c0c9584338aa93bae26b", + "https://bcr.bazel.build/modules/rules_shell/0.6.1/source.json": "20ec05cd5e592055e214b2da8ccb283c7f2a421ea0dc2acbf1aa792e11c03d0c", + "https://bcr.bazel.build/modules/rules_swift/1.16.0/MODULE.bazel": "4a09f199545a60d09895e8281362b1ff3bb08bbde69c6fc87aff5b92fcc916ca", + "https://bcr.bazel.build/modules/rules_swift/2.1.1/MODULE.bazel": "494900a80f944fc7aa61500c2073d9729dff0b764f0e89b824eb746959bc1046", + "https://bcr.bazel.build/modules/rules_swift/2.4.0/MODULE.bazel": "1639617eb1ede28d774d967a738b4a68b0accb40650beadb57c21846beab5efd", + "https://bcr.bazel.build/modules/rules_swift/3.1.2/MODULE.bazel": "72c8f5cf9d26427cee6c76c8e3853eb46ce6b0412a081b2b6db6e8ad56267400", + "https://bcr.bazel.build/modules/rules_swift/3.1.2/source.json": "e85761f3098a6faf40b8187695e3de6d97944e98abd0d8ce579cb2daf6319a66", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", - "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef", "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", - "https://bcr.bazel.build/modules/stardoc/0.7.1/MODULE.bazel": "3548faea4ee5dda5580f9af150e79d0f6aea934fc60c1cc50f4efdd9420759e7", - "https://bcr.bazel.build/modules/stardoc/0.7.1/source.json": "b6500ffcd7b48cd72c29bb67bcac781e12701cc0d6d55d266a652583cfcdab01", + "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", + "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/MODULE.bazel": "5e463fbfba7b1701d957555ed45097d7f984211330106ccd1352c6e0af0dcf91", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.2/MODULE.bazel": "75aab2373a4bbe2a1260b9bf2a1ebbdbf872d3bd36f80bff058dccd82e89422f", + "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.2/source.json": "5fba48bbe0ba48761f9e9f75f92876cafb5d07c0ce059cc7a8027416de94a05b", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", - "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/MODULE.bazel": "eec517b5bbe5492629466e11dae908d043364302283de25581e3eb944326c4ca", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/source.json": "22bc55c47af97246cfc093d0acf683a7869377de362b5d1c552c2c2e16b7a806", "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" }, "selectedYankedVersions": {}, "moduleExtensions": { - "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { + "@@pybind11_bazel+//:internal_configure.bzl%internal_configure_extension": { "general": { - "bzlTransitiveDigest": "PjIds3feoYE8SGbbIq2SFTZy3zmxeO2tQevJZNDo7iY=", - "usagesDigest": "+hz7IHWN6A1oVJJWNDB6yZRG+RYhF76wAYItpAeIUIg=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, + "bzlTransitiveDigest": "06cynZ1bCvvy8zHPrrDlXq+Z68xmjctHpfFxi+zEpJY=", + "usagesDigest": "D1r3lfzMuUBFxgG8V6o0bQTLMk3GkaGOaPzw53wrwyw=", + "recordedInputs": [ + "REPO_MAPPING:pybind11_bazel+,bazel_tools bazel_tools", + "FILE:@@pybind11_bazel+//MODULE.bazel e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34" + ], "generatedRepoSpecs": { - "local_config_apple_cc_toolchains": { - "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf_toolchains", - "attributes": {} - }, - "local_config_apple_cc": { - "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [ - [ - "apple_support~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@platforms//host:extension.bzl%host_platform": { - "general": { - "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "hgylFkgWSg0ulUwWZzEM1aIftlUnbmw2ynWLdEfHnZc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "host_platform": { - "bzlFile": "@@platforms//host:extension.bzl", - "ruleClassName": "host_platform_repo", - "attributes": {} + "pybind11": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "build_file": "@@pybind11_bazel+//:pybind11-BUILD.bazel", + "strip_prefix": "pybind11-2.12.0", + "urls": [ + "https://github.com/pybind/pybind11/archive/v2.12.0.zip" + ] + } } - }, - "recordedRepoMappingEntries": [] + } } }, - "@@rules_kotlin~//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { + "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { - "bzlTransitiveDigest": "fus14IFJ/1LGWWGKPH/U18VnJCoMjfDt1ckahqCnM0A=", - "usagesDigest": "aJF6fLy82rR95Ff5CZPAqxNoFgOMLMN5ImfBS0nhnkg=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, + "bzlTransitiveDigest": "ABI1D/sbS1ovwaW/kHDoj8nnXjQ0oKU9fzmzEG4iT8o=", + "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", + "recordedInputs": [ + "REPO_MAPPING:rules_kotlin+,bazel_tools bazel_tools" + ], "generatedRepoSpecs": { "com_github_jetbrains_kotlin_git": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", - "ruleClassName": "kotlin_compiler_git_repository", + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository", "attributes": { "urls": [ "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" @@ -203,16 +233,14 @@ } }, "com_github_jetbrains_kotlin": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", - "ruleClassName": "kotlin_capabilities_repository", + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_capabilities_repository", "attributes": { "git_repository_name": "com_github_jetbrains_kotlin_git", "compiler_version": "1.9.23" } }, "com_github_google_ksp": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:ksp.bzl", - "ruleClassName": "ksp_compiler_plugin_repository", + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:ksp.bzl%ksp_compiler_plugin_repository", "attributes": { "urls": [ "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" @@ -222,8 +250,7 @@ } }, "com_github_pinterest_ktlint": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", "attributes": { "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", "urls": [ @@ -233,8 +260,7 @@ } }, "rules_android": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", "attributes": { "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", "strip_prefix": "rules_android-0.1.1", @@ -243,15 +269,207 @@ ] } } - }, - "recordedRepoMappingEntries": [ - [ - "rules_kotlin~", - "bazel_tools", - "bazel_tools" - ] - ] + } + } + }, + "@@rules_python+//python/extensions:config.bzl%config": { + "general": { + "bzlTransitiveDigest": "wUM/eFwo5Zy7rn36nZ9ZxN9tXhmcWMVGXIExerGg6gM=", + "usagesDigest": "EocbSr4I3/Shk4QaFool8b8navUiUFqgzF9bOaaYfFk=", + "recordedInputs": [ + "REPO_MAPPING:rules_python+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_python+,pypi__build rules_python++config+pypi__build", + "REPO_MAPPING:rules_python+,pypi__click rules_python++config+pypi__click", + "REPO_MAPPING:rules_python+,pypi__colorama rules_python++config+pypi__colorama", + "REPO_MAPPING:rules_python+,pypi__importlib_metadata rules_python++config+pypi__importlib_metadata", + "REPO_MAPPING:rules_python+,pypi__installer rules_python++config+pypi__installer", + "REPO_MAPPING:rules_python+,pypi__more_itertools rules_python++config+pypi__more_itertools", + "REPO_MAPPING:rules_python+,pypi__packaging rules_python++config+pypi__packaging", + "REPO_MAPPING:rules_python+,pypi__pep517 rules_python++config+pypi__pep517", + "REPO_MAPPING:rules_python+,pypi__pip rules_python++config+pypi__pip", + "REPO_MAPPING:rules_python+,pypi__pip_tools rules_python++config+pypi__pip_tools", + "REPO_MAPPING:rules_python+,pypi__pyproject_hooks rules_python++config+pypi__pyproject_hooks", + "REPO_MAPPING:rules_python+,pypi__setuptools rules_python++config+pypi__setuptools", + "REPO_MAPPING:rules_python+,pypi__tomli rules_python++config+pypi__tomli", + "REPO_MAPPING:rules_python+,pypi__wheel rules_python++config+pypi__wheel", + "REPO_MAPPING:rules_python+,pypi__zipp rules_python++config+pypi__zipp" + ], + "generatedRepoSpecs": { + "rules_python_internal": { + "repoRuleId": "@@rules_python+//python/private:internal_config_repo.bzl%internal_config_repo", + "attributes": { + "transition_setting_generators": {}, + "transition_settings": [] + } + }, + "pypi__build": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "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:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__click": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", + "sha256": "ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__colorama": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", + "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__importlib_metadata": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/2d/0a/679461c511447ffaf176567d5c496d1de27cbe34a87df6677d7171b2fbd4/importlib_metadata-7.1.0-py3-none-any.whl", + "sha256": "30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__installer": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl", + "sha256": "05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__more_itertools": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/50/e2/8e10e465ee3987bb7c9ab69efb91d867d93959095f4807db102d07995d94/more_itertools-10.2.0-py3-none-any.whl", + "sha256": "686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__packaging": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/49/df/1fceb2f8900f8639e278b056416d49134fb8d84c5942ffaa01ad34782422/packaging-24.0-py3-none-any.whl", + "sha256": "2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__pep517": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/25/6e/ca4a5434eb0e502210f591b97537d322546e4833dcb4d470a48c375c5540/pep517-0.13.1-py3-none-any.whl", + "sha256": "31b206f67165b3536dd577c5c3f1518e8fbaf38cbc57efff8369a392feff1721", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__pip": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/8a/6a/19e9fe04fca059ccf770861c7d5721ab4c2aebc539889e97c7977528a53b/pip-24.0-py3-none-any.whl", + "sha256": "ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__pip_tools": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "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:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__pyproject_hooks": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/ae/f3/431b9d5fe7d14af7a32340792ef43b8a714e7726f1d7b69cc4e8e7a3f1d7/pyproject_hooks-1.1.0-py3-none-any.whl", + "sha256": "7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__setuptools": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/90/99/158ad0609729111163fc1f674a5a42f2605371a4cf036d0441070e2f7455/setuptools-78.1.1-py3-none-any.whl", + "sha256": "c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__tomli": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "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:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__wheel": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/7d/cd/d7460c9a869b16c3dd4e1e403cce337df165368c71d6af229a74699622ce/wheel-0.43.0-py3-none-any.whl", + "sha256": "55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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" + } + }, + "pypi__zipp": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "url": "https://files.pythonhosted.org/packages/da/55/a03fd7240714916507e1fcf7ae355bd9d9ed2e6db492595f1a67f61681be/zipp-3.18.2-py3-none-any.whl", + "sha256": "dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e", + "type": "zip", + "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.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 to avoid non-determinism.\n \"**/*.py\",\n \"**/*.pyc\",\n \"**/*.pyc.*\", # During pyc creation, temp files named *.pyc.NNN are created\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+//python/uv:uv.bzl%uv": { + "general": { + "bzlTransitiveDigest": "ijW9KS7qsIY+yBVvJ+Nr1mzwQox09j13DnE3iIwaeTM=", + "usagesDigest": "yXvWfXAzpBeW71mWgwU3AqAzXX/dFACnx12eYvBsJ8w=", + "recordedInputs": [ + "REPO_MAPPING:rules_python+,bazel_tools bazel_tools", + "REPO_MAPPING:rules_python+,platforms platforms" + ], + "generatedRepoSpecs": { + "uv": { + "repoRuleId": "@@rules_python+//python/uv/private:uv_toolchains_repo.bzl%uv_toolchains_repo", + "attributes": { + "toolchain_type": "'@@rules_python+//python/uv:uv_toolchain_type'", + "toolchain_names": [ + "none" + ], + "toolchain_implementations": { + "none": "'@@rules_python+//python:none'" + }, + "toolchain_compatible_with": { + "none": [ + "@platforms//:incompatible" + ] + }, + "toolchain_target_settings": {} + } + } + } } } - } + }, + "facts": {} } diff --git a/examples/demoapp/BUILD b/examples/demoapp/BUILD index c6e1f60..36f9afc 100644 --- a/examples/demoapp/BUILD +++ b/examples/demoapp/BUILD @@ -10,6 +10,7 @@ # to local path "//springboot" work here. But you will need to change them to: # "@rules_spring//springboot" when you consume the official release via http_archive. +load("@rules_java//java:defs.bzl", "java_library", "java_test") load("//springboot:springboot.bzl", "springboot") load("//springboot/deps_filter_rules_legacy:deps_filter.bzl", "deps_filter") load("//tools/license:licenses_used.bzl", "licenses_used") diff --git a/examples/demoapp/libs/lib1/BUILD b/examples/demoapp/libs/lib1/BUILD index e2bacfe..785ae56 100644 --- a/examples/demoapp/libs/lib1/BUILD +++ b/examples/demoapp/libs/lib1/BUILD @@ -5,6 +5,8 @@ # For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause # +load("@rules_java//java:defs.bzl", "java_library", "java_test") + deps = [ "@maven//:org_slf4j_slf4j_api", ] diff --git a/examples/demoapp/libs/lib2/BUILD b/examples/demoapp/libs/lib2/BUILD index 92de7ad..9af76de 100644 --- a/examples/demoapp/libs/lib2/BUILD +++ b/examples/demoapp/libs/lib2/BUILD @@ -5,6 +5,8 @@ # For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause # +load("@rules_java//java:defs.bzl", "java_library", "java_test") + deps = [ "@maven//:org_slf4j_slf4j_api", ] diff --git a/examples/demoapp/libs/lib3_neverlink/BUILD b/examples/demoapp/libs/lib3_neverlink/BUILD index 14f96ca..9e01dae 100644 --- a/examples/demoapp/libs/lib3_neverlink/BUILD +++ b/examples/demoapp/libs/lib3_neverlink/BUILD @@ -5,6 +5,8 @@ # For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause # +load("@rules_java//java:defs.bzl", "java_library", "java_test") + deps = [ "@maven//:org_slf4j_slf4j_api", ] @@ -17,11 +19,11 @@ test_deps = [ java_library( name = "lib3_neverlink", srcs = glob(["src/main/java/**/*.java"]), - visibility = ["//visibility:public"], - deps = deps, # Signals that this is a compile only dep neverlink = 1, + visibility = ["//visibility:public"], + deps = deps, ) java_test( diff --git a/examples/helloworld/BUILD b/examples/helloworld/BUILD index 2ed5b26..3b53ec3 100644 --- a/examples/helloworld/BUILD +++ b/examples/helloworld/BUILD @@ -10,6 +10,8 @@ # to local path "//springboot" work here. But you will need to change them to: # "@rules_spring//springboot" when you consume the official release via http_archive. +load("@rules_java//java:defs.bzl", "java_library", "java_test") + # load our Spring Boot rule load("//springboot:springboot.bzl", "springboot") @@ -27,7 +29,6 @@ springboot_deps = [ "@maven//:org_springframework_boot_spring_boot_loader_tools", "@maven//:org_springframework_boot_spring_boot_jarmode_tools", "@maven//:org_springframework_spring_webmvc", - "@maven//:javax_annotation_javax_annotation_api", ] @@ -45,9 +46,9 @@ test_deps = [ ] java_test( - name = "SampleRestUnitTest", - srcs = ["src/test/java/com/sample/SampleRestUnitTest.java"], - deps = [ ":helloworld_lib" ] + test_deps, + name = "SampleRestUnitTest", + srcs = ["src/test/java/com/sample/SampleRestUnitTest.java"], + deps = [":helloworld_lib"] + test_deps, ) # Build the app as a Spring Boot executable jar @@ -55,12 +56,12 @@ java_test( springboot( name = "helloworld", boot_app_class = "com.sample.SampleMain", - java_library = ":helloworld_lib", # SPRING BOOT 3 # The launcher class changed in between Boot2 and Boot3, so we provide the # Boot3 launcher class here (the Boot2 one is the default) - boot_launcher_class = 'org.springframework.boot.loader.launch.JarLauncher', + boot_launcher_class = "org.springframework.boot.loader.launch.JarLauncher", + java_library = ":helloworld_lib", ) springboottest_deps = [ @@ -72,6 +73,6 @@ springboottest_deps = [ java_test( name = "SampleRestFuncTest", srcs = ["src/test/java/com/sample/SampleRestFuncTest.java"], - deps = [ ":helloworld_lib" ] + test_deps + springboottest_deps, resources = glob(["src/test/resources/**"]), + deps = [":helloworld_lib"] + test_deps + springboottest_deps, ) diff --git a/examples/helloworld/libs/lib1/BUILD b/examples/helloworld/libs/lib1/BUILD index e2bacfe..785ae56 100644 --- a/examples/helloworld/libs/lib1/BUILD +++ b/examples/helloworld/libs/lib1/BUILD @@ -5,6 +5,8 @@ # For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause # +load("@rules_java//java:defs.bzl", "java_library", "java_test") + deps = [ "@maven//:org_slf4j_slf4j_api", ] diff --git a/examples/helloworld/libs/lib2/BUILD b/examples/helloworld/libs/lib2/BUILD index 92de7ad..9af76de 100644 --- a/examples/helloworld/libs/lib2/BUILD +++ b/examples/helloworld/libs/lib2/BUILD @@ -5,6 +5,8 @@ # For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause # +load("@rules_java//java:defs.bzl", "java_library", "java_test") + deps = [ "@maven//:org_slf4j_slf4j_api", ] diff --git a/maven_install.json b/maven_install.json index 51651f3..9f7bf90 100755 --- a/maven_install.json +++ b/maven_install.json @@ -1,25 +1,12 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 280632942, - "__RESOLVED_ARTIFACTS_HASH": 217268227, + "__INPUT_ARTIFACTS_HASH": 1422874178, + "__RESOLVED_ARTIFACTS_HASH": -2045843663, "conflict_resolution": { "com.google.errorprone:error_prone_annotations:2.5.1": "com.google.errorprone:error_prone_annotations:2.18.0", - "org.assertj:assertj-core:3.25.3": "org.assertj:assertj-core:3.26.3", - "org.mockito:mockito-core:4.3.1": "org.mockito:mockito-core:5.14.2" + "org.assertj:assertj-core:3.25.3": "org.assertj:assertj-core:3.26.3" }, "artifacts": { - "biz.aQute.bnd:biz.aQute.bnd.util": { - "shasums": { - "jar": "65b5bd4a0fab16812f1800c98ff74a038f37a38bfe899af382efed4efdc1e3e1" - }, - "version": "6.4.0" - }, - "biz.aQute.bnd:biz.aQute.bndlib": { - "shasums": { - "jar": "357145074872f9dbf67e629fcd237e6152707e575d735df4535282f9f588d2d8" - }, - "version": "6.4.0" - }, "ch.qos.logback:logback-classic": { "shasums": { "jar": "3e1533d0321f8815eef46750aee0111b41554f9a4644c3c4d2d404744b09f60f" @@ -68,54 +55,6 @@ }, "version": "2.18.3" }, - "com.google.auto.value:auto-value-annotations": { - "shasums": { - "jar": "37ec09b47d7ed35a99d13927db5c86fc9071f620f943ead5d757144698310852" - }, - "version": "1.8.1" - }, - "com.google.caliper:caliper": { - "shasums": { - "jar": "d54e1bfdbe9359a79e175c217b8d472555cf20da9c5c0a18bdb1ea7db979ed8e" - }, - "version": "1.0-beta-3" - }, - "com.google.caliper:caliper-api": { - "shasums": { - "jar": "374f0c6c0c1f8784cb69d885e1dcbb7498c34ca20369e0597264568530642928" - }, - "version": "1.0-beta-3" - }, - "com.google.caliper:caliper-core": { - "shasums": { - "jar": "514deac8f8b09dd4262733e0a4406a333208c899dc7ea726b03600b9bb94f192" - }, - "version": "1.0-beta-3" - }, - "com.google.caliper:caliper-runner": { - "shasums": { - "jar": "3ab58890aa01343361adedf859500d280f67813df0cedfcd165b169533b9b1fa" - }, - "version": "1.0-beta-3" - }, - "com.google.caliper:caliper-util": { - "shasums": { - "jar": "6e9af500c7020450dfdb5003d09501d512d395f431c54c7ee8f79e712463fe66" - }, - "version": "1.0-beta-3" - }, - "com.google.caliper:caliper-worker": { - "shasums": { - "jar": "315d8e51df1f60551645a0e3bf2c504d2c79762f688e6f728eb9d1d9cd9a491b" - }, - "version": "1.0-beta-3" - }, - "com.google.caliper:caliper-worker-jvm": { - "shasums": { - "jar": "e14e1ecfdf939c82abdb902105be41ff3f83c18cb968116232015f2662d065a4" - }, - "version": "1.0-beta-3" - }, "com.google.code.findbugs:jsr305": { "shasums": { "jar": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7" @@ -128,24 +67,6 @@ }, "version": "2.8.9" }, - "com.google.code.java-allocation-instrumenter:java-allocation-instrumenter": { - "shasums": { - "jar": "1ef5535a8bd41cf3072469f381b9ee6ab28275311a7499f53d6e52adf976fef0" - }, - "version": "3.3.0" - }, - "com.google.dagger:dagger": { - "shasums": { - "jar": "329d4340f24c4f5717af016c097e90668bfea2a5376e6aa9964b01cef3fd241a" - }, - "version": "2.22.1" - }, - "com.google.dagger:dagger-producers": { - "shasums": { - "jar": "f834a0082014213a68ff06a0f048d750178d02196c58b0b15beb367d32b97e35" - }, - "version": "2.22.1" - }, "com.google.errorprone:error_prone_annotations": { "shasums": { "jar": "9e6814cb71816988a4fd1b07a993a8f21bb7058d522c162b1de849e19bea54ae" @@ -164,12 +85,6 @@ }, "version": "32.0.1-jre" }, - "com.google.guava:guava-testlib": { - "shasums": { - "jar": "c97511849a5e085280f106df2b059566febd280b118d33d6a9e068d238100b63" - }, - "version": "32.0.1-jre" - }, "com.google.guava:listenablefuture": { "shasums": { "jar": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99" @@ -182,42 +97,12 @@ }, "version": "2.8" }, - "com.google.truth:truth": { - "shasums": { - "jar": "a85e03b8b6ae8780f060cfded9500a3d1b5f52808f99a2ea6da9c683313c7518" - }, - "version": "1.1.2" - }, "com.jayway.jsonpath:json-path": { "shasums": { "jar": "11a9ee6f88bb31f1450108d1cf6441377dec84aca075eb6bb2343be157575bea" }, "version": "2.9.0" }, - "com.squareup.okhttp:okhttp": { - "shasums": { - "jar": "88ac9fd1bb51f82bcc664cc1eb9c225c90dc4389d660231b4cc737bebfe7d0aa" - }, - "version": "2.7.5" - }, - "com.squareup.okio:okio": { - "shasums": { - "jar": "114bdc1f47338a68bcbc95abf2f5cdc72beeec91812f2fcd7b521c1937876266" - }, - "version": "1.6.0" - }, - "com.sun.jersey:jersey-client": { - "shasums": { - "jar": "639c825c5db580f8115bf49ffc893093526d2ed1079fbc929b6a5fbd0b2eda40" - }, - "version": "1.19.4" - }, - "com.sun.jersey:jersey-core": { - "shasums": { - "jar": "64b03198e0264849d0fc341857ebcc9c882b1909a2dc35a0972fe7d901b826e5" - }, - "version": "1.19.4" - }, "com.vaadin.external.google:android-json": { "shasums": { "jar": "dfb7bae2f404cfe0b72b4d23944698cb716b7665171812a0a4d0f5926c0fac79" @@ -230,12 +115,6 @@ }, "version": "5.1.0" }, - "info.picocli:picocli": { - "shasums": { - "jar": "b0a5159e926de8084ff066025142270443533656bc599b8bb31d14d11fd138a4" - }, - "version": "4.6.3" - }, "io.micrometer:micrometer-commons": { "shasums": { "jar": "e98485ffecb7d8cc9af47cfe627ea8bf3897915dd0f34b3e3a190d6896875b4b" @@ -286,9 +165,9 @@ }, "jakarta.inject:jakarta.inject-api": { "shasums": { - "jar": "f7dc98062fccf14126abb751b64fab12c312566e8cbdc8483598bffcea93af7c" + "jar": "c6020d26574f3c5eca0a4f28861408d947b663b977450987ec4e265dfaf168a2" }, - "version": "2.0.1" + "version": "2.0.1.MR" }, "jakarta.interceptor:jakarta.interceptor-api": { "shasums": { @@ -332,24 +211,6 @@ }, "version": "1.3.2" }, - "javax.inject:javax.inject": { - "shasums": { - "jar": "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff" - }, - "version": "1" - }, - "javax.ws.rs:jsr311-api": { - "shasums": { - "jar": "ab1534b73b5fa055808e6598a5e73b599ccda28c3159c3c0908977809422ee4a" - }, - "version": "1.1.1" - }, - "joda-time:joda-time": { - "shasums": { - "jar": "dd8e7c92185a678d1b7b933f31209b6203c8ffa91e9880475a1be0346b9617e3" - }, - "version": "2.10.10" - }, "junit:junit": { "shasums": { "jar": "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3" @@ -446,12 +307,6 @@ }, "version": "4.2.2" }, - "org.checkerframework:checker-compat-qual": { - "shasums": { - "jar": "d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d" - }, - "version": "2.5.3" - }, "org.checkerframework:checker-qual": { "shasums": { "jar": "e316255bbfcd9fe50d165314b85abb2b33cb2a66a93c491db648e498a82c2de1" @@ -704,72 +559,12 @@ }, "version": "1.3.0" }, - "org.osgi:org.osgi.dto": { - "shasums": { - "jar": "cb75f3c7e48e5a31a31df22e26873346f5bf659e2dcab2369e031e4850d2ff43" - }, - "version": "1.0.0" - }, - "org.osgi:org.osgi.framework": { - "shasums": { - "jar": "ec194b7871af27681716ff05259319a5c3c9b9727e8000e9e832499b93484b4e" - }, - "version": "1.8.0" - }, - "org.osgi:org.osgi.resource": { - "shasums": { - "jar": "81fc50f1f1d38a4af28e131907d4afe213249aab05060484edca0e60c4af9b4a" - }, - "version": "1.0.0" - }, - "org.osgi:org.osgi.service.log": { - "shasums": { - "jar": "ff6710c4856d32684cf3ebdc45248f41036ff734f2b03bbc08c4609a61fecfa0" - }, - "version": "1.3.0" - }, - "org.osgi:org.osgi.service.repository": { - "shasums": { - "jar": "c5553e95b459529192433486d4c4cc22ff45a2eae4968484f9f717319264a532" - }, - "version": "1.1.0" - }, - "org.osgi:org.osgi.util.function": { - "shasums": { - "jar": "208819c7c71690c15a6bb8b187474e7f9d0147946b680182a62b9f222ae014ec" - }, - "version": "1.2.0" - }, - "org.osgi:org.osgi.util.promise": { - "shasums": { - "jar": "fef86e64f584d012a16a0306160764f6179663b90988a226c4641b920f3a4b36" - }, - "version": "1.2.0" - }, - "org.osgi:org.osgi.util.tracker": { - "shasums": { - "jar": "7d78c2cc9bcb6421c24f17aa097866ce8d9115c219a4f8d6cc753bc4dfb97efa" - }, - "version": "1.5.4" - }, - "org.osgi:osgi.annotation": { - "shasums": { - "jar": "a0e8a4c362bd3600812f37b0ea45fba966c7bc049d01fed56a09ecc74082759e" - }, - "version": "8.0.1" - }, "org.ow2.asm:asm": { "shasums": { "jar": "8cadd43ac5eb6d09de05faecca38b917a040bb9139c7edeb4cc81c740b713281" }, "version": "9.7.1" }, - "org.ow2.asm:asm-analysis": { - "shasums": { - "jar": "be922aae60ff1ff1768e8e6544a38a7f92bd0a6d6b0b9791f94955d1bd453de2" - }, - "version": "7.2" - }, "org.ow2.asm:asm-commons": { "shasums": { "jar": "9a579b54d292ad9be171d4313fd4739c635592c2b5ac3a459bbd1049cddec6a0" @@ -782,12 +577,6 @@ }, "version": "9.7.1" }, - "org.ow2.asm:asm-util": { - "shasums": { - "jar": "6e24913b021ffacfe8e7e053d6e0ccc731941148cfa078d4f1ed3d96904530f8" - }, - "version": "7.2" - }, "org.skyscreamer:jsonassert": { "shasums": { "jar": "719095c07d4203961320da593441d8b3b643c18eb1d81aa98ea933bb7eb351ba" @@ -1072,18 +861,6 @@ } }, "dependencies": { - "biz.aQute.bnd:biz.aQute.bndlib": [ - "biz.aQute.bnd:biz.aQute.bnd.util", - "org.osgi:org.osgi.dto", - "org.osgi:org.osgi.framework", - "org.osgi:org.osgi.resource", - "org.osgi:org.osgi.service.log", - "org.osgi:org.osgi.service.repository", - "org.osgi:org.osgi.util.function", - "org.osgi:org.osgi.util.promise", - "org.osgi:org.osgi.util.tracker", - "org.slf4j:slf4j-api" - ], "ch.qos.logback:logback-classic": [ "ch.qos.logback:logback-core", "org.slf4j:slf4j-api" @@ -1105,79 +882,6 @@ "com.fasterxml.jackson.core:jackson-core", "com.fasterxml.jackson.core:jackson-databind" ], - "com.google.caliper:caliper": [ - "com.google.caliper:caliper-core", - "com.google.caliper:caliper-runner", - "com.google.caliper:caliper-worker-jvm", - "com.google.code.java-allocation-instrumenter:java-allocation-instrumenter", - "com.google.dagger:dagger", - "com.google.guava:guava", - "com.sun.jersey:jersey-client" - ], - "com.google.caliper:caliper-api": [ - "com.google.guava:guava", - "joda-time:joda-time" - ], - "com.google.caliper:caliper-core": [ - "com.google.auto.value:auto-value-annotations", - "com.google.caliper:caliper-api", - "com.google.caliper:caliper-util", - "com.google.dagger:dagger", - "com.google.guava:guava", - "com.squareup.okhttp:okhttp", - "joda-time:joda-time" - ], - "com.google.caliper:caliper-runner": [ - "com.google.caliper:caliper-api", - "com.google.caliper:caliper-core", - "com.google.caliper:caliper-util", - "com.google.dagger:dagger", - "com.google.dagger:dagger-producers", - "com.google.guava:guava", - "com.squareup.okhttp:okhttp", - "joda-time:joda-time" - ], - "com.google.caliper:caliper-util": [ - "com.google.code.gson:gson", - "com.google.dagger:dagger", - "com.google.guava:guava", - "joda-time:joda-time" - ], - "com.google.caliper:caliper-worker": [ - "com.google.caliper:caliper-api", - "com.google.caliper:caliper-core", - "com.google.caliper:caliper-util", - "com.google.dagger:dagger", - "com.google.guava:guava", - "com.squareup.okhttp:okhttp", - "joda-time:joda-time" - ], - "com.google.caliper:caliper-worker-jvm": [ - "com.google.caliper:caliper-core", - "com.google.caliper:caliper-worker", - "com.google.code.java-allocation-instrumenter:java-allocation-instrumenter", - "com.google.dagger:dagger", - "com.google.guava:guava", - "com.sun.jersey:jersey-client" - ], - "com.google.code.java-allocation-instrumenter:java-allocation-instrumenter": [ - "com.google.guava:guava", - "javax.annotation:javax.annotation-api", - "org.ow2.asm:asm", - "org.ow2.asm:asm-analysis", - "org.ow2.asm:asm-commons", - "org.ow2.asm:asm-tree", - "org.ow2.asm:asm-util" - ], - "com.google.dagger:dagger": [ - "javax.inject:javax.inject" - ], - "com.google.dagger:dagger-producers": [ - "com.google.dagger:dagger", - "com.google.guava:guava", - "javax.inject:javax.inject", - "org.checkerframework:checker-compat-qual" - ], "com.google.guava:guava": [ "com.google.code.findbugs:jsr305", "com.google.errorprone:error_prone_annotations", @@ -1186,35 +890,10 @@ "com.google.j2objc:j2objc-annotations", "org.checkerframework:checker-qual" ], - "com.google.guava:guava-testlib": [ - "com.google.code.findbugs:jsr305", - "com.google.errorprone:error_prone_annotations", - "com.google.guava:guava", - "com.google.j2objc:j2objc-annotations", - "junit:junit", - "org.checkerframework:checker-qual" - ], - "com.google.truth:truth": [ - "com.google.auto.value:auto-value-annotations", - "com.google.errorprone:error_prone_annotations", - "com.google.guava:guava", - "junit:junit", - "org.checkerframework:checker-qual", - "org.ow2.asm:asm" - ], "com.jayway.jsonpath:json-path": [ "net.minidev:json-smart", "org.slf4j:slf4j-api" ], - "com.squareup.okhttp:okhttp": [ - "com.squareup.okio:okio" - ], - "com.sun.jersey:jersey-client": [ - "com.sun.jersey:jersey-core" - ], - "com.sun.jersey:jersey-core": [ - "javax.ws.rs:jsr311-api" - ], "com.zaxxer:HikariCP": [ "org.slf4j:slf4j-api" ], @@ -1442,19 +1121,6 @@ "org.junit.jupiter:junit-jupiter-api", "org.mockito:mockito-core" ], - "org.osgi:org.osgi.util.function": [ - "org.osgi:osgi.annotation" - ], - "org.osgi:org.osgi.util.promise": [ - "org.osgi:org.osgi.util.function", - "org.osgi:osgi.annotation" - ], - "org.osgi:org.osgi.util.tracker": [ - "org.osgi:osgi.annotation" - ], - "org.ow2.asm:asm-analysis": [ - "org.ow2.asm:asm-tree" - ], "org.ow2.asm:asm-commons": [ "org.ow2.asm:asm", "org.ow2.asm:asm-tree" @@ -1462,11 +1128,6 @@ "org.ow2.asm:asm-tree": [ "org.ow2.asm:asm" ], - "org.ow2.asm:asm-util": [ - "org.ow2.asm:asm", - "org.ow2.asm:asm-analysis", - "org.ow2.asm:asm-tree" - ], "org.skyscreamer:jsonassert": [ "com.vaadin.external.google:android-json" ], @@ -1687,161 +1348,6 @@ ] }, "packages": { - "biz.aQute.bnd:biz.aQute.bnd.util": [ - "aQute.bnd.classfile", - "aQute.bnd.classfile.builder", - "aQute.bnd.classfile.preview", - "aQute.bnd.exceptions", - "aQute.bnd.memoize", - "aQute.bnd.result", - "aQute.bnd.signatures", - "aQute.bnd.stream", - "aQute.bnd.unmodifiable", - "aQute.lib.io", - "aQute.lib.stringrover", - "aQute.libg.glob" - ], - "biz.aQute.bnd:biz.aQute.bndlib": [ - "aQute.bnd.annotation", - "aQute.bnd.annotation.baseline", - "aQute.bnd.annotation.component", - "aQute.bnd.annotation.headers", - "aQute.bnd.annotation.jpms", - "aQute.bnd.annotation.licenses", - "aQute.bnd.annotation.metatype", - "aQute.bnd.annotation.plugin", - "aQute.bnd.annotation.service", - "aQute.bnd.annotation.spi", - "aQute.bnd.annotation.xml", - "aQute.bnd.apiguardian.api", - "aQute.bnd.aspectj.plugin", - "aQute.bnd.build", - "aQute.bnd.build.api", - "aQute.bnd.build.model", - "aQute.bnd.build.model.clauses", - "aQute.bnd.build.model.conversions", - "aQute.bnd.buildtool", - "aQute.bnd.bundle.annotations", - "aQute.bnd.cdi", - "aQute.bnd.classindex", - "aQute.bnd.compatibility", - "aQute.bnd.component", - "aQute.bnd.component.annotations", - "aQute.bnd.component.error", - "aQute.bnd.connection.settings", - "aQute.bnd.differ", - "aQute.bnd.exporter.executable", - "aQute.bnd.exporter.runbundles", - "aQute.bnd.filerepo", - "aQute.bnd.header", - "aQute.bnd.help", - "aQute.bnd.help.instructions", - "aQute.bnd.http", - "aQute.bnd.junit", - "aQute.bnd.make", - "aQute.bnd.make.calltree", - "aQute.bnd.make.component", - "aQute.bnd.make.coverage", - "aQute.bnd.make.metatype", - "aQute.bnd.maven", - "aQute.bnd.maven.support", - "aQute.bnd.metatype", - "aQute.bnd.metatype.annotations", - "aQute.bnd.obr", - "aQute.bnd.osgi", - "aQute.bnd.osgi.eclipse", - "aQute.bnd.osgi.repository", - "aQute.bnd.osgi.resource", - "aQute.bnd.plugin.ant", - "aQute.bnd.plugin.eclipse", - "aQute.bnd.plugin.git", - "aQute.bnd.plugin.gradle", - "aQute.bnd.plugin.jpms", - "aQute.bnd.plugin.maven", - "aQute.bnd.plugin.spi", - "aQute.bnd.print", - "aQute.bnd.properties", - "aQute.bnd.remoteworkspace.client", - "aQute.bnd.remoteworkspace.server", - "aQute.bnd.resource.repository", - "aQute.bnd.service", - "aQute.bnd.service.action", - "aQute.bnd.service.classparser", - "aQute.bnd.service.clipboard", - "aQute.bnd.service.diff", - "aQute.bnd.service.export", - "aQute.bnd.service.extension", - "aQute.bnd.service.externalplugin", - "aQute.bnd.service.generate", - "aQute.bnd.service.library", - "aQute.bnd.service.lifecycle", - "aQute.bnd.service.maven", - "aQute.bnd.service.message", - "aQute.bnd.service.progress", - "aQute.bnd.service.release", - "aQute.bnd.service.remotelaunch", - "aQute.bnd.service.remoteworkspace", - "aQute.bnd.service.reporter", - "aQute.bnd.service.repository", - "aQute.bnd.service.resolve.hook", - "aQute.bnd.service.specifications", - "aQute.bnd.service.url", - "aQute.bnd.service.verifier", - "aQute.bnd.signing", - "aQute.bnd.url", - "aQute.bnd.util.dto", - "aQute.bnd.util.home", - "aQute.bnd.util.repository", - "aQute.bnd.version", - "aQute.bnd.version.maven", - "aQute.bnd.xmlattribute", - "aQute.lib.aspects", - "aQute.lib.base64", - "aQute.lib.collections", - "aQute.lib.concurrent.serial", - "aQute.lib.concurrentinit", - "aQute.lib.converter", - "aQute.lib.date", - "aQute.lib.deployer", - "aQute.lib.fileset", - "aQute.lib.filter", - "aQute.lib.formatter", - "aQute.lib.hex", - "aQute.lib.hierarchy", - "aQute.lib.io", - "aQute.lib.json", - "aQute.lib.link", - "aQute.lib.manifest", - "aQute.lib.mavenpasswordobfuscator", - "aQute.lib.persistentmap", - "aQute.lib.redirect", - "aQute.lib.settings", - "aQute.lib.specinterface", - "aQute.lib.spring", - "aQute.lib.stringrover", - "aQute.lib.strings", - "aQute.lib.tag", - "aQute.lib.utf8properties", - "aQute.lib.watcher", - "aQute.lib.xml", - "aQute.lib.xpath", - "aQute.lib.zip", - "aQute.libg.command", - "aQute.libg.cryptography", - "aQute.libg.filelock", - "aQute.libg.generics", - "aQute.libg.glob", - "aQute.libg.gzip", - "aQute.libg.ints", - "aQute.libg.map", - "aQute.libg.qtokens", - "aQute.libg.reporter", - "aQute.libg.reporter.slf4j", - "aQute.libg.sed", - "aQute.libg.tuple", - "aQute.libg.uri", - "aQute.service.reporter" - ], "ch.qos.logback:logback-classic": [ "ch.qos.logback.classic", "ch.qos.logback.classic.boolex", @@ -1972,54 +1478,6 @@ "com.fasterxml.jackson.module:jackson-module-parameter-names": [ "com.fasterxml.jackson.module.paramnames" ], - "com.google.auto.value:auto-value-annotations": [ - "com.google.auto.value", - "com.google.auto.value.extension.memoized", - "com.google.auto.value.extension.serializable", - "com.google.auto.value.extension.toprettystring" - ], - "com.google.caliper:caliper": [ - "com.google.caliper.runner", - "com.google.caliper.runner.instrument", - "com.google.caliper.runner.resultprocessor" - ], - "com.google.caliper:caliper-api": [ - "com.google.caliper", - "com.google.caliper.api", - "com.google.caliper.model" - ], - "com.google.caliper:caliper-core": [ - "com.google.caliper.bridge", - "com.google.caliper.core", - "com.google.caliper.memory" - ], - "com.google.caliper:caliper-runner": [ - "com.google.caliper.runner", - "com.google.caliper.runner.config", - "com.google.caliper.runner.experiment", - "com.google.caliper.runner.instrument", - "com.google.caliper.runner.options", - "com.google.caliper.runner.resultprocessor", - "com.google.caliper.runner.server", - "com.google.caliper.runner.target", - "com.google.caliper.runner.worker", - "com.google.caliper.runner.worker.dryrun", - "com.google.caliper.runner.worker.targetinfo", - "com.google.caliper.runner.worker.trial" - ], - "com.google.caliper:caliper-util": [ - "com.google.caliper.json", - "com.google.caliper.util" - ], - "com.google.caliper:caliper-worker": [ - "com.google.caliper.worker", - "com.google.caliper.worker.connection", - "com.google.caliper.worker.handler", - "com.google.caliper.worker.instrument" - ], - "com.google.caliper:caliper-worker-jvm": [ - "com.google.caliper.worker" - ], "com.google.code.findbugs:jsr305": [ "javax.annotation", "javax.annotation.concurrent", @@ -2036,48 +1494,6 @@ "com.google.gson.reflect", "com.google.gson.stream" ], - "com.google.code.java-allocation-instrumenter:java-allocation-instrumenter": [ - "com.google.monitoring.runtime.instrumentation", - "com.google.monitoring.runtime.instrumentation.asm", - "com.google.monitoring.runtime.instrumentation.asm.commons", - "com.google.monitoring.runtime.instrumentation.asm.signature", - "com.google.monitoring.runtime.instrumentation.asm.tree", - "com.google.monitoring.runtime.instrumentation.asm.tree.analysis", - "com.google.monitoring.runtime.instrumentation.asm.util", - "com.google.monitoring.runtime.instrumentation.checker.nullness.compatqual", - "com.google.monitoring.runtime.instrumentation.common.annotations", - "com.google.monitoring.runtime.instrumentation.common.base", - "com.google.monitoring.runtime.instrumentation.common.base.internal", - "com.google.monitoring.runtime.instrumentation.common.cache", - "com.google.monitoring.runtime.instrumentation.common.collect", - "com.google.monitoring.runtime.instrumentation.common.escape", - "com.google.monitoring.runtime.instrumentation.common.eventbus", - "com.google.monitoring.runtime.instrumentation.common.graph", - "com.google.monitoring.runtime.instrumentation.common.hash", - "com.google.monitoring.runtime.instrumentation.common.html", - "com.google.monitoring.runtime.instrumentation.common.io", - "com.google.monitoring.runtime.instrumentation.common.math", - "com.google.monitoring.runtime.instrumentation.common.net", - "com.google.monitoring.runtime.instrumentation.common.primitives", - "com.google.monitoring.runtime.instrumentation.common.reflect", - "com.google.monitoring.runtime.instrumentation.common.util.concurrent", - "com.google.monitoring.runtime.instrumentation.common.xml", - "com.google.monitoring.runtime.instrumentation.errorprone.annotations", - "com.google.monitoring.runtime.instrumentation.errorprone.annotations.concurrent", - "com.google.monitoring.runtime.instrumentation.j2objc.annotations", - "com.google.thirdparty.publicsuffix" - ], - "com.google.dagger:dagger": [ - "dagger", - "dagger.internal", - "dagger.multibindings" - ], - "com.google.dagger:dagger-producers": [ - "dagger.producers", - "dagger.producers.internal", - "dagger.producers.monitoring", - "dagger.producers.monitoring.internal" - ], "com.google.errorprone:error_prone_annotations": [ "com.google.errorprone.annotations", "com.google.errorprone.annotations.concurrent" @@ -2105,22 +1521,9 @@ "com.google.common.xml", "com.google.thirdparty.publicsuffix" ], - "com.google.guava:guava-testlib": [ - "com.google.common.collect.testing", - "com.google.common.collect.testing.features", - "com.google.common.collect.testing.google", - "com.google.common.collect.testing.suites", - "com.google.common.collect.testing.testers", - "com.google.common.escape.testing", - "com.google.common.testing", - "com.google.common.util.concurrent.testing" - ], "com.google.j2objc:j2objc-annotations": [ "com.google.j2objc.annotations" ], - "com.google.truth:truth": [ - "com.google.common.truth" - ], "com.jayway.jsonpath:json-path": [ "com.jayway.jsonpath", "com.jayway.jsonpath.internal", @@ -2136,53 +1539,6 @@ "com.jayway.jsonpath.spi.json", "com.jayway.jsonpath.spi.mapper" ], - "com.squareup.okhttp:okhttp": [ - "com.squareup.okhttp", - "com.squareup.okhttp.internal", - "com.squareup.okhttp.internal.framed", - "com.squareup.okhttp.internal.http", - "com.squareup.okhttp.internal.io", - "com.squareup.okhttp.internal.tls" - ], - "com.squareup.okio:okio": [ - "okio" - ], - "com.sun.jersey:jersey-client": [ - "com.sun.jersey.api.client", - "com.sun.jersey.api.client.async", - "com.sun.jersey.api.client.config", - "com.sun.jersey.api.client.filter", - "com.sun.jersey.client.impl", - "com.sun.jersey.client.impl.async", - "com.sun.jersey.client.proxy", - "com.sun.jersey.client.urlconnection", - "com.sun.ws.rs.ext" - ], - "com.sun.jersey:jersey-core": [ - "com.sun.jersey.api.provider.jaxb", - "com.sun.jersey.api.representation", - "com.sun.jersey.api.uri", - "com.sun.jersey.core.header", - "com.sun.jersey.core.header.reader", - "com.sun.jersey.core.impl.provider.entity", - "com.sun.jersey.core.impl.provider.header", - "com.sun.jersey.core.impl.provider.xml", - "com.sun.jersey.core.osgi", - "com.sun.jersey.core.provider", - "com.sun.jersey.core.provider.jaxb", - "com.sun.jersey.core.reflection", - "com.sun.jersey.core.spi.component", - "com.sun.jersey.core.spi.component.ioc", - "com.sun.jersey.core.spi.factory", - "com.sun.jersey.core.spi.scanning", - "com.sun.jersey.core.spi.scanning.uri", - "com.sun.jersey.core.util", - "com.sun.jersey.impl", - "com.sun.jersey.localization", - "com.sun.jersey.spi", - "com.sun.jersey.spi.inject", - "com.sun.jersey.spi.service" - ], "com.vaadin.external.google:android-json": [ "org.json" ], @@ -2196,9 +1552,6 @@ "com.zaxxer.hikari.pool", "com.zaxxer.hikari.util" ], - "info.picocli:picocli": [ - "picocli" - ], "io.micrometer:micrometer-commons": [ "io.micrometer.common", "io.micrometer.common.annotation", @@ -2327,23 +1680,6 @@ "javax.annotation.security", "javax.annotation.sql" ], - "javax.inject:javax.inject": [ - "javax.inject" - ], - "javax.ws.rs:jsr311-api": [ - "javax.ws.rs", - "javax.ws.rs.core", - "javax.ws.rs.ext" - ], - "joda-time:joda-time": [ - "org.joda.time", - "org.joda.time.base", - "org.joda.time.chrono", - "org.joda.time.convert", - "org.joda.time.field", - "org.joda.time.format", - "org.joda.time.tz" - ], "junit:junit": [ "junit.extensions", "junit.framework", @@ -2676,9 +2012,6 @@ "org.awaitility.reflect.exception", "org.awaitility.spi" ], - "org.checkerframework:checker-compat-qual": [ - "org.checkerframework.checker.nullness.compatqual" - ], "org.checkerframework:checker-qual": [ "org.checkerframework.checker.builder.qual", "org.checkerframework.checker.calledmethods.qual", @@ -3038,62 +2371,16 @@ "org.opentest4j:opentest4j": [ "org.opentest4j" ], - "org.osgi:org.osgi.dto": [ - "org.osgi.dto" - ], - "org.osgi:org.osgi.framework": [ - "org.osgi.framework", - "org.osgi.framework.dto", - "org.osgi.framework.hooks.bundle", - "org.osgi.framework.hooks.resolver", - "org.osgi.framework.hooks.service", - "org.osgi.framework.hooks.weaving", - "org.osgi.framework.launch", - "org.osgi.framework.namespace", - "org.osgi.framework.startlevel", - "org.osgi.framework.startlevel.dto", - "org.osgi.framework.wiring", - "org.osgi.framework.wiring.dto" - ], - "org.osgi:org.osgi.resource": [ - "org.osgi.resource", - "org.osgi.resource.dto" - ], - "org.osgi:org.osgi.service.log": [ - "org.osgi.service.log" - ], - "org.osgi:org.osgi.service.repository": [ - "org.osgi.service.repository" - ], - "org.osgi:org.osgi.util.function": [ - "org.osgi.util.function" - ], - "org.osgi:org.osgi.util.promise": [ - "org.osgi.util.promise" - ], - "org.osgi:org.osgi.util.tracker": [ - "org.osgi.util.tracker" - ], - "org.osgi:osgi.annotation": [ - "org.osgi.annotation.bundle", - "org.osgi.annotation.versioning" - ], "org.ow2.asm:asm": [ "org.objectweb.asm", "org.objectweb.asm.signature" ], - "org.ow2.asm:asm-analysis": [ - "org.objectweb.asm.tree.analysis" - ], "org.ow2.asm:asm-commons": [ "org.objectweb.asm.commons" ], "org.ow2.asm:asm-tree": [ "org.objectweb.asm.tree" ], - "org.ow2.asm:asm-util": [ - "org.objectweb.asm.util" - ], "org.skyscreamer:jsonassert": [ "org.json", "org.skyscreamer.jsonassert", @@ -4209,8 +3496,6 @@ }, "repositories": { "https://repo1.maven.org/maven2/": [ - "biz.aQute.bnd:biz.aQute.bnd.util", - "biz.aQute.bnd:biz.aQute.bndlib", "ch.qos.logback:logback-classic", "ch.qos.logback:logback-core", "com.fasterxml.jackson.core:jackson-annotations", @@ -4219,34 +3504,16 @@ "com.fasterxml.jackson.datatype:jackson-datatype-jdk8", "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", "com.fasterxml.jackson.module:jackson-module-parameter-names", - "com.google.auto.value:auto-value-annotations", - "com.google.caliper:caliper", - "com.google.caliper:caliper-api", - "com.google.caliper:caliper-core", - "com.google.caliper:caliper-runner", - "com.google.caliper:caliper-util", - "com.google.caliper:caliper-worker", - "com.google.caliper:caliper-worker-jvm", "com.google.code.findbugs:jsr305", "com.google.code.gson:gson", - "com.google.code.java-allocation-instrumenter:java-allocation-instrumenter", - "com.google.dagger:dagger", - "com.google.dagger:dagger-producers", "com.google.errorprone:error_prone_annotations", "com.google.guava:failureaccess", "com.google.guava:guava", - "com.google.guava:guava-testlib", "com.google.guava:listenablefuture", "com.google.j2objc:j2objc-annotations", - "com.google.truth:truth", "com.jayway.jsonpath:json-path", - "com.squareup.okhttp:okhttp", - "com.squareup.okio:okio", - "com.sun.jersey:jersey-client", - "com.sun.jersey:jersey-core", "com.vaadin.external.google:android-json", "com.zaxxer:HikariCP", - "info.picocli:picocli", "io.micrometer:micrometer-commons", "io.micrometer:micrometer-core", "io.micrometer:micrometer-jakarta9", @@ -4263,9 +3530,6 @@ "jakarta.websocket:jakarta.websocket-client-api", "jakarta.xml.bind:jakarta.xml.bind-api", "javax.annotation:javax.annotation-api", - "javax.inject:javax.inject", - "javax.ws.rs:jsr311-api", - "joda-time:joda-time", "junit:junit", "net.bytebuddy:byte-buddy", "net.bytebuddy:byte-buddy-agent", @@ -4282,7 +3546,6 @@ "org.assertj:assertj-core", "org.attoparser:attoparser", "org.awaitility:awaitility", - "org.checkerframework:checker-compat-qual", "org.checkerframework:checker-qual", "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-client", "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-common", @@ -4325,20 +3588,9 @@ "org.mockito:mockito-junit-jupiter", "org.objenesis:objenesis", "org.opentest4j:opentest4j", - "org.osgi:org.osgi.dto", - "org.osgi:org.osgi.framework", - "org.osgi:org.osgi.resource", - "org.osgi:org.osgi.service.log", - "org.osgi:org.osgi.service.repository", - "org.osgi:org.osgi.util.function", - "org.osgi:org.osgi.util.promise", - "org.osgi:org.osgi.util.tracker", - "org.osgi:osgi.annotation", "org.ow2.asm:asm", - "org.ow2.asm:asm-analysis", "org.ow2.asm:asm-commons", "org.ow2.asm:asm-tree", - "org.ow2.asm:asm-util", "org.skyscreamer:jsonassert", "org.slf4j:jul-to-slf4j", "org.slf4j:slf4j-api", @@ -4422,78 +3674,6 @@ "com.fasterxml.jackson.module.paramnames.ParameterNamesModule" ] }, - "com.sun.jersey:jersey-core": { - "com.sun.jersey.spi.HeaderDelegateProvider": [ - "com.sun.jersey.core.impl.provider.header.CacheControlProvider", - "com.sun.jersey.core.impl.provider.header.CookieProvider", - "com.sun.jersey.core.impl.provider.header.DateProvider", - "com.sun.jersey.core.impl.provider.header.EntityTagProvider", - "com.sun.jersey.core.impl.provider.header.LocaleProvider", - "com.sun.jersey.core.impl.provider.header.MediaTypeProvider", - "com.sun.jersey.core.impl.provider.header.NewCookieProvider", - "com.sun.jersey.core.impl.provider.header.StringProvider", - "com.sun.jersey.core.impl.provider.header.URIProvider" - ], - "com.sun.jersey.spi.inject.InjectableProvider": [ - "com.sun.jersey.core.impl.provider.xml.DocumentBuilderFactoryProvider", - "com.sun.jersey.core.impl.provider.xml.SAXParserContextProvider", - "com.sun.jersey.core.impl.provider.xml.TransformerFactoryProvider", - "com.sun.jersey.core.impl.provider.xml.XMLStreamReaderContextProvider" - ], - "javax.ws.rs.ext.MessageBodyReader": [ - "com.sun.jersey.core.impl.provider.entity.ByteArrayProvider", - "com.sun.jersey.core.impl.provider.entity.DataSourceProvider", - "com.sun.jersey.core.impl.provider.entity.DocumentProvider", - "com.sun.jersey.core.impl.provider.entity.EntityHolderReader", - "com.sun.jersey.core.impl.provider.entity.FileProvider", - "com.sun.jersey.core.impl.provider.entity.FormMultivaluedMapProvider", - "com.sun.jersey.core.impl.provider.entity.FormProvider", - "com.sun.jersey.core.impl.provider.entity.InputStreamProvider", - "com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider", - "com.sun.jersey.core.impl.provider.entity.ReaderProvider", - "com.sun.jersey.core.impl.provider.entity.RenderedImageProvider", - "com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader", - "com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader", - "com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader", - "com.sun.jersey.core.impl.provider.entity.StringProvider", - "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App", - "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General", - "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text", - "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App", - "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General", - "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text", - "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App", - "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General", - "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text", - "com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$App", - "com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General", - "com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$Text" - ], - "javax.ws.rs.ext.MessageBodyWriter": [ - "com.sun.jersey.core.impl.provider.entity.ByteArrayProvider", - "com.sun.jersey.core.impl.provider.entity.DataSourceProvider", - "com.sun.jersey.core.impl.provider.entity.DocumentProvider", - "com.sun.jersey.core.impl.provider.entity.FileProvider", - "com.sun.jersey.core.impl.provider.entity.FormMultivaluedMapProvider", - "com.sun.jersey.core.impl.provider.entity.FormProvider", - "com.sun.jersey.core.impl.provider.entity.InputStreamProvider", - "com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider", - "com.sun.jersey.core.impl.provider.entity.ReaderProvider", - "com.sun.jersey.core.impl.provider.entity.RenderedImageProvider", - "com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter", - "com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider", - "com.sun.jersey.core.impl.provider.entity.StringProvider", - "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App", - "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General", - "com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$Text", - "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App", - "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General", - "com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$Text", - "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App", - "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General", - "com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$Text" - ] - }, "io.micrometer:micrometer-observation": { "io.micrometer.context.ThreadLocalAccessor": [ "io.micrometer.observation.contextpropagation.ObservationThreadLocalAccessor" diff --git a/springboot/BUILD b/springboot/BUILD index 09eced0..6cfc2d4 100644 --- a/springboot/BUILD +++ b/springboot/BUILD @@ -10,8 +10,9 @@ # See the README.md file for detailed usage instructions. -load("@rules_python//python:defs.bzl", "py_binary", "py_test") +load("@rules_java//java:defs.bzl", "java_binary", "java_library") load("@rules_license//rules:license.bzl", "license") +load("@rules_python//python:defs.bzl", "py_binary", "py_test") # Using a package wide default ensure that all targets are associated with the # license. @@ -36,12 +37,12 @@ exports_files([ license( name = "license", + package_name = "@rules_spring//springboot", copyright_notice = "Copyright (c) 2017-2024, Salesforce", license_kinds = [ "@rules_license//licenses/spdx:Apache-2.0", ], license_text = "//:LICENSE.txt", - package_name = "@rules_spring//springboot", package_url = "https://github.com/salesforce/rules_spring", package_version = "2.4.2", visibility = ["//visibility:public"], @@ -82,6 +83,6 @@ java_library( java_binary( name = "springboot_cli", - runtime_deps = [":springboot_lib"], main_class = "com.salesforce.rulesspring.cli.SpringBootInspector", + runtime_deps = [":springboot_lib"], ) diff --git a/springboot/deps_filter_rules/deps_filter.bzl b/springboot/deps_filter_rules/deps_filter.bzl index 7b24a21..5752e15 100644 --- a/springboot/deps_filter_rules/deps_filter.bzl +++ b/springboot/deps_filter_rules/deps_filter.bzl @@ -1,14 +1,15 @@ load("@bazel_tools//tools/jdk:toolchain_utils.bzl", "find_java_toolchain") +load("@rules_java//java:defs.bzl", "JavaInfo", "java_common") def _filter_deps(deps_list, excludes, ctx, is_compile_time = False): """ Filters dependencies based on exclusion patterns. - + Args: deps_list: List of dependencies to filter excludes: Dictionary of paths that should be excluded ctx: The rule context containing exclusion patterns - + Returns: List of filtered dependencies that don't match any exclusion patterns """ @@ -19,7 +20,7 @@ def _filter_deps(deps_list, excludes, ctx, is_compile_time = False): dep_path = dep_path.replace("-ijar.jar", ".jar") dep_path = dep_path.replace("-hjar.jar", ".jar") dep_path = dep_path.replace("/header_", "/processed_") - + if excludes.get(dep_path, None) != None: if ctx.attr.verbose: print("[DEBUG] excluded: " + dep_path) @@ -32,33 +33,32 @@ def _filter_deps(deps_list, excludes, ctx, is_compile_time = False): include = False break if include: - filtered_deps.append(dep) - else: - if ctx.attr.verbose: - print("[DEBUG] excluded: " + dep_path) + filtered_deps.append(dep) + elif ctx.attr.verbose: + print("[DEBUG] excluded: " + dep_path) return filtered_deps def _pack_jars(jars, ctx, java_toolchain, label_name = ""): """ Packs multiple JARs into a single JAR. - + Args: jars: List of JARs to pack ctx: Rule context java_toolchain: Java toolchain to use label_name: Name for the output JAR - - Returns: + + Returns: The packed JAR """ if len(jars) == 0: return None if len(jars) == 1: return jars[0] - + if not label_name: fail("Error: label_name cannot be empty") - + return java_common.pack_sources( ctx.actions, output_source_jar = ctx.actions.declare_file(label_name), @@ -68,7 +68,7 @@ def _pack_jars(jars, ctx, java_toolchain, label_name = ""): def _build_exclusion_set(excluded_deps, exclude_transitives): """Builds a set of JAR paths to exclude from dependencies. - + Args: excluded_deps: List of dependencies to exclude exclude_transitives: Whether to exclude transitive deps @@ -81,36 +81,40 @@ def _build_exclusion_set(excluded_deps, exclude_transitives): # Add direct JARs for jar in dep[JavaInfo].full_compile_jars.to_list() + dep[JavaInfo].compile_jars.to_list(): excludes[jar.path] = True - + # Add transitive JARs if exclude_transitives is set to True if exclude_transitives: for jar in dep[JavaInfo].transitive_compile_time_jars.to_list() + dep[JavaInfo].transitive_runtime_jars.to_list(): excludes[jar.path] = True - + return excludes def _create_filtered_java_info(filtered_jars, filtered_compile_jar, filtered_full_compile_jar): """ Creates a JavaInfo object with filtered JARs. - + Args: filtered_jars: Dictionary containing filtered JARs filtered_compile_jar: Filtered interace/header JAR filtered_full_compile_jar: Filtered implementation JAR - + Returns: JavaInfo object with filtered JARs """ return JavaInfo( - source_jar = filtered_full_compile_jar, + source_jar = filtered_full_compile_jar, compile_jar = filtered_compile_jar, # Interface/Header JAR output_jar = filtered_full_compile_jar, # Implementation JAR # Note: filtered_transitive_compile_jars contains only interface jars (ijars) # Using impl_jar as output_jar to avoid interface jar output - deps = [JavaInfo(source_jar = None, compile_jar = jar, output_jar = filtered_full_compile_jar) - for jar in filtered_jars["transitive_compile_jars"]], - runtime_deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) - for jar in filtered_jars["transitive_runtime_jars"]], + deps = [ + JavaInfo(source_jar = None, compile_jar = jar, output_jar = filtered_full_compile_jar) + for jar in filtered_jars["transitive_compile_jars"] + ], + runtime_deps = [ + JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) + for jar in filtered_jars["transitive_runtime_jars"] + ], ) def _check_jar(full_compile_jar, compile_jar): @@ -134,25 +138,26 @@ def _get_compile_jar(full_compile_jar, index, compile_jars_list): def _aggregate_deps(declared_deps, ctx, java_toolchain): """ Aggregates and processes dependencies, handling exclusions and transitive dependencies. - + Args: declared_deps: List of all explicitly declared direct dependencies to process ctx: The rule context containing exclusion settings java_toolchain: Java toolchain to use - + Returns: Tuple of (processed JavaInfo objects, filtered direct dependencies) """ + # Build exclusion set from excluded labels excludes = _build_exclusion_set(ctx.attr.deps_exclude_labels, ctx.attr.exclude_transitives) - + # Process each dependency: # 1. Extract compile and transitive JARs # 2. Filter out excluded JARs # 3. Create new JavaInfo with filtered JARs output_java_info_list = [] output_direct_jars_list = [] - + for dep in declared_deps: # Example: lets say dep is A, and the dependency graph is: # @@ -186,20 +191,20 @@ def _aggregate_deps(declared_deps, ctx, java_toolchain): # - output_jar = A.jar # - deps = [JavaInfo for A-i.jar, B-i.jar] # - runtime_deps = [JavaInfo for A.jar, B.jar, E.jar] # E.jar not included if exclude_transitives=True - + # JAR Types: # - full_compile_jars: Implementation JARs (e.g., lib_A.jar) # - compile_jars: Interface/Header JARs (e.g., lib_A-ijar.jar) # - transitive_compile_jars: Interface JARs from transitive deps # - transitive_runtime_jars: Implementation JARs from transitive deps - + filtered_jars = { "compile_jars": _filter_deps(dep[JavaInfo].compile_jars.to_list(), excludes, ctx, is_compile_time = True), "full_compile_jars": _filter_deps(dep[JavaInfo].full_compile_jars.to_list(), excludes, ctx), "transitive_compile_jars": _filter_deps(dep[JavaInfo].transitive_compile_time_jars.to_list(), excludes, ctx, is_compile_time = True), "transitive_runtime_jars": _filter_deps(dep[JavaInfo].transitive_runtime_jars.to_list(), excludes, ctx), } - + if len(filtered_jars["full_compile_jars"]) == 0: fail("Error: " + dep.label.name + " has no implementation jars left after filtering exclusions. Remove it from 'deps' and 'runtime_deps'.") @@ -216,24 +221,23 @@ def _aggregate_deps(declared_deps, ctx, java_toolchain): return output_java_info_list, output_direct_jars_list - def _deps_filter_impl(ctx): """ Implementation of the deps_filter rule that filters out specified dependencies and JARs. - - This rule filters out specified deps and JARs from the compile-time - and runtime deps. It utilizes the 'deps_exclude_labels' attribute to omit - specific JAR labels and the 'deps_exclude_paths' attribute to exclude + + This rule filters out specified deps and JARs from the compile-time + and runtime deps. It utilizes the 'deps_exclude_labels' attribute to omit + specific JAR labels and the 'deps_exclude_paths' attribute to exclude deps based on partial paths in their filenames. If 'exclude_transitives' is set to `True` (default: `False`), any transitive deps solely required by the deps in 'deps_exclude_labels' are also excluded. These exclusions ensure the final collection includes only the necessary elements for the build process, eliminating problematic deps. - """ - + """ + if len(ctx.attr.deps) == 0 and len(ctx.attr.runtime_deps) == 0: fail("Error: atleast one of 'deps' or 'runtime_deps' must be non-empty") - + java_toolchain = find_java_toolchain(ctx, ctx.attr._java_toolchain) compile_deps_info, compile_jars = _aggregate_deps(ctx.attr.deps, ctx, java_toolchain) runtime_deps_info, runtime_jars = _aggregate_deps(ctx.attr.runtime_deps, ctx, java_toolchain) @@ -268,7 +272,6 @@ def _deps_filter_impl(ctx): ), ] - # Rule definition for filtering dependencies deps_filter = rule( implementation = _deps_filter_impl, @@ -280,7 +283,7 @@ deps_filter = rule( "exclude_transitives": attr.bool(default = False), "verbose": attr.bool(default = False), "_java_toolchain": attr.label(default = "@bazel_tools//tools/jdk:current_java_toolchain"), - }, + }, toolchains = ["@bazel_tools//tools/jdk:toolchain_type"], ) @@ -305,4 +308,4 @@ def deps_filter_rule(name, deps, runtime_deps, deps_exclude_labels = [], deps_ex exclude_transitives = exclude_transitives, verbose = verbose, testonly = testonly, - ) \ No newline at end of file + ) diff --git a/springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime/BUILD b/springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime/BUILD index 0b27056..1b8f933 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime/BUILD +++ b/springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime/BUILD @@ -1,27 +1,28 @@ +load("@rules_java//java:defs.bzl", "java_library", "java_test") load("//springboot/deps_filter_rules:dependencyset.bzl", "dependencyset") load( "//springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime:compile_and_runtime_test.bzl", - "no_filtering_test", - "with_label_exclusions_test", - "with_label_exclusions_with_exclude_transitives_test", - "with_path_exclusions_test", - "with_path_exclusions_with_exclude_transitives_test", + "case_sensitive_pattern_matching_test", + "compile_deps_only_test", + "empty_exclusion_lists_test", "multiple_exclusions_with_exclude_transitives_test", "multiple_exclusions_without_exclude_transitives_test", - "empty_exclusion_lists_test", + "no_filtering_test", + "one_compile_one_runtime_dep_test", "path_based_exclusions_comprehensive_test", + "path_patterns_with_special_characters_test", "runtime_deps_only_test", - "compile_deps_only_test", "single_dep_with_exclusions_test", "single_runtime_dep_with_exclusions_test", - "one_compile_one_runtime_dep_test", - "path_patterns_with_special_characters_test", - "case_sensitive_pattern_matching_test", + "with_label_exclusions_test", + "with_label_exclusions_with_exclude_transitives_test", + "with_path_exclusions_test", + "with_path_exclusions_with_exclude_transitives_test", ) deps = [ "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_security", + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_security", "@unmanaged_deps_filter//:com_fasterxml_jackson_core_jackson_databind", "@unmanaged_deps_filter//:org_hibernate_orm_hibernate_core", "@unmanaged_deps_filter//:jakarta_servlet_jsp_jakarta_servlet_jsp_api", @@ -52,8 +53,8 @@ dependencyset( java_library( name = "no_filtering_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_no_filtering"], runtime_deps = [":runtime_deps_no_filtering"], + deps = [":deps_no_filtering"], ) no_filtering_test( @@ -65,35 +66,38 @@ java_test( name = "DepsFilterNoFilteringTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterNoFilteringTest.java" + "src/test/java/com/depsfilter/DepsFilterNoFilteringTest.java", ], - deps = [":no_filtering_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":no_filtering_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 2: Label-based exclusions without transitives dependencyset( name = "deps_with_label_exclusions", - items = deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], + items = deps, ) dependencyset( name = "runtime_deps_with_label_exclusions", - items = runtime_deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], + items = runtime_deps, ) java_library( name = "with_label_exclusions_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_with_label_exclusions"], runtime_deps = [":runtime_deps_with_label_exclusions"], + deps = [":deps_with_label_exclusions"], ) with_label_exclusions_test( @@ -105,37 +109,40 @@ java_test( name = "DepsFilterLabelExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterLabelExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterLabelExclusionsTest.java", ], - deps = [":with_label_exclusions_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_label_exclusions_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 3: Label-based exclusions with exclude_transitives dependencyset( name = "deps_with_label_exclusions_with_exclude_transitives", - items = deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], exclude_transitives = True, + items = deps, ) dependencyset( name = "runtime_deps_with_label_exclusions_with_exclude_transitives", - items = runtime_deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], exclude_transitives = True, + items = runtime_deps, ) java_library( name = "with_label_exclusions_with_exclude_transitives_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_with_label_exclusions_with_exclude_transitives"], runtime_deps = [":runtime_deps_with_label_exclusions_with_exclude_transitives"], + deps = [":deps_with_label_exclusions_with_exclude_transitives"], ) with_label_exclusions_with_exclude_transitives_test( @@ -147,35 +154,38 @@ java_test( name = "DepsFilterExcludeTransitiveTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java" + "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java", ], - deps = [":with_label_exclusions_with_exclude_transitives_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_label_exclusions_with_exclude_transitives_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 4: Path-based exclusions without transitives dependencyset( name = "deps_with_path_exclusions", - items = deps, deps_exclude_paths = [ "micrometer", - "slf4j" + "slf4j", ], + items = deps, ) dependencyset( name = "runtime_deps_with_path_exclusions", - items = runtime_deps, deps_exclude_paths = [ "micrometer", - "slf4j" + "slf4j", ], + items = runtime_deps, ) java_library( name = "with_path_exclusions_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_with_path_exclusions"], runtime_deps = [":runtime_deps_with_path_exclusions"], + deps = [":deps_with_path_exclusions"], ) with_path_exclusions_test( @@ -187,37 +197,40 @@ java_test( name = "DepsFilterPathExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterPathExclusionsTest.java", ], - deps = [":with_path_exclusions_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_path_exclusions_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 5: Path-based exclusions with exclude_transitives dependencyset( name = "deps_with_path_exclusions_with_exclude_transitives", - items = deps, deps_exclude_paths = [ "micrometer", - "slf4j" + "slf4j", ], exclude_transitives = True, + items = deps, ) dependencyset( name = "runtime_deps_with_path_exclusions_with_exclude_transitives", - items = runtime_deps, deps_exclude_paths = [ "micrometer", - "slf4j" + "slf4j", ], exclude_transitives = True, + items = runtime_deps, ) java_library( name = "with_path_exclusions_with_exclude_transitives_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_with_path_exclusions_with_exclude_transitives"], runtime_deps = [":runtime_deps_with_path_exclusions_with_exclude_transitives"], + deps = [":deps_with_path_exclusions_with_exclude_transitives"], ) with_path_exclusions_with_exclude_transitives_test( @@ -229,43 +242,46 @@ java_test( name = "DepsFilterPathExclusionsWithTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathExclusionsWithTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterPathExclusionsWithTransitivesTest.java", ], - deps = [":with_path_exclusions_with_exclude_transitives_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_path_exclusions_with_exclude_transitives_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 6: Multiple exclusions with exclude_transitives (labels + patterns) dependencyset( name = "deps_multiple_exclusions_with_exclude_transitives", - items = deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], deps_exclude_paths = [ - "slf4j" + "slf4j", ], exclude_transitives = True, + items = deps, ) dependencyset( name = "runtime_deps_multiple_exclusions_with_exclude_transitives", - items = runtime_deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], deps_exclude_paths = [ - "slf4j" + "slf4j", ], exclude_transitives = True, + items = runtime_deps, ) java_library( name = "multiple_exclusions_with_exclude_transitives_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_multiple_exclusions_with_exclude_transitives"], runtime_deps = [":runtime_deps_multiple_exclusions_with_exclude_transitives"], + deps = [":deps_multiple_exclusions_with_exclude_transitives"], ) multiple_exclusions_with_exclude_transitives_test( @@ -277,15 +293,17 @@ java_test( name = "DepsFilterMultipleExclusionsWithTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitivesTest.java", ], - deps = [":multiple_exclusions_with_exclude_transitives_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":multiple_exclusions_with_exclude_transitives_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 7: Multiple exclusions without exclude_transitives (labels + patterns) dependencyset( name = "deps_multiple_exclusions_without_exclude_transitives", - items = deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", @@ -294,11 +312,11 @@ dependencyset( "slf4j", ], exclude_transitives = False, + items = deps, ) dependencyset( name = "runtime_deps_multiple_exclusions_without_exclude_transitives", - items = runtime_deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", @@ -307,13 +325,14 @@ dependencyset( "slf4j", ], exclude_transitives = False, + items = runtime_deps, ) java_library( name = "multiple_exclusions_without_exclude_transitives_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_multiple_exclusions_without_exclude_transitives"], runtime_deps = [":runtime_deps_multiple_exclusions_without_exclude_transitives"], + deps = [":deps_multiple_exclusions_without_exclude_transitives"], ) multiple_exclusions_without_exclude_transitives_test( @@ -325,33 +344,36 @@ java_test( name = "DepsFilterMultipleExclusionsWithoutTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitivesTest.java", ], - deps = [":multiple_exclusions_without_exclude_transitives_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":multiple_exclusions_without_exclude_transitives_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 8: Empty exclusion lists dependencyset( name = "deps_empty_exclusion_lists", - items = deps, deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + items = deps, ) dependencyset( name = "runtime_deps_empty_exclusion_lists", - items = runtime_deps, deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + items = runtime_deps, ) java_library( name = "empty_exclusion_lists_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_empty_exclusion_lists"], runtime_deps = [":runtime_deps_empty_exclusion_lists"], + deps = [":deps_empty_exclusion_lists"], ) empty_exclusion_lists_test( @@ -363,41 +385,44 @@ java_test( name = "DepsFilterEmptyExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java", ], - deps = [":empty_exclusion_lists_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":empty_exclusion_lists_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 9: Comprehensive path-based exclusions dependencyset( name = "deps_path_based_exclusions_comprehensive", - items = deps, deps_exclude_labels = [], deps_exclude_paths = [ "micrometer", "slf4j", - "logback" + "logback", ], exclude_transitives = False, + items = deps, ) dependencyset( name = "runtime_deps_path_based_exclusions_comprehensive", - items = runtime_deps, deps_exclude_labels = [], deps_exclude_paths = [ "micrometer", "slf4j", - "logback" + "logback", ], exclude_transitives = False, + items = runtime_deps, ) java_library( name = "path_based_exclusions_comprehensive_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_path_based_exclusions_comprehensive"], runtime_deps = [":runtime_deps_path_based_exclusions_comprehensive"], + deps = [":deps_path_based_exclusions_comprehensive"], ) path_based_exclusions_comprehensive_test( @@ -409,18 +434,21 @@ java_test( name = "DepsFilterPathBasedExclusionsComprehensiveTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsComprehensiveTest.java" + "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsComprehensiveTest.java", ], - deps = [":path_based_exclusions_comprehensive_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":path_based_exclusions_comprehensive_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 10: Runtime deps only dependencyset( name = "runtime_deps_only", - items = runtime_deps, deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + items = runtime_deps, ) java_library( @@ -438,18 +466,21 @@ java_test( name = "DepsFilterRuntimeDepsOnlyTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterRuntimeDepsOnlyTest.java" + "src/test/java/com/depsfilter/DepsFilterRuntimeDepsOnlyTest.java", ], - deps = [":runtime_deps_only_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":runtime_deps_only_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 11: Compile deps only dependencyset( name = "compile_deps_only", - items = deps, deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + items = deps, ) java_library( @@ -467,22 +498,25 @@ java_test( name = "DepsFilterCompileDepsOnlyTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterCompileDepsOnlyTest.java" + "src/test/java/com/depsfilter/DepsFilterCompileDepsOnlyTest.java", ], - deps = [":compile_deps_only_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":compile_deps_only_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 12: Single dependency with exclusions dependencyset( name = "deps_single_dep_with_exclusions", - items = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", - ], deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", ], deps_exclude_paths = [], exclude_transitives = False, + items = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", + ], ) java_library( @@ -500,22 +534,25 @@ java_test( name = "DepsFilterSingleDepWithExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterSingleDepWithExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterSingleDepWithExclusionsTest.java", ], - deps = [":single_dep_with_exclusions_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":single_dep_with_exclusions_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 13: Single runtime dependency with exclusions dependencyset( name = "runtime_deps_single_runtime_dep_with_exclusions", - items = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", - ], deps_exclude_labels = [], deps_exclude_paths = [ "slf4j", ], exclude_transitives = False, + items = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", + ], ) java_library( @@ -533,37 +570,40 @@ java_test( name = "DepsFilterSingleRuntimeDepWithExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterSingleRuntimeDepWithExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterSingleRuntimeDepWithExclusionsTest.java", ], - deps = [":single_runtime_dep_with_exclusions_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":single_runtime_dep_with_exclusions_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 14: One compile dep and one runtime dep dependencyset( name = "deps_one_compile_one_runtime_dep", - items = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", - ], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + items = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", + ], ) dependencyset( name = "runtime_deps_one_compile_one_runtime_dep", - items = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", - ], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + items = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", + ], ) java_library( name = "one_compile_one_runtime_dep_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_one_compile_one_runtime_dep"], runtime_deps = [":runtime_deps_one_compile_one_runtime_dep"], + deps = [":deps_one_compile_one_runtime_dep"], ) one_compile_one_runtime_dep_test( @@ -575,37 +615,40 @@ java_test( name = "DepsFilterOneCompileOneRuntimeDepTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterOneCompileOneRuntimeDepTest.java" + "src/test/java/com/depsfilter/DepsFilterOneCompileOneRuntimeDepTest.java", ], - deps = [":one_compile_one_runtime_dep_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":one_compile_one_runtime_dep_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 15: Path patterns with special characters dependencyset( name = "deps_path_patterns_with_special_characters", - items = deps, deps_exclude_paths = [ - "io.micrometer", - "to-slf4j", + "io.micrometer", + "to-slf4j", ], exclude_transitives = True, + items = deps, ) dependencyset( name = "runtime_deps_path_patterns_with_special_characters", - items = runtime_deps, deps_exclude_paths = [ - "io.micrometer", - "to-slf4j", + "io.micrometer", + "to-slf4j", ], exclude_transitives = True, + items = runtime_deps, ) java_library( name = "path_patterns_with_special_characters_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_path_patterns_with_special_characters"], runtime_deps = [":runtime_deps_path_patterns_with_special_characters"], + deps = [":deps_path_patterns_with_special_characters"], ) path_patterns_with_special_characters_test( @@ -617,41 +660,44 @@ java_test( name = "DepsFilterPathPatternsWithSpecialCharactersTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathPatternsWithSpecialCharactersTest.java" + "src/test/java/com/depsfilter/DepsFilterPathPatternsWithSpecialCharactersTest.java", ], - deps = [":path_patterns_with_special_characters_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":path_patterns_with_special_characters_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 16: Case sensitive pattern matching dependencyset( name = "deps_case_sensitive_pattern_matching", - items = deps, deps_exclude_labels = [], deps_exclude_paths = [ "SPRING", # Uppercase pattern - "Jackson", # Mixed case pattern - "HIBERNATE", # Uppercase pattern + "Jackson", # Mixed case pattern + "HIBERNATE", # Uppercase pattern ], exclude_transitives = False, + items = deps, ) dependencyset( name = "runtime_deps_case_sensitive_pattern_matching", - items = runtime_deps, deps_exclude_labels = [], deps_exclude_paths = [ "SPRING", # Uppercase pattern - "Jackson", # Mixed case pattern - "HIBERNATE", # Uppercase pattern + "Jackson", # Mixed case pattern + "HIBERNATE", # Uppercase pattern ], exclude_transitives = False, + items = runtime_deps, ) java_library( name = "case_sensitive_pattern_matching_test_lib", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [":deps_case_sensitive_pattern_matching"], runtime_deps = [":runtime_deps_case_sensitive_pattern_matching"], + deps = [":deps_case_sensitive_pattern_matching"], ) case_sensitive_pattern_matching_test( @@ -663,7 +709,10 @@ java_test( name = "DepsFilterCaseSensitivePatternMatchingTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterCaseSensitivePatternMatchingTest.java" + "src/test/java/com/depsfilter/DepsFilterCaseSensitivePatternMatchingTest.java", ], - deps = [":case_sensitive_pattern_matching_test_lib", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, -) \ No newline at end of file + deps = [ + ":case_sensitive_pattern_matching_test_lib", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, +) diff --git a/springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime/compile_and_runtime_test.bzl b/springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime/compile_and_runtime_test.bzl index f570235..cfbf91f 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime/compile_and_runtime_test.bzl +++ b/springboot/deps_filter_rules/tests/dependencyset/external_dependencies/compile_and_runtime/compile_and_runtime_test.bzl @@ -1,37 +1,43 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") +load("@rules_java//java:defs.bzl", "JavaInfo") load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts", - "compute_expected_jars", +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "compute_expected_jars", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests deps without any filtering - baseline test. """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "no_filtering_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_jars_and_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_jars_and_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) @@ -58,42 +64,46 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), }) - def _test_with_label_exclusions(ctx): """ Tests deps with label-based exclusions (without transitives). """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "with_label_exclusions_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Verify dropped counts - label exclusions should drop direct JARs but not transitives when exclude_transitives=False dropped_counts = { "compile_jars_dropped": expected["compile_jars_dropped"], - "full_compile_jars_dropped": expected["full_compile_jars_dropped"], + "full_compile_jars_dropped": expected["full_compile_jars_dropped"], "transitive_compile_jars_dropped": expected["transitive_compile_jars_dropped"], "transitive_runtime_jars_dropped": expected["transitive_runtime_jars_dropped"], } - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) @@ -121,10 +131,9 @@ with_label_exclusions_test = unittest.make(_test_with_label_exclusions, attrs = default = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", - ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -138,23 +147,28 @@ def _test_with_label_exclusions_with_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "with_label_exclusions_with_exclude_transitives_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_jars_and_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_jars_and_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) @@ -182,10 +196,9 @@ with_label_exclusions_with_exclude_transitives_test = unittest.make(_test_with_l default = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", - ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -193,30 +206,34 @@ with_label_exclusions_with_exclude_transitives_test = unittest.make(_test_with_l ), }) - def _test_with_path_exclusions(ctx): """ Tests deps with path-based exclusions (without transitives). """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "with_path_exclusions_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { @@ -240,13 +257,13 @@ with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { providers = [JavaInfo], ), "deps_exclude_labels": attr.label_list( - default = [ + default = [ ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -254,30 +271,34 @@ with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { ), }) - def _test_with_path_exclusions_with_exclude_transitives(ctx): """ Tests deps with path-based exclusions including exclude_transitives. """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "with_path_exclusions_with_exclude_transitives_test_lib" expected = compute_expected_jars(ctx, test_lib_name) - + verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) with_path_exclusions_with_exclude_transitives_test = unittest.make(_test_with_path_exclusions_with_exclude_transitives, attrs = { @@ -301,13 +322,13 @@ with_path_exclusions_with_exclude_transitives_test = unittest.make(_test_with_pa providers = [JavaInfo], ), "deps_exclude_labels": attr.label_list( - default = [ + default = [ ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -321,23 +342,28 @@ def _test_multiple_exclusions_with_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "multiple_exclusions_with_exclude_transitives_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) multiple_exclusions_with_exclude_transitives_test = unittest.make(_test_multiple_exclusions_with_exclude_transitives, attrs = { @@ -366,9 +392,9 @@ multiple_exclusions_with_exclude_transitives_test = unittest.make(_test_multiple "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -382,23 +408,28 @@ def _test_multiple_exclusions_without_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "multiple_exclusions_without_exclude_transitives_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) multiple_exclusions_without_exclude_transitives_test = unittest.make(_test_multiple_exclusions_without_exclude_transitives, attrs = { @@ -427,9 +458,9 @@ multiple_exclusions_without_exclude_transitives_test = unittest.make(_test_multi "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -443,23 +474,28 @@ def _test_empty_exclusion_lists(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "empty_exclusion_lists_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -485,7 +521,7 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -499,31 +535,39 @@ def _test_path_based_exclusions_comprehensive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "path_based_exclusions_comprehensive_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Additional verification: ensure excluded patterns are not present transitive_runtime_jars = [jar.basename for jar in javainfo_filtered.transitive_runtime_jars.to_list()] for pattern in ["micrometer", "slf4j", "logback"]: for jar in transitive_runtime_jars: - asserts.true(env, pattern not in jar, - "Excluded pattern '{}' found in JAR: {}".format(pattern, jar)) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") - + asserts.true( + env, + pattern not in jar, + "Excluded pattern '{}' found in JAR: {}".format(pattern, jar), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) + return unittest.end(env) path_based_exclusions_comprehensive_test = unittest.make(_test_path_based_exclusions_comprehensive, attrs = { @@ -549,11 +593,11 @@ path_based_exclusions_comprehensive_test = unittest.make(_test_path_based_exclus "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", "slf4j", - "logback" + "logback", ], ), "exclude_transitives": attr.bool( @@ -567,23 +611,28 @@ def _test_runtime_deps_only(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "runtime_deps_only_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) runtime_deps_only_test = unittest.make(_test_runtime_deps_only, attrs = { @@ -602,7 +651,7 @@ runtime_deps_only_test = unittest.make(_test_runtime_deps_only, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -616,32 +665,43 @@ def _test_compile_deps_only(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "compile_deps_only_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Compile deps should contribute to both compile and runtime JARs compile_jars = [jar.basename for jar in javainfo_filtered.compile_jars.to_list()] transitive_runtime_jars = [jar.basename for jar in javainfo_filtered.transitive_runtime_jars.to_list()] - - asserts.true(env, len(compile_jars) > 0, - "Expected compile JARs when deps provided, got: {}".format(len(compile_jars))) - asserts.true(env, len(transitive_runtime_jars) > 0, - "Expected transitive runtime JARs when deps provided, got: {}".format(len(transitive_runtime_jars))) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + asserts.true( + env, + len(compile_jars) > 0, + "Expected compile JARs when deps provided, got: {}".format(len(compile_jars)), + ) + asserts.true( + env, + len(transitive_runtime_jars) > 0, + "Expected transitive runtime JARs when deps provided, got: {}".format(len(transitive_runtime_jars)), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) compile_deps_only_test = unittest.make(_test_compile_deps_only, attrs = { @@ -662,7 +722,7 @@ compile_deps_only_test = unittest.make(_test_compile_deps_only, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -676,23 +736,28 @@ def _test_single_dep_with_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "single_dep_with_exclusions_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) single_dep_with_exclusions_test = unittest.make(_test_single_dep_with_exclusions, attrs = { @@ -711,7 +776,7 @@ single_dep_with_exclusions_test = unittest.make(_test_single_dep_with_exclusions "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -725,23 +790,28 @@ def _test_single_runtime_dep_with_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "single_runtime_dep_with_exclusions_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) single_runtime_dep_with_exclusions_test = unittest.make(_test_single_runtime_dep_with_exclusions, attrs = { @@ -758,7 +828,7 @@ single_runtime_dep_with_exclusions_test = unittest.make(_test_single_runtime_dep "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "slf4j", ], @@ -774,23 +844,28 @@ def _test_one_compile_one_runtime_dep(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "one_compile_one_runtime_dep_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) one_compile_one_runtime_dep_test = unittest.make(_test_one_compile_one_runtime_dep, attrs = { @@ -810,7 +885,7 @@ one_compile_one_runtime_dep_test = unittest.make(_test_one_compile_one_runtime_d "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -824,23 +899,28 @@ def _test_path_patterns_with_special_characters(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "path_patterns_with_special_characters_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) path_patterns_with_special_characters_test = unittest.make(_test_path_patterns_with_special_characters, attrs = { @@ -866,7 +946,7 @@ path_patterns_with_special_characters_test = unittest.make(_test_path_patterns_w "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "io.micrometer", # Pattern with dot "to-slf4j", # Pattern with hyphen @@ -883,23 +963,28 @@ def _test_case_sensitive_pattern_matching(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + test_lib_name = "case_sensitive_pattern_matching_test_lib" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) case_sensitive_pattern_matching_test = unittest.make(_test_case_sensitive_pattern_matching, attrs = { @@ -925,18 +1010,14 @@ case_sensitive_pattern_matching_test = unittest.make(_test_case_sensitive_patter "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "SPRING", # Uppercase pattern - "Jackson", # Mixed case pattern - "HIBERNATE", # Uppercase pattern + "Jackson", # Mixed case pattern + "HIBERNATE", # Uppercase pattern ], ), "exclude_transitives": attr.bool( default = False, ), }) - - - - diff --git a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1/BUILD b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1/BUILD index dfd3cf9..f8b9063 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1/BUILD +++ b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1/BUILD @@ -1,24 +1,25 @@ +load("@rules_java//java:defs.bzl", "java_library") load("//springboot/deps_filter_rules:dependencyset.bzl", "dependencyset") load( "//springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1:compile_and_runtime_test.bzl", - "no_filtering_test", - "filtered_deps_test", + "empty_exclusion_lists_test", "filtered_deps_exclude_transitive_test", - "path_based_exclusions_test", + "filtered_deps_test", "interface_implementation_jars_test", "multiple_exclusions_with_transitive_test", "multiple_exclusions_without_transitive_test", - "empty_exclusion_lists_test", "multiple_paths_test", + "no_filtering_test", + "path_based_exclusions_test", ) # Dependency Graph Structure: -# base_lib +# base_lib # | # dependencyset # ("deps") ("runtime_deps") -# / \ +# / \ # A (c) I (r) # / \ | # / \ G (r) @@ -29,67 +30,67 @@ load( # | F (c) # \ / # C (c) -# | -# D (r) +# | +# D (r) java_library( name = "lib_a", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [ - ":lib_b", # A -> B (c) - ], runtime_deps = [ ":lib_e", # A -> E (r) ], + deps = [ + ":lib_b", # A -> B (c) + ], ) java_library( name = "lib_b", - srcs = ["src/main/java/com/depsfilter/B.java"], - deps = [":lib_c"], # B -> C (c) + srcs = ["src/main/java/com/depsfilter/B.java"], + deps = [":lib_c"], # B -> C (c) ) java_library( name = "lib_c", srcs = ["src/main/java/com/depsfilter/C.java"], - runtime_deps = [":lib_d"], # C -> D (r) + runtime_deps = [":lib_d"], # C -> D (r) ) java_library( name = "lib_d", - srcs = ["src/main/java/com/depsfilter/D.java"], + srcs = ["src/main/java/com/depsfilter/D.java"], ) java_library( name = "lib_e", srcs = ["src/main/java/com/depsfilter/E.java"], - deps = [":lib_f"], # E -> F (c) + deps = [":lib_f"], # E -> F (c) ) java_library( name = "lib_f", srcs = ["src/main/java/com/depsfilter/F.java"], - deps = [":lib_c"], # F -> C (c) + deps = [":lib_c"], # F -> C (c) ) java_library( name = "lib_g", srcs = ["src/main/java/com/depsfilter/G.java"], - deps = [":lib_f"], # G -> F (c) + deps = [":lib_f"], # G -> F (c) ) java_library( name = "lib_i", srcs = ["src/main/java/com/depsfilter/I.java"], - runtime_deps = [":lib_g"], # I -> G path + runtime_deps = [":lib_g"], # I -> G path ) # Consumer library that uses the filtered dependencies java_library( name = "base_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":lib_a"], # base_lib -> A (c) - runtime_deps = [":lib_i"], # base_lib -> I (r) + runtime_deps = [":lib_i"], # base_lib -> I (r) + deps = [":lib_a"], # base_lib -> A (c) ) # Test 1: No filtering @@ -106,34 +107,40 @@ dependencyset( java_library( name = "no_filtering_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_no_filtering"], runtime_deps = [":runtime_deps_no_filtering"], + deps = [":deps_no_filtering"], ) no_filtering_test( name = "deps_filter_no_filtering_test", - java_library = ":base_lib", + java_library = ":base_lib", java_library_dependencyset = ":no_filtering_test_lib", ) # Test 2: Exclude by labels and exclude_transitives = False dependencyset( name = "deps_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], items = [":lib_a"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) dependencyset( name = "runtime_deps_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], items = [":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) java_library( name = "exclude_b_g_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_exclude_b_g"], runtime_deps = [":runtime_deps_exclude_b_g"], + deps = [":deps_exclude_b_g"], ) filtered_deps_test( @@ -144,23 +151,29 @@ filtered_deps_test( # Test 3: Exclude by labels and exclude_transitives = True dependencyset( name = "deps_exclude_b_g_transitives", - items = [":lib_a"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + items = [":lib_a"], ) dependencyset( name = "runtime_deps_exclude_b_g_transitives", - items = [":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + items = [":lib_i"], ) java_library( name = "exclude_b_g_transitives_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_exclude_b_g_transitives"], runtime_deps = [":runtime_deps_exclude_b_g_transitives"], + deps = [":deps_exclude_b_g_transitives"], ) filtered_deps_exclude_transitive_test( @@ -171,21 +184,27 @@ filtered_deps_exclude_transitive_test( # Test 4: Test for path-based exclusions dependencyset( name = "deps_exclude_paths", + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], items = [":lib_a"], - deps_exclude_paths = ["lib_b", "lib_f"], ) dependencyset( name = "runtime_deps_exclude_paths", + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], items = [":lib_i"], - deps_exclude_paths = ["lib_b", "lib_f"], ) java_library( name = "path_based_exclusions_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_exclude_paths"], runtime_deps = [":runtime_deps_exclude_paths"], + deps = [":deps_exclude_paths"], ) path_based_exclusions_test( @@ -196,21 +215,27 @@ path_based_exclusions_test( # Test 5: Interface vs Implementation JARs dependencyset( name = "deps_interface_impl_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], items = [":lib_a"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) dependencyset( name = "runtime_deps_interface_impl_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], items = [":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) java_library( name = "interface_impl_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_interface_impl_exclude_b_g"], runtime_deps = [":runtime_deps_interface_impl_exclude_b_g"], + deps = [":deps_interface_impl_exclude_b_g"], ) interface_implementation_jars_test( @@ -221,25 +246,25 @@ interface_implementation_jars_test( # Test 6: Multiple exclusions with exclude_transitives=True dependencyset( name = "deps_multi_excl_transitives", - items = [":lib_a"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + items = [":lib_a"], ) dependencyset( name = "runtime_deps_multi_excl_transitives", - items = [":lib_i"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + items = [":lib_i"], ) java_library( name = "multiple_exclusions_with_transitive_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_multi_excl_transitives"], runtime_deps = [":runtime_deps_multi_excl_transitives"], + deps = [":deps_multi_excl_transitives"], ) multiple_exclusions_with_transitive_test( @@ -250,25 +275,25 @@ multiple_exclusions_with_transitive_test( # Test 7: Multiple exclusions with exclude_transitives=False dependencyset( name = "deps_multi_excl_no_transitives", - items = [":lib_a"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + items = [":lib_a"], ) dependencyset( name = "runtime_deps_multi_excl_no_transitives", - items = [":lib_i"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + items = [":lib_i"], ) java_library( name = "multiple_exclusions_without_transitive_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_multi_excl_no_transitives"], runtime_deps = [":runtime_deps_multi_excl_no_transitives"], + deps = [":deps_multi_excl_no_transitives"], ) multiple_exclusions_without_transitive_test( @@ -279,23 +304,23 @@ multiple_exclusions_without_transitive_test( # Test 8: Empty exclusion lists dependencyset( name = "deps_empty_exclusions", - items = [":lib_a"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + items = [":lib_a"], ) dependencyset( name = "runtime_deps_empty_exclusions", - items = [":lib_i"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + items = [":lib_i"], ) java_library( name = "empty_exclusion_lists_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_empty_exclusions"], runtime_deps = [":runtime_deps_empty_exclusions"], + deps = [":deps_empty_exclusions"], ) empty_exclusion_lists_test( @@ -306,21 +331,27 @@ empty_exclusion_lists_test( # Test 9: Multiple paths handling dependencyset( name = "deps_multiple_paths_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], items = [":lib_a"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) dependencyset( name = "runtime_deps_multiple_paths_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], items = [":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) java_library( name = "multiple_paths_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_multiple_paths_exclude_b_g"], runtime_deps = [":runtime_deps_multiple_paths_exclude_b_g"], + deps = [":deps_multiple_paths_exclude_b_g"], ) multiple_paths_test( @@ -330,6 +361,6 @@ multiple_paths_test( toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) diff --git a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1/compile_and_runtime_test.bzl b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1/compile_and_runtime_test.bzl index 910c7e1..942972c 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1/compile_and_runtime_test.bzl +++ b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_1/compile_and_runtime_test.bzl @@ -1,23 +1,24 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts", - "update_jar_name" +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "update_jar_name", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests that deps_filter preserves all dependencies when no exclusions are applied. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -28,9 +29,9 @@ def _test_no_filtering(ctx): | F (c) \\ / C (c) - | + | D (r) - + Expected: All JARs from java_library must match deps_filter: - full_compile_jars: Implementation JARs (e.g., liblib_a.jar) - compile_jars: Interface JARs (e.g., liblib_a-hjar.jar) @@ -40,26 +41,35 @@ def _test_no_filtering(ctx): env = unittest.begin(ctx) java_lib_info = ctx.attr.java_library[JavaInfo] deps_filter_info = ctx.attr.java_library_dependencyset[JavaInfo] - + # Verify all JAR fields match between java_library and deps_filter jar_fields = [ - "full_compile_jars", # Implementation JARs - "compile_jars", # Interface JARs - "transitive_compile_time_jars", # Transitive interface JARs - "transitive_runtime_jars" # Transitive implementation JARs + "full_compile_jars", # Implementation JARs + "compile_jars", # Interface JARs + "transitive_compile_time_jars", # Transitive interface JARs + "transitive_runtime_jars", # Transitive implementation JARs ] for jar_field in jar_fields: java_lib_jars = getattr(java_lib_info, jar_field) deps_filter_jars = getattr(deps_filter_info, jar_field) - asserts.equals(env, type(java_lib_jars), type(deps_filter_jars), - "JAR type mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + type(java_lib_jars), + type(deps_filter_jars), + "JAR type mismatch: {} vs deps_filter".format(jar_field), + ) java_lib_jars_list = [jar.basename for jar in java_lib_jars.to_list()] deps_filter_jars_list = [jar.basename for jar in deps_filter_jars.to_list()] + # Normalize output jar naming difference between dependencyset consumer and base_lib update_jar_name("libno_filtering_test_lib", "libbase_lib", deps_filter_jars_list) - asserts.equals(env, java_lib_jars_list, deps_filter_jars_list, - "JAR contents mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + java_lib_jars_list, + deps_filter_jars_list, + "JAR contents mismatch: {} vs deps_filter".format(jar_field), + ) return unittest.end(env) @@ -71,13 +81,13 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { def _test_filtered_deps(ctx): """ Tests basic dependency filtering with label-based exclusions. - + Dependency Graph: - test_lib + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -88,7 +98,7 @@ def _test_filtered_deps(ctx): | F (c) \\ / C (c) - | + | D (r) Deps Dependencyset Input: @@ -105,7 +115,7 @@ def _test_filtered_deps(ctx): Expected Output: JARs preserved: test_lib, A, I, E, F, C, D JARs excluded: B, G (by label, direct deps only, transitives preserved) - + Compile-time JARs: test_lib-hjar, A-hjar, C-hjar Runtime JARs: test_lib, A, I, E, F, C, D (all preserved deps + transitives) Reasoning: B,G excluded by label, but their transitives (C,D,F) are preserved @@ -120,7 +130,7 @@ def _test_filtered_deps(ctx): expected_full_compile_jars = [ "libexclude_b_g_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libexclude_b_g_test_lib.jar", "liblib_a.jar", @@ -128,20 +138,24 @@ def _test_filtered_deps(ctx): "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libexclude_b_g_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { @@ -151,13 +165,13 @@ filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { def _test_filtered_deps_exclude_transitive(ctx): """ Tests dependency filtering with transitive exclusions. - + Dependency Graph: - test_lib + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -168,7 +182,7 @@ def _test_filtered_deps_exclude_transitive(ctx): | F (c) \\ / C (c) - | + | D (r) Deps Dependencyset Input: @@ -185,14 +199,14 @@ def _test_filtered_deps_exclude_transitive(ctx): Expected Output: JARs preserved: test_lib, A, I, E JARs excluded: B, G (by label) and all their transitives - + Compile-time JARs: test_lib-hjar, A-hjar Runtime JARs: test_lib, A, I, E (only preserved deps, no transitives of excluded deps) Reasoning: B,G excluded by label with exclude_transitives=True, so C,D,F also excluded """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libexclude_b_g_transitives_test_lib-hjar.jar", ] @@ -200,24 +214,28 @@ def _test_filtered_deps_exclude_transitive(ctx): expected_full_compile_jars = [ "libexclude_b_g_transitives_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libexclude_b_g_transitives_test_lib.jar", "liblib_a.jar", "liblib_i.jar", "liblib_e.jar", ] - + expected_transitive_compile_jars = [ "libexclude_b_g_transitives_test_lib-hjar.jar", "liblib_a-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclude_transitive, attrs = { @@ -227,13 +245,13 @@ filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclud def _test_path_based_exclusions(ctx): """ Tests filtering based on path patterns in deps_exclude_paths. - + Dependency Graph: - test_lib + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -244,7 +262,7 @@ def _test_path_based_exclusions(ctx): | F (c) \\ / C (c) - | + | D (r) Deps Dependencyset Input: @@ -261,14 +279,14 @@ def _test_path_based_exclusions(ctx): Expected Output: JARs preserved: test_lib, A, I, E, C, D, G JARs excluded: B, F (by path pattern match, transitives may be preserved) - + Compile-time JARs: test_lib-hjar, A-hjar, C-hjar Runtime JARs: test_lib, A, I, E, C, D, G (all preserved deps + transitives not matching exclusion path patterns) - Reasoning: B,F excluded by path pattern, but their transitives are preserved as they didn't match the pattern. + Reasoning: B,F excluded by path pattern, but their transitives are preserved as they didn't match the pattern. """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libpath_based_exclusions_test_lib-hjar.jar", ] @@ -276,7 +294,7 @@ def _test_path_based_exclusions(ctx): expected_full_compile_jars = [ "libpath_based_exclusions_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libpath_based_exclusions_test_lib.jar", "liblib_a.jar", @@ -284,20 +302,24 @@ def _test_path_based_exclusions(ctx): "liblib_e.jar", "liblib_c.jar", "liblib_d.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libpath_based_exclusions_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = { @@ -307,13 +329,13 @@ path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = def _test_interface_implementation_jars(ctx): """ Tests proper handling of interface (-hjar) and implementation JARs. - + Dependency Graph: - test_lib + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -324,7 +346,7 @@ def _test_interface_implementation_jars(ctx): | F (c) \\ / C (c) - | + | D (r) Deps Dependencyset Input: @@ -344,13 +366,13 @@ def _test_interface_implementation_jars(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + compile_jars = sorted([jar.basename for jar in javainfo_filtered.compile_jars.to_list()]) full_compile_jars = sorted([jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()]) - + expected_compile_jars = ["libinterface_impl_test_lib-hjar.jar"] expected_full_compile_jars = ["libinterface_impl_test_lib.jar"] - + asserts.equals(env, compile_jars, expected_compile_jars) asserts.equals(env, full_compile_jars, expected_full_compile_jars) return unittest.end(env) @@ -362,13 +384,13 @@ interface_implementation_jars_test = unittest.make(_test_interface_implementatio def _test_multiple_exclusions_with_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=True. - + Dependency Graph: - test_lib + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -379,7 +401,7 @@ def _test_multiple_exclusions_with_transitive(ctx): | F (c) \\ / C (c) - | + | D (r) Deps Dependencyset Input: @@ -396,15 +418,15 @@ def _test_multiple_exclusions_with_transitive(ctx): Expected Output: JARs preserved: test_lib, A, I, E, F JARs excluded: B and its transitives; G (not neccessarily its transitives as specified exclusion by path pattern is matched) - + Compile-time JARs: test_lib-hjar, A-hjar Runtime JARs: test_lib, A, I, E, F - Reasoning: B excluded by label with exclude_transitives=True (C,D excluded); - G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) + Reasoning: B excluded by label with exclude_transitives=True (C,D excluded); + G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmultiple_exclusions_with_transitive_test_lib-hjar.jar", ] @@ -412,7 +434,7 @@ def _test_multiple_exclusions_with_transitive(ctx): expected_full_compile_jars = [ "libmultiple_exclusions_with_transitive_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmultiple_exclusions_with_transitive_test_lib.jar", "liblib_a.jar", @@ -420,29 +442,33 @@ def _test_multiple_exclusions_with_transitive(ctx): "liblib_e.jar", "liblib_f.jar", ] - + expected_transitive_compile_jars = [ "libmultiple_exclusions_with_transitive_test_lib-hjar.jar", "liblib_a-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) def _test_multiple_exclusions_without_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=False. - + Dependency Graph: - test_lib + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -453,7 +479,7 @@ def _test_multiple_exclusions_without_transitive(ctx): | F (c) \\ / C (c) - | + | D (r) Deps Dependencyset Input: @@ -470,15 +496,15 @@ def _test_multiple_exclusions_without_transitive(ctx): Expected Output: JARs preserved: test_lib, A, I, E, F, C, D JARs excluded: B (by label, direct only); G (by path pattern match, direct only) - + Compile-time JARs: test_lib-hjar, A-hjar, C-hjar Runtime JARs: test_lib, A, I, E, F, C, D - Reasoning: B excluded by label (direct only, and its transitives are preserved); - G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) + Reasoning: B excluded by label (direct only, and its transitives are preserved); + G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmultiple_exclusions_without_transitive_test_lib-hjar.jar", ] @@ -486,7 +512,7 @@ def _test_multiple_exclusions_without_transitive(ctx): expected_full_compile_jars = [ "libmultiple_exclusions_without_transitive_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmultiple_exclusions_without_transitive_test_lib.jar", "liblib_a.jar", @@ -496,18 +522,22 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_c.jar", "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libmultiple_exclusions_without_transitive_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_exclusions_with_transitive_test = unittest.make(_test_multiple_exclusions_with_transitive, attrs = { @@ -521,13 +551,13 @@ multiple_exclusions_without_transitive_test = unittest.make(_test_multiple_exclu def _test_empty_exclusion_lists(ctx): """ Tests behavior when exclusion lists are empty. - + Dependency Graph: - test_lib + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -538,7 +568,7 @@ def _test_empty_exclusion_lists(ctx): | F (c) \\ / C (c) - | + | D (r) Deps Dependencyset Input: @@ -554,14 +584,14 @@ def _test_empty_exclusion_lists(ctx): Expected Output: JARs preserved: test_lib, A, I, B, C, D, E, F, G - + Compile-time JARs: test_lib-hjar, A-hjar, B-hjar, C-hjar Runtime JARs: test_lib, A, I, B, C, D, E, F, G Reasoning: No exclusions applied, all dependencies preserved """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libempty_exclusion_lists_test_lib-hjar.jar", ] @@ -569,7 +599,7 @@ def _test_empty_exclusion_lists(ctx): expected_full_compile_jars = [ "libempty_exclusion_lists_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libempty_exclusion_lists_test_lib.jar", "liblib_a.jar", @@ -579,21 +609,25 @@ def _test_empty_exclusion_lists(ctx): "liblib_d.jar", "liblib_e.jar", "liblib_f.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libempty_exclusion_lists_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_b-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -603,13 +637,13 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = def _test_multiple_paths(ctx): """ Tests handling of multiple paths to the same dependency. - + Dependency Graph: - test_lib + test_lib | dependencyset ("deps") ("runtime_deps") - / \\ + / \\ A (c) I (r) / \\ | / \\ G (r) @@ -620,7 +654,7 @@ def _test_multiple_paths(ctx): | F (c) \\ / C (c) - | + | D (r) Deps Dependencyset Input: @@ -637,14 +671,14 @@ def _test_multiple_paths(ctx): Expected Output: JARs preserved: test_lib, A, I, E, F, C, D JARs excluded: B, G (not duplicated if reachable via multiple paths) - + Compile-time JARs: test_lib-hjar, A-hjar, C-hjar Runtime JARs: test_lib, A, I, E, F, C, D Reasoning: B,G excluded by label, but transitives are preserved as exclude_transitives = False """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmultiple_paths_test_lib-hjar.jar", ] @@ -652,7 +686,7 @@ def _test_multiple_paths(ctx): expected_full_compile_jars = [ "libmultiple_paths_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmultiple_paths_test_lib.jar", "liblib_a.jar", @@ -660,23 +694,26 @@ def _test_multiple_paths(ctx): "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libmultiple_paths_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_paths_test = unittest.make(_test_multiple_paths, attrs = { "test_lib": attr.label(providers = [JavaInfo]), }) - diff --git a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2/BUILD b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2/BUILD index 5944078..a0c0b42 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2/BUILD +++ b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2/BUILD @@ -1,27 +1,28 @@ +load("@rules_java//java:defs.bzl", "java_library", "java_test") load("//springboot/deps_filter_rules:dependencyset.bzl", "dependencyset") load( "//springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2:compile_and_runtime_test.bzl", - "no_filtering_test", - "filtered_deps_test", + "empty_exclusion_lists_test", "filtered_deps_exclude_transitive_test", - "path_based_exclusions_test", + "filtered_deps_test", "interface_implementation_jars_test", "multiple_exclusions_with_transitive_test", "multiple_exclusions_without_transitive_test", - "empty_exclusion_lists_test", "multiple_paths_test", + "no_filtering_test", + "path_based_exclusions_test", ) # Dependency Graph Structure: -# test_lib +# test_lib # | # dependencyset # / \ # ("deps") ("runtime_deps") # / \ / \ -# J(r) A (c) H (r) I (c) -# \ / \ | | -# \ / \ G (r) | +# J(r) A (c) H (r) I (c) +# \ / \ | | +# \ / \ G (r) | # \ / \ | / # B (c) E (r) / / # | | / / @@ -31,100 +32,113 @@ load( # | F (c) # \ / # C (c) -# | -# D (r) +# | +# D (r) java_library( name = "lib_a", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [ - ":lib_b", # A -> B (c) - ], runtime_deps = [ ":lib_e", # A -> E (r) ], + deps = [ + ":lib_b", # A -> B (c) + ], ) java_library( name = "lib_b", - srcs = ["src/main/java/com/depsfilter/B.java"], - deps = [":lib_c"], # B -> C (c) + srcs = ["src/main/java/com/depsfilter/B.java"], + deps = [":lib_c"], # B -> C (c) ) java_library( name = "lib_c", srcs = ["src/main/java/com/depsfilter/C.java"], - runtime_deps = [":lib_d"], # C -> D (r) + runtime_deps = [":lib_d"], # C -> D (r) ) java_library( name = "lib_d", - srcs = ["src/main/java/com/depsfilter/D.java"], + srcs = ["src/main/java/com/depsfilter/D.java"], ) java_library( name = "lib_e", srcs = ["src/main/java/com/depsfilter/E.java"], - deps = [":lib_f"], # E -> F (c) + deps = [":lib_f"], # E -> F (c) ) java_library( name = "lib_f", srcs = ["src/main/java/com/depsfilter/F.java"], - deps = [":lib_c"], # F -> C (c) + deps = [":lib_c"], # F -> C (c) ) java_library( name = "lib_g", srcs = ["src/main/java/com/depsfilter/G.java"], - deps = [":lib_f"], # G -> F (c) + deps = [":lib_f"], # G -> F (c) ) java_library( name = "lib_h", srcs = ["src/main/java/com/depsfilter/H.java"], - runtime_deps = [":lib_g"], # H -> G (r) + runtime_deps = [":lib_g"], # H -> G (r) ) java_library( name = "lib_i", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":lib_f"], # I -> F (c) + deps = [":lib_f"], # I -> F (c) ) java_library( name = "lib_j", srcs = ["src/main/java/com/depsfilter/J.java"], - deps = [":lib_b"], # J -> B (c) + deps = [":lib_b"], # J -> B (c) ) -test_deps = ["@unmanaged_deps_filter//:junit_junit", +test_deps = [ + "@unmanaged_deps_filter//:junit_junit", "@unmanaged_deps_filter//:org_assertj_assertj_core", ] # Test 1: No filtering dependencyset( name = "deps_no_filtering", - items = [":lib_a", ":lib_i"], + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_no_filtering", - items = [":lib_h", ":lib_j"], + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "base_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) java_library( name = "no_filtering_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_no_filtering"], runtime_deps = [":runtime_deps_no_filtering"], + deps = [":deps_no_filtering"], ) no_filtering_test( @@ -136,21 +150,33 @@ no_filtering_test( # Test 2: Exclude by labels and exclude_transitives = False dependencyset( name = "deps_exclude_b_g", - items = [":lib_a", ":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_exclude_b_g", - items = [":lib_h", ":lib_j"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "exclude_b_g_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_exclude_b_g"], runtime_deps = [":runtime_deps_exclude_b_g"], + deps = [":deps_exclude_b_g"], ) filtered_deps_test( @@ -162,8 +188,8 @@ java_test( name = "DepsFilterFilteredDepsTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterFilteredDepsTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterFilteredDepsTest.java" ], deps = [":exclude_b_g_test_lib"] + test_deps, ) @@ -171,23 +197,35 @@ java_test( # Test 3: Exclude by labels and exclude_transitives = True dependencyset( name = "deps_exclude_b_g_transitives", - items = [":lib_a", ":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_exclude_b_g_transitives", - items = [":lib_h", ":lib_j"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "exclude_b_g_transitives_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_exclude_b_g_transitives"], runtime_deps = [":runtime_deps_exclude_b_g_transitives"], + deps = [":deps_exclude_b_g_transitives"], ) filtered_deps_exclude_transitive_test( @@ -199,8 +237,8 @@ java_test( name = "DepsFilterExcludeTransitiveTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java" ], deps = [":exclude_b_g_transitives_test_lib"] + test_deps, ) @@ -208,21 +246,33 @@ java_test( # Test 4: Test for path-based exclusions dependencyset( name = "deps_exclude_paths", - items = [":lib_a", ":lib_i"], - deps_exclude_paths = ["lib_b", "lib_f"], + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_exclude_paths", - items = [":lib_h", ":lib_j"], - deps_exclude_paths = ["lib_b", "lib_f"], + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "path_based_exclusions_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_exclude_paths"], runtime_deps = [":runtime_deps_exclude_paths"], + deps = [":deps_exclude_paths"], ) path_based_exclusions_test( @@ -234,8 +284,8 @@ java_test( name = "DepsFilterPathBasedExclusionsTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsTest.java" ], deps = [":path_based_exclusions_test_lib"] + test_deps, ) @@ -243,21 +293,33 @@ java_test( # Test 5: Interface vs Implementation JARs dependencyset( name = "deps_interface_impl_exclude_b_g", - items = [":lib_a", ":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_interface_impl_exclude_b_g", - items = [":lib_h", ":lib_j"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "interface_impl_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_interface_impl_exclude_b_g"], runtime_deps = [":runtime_deps_interface_impl_exclude_b_g"], + deps = [":deps_interface_impl_exclude_b_g"], ) interface_implementation_jars_test( @@ -269,8 +331,8 @@ java_test( name = "DepsFilterInterfaceImplementationTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterInterfaceImplementationTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterInterfaceImplementationTest.java" ], deps = [":interface_impl_test_lib"] + test_deps, ) @@ -278,25 +340,31 @@ java_test( # Test 6: Multiple exclusions with exclude_transitives=True dependencyset( name = "deps_multi_excl_transitives", - items = [":lib_a", ":lib_i"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_multi_excl_transitives", - items = [":lib_h", ":lib_j"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "multiple_exclusions_with_transitive_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_multi_excl_transitives"], runtime_deps = [":runtime_deps_multi_excl_transitives"], + deps = [":deps_multi_excl_transitives"], ) multiple_exclusions_with_transitive_test( @@ -308,8 +376,8 @@ java_test( name = "DepsFilterMultipleExclusionsWithTransitiveTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitiveTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitiveTest.java" ], deps = [":multiple_exclusions_with_transitive_test_lib"] + test_deps, ) @@ -317,25 +385,31 @@ java_test( # Test 7: Multiple exclusions with exclude_transitives=False dependencyset( name = "deps_multi_excl_no_transitives", - items = [":lib_a", ":lib_i"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_multi_excl_no_transitives", - items = [":lib_h", ":lib_j"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "multiple_exclusions_without_transitive_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_multi_excl_no_transitives"], runtime_deps = [":runtime_deps_multi_excl_no_transitives"], + deps = [":deps_multi_excl_no_transitives"], ) multiple_exclusions_without_transitive_test( @@ -347,8 +421,8 @@ java_test( name = "DepsFilterMultipleExclusionsWithoutTransitiveTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitiveTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitiveTest.java" ], deps = [":multiple_exclusions_without_transitive_test_lib"] + test_deps, ) @@ -356,23 +430,29 @@ java_test( # Test 8: Empty exclusion lists dependencyset( name = "deps_empty_exclusions", - items = [":lib_a", ":lib_i"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_empty_exclusions", - items = [":lib_h", ":lib_j"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "empty_exclusion_lists_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_empty_exclusions"], runtime_deps = [":runtime_deps_empty_exclusions"], + deps = [":deps_empty_exclusions"], ) empty_exclusion_lists_test( @@ -384,30 +464,42 @@ java_test( name = "DepsFilterEmptyExclusionsTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java" - ], + ], deps = [":empty_exclusion_lists_test_lib"] + test_deps, ) # Test 9: Multiple paths handling dependencyset( name = "deps_multiple_paths_exclude_b_g", - items = [":lib_a", ":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_a", + ":lib_i", + ], ) dependencyset( name = "runtime_deps_multiple_paths_exclude_b_g", - items = [":lib_h", ":lib_j"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_h", + ":lib_j", + ], ) java_library( name = "multiple_paths_test_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":deps_multiple_paths_exclude_b_g"], runtime_deps = [":runtime_deps_multiple_paths_exclude_b_g"], + deps = [":deps_multiple_paths_exclude_b_g"], ) multiple_paths_test( @@ -419,15 +511,14 @@ java_test( name = "DepsFilterMultiplePathsTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterMultiplePathsTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterMultiplePathsTest.java" ], deps = [":multiple_paths_test_lib"] + test_deps, ) toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) - diff --git a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2/compile_and_runtime_test.bzl b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2/compile_and_runtime_test.bzl index 13c441d..918418f 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2/compile_and_runtime_test.bzl +++ b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_and_runtime_2/compile_and_runtime_test.bzl @@ -1,25 +1,26 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts", - "update_jar_name", +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "update_jar_name", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests that deps_filter preserves all dependencies when no exclusions are applied. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -31,9 +32,9 @@ def _test_no_filtering(ctx): | F (c) \\ / C (c) - | - D (r) - + | + D (r) + Expected: All JARs from java_library must match deps_filter: - full_compile_jars: Implementation JARs (e.g., liblib_a.jar) - compile_jars: Interface JARs (e.g., liblib_a-hjar.jar) @@ -43,26 +44,35 @@ def _test_no_filtering(ctx): env = unittest.begin(ctx) java_lib_info = ctx.attr.java_library[JavaInfo] deps_filter_info = ctx.attr.java_library_dependencyset[JavaInfo] - + # Verify all JAR fields match between java_library and deps_filter jar_fields = [ - "full_compile_jars", # Implementation JARs - "compile_jars", # Interface JARs - "transitive_compile_time_jars", # Transitive interface JARs - "transitive_runtime_jars" # Transitive implementation JARs + "full_compile_jars", # Implementation JARs + "compile_jars", # Interface JARs + "transitive_compile_time_jars", # Transitive interface JARs + "transitive_runtime_jars", # Transitive implementation JARs ] for jar_field in jar_fields: java_lib_jars = getattr(java_lib_info, jar_field) deps_filter_jars = getattr(deps_filter_info, jar_field) - asserts.equals(env, type(java_lib_jars), type(deps_filter_jars), - "JAR type mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + type(java_lib_jars), + type(deps_filter_jars), + "JAR type mismatch: {} vs deps_filter".format(jar_field), + ) java_lib_jars_list = [jar.basename for jar in java_lib_jars.to_list()] deps_filter_jars_list = [jar.basename for jar in deps_filter_jars.to_list()] + # Normalize output jar naming difference between dependencyset consumer and base_lib update_jar_name("libno_filtering_test_lib", "libbase_lib", deps_filter_jars_list) - asserts.equals(env, java_lib_jars_list, deps_filter_jars_list, - "JAR contents mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + java_lib_jars_list, + deps_filter_jars_list, + "JAR contents mismatch: {} vs deps_filter".format(jar_field), + ) return unittest.end(env) @@ -74,15 +84,15 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { def _test_filtered_deps(ctx): """ Tests basic dependency filtering with label-based exclusions. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -94,8 +104,8 @@ def _test_filtered_deps(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Deps Dependencyset Input: items = [":lib_a", ":lib_i"], @@ -111,7 +121,7 @@ def _test_filtered_deps(ctx): Expected Output: JARs preserved: A, I, C, D, E, F, H, J JARs excluded: B, G (by label, direct deps only, transitives preserved) - + Compile-time JARs: A-hjar, I-hjar, C-hjar, F-hjar Runtime JARs: A, I, C, D, E, F, H, J Reasoning: B,G excluded by label, but their transitives (C,D,F) are preserved @@ -126,7 +136,7 @@ def _test_filtered_deps(ctx): expected_full_compile_jars = [ "libexclude_b_g_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libexclude_b_g_test_lib.jar", "liblib_a.jar", @@ -138,7 +148,7 @@ def _test_filtered_deps(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "libexclude_b_g_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -146,12 +156,16 @@ def _test_filtered_deps(ctx): "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { @@ -161,15 +175,15 @@ filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { def _test_filtered_deps_exclude_transitive(ctx): """ Tests dependency filtering with transitive exclusions. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -181,8 +195,8 @@ def _test_filtered_deps_exclude_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Deps Dependencyset Input: items = [":lib_a", ":lib_i"], @@ -198,14 +212,14 @@ def _test_filtered_deps_exclude_transitive(ctx): Expected Output: JARs preserved: A, I, E, H, J JARs excluded: B, G (by label) and all their transitives - + Compile-time JARs: A-hjar, I-hjar Runtime JARs: A, I, E, H, J (only preserved deps, no transitives of excluded deps) Reasoning: B,G excluded by label with exclude_transitives=True, so C,D,F also excluded """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libexclude_b_g_transitives_test_lib-hjar.jar", ] @@ -213,7 +227,7 @@ def _test_filtered_deps_exclude_transitive(ctx): expected_full_compile_jars = [ "libexclude_b_g_transitives_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libexclude_b_g_transitives_test_lib.jar", "liblib_a.jar", @@ -222,18 +236,22 @@ def _test_filtered_deps_exclude_transitive(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "libexclude_b_g_transitives_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_i-hjar.jar", ] - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclude_transitive, attrs = { @@ -243,15 +261,15 @@ filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclud def _test_path_based_exclusions(ctx): """ Tests filtering based on path patterns in deps_exclude_paths. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -263,8 +281,8 @@ def _test_path_based_exclusions(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Deps Dependencyset Input: items = [":lib_a", ":lib_i"], @@ -280,14 +298,14 @@ def _test_path_based_exclusions(ctx): Expected Output: JARs preserved: A, I, C, D, E, G, H, J JARs excluded: B, F (by path pattern match, transitives may be preserved) - + Compile-time JARs: A-hjar, I-hjar, C-hjar Runtime JARs: A, I, C, D, E, G, H, J (all preserved deps + transitives not matching exclusion path patterns) Reasoning: B,F excluded by path pattern, but their transitives are preserved as they didn't match the pattern """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libpath_based_exclusions_test_lib-hjar.jar", ] @@ -295,7 +313,7 @@ def _test_path_based_exclusions(ctx): expected_full_compile_jars = [ "libpath_based_exclusions_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libpath_based_exclusions_test_lib.jar", "liblib_a.jar", @@ -307,19 +325,23 @@ def _test_path_based_exclusions(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "libpath_based_exclusions_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = { @@ -329,15 +351,15 @@ path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = def _test_interface_implementation_jars(ctx): """ Tests proper handling of interface (-hjar) and implementation JARs. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -349,8 +371,8 @@ def _test_interface_implementation_jars(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Deps Dependencyset Input: items = [":lib_a", ":lib_i"], @@ -369,10 +391,10 @@ def _test_interface_implementation_jars(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + compile_jars = sorted([jar.basename for jar in javainfo_filtered.compile_jars.to_list()]) full_compile_jars = sorted([jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()]) - + expected_compile_jars = [ "libinterface_impl_test_lib-hjar.jar", ] @@ -380,7 +402,7 @@ def _test_interface_implementation_jars(ctx): expected_full_compile_jars = [ "libinterface_impl_test_lib.jar", ] - + asserts.equals(env, compile_jars, expected_compile_jars) asserts.equals(env, full_compile_jars, expected_full_compile_jars) return unittest.end(env) @@ -392,15 +414,15 @@ interface_implementation_jars_test = unittest.make(_test_interface_implementatio def _test_multiple_exclusions_with_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=True. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -412,8 +434,8 @@ def _test_multiple_exclusions_with_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Deps Dependencyset Input: items = [":lib_a", ":lib_i"], @@ -429,15 +451,15 @@ def _test_multiple_exclusions_with_transitive(ctx): Expected Output: JARs preserved: A, I, E, F, H, J JARs excluded: B and its transitives; G (not neccessarily its transitives as specified exclusion by path pattern is matched) - + Compile-time JARs: A-hjar, I-hjar, F-hjar Runtime JARs: A, I, E, F, H, J - Reasoning: B excluded by label with exclude_transitives=True (C,D excluded); + Reasoning: B excluded by label with exclude_transitives=True (C,D excluded); G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmultiple_exclusions_with_transitive_test_lib-hjar.jar", ] @@ -445,7 +467,7 @@ def _test_multiple_exclusions_with_transitive(ctx): expected_full_compile_jars = [ "libmultiple_exclusions_with_transitive_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmultiple_exclusions_with_transitive_test_lib.jar", "liblib_a.jar", @@ -455,33 +477,37 @@ def _test_multiple_exclusions_with_transitive(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "libmultiple_exclusions_with_transitive_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) def _test_multiple_exclusions_without_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=False. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -493,8 +519,8 @@ def _test_multiple_exclusions_without_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Deps Dependencyset Input: items = [":lib_a", ":lib_i"], @@ -510,15 +536,15 @@ def _test_multiple_exclusions_without_transitive(ctx): Expected Output: JARs preserved: A, I, C, D, E, F, H, J JARs excluded: B (by label, direct only); G (by path pattern match, direct only) - + Compile-time JARs: A-hjar, I-hjar, C-hjar, F-hjar Runtime JARs: A, I, C, D, E, F, H, J - Reasoning: B excluded by label (direct only, and its transitives are preserved); + Reasoning: B excluded by label (direct only, and its transitives are preserved); G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmultiple_exclusions_without_transitive_test_lib-hjar.jar", ] @@ -526,7 +552,7 @@ def _test_multiple_exclusions_without_transitive(ctx): expected_full_compile_jars = [ "libmultiple_exclusions_without_transitive_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmultiple_exclusions_without_transitive_test_lib.jar", "liblib_a.jar", @@ -538,7 +564,7 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "libmultiple_exclusions_without_transitive_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -546,12 +572,16 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_exclusions_with_transitive_test = unittest.make(_test_multiple_exclusions_with_transitive, attrs = { @@ -565,15 +595,15 @@ multiple_exclusions_without_transitive_test = unittest.make(_test_multiple_exclu def _test_empty_exclusion_lists(ctx): """ Tests behavior when exclusion lists are empty. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -585,8 +615,8 @@ def _test_empty_exclusion_lists(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Deps Dependencyset Input: items = [":lib_a", ":lib_i"], @@ -601,14 +631,14 @@ def _test_empty_exclusion_lists(ctx): Expected Output: JARs preserved: A, I, B, C, D, E, F, G, H, J - + Compile-time JARs: A-hjar, I-hjar, B-hjar, C-hjar, F-hjar Runtime JARs: A, I, B, C, D, E, F, G, H, J Reasoning: No exclusions applied, all dependencies preserved """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libempty_exclusion_lists_test_lib-hjar.jar", ] @@ -616,7 +646,7 @@ def _test_empty_exclusion_lists(ctx): expected_full_compile_jars = [ "libempty_exclusion_lists_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libempty_exclusion_lists_test_lib.jar", "liblib_a.jar", @@ -630,7 +660,7 @@ def _test_empty_exclusion_lists(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "libempty_exclusion_lists_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -639,12 +669,16 @@ def _test_empty_exclusion_lists(ctx): "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -654,15 +688,15 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = def _test_multiple_paths(ctx): """ Tests handling of multiple paths to the same dependency. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset / \\ ("deps") ("runtime_deps") / \\ / \\ - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -674,8 +708,8 @@ def _test_multiple_paths(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) # IMPORTANT_FEATURE Deps Dependencyset Input: items = [":lib_a", ":lib_i"], @@ -691,14 +725,14 @@ def _test_multiple_paths(ctx): Expected Output: JARs preserved: A, I, C, D, E, F, H, J JARs excluded: B, G (not duplicated if reachable via multiple paths) - + Compile-time JARs: A-hjar, I-hjar, C-hjar, F-hjar Runtime JARs: A, I, C, D, E, F, H, J Reasoning: B,G excluded by label, but transitives are preserved as exclude_transitives = False """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmultiple_paths_test_lib-hjar.jar", ] @@ -706,7 +740,7 @@ def _test_multiple_paths(ctx): expected_full_compile_jars = [ "libmultiple_paths_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmultiple_paths_test_lib.jar", "liblib_a.jar", @@ -718,7 +752,7 @@ def _test_multiple_paths(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "libmultiple_paths_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -726,15 +760,18 @@ def _test_multiple_paths(ctx): "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_paths_test = unittest.make(_test_multiple_paths, attrs = { "test_lib": attr.label(providers = [JavaInfo]), }) - diff --git a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only/BUILD b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only/BUILD index f5391c1..57cea40 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only/BUILD +++ b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only/BUILD @@ -1,24 +1,25 @@ -load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") +load("@rules_java//java:defs.bzl", "java_library") load("//springboot/deps_filter_rules:dependencyset.bzl", "dependencyset") +load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") load( "//springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only:compile_time_only_test.bzl", - "no_filtering_test", - "filtered_deps_test", + "empty_exclusion_lists_test", "filtered_deps_exclude_transitive_test", - "path_based_exclusions_test", + "filtered_deps_test", "interface_implementation_jars_test", "multiple_exclusions_with_transitive_test", "multiple_exclusions_without_transitive_test", - "empty_exclusion_lists_test", "multiple_paths_test", + "no_filtering_test", + "path_based_exclusions_test", ) # Dependency Graph Structure: -# base_lib +# base_lib # | # dependencyset("deps") -# / \ +# / \ # A I # / \ / # B E G @@ -26,61 +27,60 @@ load( # | F # \/ # C -# | -# D +# | +# D # java_library( name = "lib_a", srcs = ["src/main/java/com/depsfilter/A.java"], deps = [ - ":lib_b", # A -> B - ":lib_e", # A -> E + ":lib_b", # A -> B + ":lib_e", # A -> E ], ) java_library( name = "lib_b", - srcs = ["src/main/java/com/depsfilter/B.java"], - deps = [":lib_c"], # B -> C + srcs = ["src/main/java/com/depsfilter/B.java"], + deps = [":lib_c"], # B -> C ) java_library( name = "lib_c", srcs = ["src/main/java/com/depsfilter/C.java"], - deps = [":lib_d"], # B -> D + deps = [":lib_d"], # B -> D ) java_library( name = "lib_d", - srcs = ["src/main/java/com/depsfilter/D.java"], + srcs = ["src/main/java/com/depsfilter/D.java"], ) java_library( name = "lib_e", srcs = ["src/main/java/com/depsfilter/E.java"], - deps = [":lib_f"], # E -> F + deps = [":lib_f"], # E -> F ) java_library( name = "lib_f", srcs = ["src/main/java/com/depsfilter/F.java"], - deps = [":lib_c"], # F -> C + deps = [":lib_c"], # F -> C ) java_library( name = "lib_g", srcs = ["src/main/java/com/depsfilter/G.java"], - deps = [":lib_f"], # G -> F path + deps = [":lib_f"], # G -> F path ) java_library( name = "lib_i", srcs = ["src/main/java/com/depsfilter/I.java"], - deps = [":lib_g"], # I -> G path + deps = [":lib_g"], # I -> G path ) - # Consumer library that uses the filtered dependencies java_library( name = "no_filtering_test_lib", @@ -91,13 +91,19 @@ java_library( # Test 1: No filtering dependencyset( name = "no_filtering_test_dependencyset", - items = ["lib_a",":lib_i"], + items = [ + "lib_a", + ":lib_i", + ], ) java_library( name = "base_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":lib_a", ":lib_i"], + deps = [ + ":lib_a", + ":lib_i", + ], ) no_filtering_test( @@ -109,8 +115,14 @@ no_filtering_test( # Test 2: Exclude by labels and exclude_transitives = False dependencyset( name = "deps_exclude_b_g", - items = ["lib_a",":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + "lib_a", + ":lib_i", + ], ) java_library( @@ -127,9 +139,15 @@ filtered_deps_test( # Test 3: Exclude by labels and exclude_transitives = True dependencyset( name = "deps_exclude_b_g_transitives", - items = ["lib_a",":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + items = [ + "lib_a", + ":lib_i", + ], ) java_library( @@ -143,12 +161,17 @@ filtered_deps_exclude_transitive_test( test_lib = ":exclude_b_g_transitives_test_lib", ) - # Test 4: Test for path-based exclusions dependencyset( name = "deps_exclude_paths", - items = ["lib_a",":lib_i"], - deps_exclude_paths = ["lib_b", "lib_f"], + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], + items = [ + "lib_a", + ":lib_i", + ], ) java_library( @@ -162,12 +185,17 @@ path_based_exclusions_test( test_lib = ":exclude_paths_test_lib", ) - # Test 5: Interface vs Implementation JARs dependencyset( name = "deps_interface_impl_exclude_b_g", - items = ["lib_a",":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + "lib_a", + ":lib_i", + ], ) java_library( @@ -181,14 +209,16 @@ interface_implementation_jars_test( test_lib = ":interface_impl_test_lib", ) - # Test 6: Multiple exclusions with exclude_transitives=True dependencyset( name = "deps_multi_excl_transitives", - items = ["lib_a",":lib_i"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + items = [ + "lib_a", + ":lib_i", + ], ) java_library( @@ -202,14 +232,16 @@ multiple_exclusions_with_transitive_test( test_lib = ":multi_excl_transitives_test_lib", ) - # Test 7: Multiple exclusions with exclude_transitives=False dependencyset( name = "deps_multi_excl_no_transitives", - items = ["lib_a",":lib_i"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + items = [ + "lib_a", + ":lib_i", + ], ) java_library( @@ -226,9 +258,12 @@ multiple_exclusions_without_transitive_test( # Test 8: Empty exclusion lists dependencyset( name = "deps_empty_exclusions", - items = ["lib_a",":lib_i"], deps_exclude_labels = [], deps_exclude_paths = [], + items = [ + "lib_a", + ":lib_i", + ], ) java_library( @@ -245,8 +280,14 @@ empty_exclusion_lists_test( # Test 9: Multiple paths handling dependencyset( name = "deps_multiple_paths_exclude_b_g", - items = ["lib_a",":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + "lib_a", + ":lib_i", + ], ) java_library( @@ -262,6 +303,6 @@ multiple_paths_test( toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) diff --git a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only/compile_time_only_test.bzl b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only/compile_time_only_test.bzl index 54919d6..d69c319 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only/compile_time_only_test.bzl +++ b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/compile_time_only/compile_time_only_test.bzl @@ -1,19 +1,20 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts", - "update_jar_name", +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "update_jar_name", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests that deps_filter preserves all dependencies when no exclusions are applied. - - Dependency Graph: - test_lib + + Dependency Graph: + test_lib | dependencyset("deps") / \\ @@ -21,12 +22,12 @@ def _test_no_filtering(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D - + Expected: All JARs from java_library must match deps_filter: - full_compile_jars: Implementation JARs (e.g., liblib_a.jar) - compile_jars: Interface JARs (e.g., liblib_a-hjar.jar) @@ -36,26 +37,35 @@ def _test_no_filtering(ctx): env = unittest.begin(ctx) java_lib_info = ctx.attr.java_library[JavaInfo] deps_filter_info = ctx.attr.java_library_dependencyset[JavaInfo] - + # Verify all JAR fields match between java_library and deps_filter jar_fields = [ - "full_compile_jars", # Implementation JARs - "compile_jars", # Interface JARs - "transitive_compile_time_jars", # Transitive interface JARs - "transitive_runtime_jars" # Transitive implementation JARs + "full_compile_jars", # Implementation JARs + "compile_jars", # Interface JARs + "transitive_compile_time_jars", # Transitive interface JARs + "transitive_runtime_jars", # Transitive implementation JARs ] for jar_field in jar_fields: java_lib_jars = getattr(java_lib_info, jar_field) deps_filter_jars = getattr(deps_filter_info, jar_field) - asserts.equals(env, type(java_lib_jars), type(deps_filter_jars), - "JAR type mismatch: {} vs deps_filter".format(jar_field)) - java_lib_jars_list = [jar.basename for jar in java_lib_jars.to_list()] + asserts.equals( + env, + type(java_lib_jars), + type(deps_filter_jars), + "JAR type mismatch: {} vs deps_filter".format(jar_field), + ) + java_lib_jars_list = [jar.basename for jar in java_lib_jars.to_list()] deps_filter_jars_list = [jar.basename for jar in deps_filter_jars.to_list()] + # Normalize output jar naming difference between dependencyset consumer and base_lib update_jar_name("libno_filtering_test_lib", "libbase_lib", deps_filter_jars_list) - asserts.equals(env, java_lib_jars_list, deps_filter_jars_list, - "JAR contents mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + java_lib_jars_list, + deps_filter_jars_list, + "JAR contents mismatch: {} vs deps_filter".format(jar_field), + ) return unittest.end(env) @@ -67,9 +77,9 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { def _test_filtered_deps(ctx): """ Tests basic dependency filtering with label-based exclusions. - + Dependency Graph: - test_lib + test_lib | dependencyset("deps") / \\ @@ -77,8 +87,8 @@ def _test_filtered_deps(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -105,7 +115,7 @@ def _test_filtered_deps(ctx): expected_full_compile_jars = [ "libexclude_b_g_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libexclude_b_g_test_lib.jar", "liblib_a.jar", @@ -113,9 +123,9 @@ def _test_filtered_deps(ctx): "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libexclude_b_g_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -123,14 +133,18 @@ def _test_filtered_deps(ctx): "liblib_e-hjar.jar", "liblib_f-hjar.jar", "liblib_c-hjar.jar", - "liblib_d-hjar.jar" + "liblib_d-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { @@ -140,9 +154,9 @@ filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { def _test_filtered_deps_exclude_transitive(ctx): """ Tests dependency filtering with transitive exclusions. - + Dependency Graph: - test_lib + test_lib | dependencyset("deps") / \\ @@ -150,8 +164,8 @@ def _test_filtered_deps_exclude_transitive(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -170,7 +184,7 @@ def _test_filtered_deps_exclude_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libexclude_b_g_transitives_test_lib-hjar.jar", ] @@ -178,26 +192,30 @@ def _test_filtered_deps_exclude_transitive(ctx): expected_full_compile_jars = [ "libexclude_b_g_transitives_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libexclude_b_g_transitives_test_lib.jar", "liblib_a.jar", "liblib_i.jar", "liblib_e.jar", ] - + expected_transitive_compile_jars = [ "libexclude_b_g_transitives_test_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_i-hjar.jar", "liblib_e-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclude_transitive, attrs = { @@ -207,9 +225,9 @@ filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclud def _test_path_based_exclusions(ctx): """ Tests filtering based on path patterns in deps_exclude_paths. - + Dependency Graph: - test_lib + test_lib | dependencyset("deps") / \\ @@ -217,8 +235,8 @@ def _test_path_based_exclusions(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -237,7 +255,7 @@ def _test_path_based_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libexclude_paths_test_lib-hjar.jar", ] @@ -245,7 +263,7 @@ def _test_path_based_exclusions(ctx): expected_full_compile_jars = [ "libexclude_paths_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libexclude_paths_test_lib.jar", "liblib_a.jar", @@ -253,9 +271,9 @@ def _test_path_based_exclusions(ctx): "liblib_e.jar", "liblib_c.jar", "liblib_d.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libexclude_paths_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -263,14 +281,18 @@ def _test_path_based_exclusions(ctx): "liblib_e-hjar.jar", "liblib_c-hjar.jar", "liblib_d-hjar.jar", - "liblib_g-hjar.jar" + "liblib_g-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = { @@ -280,9 +302,9 @@ path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = def _test_interface_implementation_jars(ctx): """ Tests proper handling of interface (-hjar) and implementation JARs. - + Dependency Graph: - test_lib + test_lib | dependencyset("deps") / \\ @@ -290,8 +312,8 @@ def _test_interface_implementation_jars(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -311,13 +333,13 @@ def _test_interface_implementation_jars(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + compile_jars = sorted([jar.basename for jar in javainfo_filtered.compile_jars.to_list()]) full_compile_jars = sorted([jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()]) - + expected_compile_jars = ["libinterface_impl_test_lib-hjar.jar"] expected_full_compile_jars = ["libinterface_impl_test_lib.jar"] - + asserts.equals(env, compile_jars, expected_compile_jars) asserts.equals(env, full_compile_jars, expected_full_compile_jars) return unittest.end(env) @@ -329,9 +351,9 @@ interface_implementation_jars_test = unittest.make(_test_interface_implementatio def _test_multiple_exclusions_with_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=True. - + Dependency Graph: - test_lib + test_lib | dependencyset("deps") / \\ @@ -339,8 +361,8 @@ def _test_multiple_exclusions_with_transitive(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -359,7 +381,7 @@ def _test_multiple_exclusions_with_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmulti_excl_transitives_test_lib-hjar.jar", ] @@ -367,7 +389,7 @@ def _test_multiple_exclusions_with_transitive(ctx): expected_full_compile_jars = [ "libmulti_excl_transitives_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmulti_excl_transitives_test_lib.jar", "liblib_a.jar", @@ -375,7 +397,7 @@ def _test_multiple_exclusions_with_transitive(ctx): "liblib_e.jar", "liblib_f.jar", ] - + expected_transitive_compile_jars = [ "libmulti_excl_transitives_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -383,20 +405,24 @@ def _test_multiple_exclusions_with_transitive(ctx): "liblib_e-hjar.jar", "liblib_f-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) def _test_multiple_exclusions_without_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=False. - + Dependency Graph: - test_lib + test_lib | dependencyset("deps") / \\ @@ -404,8 +430,8 @@ def _test_multiple_exclusions_without_transitive(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -424,7 +450,7 @@ def _test_multiple_exclusions_without_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmulti_excl_no_transitives_test_lib-hjar.jar", ] @@ -432,7 +458,7 @@ def _test_multiple_exclusions_without_transitive(ctx): expected_full_compile_jars = [ "libmulti_excl_no_transitives_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmulti_excl_no_transitives_test_lib.jar", "liblib_a.jar", @@ -442,7 +468,7 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_c.jar", "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libmulti_excl_no_transitives_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -452,12 +478,16 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_c-hjar.jar", "liblib_d-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_exclusions_with_transitive_test = unittest.make(_test_multiple_exclusions_with_transitive, attrs = { @@ -471,9 +501,9 @@ multiple_exclusions_without_transitive_test = unittest.make(_test_multiple_exclu def _test_empty_exclusion_lists(ctx): """ Tests behavior when exclusion lists are empty. - + Dependency Graph: - test_lib + test_lib | dependencyset("deps") / \\ @@ -481,8 +511,8 @@ def _test_empty_exclusion_lists(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -499,7 +529,7 @@ def _test_empty_exclusion_lists(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libempty_exclusions_test_lib-hjar.jar", ] @@ -507,7 +537,7 @@ def _test_empty_exclusion_lists(ctx): expected_full_compile_jars = [ "libempty_exclusions_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libempty_exclusions_test_lib.jar", "liblib_a.jar", @@ -517,9 +547,9 @@ def _test_empty_exclusion_lists(ctx): "liblib_d.jar", "liblib_e.jar", "liblib_f.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libempty_exclusions_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -529,14 +559,18 @@ def _test_empty_exclusion_lists(ctx): "liblib_d-hjar.jar", "liblib_e-hjar.jar", "liblib_f-hjar.jar", - "liblib_g-hjar.jar" + "liblib_g-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -546,9 +580,9 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = def _test_multiple_paths(ctx): """ Tests handling of multiple paths to the same dependency. - + Dependency Graph: - test_lib + test_lib | dependencyset("deps") / \\ @@ -556,8 +590,8 @@ def _test_multiple_paths(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -577,7 +611,7 @@ def _test_multiple_paths(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libmultiple_paths_test_lib-hjar.jar", ] @@ -585,7 +619,7 @@ def _test_multiple_paths(ctx): expected_full_compile_jars = [ "libmultiple_paths_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libmultiple_paths_test_lib.jar", "liblib_a.jar", @@ -593,9 +627,9 @@ def _test_multiple_paths(ctx): "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libmultiple_paths_test_lib-hjar.jar", "liblib_a-hjar.jar", @@ -603,17 +637,20 @@ def _test_multiple_paths(ctx): "liblib_e-hjar.jar", "liblib_f-hjar.jar", "liblib_c-hjar.jar", - "liblib_d-hjar.jar" + "liblib_d-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_paths_test = unittest.make(_test_multiple_paths, attrs = { "test_lib": attr.label(providers = [JavaInfo]), }) - diff --git a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only/BUILD b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only/BUILD index 414c8ef..146b1da 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only/BUILD +++ b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only/BUILD @@ -1,23 +1,24 @@ +load("@rules_java//java:defs.bzl", "java_library") load("//springboot/deps_filter_rules:dependencyset.bzl", "dependencyset") load( "//springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only:runtime_only_test.bzl", - "no_filtering_test", - "filtered_deps_test", + "empty_exclusion_lists_test", "filtered_deps_exclude_transitive_test", - "path_based_exclusions_test", + "filtered_deps_test", "interface_implementation_jars_test", "multiple_exclusions_with_transitive_test", "multiple_exclusions_without_transitive_test", - "empty_exclusion_lists_test", "multiple_paths_test", + "no_filtering_test", + "path_based_exclusions_test", ) # Dependency Graph Structure: -# base_lib +# base_lib # | # dependencyset("runtime_deps") -# / \ +# / \ # A I # / \ / # B E G @@ -25,71 +26,77 @@ load( # | F # \/ # C -# | -# D +# | +# D # java_library( name = "lib_a", srcs = ["src/main/java/com/depsfilter/A.java"], runtime_deps = [ - ":lib_b", # A -> B - ":lib_e", # A -> E + ":lib_b", # A -> B + ":lib_e", # A -> E ], ) java_library( name = "lib_b", - srcs = ["src/main/java/com/depsfilter/B.java"], - runtime_deps = [":lib_c"], # B -> C + srcs = ["src/main/java/com/depsfilter/B.java"], + runtime_deps = [":lib_c"], # B -> C ) java_library( name = "lib_c", srcs = ["src/main/java/com/depsfilter/C.java"], - runtime_deps = [":lib_d"], # B -> D + runtime_deps = [":lib_d"], # B -> D ) java_library( name = "lib_d", - srcs = ["src/main/java/com/depsfilter/D.java"], + srcs = ["src/main/java/com/depsfilter/D.java"], ) java_library( name = "lib_e", srcs = ["src/main/java/com/depsfilter/E.java"], - runtime_deps = [":lib_f"], # E -> F + runtime_deps = [":lib_f"], # E -> F ) java_library( name = "lib_f", srcs = ["src/main/java/com/depsfilter/F.java"], - runtime_deps = [":lib_c"], # F -> C + runtime_deps = [":lib_c"], # F -> C ) java_library( name = "lib_g", srcs = ["src/main/java/com/depsfilter/G.java"], - runtime_deps = [":lib_f"], # G -> F path + runtime_deps = [":lib_f"], # G -> F path ) java_library( name = "lib_i", srcs = ["src/main/java/com/depsfilter/I.java"], - runtime_deps = [":lib_g"], # I -> G path + runtime_deps = [":lib_g"], # I -> G path ) # Consumer library that uses the filtered dependencies java_library( name = "base_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - runtime_deps = [":lib_a", ":lib_i"], + runtime_deps = [ + ":lib_a", + ":lib_i", + ], ) # Test 1: No filtering dependencyset( name = "runtime_deps_no_filtering", - items = [":lib_a", ":lib_i"], + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -107,8 +114,14 @@ no_filtering_test( # Test 2: Exclude by labels and exclude_transitives = False dependencyset( name = "runtime_deps_exclude_b_g", - items = [":lib_a", ":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -125,9 +138,15 @@ filtered_deps_test( # Test 3: Exclude by labels and exclude_transitives = True dependencyset( name = "runtime_deps_exclude_b_g_transitives", - items = [":lib_a", ":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -144,8 +163,14 @@ filtered_deps_exclude_transitive_test( # Test 4: Test for path-based exclusions dependencyset( name = "runtime_deps_exclude_paths", - items = [":lib_a", ":lib_i"], - deps_exclude_paths = ["lib_b", "lib_f"], + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -162,8 +187,14 @@ path_based_exclusions_test( # Test 5: Interface vs Implementation JARs dependencyset( name = "runtime_deps_interface_impl_exclude_b_g", - items = [":lib_a", ":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -180,10 +211,13 @@ interface_implementation_jars_test( # Test 6: Multiple exclusions with exclude_transitives=True dependencyset( name = "runtime_deps_multi_excl_transitives", - items = [":lib_a", ":lib_i"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -200,10 +234,13 @@ multiple_exclusions_with_transitive_test( # Test 7: Multiple exclusions with exclude_transitives=False dependencyset( name = "runtime_deps_multi_excl_no_transitives", - items = [":lib_a", ":lib_i"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -220,9 +257,12 @@ multiple_exclusions_without_transitive_test( # Test 8: Empty exclusion lists dependencyset( name = "runtime_deps_empty_exclusions", - items = [":lib_a", ":lib_i"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -239,8 +279,14 @@ empty_exclusion_lists_test( # Test 9: Multiple paths handling dependencyset( name = "runtime_deps_multiple_paths_exclude_b_g", - items = [":lib_a", ":lib_i"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + items = [ + ":lib_a", + ":lib_i", + ], ) java_library( @@ -254,9 +300,8 @@ multiple_paths_test( test_lib = ":runtime_multiple_paths_test_lib", ) - toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) diff --git a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only/runtime_only_test.bzl b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only/runtime_only_test.bzl index 50dc8e0..ca3f45d 100644 --- a/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only/runtime_only_test.bzl +++ b/springboot/deps_filter_rules/tests/dependencyset/internal_dependencies/runtime_only/runtime_only_test.bzl @@ -1,30 +1,31 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts", - "update_jar_name", +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "update_jar_name", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests that deps_filter preserves all dependencies when no exclusions are applied. - - Dependency Graph: + + Dependency Graph: test_lib / \\ A G / \\ / B E / | | / - | F - \\ + | F + \\ C | D - + Expected: All JARs from java_library must match deps_filter: - full_compile_jars: Implementation JARs (e.g., liblib_a.jar) - compile_jars: Interface JARs (e.g., liblib_a-hjar.jar) @@ -34,26 +35,35 @@ def _test_no_filtering(ctx): env = unittest.begin(ctx) java_lib_info = ctx.attr.java_library[JavaInfo] deps_filter_info = ctx.attr.java_library_dependencyset[JavaInfo] - + # Verify all JAR fields match between java_library and deps_filter jar_fields = [ - "full_compile_jars", # Implementation JARs - "compile_jars", # Interface JARs - "transitive_compile_time_jars", # Transitive interface JARs - "transitive_runtime_jars" # Transitive implementation JARs + "full_compile_jars", # Implementation JARs + "compile_jars", # Interface JARs + "transitive_compile_time_jars", # Transitive interface JARs + "transitive_runtime_jars", # Transitive implementation JARs ] for jar_field in jar_fields: java_lib_jars = getattr(java_lib_info, jar_field) deps_filter_jars = getattr(deps_filter_info, jar_field) - asserts.equals(env, type(java_lib_jars), type(deps_filter_jars), - "JAR type mismatch: {} vs deps_filter".format(jar_field)) - java_lib_jars_list = [jar.basename for jar in java_lib_jars.to_list()] + asserts.equals( + env, + type(java_lib_jars), + type(deps_filter_jars), + "JAR type mismatch: {} vs deps_filter".format(jar_field), + ) + java_lib_jars_list = [jar.basename for jar in java_lib_jars.to_list()] deps_filter_jars_list = [jar.basename for jar in deps_filter_jars.to_list()] + # Normalize output jar naming difference between dependencyset consumer and base_lib update_jar_name("libruntime_no_filtering_test_lib", "libbase_lib", deps_filter_jars_list) - asserts.equals(env, java_lib_jars_list, deps_filter_jars_list, - "JAR contents mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + java_lib_jars_list, + deps_filter_jars_list, + "JAR contents mismatch: {} vs deps_filter".format(jar_field), + ) return unittest.end(env) @@ -65,9 +75,9 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { def _test_filtered_deps(ctx): """ Tests basic dependency filtering with label-based exclusions. - + Dependency Graph: - test_lib + test_lib | dependencyset("runtime_deps") / \\ @@ -75,8 +85,8 @@ def _test_filtered_deps(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -104,7 +114,7 @@ def _test_filtered_deps(ctx): expected_full_compile_jars = [ "libruntime_exclude_b_g_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libruntime_exclude_b_g_test_lib.jar", "liblib_a.jar", @@ -112,18 +122,22 @@ def _test_filtered_deps(ctx): "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libruntime_exclude_b_g_test_lib-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { @@ -133,9 +147,9 @@ filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { def _test_filtered_deps_exclude_transitive(ctx): """ Tests dependency filtering with transitive exclusions. - + Dependency Graph: - test_lib + test_lib | dependencyset("runtime_deps") / \\ @@ -143,8 +157,8 @@ def _test_filtered_deps_exclude_transitive(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -164,7 +178,7 @@ def _test_filtered_deps_exclude_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libruntime_exclude_b_g_transitives_test_lib-hjar.jar", ] @@ -172,23 +186,27 @@ def _test_filtered_deps_exclude_transitive(ctx): expected_full_compile_jars = [ "libruntime_exclude_b_g_transitives_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libruntime_exclude_b_g_transitives_test_lib.jar", "liblib_a.jar", "liblib_i.jar", "liblib_e.jar", ] - + expected_transitive_compile_jars = [ "libruntime_exclude_b_g_transitives_test_lib-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclude_transitive, attrs = { @@ -198,9 +216,9 @@ filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclud def _test_path_based_exclusions(ctx): """ Tests filtering based on path patterns in deps_exclude_paths. - + Dependency Graph: - test_lib + test_lib | dependencyset("runtime_deps") / \\ @@ -208,8 +226,8 @@ def _test_path_based_exclusions(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -228,7 +246,7 @@ def _test_path_based_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libruntime_exclude_paths_test_lib-hjar.jar", ] @@ -236,7 +254,7 @@ def _test_path_based_exclusions(ctx): expected_full_compile_jars = [ "libruntime_exclude_paths_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libruntime_exclude_paths_test_lib.jar", "liblib_a.jar", @@ -244,18 +262,22 @@ def _test_path_based_exclusions(ctx): "liblib_e.jar", "liblib_c.jar", "liblib_d.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libruntime_exclude_paths_test_lib-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = { @@ -265,9 +287,9 @@ path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = def _test_interface_implementation_jars(ctx): """ Tests proper handling of interface (-hjar) and implementation JARs. - + Dependency Graph: - test_lib + test_lib | dependencyset("runtime_deps") / \\ @@ -275,8 +297,8 @@ def _test_interface_implementation_jars(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -296,17 +318,17 @@ def _test_interface_implementation_jars(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + compile_jars = sorted([jar.basename for jar in javainfo_filtered.compile_jars.to_list()]) full_compile_jars = sorted([jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()]) - + expected_compile_jars = [ "libruntime_interface_impl_test_lib-hjar.jar", ] expected_full_compile_jars = [ "libruntime_interface_impl_test_lib.jar", ] - + asserts.equals(env, compile_jars, expected_compile_jars) asserts.equals(env, full_compile_jars, expected_full_compile_jars) return unittest.end(env) @@ -318,9 +340,9 @@ interface_implementation_jars_test = unittest.make(_test_interface_implementatio def _test_multiple_exclusions_with_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=True. - + Dependency Graph: - test_lib + test_lib | dependencyset("runtime_deps") / \\ @@ -328,8 +350,8 @@ def _test_multiple_exclusions_with_transitive(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -349,7 +371,7 @@ def _test_multiple_exclusions_with_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libruntime_multi_excl_transitives_test_lib-hjar.jar", ] @@ -357,7 +379,7 @@ def _test_multiple_exclusions_with_transitive(ctx): expected_full_compile_jars = [ "libruntime_multi_excl_transitives_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libruntime_multi_excl_transitives_test_lib.jar", "liblib_a.jar", @@ -365,24 +387,28 @@ def _test_multiple_exclusions_with_transitive(ctx): "liblib_e.jar", "liblib_f.jar", ] - + expected_transitive_compile_jars = [ "libruntime_multi_excl_transitives_test_lib-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) def _test_multiple_exclusions_without_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=False. - + Dependency Graph: - test_lib + test_lib | dependencyset("runtime_deps") / \\ @@ -390,8 +416,8 @@ def _test_multiple_exclusions_without_transitive(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -411,7 +437,7 @@ def _test_multiple_exclusions_without_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libruntime_multi_excl_no_transitives_test_lib-hjar.jar", ] @@ -419,7 +445,7 @@ def _test_multiple_exclusions_without_transitive(ctx): expected_full_compile_jars = [ "libruntime_multi_excl_no_transitives_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libruntime_multi_excl_no_transitives_test_lib.jar", "liblib_a.jar", @@ -429,16 +455,20 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_c.jar", "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libruntime_multi_excl_no_transitives_test_lib-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_exclusions_with_transitive_test = unittest.make(_test_multiple_exclusions_with_transitive, attrs = { @@ -452,9 +482,9 @@ multiple_exclusions_without_transitive_test = unittest.make(_test_multiple_exclu def _test_empty_exclusion_lists(ctx): """ Tests behavior when exclusion lists are empty. - + Dependency Graph: - test_lib + test_lib | dependencyset("runtime_deps") / \\ @@ -462,8 +492,8 @@ def _test_empty_exclusion_lists(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -481,7 +511,7 @@ def _test_empty_exclusion_lists(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libruntime_empty_exclusions_test_lib-hjar.jar", ] @@ -489,7 +519,7 @@ def _test_empty_exclusion_lists(ctx): expected_full_compile_jars = [ "libruntime_empty_exclusions_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libruntime_empty_exclusions_test_lib.jar", "liblib_a.jar", @@ -499,18 +529,22 @@ def _test_empty_exclusion_lists(ctx): "liblib_d.jar", "liblib_e.jar", "liblib_f.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libruntime_empty_exclusions_test_lib-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -520,9 +554,9 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = def _test_multiple_paths(ctx): """ Tests handling of multiple paths to the same dependency. - + Dependency Graph: - test_lib + test_lib | dependencyset("runtime_deps") / \\ @@ -530,8 +564,8 @@ def _test_multiple_paths(ctx): / \\ / B E G | | / - | F - \\ + | F + \\ C | D @@ -552,7 +586,7 @@ def _test_multiple_paths(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.test_lib[JavaInfo] - + expected_compile_jars = [ "libruntime_multiple_paths_test_lib-hjar.jar", ] @@ -560,7 +594,7 @@ def _test_multiple_paths(ctx): expected_full_compile_jars = [ "libruntime_multiple_paths_test_lib.jar", ] - + expected_transitive_runtime_jars = [ "libruntime_multiple_paths_test_lib.jar", "liblib_a.jar", @@ -568,21 +602,24 @@ def _test_multiple_paths(ctx): "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libruntime_multiple_paths_test_lib-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_paths_test = unittest.make(_test_multiple_paths, attrs = { "test_lib": attr.label(providers = [JavaInfo]), }) - diff --git a/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime/BUILD b/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime/BUILD index f962e7e..1d60d71 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime/BUILD +++ b/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime/BUILD @@ -1,27 +1,28 @@ +load("@rules_java//java:defs.bzl", "java_test") load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") load( "//springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime:compile_and_runtime_test.bzl", - "no_filtering_test", - "with_label_exclusions_test", - "with_label_exclusions_with_exclude_transitives_test", - "with_path_exclusions_test", - "with_path_exclusions_with_exclude_transitives_test", + "case_sensitive_pattern_matching_test", + "compile_deps_only_test", + "empty_exclusion_lists_test", "multiple_exclusions_with_exclude_transitives_test", "multiple_exclusions_without_exclude_transitives_test", - "empty_exclusion_lists_test", + "no_filtering_test", + "one_compile_one_runtime_dep_test", "path_based_exclusions_comprehensive_test", + "path_patterns_with_special_characters_test", "runtime_deps_only_test", - "compile_deps_only_test", "single_dep_with_exclusions_test", "single_runtime_dep_with_exclusions_test", - "one_compile_one_runtime_dep_test", - "path_patterns_with_special_characters_test", - "case_sensitive_pattern_matching_test", + "with_label_exclusions_test", + "with_label_exclusions_with_exclude_transitives_test", + "with_path_exclusions_test", + "with_path_exclusions_with_exclude_transitives_test", ) deps = [ "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_security", + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_security", "@unmanaged_deps_filter//:com_fasterxml_jackson_core_jackson_databind", "@unmanaged_deps_filter//:org_hibernate_orm_hibernate_core", "@unmanaged_deps_filter//:jakarta_servlet_jsp_jakarta_servlet_jsp_api", @@ -41,8 +42,8 @@ test_deps = [ # Test 1: No filtering - baseline test deps_filter( name = "no_filtering", - deps = deps, runtime_deps = runtime_deps, + deps = deps, ) no_filtering_test( @@ -54,20 +55,23 @@ java_test( name = "DepsFilterNoFilteringTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterNoFilteringTest.java" + "src/test/java/com/depsfilter/DepsFilterNoFilteringTest.java", ], - deps = [":no_filtering", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":no_filtering", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 2: Label-based exclusions without transitives deps_filter( name = "with_label_exclusions", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], + runtime_deps = runtime_deps, + deps = deps, ) with_label_exclusions_test( @@ -79,21 +83,24 @@ java_test( name = "DepsFilterLabelExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterLabelExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterLabelExclusionsTest.java", ], - deps = [":with_label_exclusions", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_label_exclusions", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 3: Label-based exclusions with exclude_transitives deps_filter( name = "with_label_exclusions_with_exclude_transitives", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], exclude_transitives = True, + runtime_deps = runtime_deps, + deps = deps, ) with_label_exclusions_with_exclude_transitives_test( @@ -105,20 +112,23 @@ java_test( name = "DepsFilterExcludeTransitiveTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java" + "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java", ], - deps = [":with_label_exclusions_with_exclude_transitives", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_label_exclusions_with_exclude_transitives", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 4: Path-based exclusions without transitives deps_filter( name = "with_path_exclusions", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_paths = [ "micrometer", - "slf4j" + "slf4j", ], + runtime_deps = runtime_deps, + deps = deps, ) with_path_exclusions_test( @@ -130,21 +140,24 @@ java_test( name = "DepsFilterPathExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterPathExclusionsTest.java", ], - deps = [":with_path_exclusions", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_path_exclusions", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 5: Path-based exclusions with exclude_transitives deps_filter( name = "with_path_exclusions_with_exclude_transitives", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_paths = [ "micrometer", - "slf4j" + "slf4j", ], exclude_transitives = True, + runtime_deps = runtime_deps, + deps = deps, ) with_path_exclusions_with_exclude_transitives_test( @@ -156,24 +169,27 @@ java_test( name = "DepsFilterPathExclusionsWithTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathExclusionsWithTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterPathExclusionsWithTransitivesTest.java", ], - deps = [":with_path_exclusions_with_exclude_transitives", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_path_exclusions_with_exclude_transitives", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 6: Multiple exclusions with exclude_transitives (labels + patterns) deps_filter( name = "multiple_exclusions_with_exclude_transitives", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], deps_exclude_paths = [ - "slf4j" + "slf4j", ], exclude_transitives = True, + runtime_deps = runtime_deps, + deps = deps, ) multiple_exclusions_with_exclude_transitives_test( @@ -185,16 +201,17 @@ java_test( name = "DepsFilterMultipleExclusionsWithTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitivesTest.java", ], - deps = [":multiple_exclusions_with_exclude_transitives", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":multiple_exclusions_with_exclude_transitives", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 7: Multiple exclusions without exclude_transitives (labels + patterns) deps_filter( name = "multiple_exclusions_without_exclude_transitives", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", @@ -203,6 +220,8 @@ deps_filter( "slf4j", ], exclude_transitives = True, + runtime_deps = runtime_deps, + deps = deps, ) multiple_exclusions_without_exclude_transitives_test( @@ -214,19 +233,22 @@ java_test( name = "DepsFilterMultipleExclusionsWithoutTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitivesTest.java", ], - deps = [":multiple_exclusions_without_exclude_transitives", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":multiple_exclusions_without_exclude_transitives", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 8: Empty exclusion lists deps_filter( name = "empty_exclusion_lists", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + runtime_deps = runtime_deps, + deps = deps, ) empty_exclusion_lists_test( @@ -238,23 +260,26 @@ java_test( name = "DepsFilterEmptyExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java", ], - deps = [":empty_exclusion_lists", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":empty_exclusion_lists", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 9: Comprehensive path-based exclusions deps_filter( name = "path_based_exclusions_comprehensive", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_labels = [], deps_exclude_paths = [ "micrometer", "slf4j", - "logback" + "logback", ], exclude_transitives = False, + runtime_deps = runtime_deps, + deps = deps, ) path_based_exclusions_comprehensive_test( @@ -266,18 +291,21 @@ java_test( name = "DepsFilterPathBasedExclusionsComprehensiveTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsComprehensiveTest.java" + "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsComprehensiveTest.java", ], - deps = [":path_based_exclusions_comprehensive", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":path_based_exclusions_comprehensive", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 10: Runtime deps only deps_filter( name = "runtime_deps_only", - runtime_deps = runtime_deps, deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + runtime_deps = runtime_deps, ) runtime_deps_only_test( @@ -289,19 +317,22 @@ java_test( name = "DepsFilterRuntimeDepsOnlyTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterRuntimeDepsOnlyTest.java" + "src/test/java/com/depsfilter/DepsFilterRuntimeDepsOnlyTest.java", ], - deps = [":runtime_deps_only", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":runtime_deps_only", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 11: Compile deps only deps_filter( name = "compile_deps_only", - deps = deps, - runtime_deps = [], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + runtime_deps = [], + deps = deps, ) compile_deps_only_test( @@ -313,23 +344,26 @@ java_test( name = "DepsFilterCompileDepsOnlyTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterCompileDepsOnlyTest.java" + "src/test/java/com/depsfilter/DepsFilterCompileDepsOnlyTest.java", ], - deps = [":compile_deps_only", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":compile_deps_only", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 12: Single dependency with exclusions deps_filter( name = "single_dep_with_exclusions", - deps = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", - ], - runtime_deps = [], deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", ], deps_exclude_paths = [], exclude_transitives = False, + runtime_deps = [], + deps = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", + ], ) single_dep_with_exclusions_test( @@ -341,23 +375,26 @@ java_test( name = "DepsFilterSingleDepWithExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterSingleDepWithExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterSingleDepWithExclusionsTest.java", ], - deps = [":single_dep_with_exclusions", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":single_dep_with_exclusions", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 13: Single runtime dependency with exclusions deps_filter( name = "single_runtime_dep_with_exclusions", - deps = [], - runtime_deps = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", - ], deps_exclude_labels = [], deps_exclude_paths = [ "slf4j", ], exclude_transitives = False, + runtime_deps = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", + ], + deps = [], ) single_runtime_dep_with_exclusions_test( @@ -369,23 +406,26 @@ java_test( name = "DepsFilterSingleRuntimeDepWithExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterSingleRuntimeDepWithExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterSingleRuntimeDepWithExclusionsTest.java", ], - deps = [":single_runtime_dep_with_exclusions", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":single_runtime_dep_with_exclusions", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 14: One compile dep and one runtime dep deps_filter( name = "one_compile_one_runtime_dep", - deps = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", - ], - runtime_deps = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", - ], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + runtime_deps = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", + ], + deps = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", + ], ) one_compile_one_runtime_dep_test( @@ -397,21 +437,24 @@ java_test( name = "DepsFilterOneCompileOneRuntimeDepTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterOneCompileOneRuntimeDepTest.java" + "src/test/java/com/depsfilter/DepsFilterOneCompileOneRuntimeDepTest.java", ], - deps = [":one_compile_one_runtime_dep", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":one_compile_one_runtime_dep", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 15: Path patterns with special characters deps_filter( name = "path_patterns_with_special_characters", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_paths = [ - "io.micrometer", - "to-slf4j", + "io.micrometer", + "to-slf4j", ], exclude_transitives = True, + runtime_deps = runtime_deps, + deps = deps, ) path_patterns_with_special_characters_test( @@ -423,23 +466,26 @@ java_test( name = "DepsFilterPathPatternsWithSpecialCharactersTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathPatternsWithSpecialCharactersTest.java" + "src/test/java/com/depsfilter/DepsFilterPathPatternsWithSpecialCharactersTest.java", ], - deps = [":path_patterns_with_special_characters", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":path_patterns_with_special_characters", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 16: Case sensitive pattern matching deps_filter( name = "case_sensitive_pattern_matching", - deps = deps, - runtime_deps = runtime_deps, deps_exclude_labels = [], deps_exclude_paths = [ "SPRING", # Uppercase pattern - "Jackson", # Mixed case pattern - "HIBERNATE", # Uppercase pattern + "Jackson", # Mixed case pattern + "HIBERNATE", # Uppercase pattern ], exclude_transitives = False, + runtime_deps = runtime_deps, + deps = deps, ) case_sensitive_pattern_matching_test( @@ -451,15 +497,17 @@ java_test( name = "DepsFilterCaseSensitivePatternMatchingTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterCaseSensitivePatternMatchingTest.java" + "src/test/java/com/depsfilter/DepsFilterCaseSensitivePatternMatchingTest.java", ], - deps = [":case_sensitive_pattern_matching", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":case_sensitive_pattern_matching", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Toolchain for unittest toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) - diff --git a/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime/compile_and_runtime_test.bzl b/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime/compile_and_runtime_test.bzl index d7d658f..7fcf8c7 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime/compile_and_runtime_test.bzl +++ b/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime/compile_and_runtime_test.bzl @@ -1,35 +1,41 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts", - "compute_expected_jars", +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "compute_expected_jars", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests deps without any filtering - baseline test. """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_jars_and_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_jars_and_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) @@ -56,29 +62,30 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), }) - def _test_with_label_exclusions(ctx): """ Tests deps with label-based exclusions (without transitives). """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Verify dropped counts - label exclusions should drop direct JARs but not transitives when exclude_transitives=False dropped_counts = { "compile_jars_dropped": expected["compile_jars_dropped"], @@ -86,11 +93,14 @@ def _test_with_label_exclusions(ctx): "transitive_compile_jars_dropped": expected["transitive_compile_jars_dropped"], "transitive_runtime_jars_dropped": expected["transitive_runtime_jars_dropped"], } - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) @@ -118,10 +128,9 @@ with_label_exclusions_test = unittest.make(_test_with_label_exclusions, attrs = default = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", - ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -135,22 +144,27 @@ def _test_with_label_exclusions_with_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_jars_and_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_jars_and_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) @@ -178,10 +192,9 @@ with_label_exclusions_with_exclude_transitives_test = unittest.make(_test_with_l default = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", - ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -189,29 +202,33 @@ with_label_exclusions_with_exclude_transitives_test = unittest.make(_test_with_l ), }) - def _test_with_path_exclusions(ctx): """ Tests deps with path-based exclusions (without transitives). """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { @@ -235,13 +252,13 @@ with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { providers = [JavaInfo], ), "deps_exclude_labels": attr.label_list( - default = [ + default = [ ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -249,29 +266,33 @@ with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { ), }) - def _test_with_path_exclusions_with_exclude_transitives(ctx): """ Tests deps with path-based exclusions including exclude_transitives. """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) - + verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) with_path_exclusions_with_exclude_transitives_test = unittest.make(_test_with_path_exclusions_with_exclude_transitives, attrs = { @@ -295,13 +316,13 @@ with_path_exclusions_with_exclude_transitives_test = unittest.make(_test_with_pa providers = [JavaInfo], ), "deps_exclude_labels": attr.label_list( - default = [ + default = [ ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -315,22 +336,27 @@ def _test_multiple_exclusions_with_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) multiple_exclusions_with_exclude_transitives_test = unittest.make(_test_multiple_exclusions_with_exclude_transitives, attrs = { @@ -359,9 +385,9 @@ multiple_exclusions_with_exclude_transitives_test = unittest.make(_test_multiple "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -375,22 +401,27 @@ def _test_multiple_exclusions_without_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) multiple_exclusions_without_exclude_transitives_test = unittest.make(_test_multiple_exclusions_without_exclude_transitives, attrs = { @@ -419,9 +450,9 @@ multiple_exclusions_without_exclude_transitives_test = unittest.make(_test_multi "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -435,22 +466,27 @@ def _test_empty_exclusion_lists(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -476,7 +512,7 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -490,30 +526,38 @@ def _test_path_based_exclusions_comprehensive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Additional verification: ensure excluded patterns are not present transitive_runtime_jars = [jar.basename for jar in javainfo_filtered.transitive_runtime_jars.to_list()] for pattern in ["micrometer", "slf4j", "logback"]: for jar in transitive_runtime_jars: - asserts.true(env, pattern not in jar, - "Excluded pattern '{}' found in JAR: {}".format(pattern, jar)) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") - + asserts.true( + env, + pattern not in jar, + "Excluded pattern '{}' found in JAR: {}".format(pattern, jar), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) + return unittest.end(env) path_based_exclusions_comprehensive_test = unittest.make(_test_path_based_exclusions_comprehensive, attrs = { @@ -539,11 +583,11 @@ path_based_exclusions_comprehensive_test = unittest.make(_test_path_based_exclus "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", "slf4j", - "logback" + "logback", ], ), "exclude_transitives": attr.bool( @@ -557,36 +601,49 @@ def _test_runtime_deps_only(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) # Updating manually because the output_jar for 'runtime_deps' is a full_compile_jar if no 'deps' specified expected_full_compile_jars = ["processed_spring-boot-starter-oauth2-client-3.3.11.jar"] verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected_full_compile_jars, expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Runtime deps should not contribute to compile-time JARs compile_jars = [jar.basename for jar in javainfo_filtered.compile_jars.to_list()] full_compile_jars = [jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()] - - asserts.equals(env, len(compile_jars), 0, - "Expected no compile JARs when only runtime_deps provided, got: {}".format(len(compile_jars))) + + asserts.equals( + env, + len(compile_jars), + 0, + "Expected no compile JARs when only runtime_deps provided, got: {}".format(len(compile_jars)), + ) # Note: full_compile_jars is not empty because the output_jar is a full_compile_jar - asserts.equals(env, len(full_compile_jars), 1, - "Expected no full compile JARs when only runtime_deps provided, got: {}".format(len(full_compile_jars))) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + asserts.equals( + env, + len(full_compile_jars), + 1, + "Expected no full compile JARs when only runtime_deps provided, got: {}".format(len(full_compile_jars)), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) runtime_deps_only_test = unittest.make(_test_runtime_deps_only, attrs = { @@ -605,7 +662,7 @@ runtime_deps_only_test = unittest.make(_test_runtime_deps_only, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -619,31 +676,42 @@ def _test_compile_deps_only(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Compile deps should contribute to both compile and runtime JARs compile_jars = [jar.basename for jar in javainfo_filtered.compile_jars.to_list()] transitive_runtime_jars = [jar.basename for jar in javainfo_filtered.transitive_runtime_jars.to_list()] - - asserts.true(env, len(compile_jars) > 0, - "Expected compile JARs when deps provided, got: {}".format(len(compile_jars))) - asserts.true(env, len(transitive_runtime_jars) > 0, - "Expected transitive runtime JARs when deps provided, got: {}".format(len(transitive_runtime_jars))) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + asserts.true( + env, + len(compile_jars) > 0, + "Expected compile JARs when deps provided, got: {}".format(len(compile_jars)), + ) + asserts.true( + env, + len(transitive_runtime_jars) > 0, + "Expected transitive runtime JARs when deps provided, got: {}".format(len(transitive_runtime_jars)), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) compile_deps_only_test = unittest.make(_test_compile_deps_only, attrs = { @@ -664,7 +732,7 @@ compile_deps_only_test = unittest.make(_test_compile_deps_only, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -678,22 +746,27 @@ def _test_single_dep_with_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) single_dep_with_exclusions_test = unittest.make(_test_single_dep_with_exclusions, attrs = { @@ -712,7 +785,7 @@ single_dep_with_exclusions_test = unittest.make(_test_single_dep_with_exclusions "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -726,24 +799,29 @@ def _test_single_runtime_dep_with_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) expected["full_compile_jars"] = ["processed_spring-boot-starter-oauth2-client-3.3.11.jar"] verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) single_runtime_dep_with_exclusions_test = unittest.make(_test_single_runtime_dep_with_exclusions, attrs = { @@ -760,7 +838,7 @@ single_runtime_dep_with_exclusions_test = unittest.make(_test_single_runtime_dep "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "slf4j", ], @@ -776,22 +854,27 @@ def _test_one_compile_one_runtime_dep(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) one_compile_one_runtime_dep_test = unittest.make(_test_one_compile_one_runtime_dep, attrs = { @@ -811,7 +894,7 @@ one_compile_one_runtime_dep_test = unittest.make(_test_one_compile_one_runtime_d "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -825,22 +908,27 @@ def _test_path_patterns_with_special_characters(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) path_patterns_with_special_characters_test = unittest.make(_test_path_patterns_with_special_characters, attrs = { @@ -866,7 +954,7 @@ path_patterns_with_special_characters_test = unittest.make(_test_path_patterns_w "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "io.micrometer", # Pattern with dot "to-slf4j", # Pattern with hyphen @@ -883,22 +971,27 @@ def _test_case_sensitive_pattern_matching(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected = compute_expected_jars(ctx) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) case_sensitive_pattern_matching_test = unittest.make(_test_case_sensitive_pattern_matching, attrs = { @@ -924,18 +1017,14 @@ case_sensitive_pattern_matching_test = unittest.make(_test_case_sensitive_patter "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "SPRING", # Uppercase pattern - "Jackson", # Mixed case pattern - "HIBERNATE", # Uppercase pattern + "Jackson", # Mixed case pattern + "HIBERNATE", # Uppercase pattern ], ), "exclude_transitives": attr.bool( default = False, ), }) - - - - diff --git a/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library/BUILD b/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library/BUILD index a548592..007c4dd 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library/BUILD +++ b/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library/BUILD @@ -1,29 +1,30 @@ +load("@rules_java//java:defs.bzl", "java_library", "java_test") load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") load( "//springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library:compile_and_runtime_test.bzl", - "no_filtering_test", - "with_label_exclusions_test", - "with_label_exclusions_with_exclude_transitives_test", - "with_path_exclusions_test", - "with_path_exclusions_with_exclude_transitives_test", + "case_sensitive_pattern_matching_test", + "compile_deps_only_test", + "empty_exclusion_lists_test", "multiple_exclusions_with_exclude_transitives_test", "multiple_exclusions_without_exclude_transitives_test", - "empty_exclusion_lists_test", + "no_filtering_test", + "one_compile_one_runtime_dep_test", "path_based_exclusions_comprehensive_test", + "path_patterns_with_special_characters_test", "runtime_deps_only_A_test", "runtime_deps_only_B_test", + "single_dep_with_exclusions_test", "single_runtime_dep_with_exclusions_A_test", "single_runtime_dep_with_exclusions_B_test", - "compile_deps_only_test", - "single_dep_with_exclusions_test", - "one_compile_one_runtime_dep_test", - "path_patterns_with_special_characters_test", - "case_sensitive_pattern_matching_test", + "with_label_exclusions_test", + "with_label_exclusions_with_exclude_transitives_test", + "with_path_exclusions_test", + "with_path_exclusions_with_exclude_transitives_test", ) deps = [ "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_security", + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_security", "@unmanaged_deps_filter//:com_fasterxml_jackson_core_jackson_databind", "@unmanaged_deps_filter//:org_hibernate_orm_hibernate_core", "@unmanaged_deps_filter//:jakarta_servlet_jsp_jakarta_servlet_jsp_api", @@ -44,8 +45,8 @@ test_deps = [ java_library( name = "base_lib_with_deps_and_runtime_deps", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = deps, runtime_deps = runtime_deps, + deps = deps, ) java_library( @@ -63,12 +64,12 @@ java_library( java_library( name = "base_lib_with_single_dep_and_runtime_dep", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [ - "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", - ], runtime_deps = [ "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_oauth2_client", ], + deps = [ + "@unmanaged_deps_filter//:org_springframework_boot_spring_boot_starter_data_jpa", + ], ) java_library( @@ -102,19 +103,22 @@ java_test( name = "DepsFilterNoFilteringTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterNoFilteringTest.java" + "src/test/java/com/depsfilter/DepsFilterNoFilteringTest.java", ], - deps = [":no_filtering", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":no_filtering", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 2: Label-based exclusions without transitives deps_filter( name = "with_label_exclusions", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], + deps = [":base_lib_with_deps_and_runtime_deps"], ) with_label_exclusions_test( @@ -126,20 +130,23 @@ java_test( name = "DepsFilterLabelExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterLabelExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterLabelExclusionsTest.java", ], - deps = [":with_label_exclusions", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_label_exclusions", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 3: Label-based exclusions with exclude_transitives deps_filter( name = "with_label_exclusions_with_exclude_transitives", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], exclude_transitives = True, + deps = [":base_lib_with_deps_and_runtime_deps"], ) with_label_exclusions_with_exclude_transitives_test( @@ -151,19 +158,22 @@ java_test( name = "DepsFilterExcludeTransitiveTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java" + "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java", ], - deps = [":with_label_exclusions_with_exclude_transitives", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_label_exclusions_with_exclude_transitives", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 4: Path-based exclusions without transitives deps_filter( name = "with_path_exclusions", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_paths = [ "micrometer", - "slf4j" + "slf4j", ], + deps = [":base_lib_with_deps_and_runtime_deps"], ) with_path_exclusions_test( @@ -175,20 +185,23 @@ java_test( name = "DepsFilterPathExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterPathExclusionsTest.java", ], - deps = [":with_path_exclusions", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_path_exclusions", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 5: Path-based exclusions with exclude_transitives deps_filter( name = "with_path_exclusions_with_exclude_transitives", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_paths = [ "micrometer", - "slf4j" + "slf4j", ], exclude_transitives = True, + deps = [":base_lib_with_deps_and_runtime_deps"], ) with_path_exclusions_with_exclude_transitives_test( @@ -200,23 +213,26 @@ java_test( name = "DepsFilterPathExclusionsWithTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathExclusionsWithTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterPathExclusionsWithTransitivesTest.java", ], - deps = [":with_path_exclusions_with_exclude_transitives", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":with_path_exclusions_with_exclude_transitives", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 6: Multiple exclusions with exclude_transitives (labels + patterns) deps_filter( name = "multiple_exclusions_with_exclude_transitives", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], deps_exclude_paths = [ - "slf4j" + "slf4j", ], exclude_transitives = True, + deps = [":base_lib_with_deps_and_runtime_deps"], ) multiple_exclusions_with_exclude_transitives_test( @@ -228,15 +244,17 @@ java_test( name = "DepsFilterMultipleExclusionsWithTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitivesTest.java", ], - deps = [":multiple_exclusions_with_exclude_transitives", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":multiple_exclusions_with_exclude_transitives", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 7: Multiple exclusions without exclude_transitives (labels + patterns) deps_filter( name = "multiple_exclusions_without_exclude_transitives", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", @@ -245,6 +263,7 @@ deps_filter( "slf4j", ], exclude_transitives = True, + deps = [":base_lib_with_deps_and_runtime_deps"], ) multiple_exclusions_without_exclude_transitives_test( @@ -256,18 +275,21 @@ java_test( name = "DepsFilterMultipleExclusionsWithoutTransitivesTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitivesTest.java" + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitivesTest.java", ], - deps = [":multiple_exclusions_without_exclude_transitives", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":multiple_exclusions_without_exclude_transitives", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 8: Empty exclusion lists deps_filter( name = "empty_exclusion_lists", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + deps = [":base_lib_with_deps_and_runtime_deps"], ) empty_exclusion_lists_test( @@ -279,22 +301,25 @@ java_test( name = "DepsFilterEmptyExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java", ], - deps = [":empty_exclusion_lists", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":empty_exclusion_lists", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 9: Comprehensive path-based exclusions deps_filter( name = "path_based_exclusions_comprehensive", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_labels = [], deps_exclude_paths = [ "micrometer", "slf4j", - "logback" + "logback", ], exclude_transitives = False, + deps = [":base_lib_with_deps_and_runtime_deps"], ) path_based_exclusions_comprehensive_test( @@ -306,18 +331,21 @@ java_test( name = "DepsFilterPathBasedExclusionsComprehensiveTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsComprehensiveTest.java" + "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsComprehensiveTest.java", ], - deps = [":path_based_exclusions_comprehensive", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":path_based_exclusions_comprehensive", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 10.A: Runtime deps only deps_filter( name = "runtime_deps_only_A", - runtime_deps = [":base_lib_with_runtime_deps"], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + runtime_deps = [":base_lib_with_runtime_deps"], ) runtime_deps_only_A_test( @@ -329,18 +357,21 @@ java_test( name = "DepsFilterRuntimeDepsOnlyATest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterRuntimeDepsOnlyATest.java" + "src/test/java/com/depsfilter/DepsFilterRuntimeDepsOnlyATest.java", ], - deps = [":runtime_deps_only_A", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":runtime_deps_only_A", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 10.B: Runtime deps only deps_filter( name = "runtime_deps_only_B", - deps = [":base_lib_with_runtime_deps"], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + deps = [":base_lib_with_runtime_deps"], ) runtime_deps_only_B_test( @@ -352,20 +383,23 @@ java_test( name = "DepsFilterRuntimeDepsOnlyBTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterRuntimeDepsOnlyBTest.java" + "src/test/java/com/depsfilter/DepsFilterRuntimeDepsOnlyBTest.java", ], - deps = [":runtime_deps_only_B", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":runtime_deps_only_B", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 11.A: Single runtime dependency with exclusions deps_filter( name = "single_runtime_dep_with_exclusions_A", - runtime_deps = [":base_lib_with_single_runtime_dep",], deps_exclude_labels = [], deps_exclude_paths = [ "slf4j", ], exclude_transitives = False, + runtime_deps = [":base_lib_with_single_runtime_dep"], ) single_runtime_dep_with_exclusions_A_test( @@ -377,21 +411,24 @@ java_test( name = "DepsFilterSingleRuntimeDepWithExclusionsATest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterSingleRuntimeDepWithExclusionsATest.java" + "src/test/java/com/depsfilter/DepsFilterSingleRuntimeDepWithExclusionsATest.java", ], - deps = [":single_runtime_dep_with_exclusions_A", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":single_runtime_dep_with_exclusions_A", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 11.B: Single runtime dependency with exclusions deps_filter( name = "single_runtime_dep_with_exclusions_B", - deps = [":base_lib_with_single_runtime_dep",], # runtime_deps = [], deps_exclude_labels = [], deps_exclude_paths = [ "slf4j", ], exclude_transitives = False, + deps = [":base_lib_with_single_runtime_dep"], ) single_runtime_dep_with_exclusions_B_test( @@ -403,19 +440,22 @@ java_test( name = "DepsFilterSingleRuntimeDepWithExclusionsBTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterSingleRuntimeDepWithExclusionsBTest.java" + "src/test/java/com/depsfilter/DepsFilterSingleRuntimeDepWithExclusionsBTest.java", ], - deps = [":single_runtime_dep_with_exclusions_B", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":single_runtime_dep_with_exclusions_B", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 12: Compile deps only deps_filter( name = "compile_deps_only", - deps = [":base_lib_with_deps"], - runtime_deps = [], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + runtime_deps = [], + deps = [":base_lib_with_deps"], ) compile_deps_only_test( @@ -427,21 +467,24 @@ java_test( name = "DepsFilterCompileDepsOnlyTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterCompileDepsOnlyTest.java" + "src/test/java/com/depsfilter/DepsFilterCompileDepsOnlyTest.java", ], - deps = [":compile_deps_only", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":compile_deps_only", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 13: Single dependency with exclusions deps_filter( name = "single_dep_with_exclusions", - deps = [":base_lib_with_single_dep"], - runtime_deps = [], deps_exclude_labels = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", ], deps_exclude_paths = [], exclude_transitives = False, + runtime_deps = [], + deps = [":base_lib_with_single_dep"], ) single_dep_with_exclusions_test( @@ -453,18 +496,21 @@ java_test( name = "DepsFilterSingleDepWithExclusionsTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterSingleDepWithExclusionsTest.java" + "src/test/java/com/depsfilter/DepsFilterSingleDepWithExclusionsTest.java", ], - deps = [":single_dep_with_exclusions", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":single_dep_with_exclusions", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 14: One compile dep and one runtime dep deps_filter( name = "one_compile_one_runtime_dep", - deps = [":base_lib_with_single_dep_and_runtime_dep"], deps_exclude_labels = [], deps_exclude_paths = [], exclude_transitives = False, + deps = [":base_lib_with_single_dep_and_runtime_dep"], ) one_compile_one_runtime_dep_test( @@ -476,20 +522,23 @@ java_test( name = "DepsFilterOneCompileOneRuntimeDepTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterOneCompileOneRuntimeDepTest.java" + "src/test/java/com/depsfilter/DepsFilterOneCompileOneRuntimeDepTest.java", ], - deps = [":one_compile_one_runtime_dep", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":one_compile_one_runtime_dep", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 15: Path patterns with special characters deps_filter( name = "path_patterns_with_special_characters", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_paths = [ - "io.micrometer", - "to-slf4j", + "io.micrometer", + "to-slf4j", ], exclude_transitives = True, + deps = [":base_lib_with_deps_and_runtime_deps"], ) path_patterns_with_special_characters_test( @@ -501,22 +550,25 @@ java_test( name = "DepsFilterPathPatternsWithSpecialCharactersTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterPathPatternsWithSpecialCharactersTest.java" + "src/test/java/com/depsfilter/DepsFilterPathPatternsWithSpecialCharactersTest.java", ], - deps = [":path_patterns_with_special_characters", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":path_patterns_with_special_characters", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Test 16: Case sensitive pattern matching deps_filter( name = "case_sensitive_pattern_matching", - deps = [":base_lib_with_deps_and_runtime_deps"], deps_exclude_labels = [], deps_exclude_paths = [ "SPRING", # Uppercase pattern - "Jackson", # Mixed case pattern - "HIBERNATE", # Uppercase pattern + "Jackson", # Mixed case pattern + "HIBERNATE", # Uppercase pattern ], exclude_transitives = False, + deps = [":base_lib_with_deps_and_runtime_deps"], ) case_sensitive_pattern_matching_test( @@ -528,15 +580,17 @@ java_test( name = "DepsFilterCaseSensitivePatternMatchingTest", size = "small", srcs = [ - "src/test/java/com/depsfilter/DepsFilterCaseSensitivePatternMatchingTest.java" + "src/test/java/com/depsfilter/DepsFilterCaseSensitivePatternMatchingTest.java", ], - deps = [":case_sensitive_pattern_matching", "//springboot/deps_filter_rules/tests/test_utils:test_utils"] + test_deps, + deps = [ + ":case_sensitive_pattern_matching", + "//springboot/deps_filter_rules/tests/test_utils", + ] + test_deps, ) # Toolchain for unittest toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) - diff --git a/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library/compile_and_runtime_test.bzl b/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library/compile_and_runtime_test.bzl index 79c6963..f06a08e 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library/compile_and_runtime_test.bzl +++ b/springboot/deps_filter_rules/tests/depsfilter/external_dependencies/compile_and_runtime_through_java_library/compile_and_runtime_test.bzl @@ -1,36 +1,42 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts", - "compute_expected_jars", +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "compute_expected_jars", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests deps without any filtering - baseline test. """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_jars_and_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_jars_and_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) @@ -57,30 +63,31 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), }) - def _test_with_label_exclusions(ctx): """ Tests deps with label-based exclusions (without transitives). """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Verify dropped counts - label exclusions should drop direct JARs but not transitives when exclude_transitives=False dropped_counts = { "compile_jars_dropped": expected["compile_jars_dropped"], @@ -88,11 +95,14 @@ def _test_with_label_exclusions(ctx): "transitive_compile_jars_dropped": expected["transitive_compile_jars_dropped"], "transitive_runtime_jars_dropped": expected["transitive_runtime_jars_dropped"], } - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) @@ -120,10 +130,9 @@ with_label_exclusions_test = unittest.make(_test_with_label_exclusions, attrs = default = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", - ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -137,23 +146,28 @@ def _test_with_label_exclusions_with_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_jars_and_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_jars_and_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) @@ -181,10 +195,9 @@ with_label_exclusions_with_exclude_transitives_test = unittest.make(_test_with_l default = [ "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", - ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -192,30 +205,34 @@ with_label_exclusions_with_exclude_transitives_test = unittest.make(_test_with_l ), }) - def _test_with_path_exclusions(ctx): """ Tests deps with path-based exclusions (without transitives). """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { @@ -239,13 +256,13 @@ with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { providers = [JavaInfo], ), "deps_exclude_labels": attr.label_list( - default = [ + default = [ ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -253,30 +270,34 @@ with_path_exclusions_test = unittest.make(_test_with_path_exclusions, attrs = { ), }) - def _test_with_path_exclusions_with_exclude_transitives(ctx): """ Tests deps with path-based exclusions including exclude_transitives. """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) - + verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) with_path_exclusions_with_exclude_transitives_test = unittest.make(_test_with_path_exclusions_with_exclude_transitives, attrs = { @@ -300,13 +321,13 @@ with_path_exclusions_with_exclude_transitives_test = unittest.make(_test_with_pa providers = [JavaInfo], ), "deps_exclude_labels": attr.label_list( - default = [ + default = [ ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -320,23 +341,28 @@ def _test_multiple_exclusions_with_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) multiple_exclusions_with_exclude_transitives_test = unittest.make(_test_multiple_exclusions_with_exclude_transitives, attrs = { @@ -365,9 +391,9 @@ multiple_exclusions_with_exclude_transitives_test = unittest.make(_test_multiple "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -381,23 +407,28 @@ def _test_multiple_exclusions_without_exclude_transitives(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) multiple_exclusions_without_exclude_transitives_test = unittest.make(_test_multiple_exclusions_without_exclude_transitives, attrs = { @@ -426,9 +457,9 @@ multiple_exclusions_without_exclude_transitives_test = unittest.make(_test_multi "@unmanaged_deps_filter//:org_slf4j_jul_to_slf4j", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ - "slf4j" + "slf4j", ], ), "exclude_transitives": attr.bool( @@ -442,23 +473,28 @@ def _test_empty_exclusion_lists(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -484,7 +520,7 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -498,31 +534,39 @@ def _test_path_based_exclusions_comprehensive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Additional verification: ensure excluded patterns are not present transitive_runtime_jars = [jar.basename for jar in javainfo_filtered.transitive_runtime_jars.to_list()] for pattern in ["micrometer", "slf4j", "logback"]: for jar in transitive_runtime_jars: - asserts.true(env, pattern not in jar, - "Excluded pattern '{}' found in JAR: {}".format(pattern, jar)) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") - + asserts.true( + env, + pattern not in jar, + "Excluded pattern '{}' found in JAR: {}".format(pattern, jar), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) + return unittest.end(env) path_based_exclusions_comprehensive_test = unittest.make(_test_path_based_exclusions_comprehensive, attrs = { @@ -548,11 +592,11 @@ path_based_exclusions_comprehensive_test = unittest.make(_test_path_based_exclus "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "micrometer", "slf4j", - "logback" + "logback", ], ), "exclude_transitives": attr.bool( @@ -566,34 +610,47 @@ def _test_runtime_deps_only_A(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = [], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = [], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Runtime deps should not contribute to compile-time JARs compile_jars = [jar.basename for jar in javainfo_filtered.compile_jars.to_list()] full_compile_jars = [jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()] - - asserts.equals(env, len(compile_jars), 0, - "Expected no compile JARs when only runtime_deps provided, got: {}".format(len(compile_jars))) + + asserts.equals( + env, + len(compile_jars), + 0, + "Expected no compile JARs when only runtime_deps provided, got: {}".format(len(compile_jars)), + ) # Note: full_compile_jars is not empty because the output_jar is a full_compile_jar - asserts.equals(env, len(full_compile_jars), 1, - "Expected no full compile JARs when only runtime_deps provided, got: {}".format(len(full_compile_jars))) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + asserts.equals( + env, + len(full_compile_jars), + 1, + "Expected no full compile JARs when only runtime_deps provided, got: {}".format(len(full_compile_jars)), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) runtime_deps_only_A_test = unittest.make(_test_runtime_deps_only_A, attrs = { @@ -612,7 +669,7 @@ runtime_deps_only_A_test = unittest.make(_test_runtime_deps_only_A, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -626,23 +683,28 @@ def _test_runtime_deps_only_B(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) runtime_deps_only_B_test = unittest.make(_test_runtime_deps_only_B, attrs = { @@ -661,7 +723,7 @@ runtime_deps_only_B_test = unittest.make(_test_runtime_deps_only_B, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -675,12 +737,14 @@ def _test_single_runtime_dep_with_exclusion_A(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_single_runtime_dep" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = [], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = [], @@ -690,21 +754,30 @@ def _test_single_runtime_dep_with_exclusion_A(ctx): # Runtime deps should not contribute to compile-time JARs compile_jars = [jar.basename for jar in javainfo_filtered.compile_jars.to_list()] full_compile_jars = [jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()] - - asserts.equals(env, len(compile_jars), 0, - "Expected no compile JARs when only runtime_deps provided, got: {}".format(len(compile_jars))) + + asserts.equals( + env, + len(compile_jars), + 0, + "Expected no compile JARs when only runtime_deps provided, got: {}".format(len(compile_jars)), + ) # Note: full_compile_jars is not empty because the output_jar is a full_compile_jar - asserts.equals(env, len(full_compile_jars), 1, - "Expected no full compile JARs when only runtime_deps provided, got: {}".format(len(full_compile_jars))) - - - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = ">0") + asserts.equals( + env, + len(full_compile_jars), + 1, + "Expected no full compile JARs when only runtime_deps provided, got: {}".format(len(full_compile_jars)), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) single_runtime_dep_with_exclusions_A_test = unittest.make(_test_single_runtime_dep_with_exclusion_A, attrs = { @@ -721,7 +794,7 @@ single_runtime_dep_with_exclusions_A_test = unittest.make(_test_single_runtime_d "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "slf4j", ], @@ -737,23 +810,28 @@ def _test_single_runtime_dep_with_exclusions_B(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_single_runtime_dep" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) single_runtime_dep_with_exclusions_B_test = unittest.make(_test_single_runtime_dep_with_exclusions_B, attrs = { @@ -770,7 +848,7 @@ single_runtime_dep_with_exclusions_B_test = unittest.make(_test_single_runtime_d "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "slf4j", ], @@ -780,39 +858,49 @@ single_runtime_dep_with_exclusions_B_test = unittest.make(_test_single_runtime_d ), }) - def _test_compile_deps_only(ctx): """ Tests behavior when only deps are provided (no runtime_deps). """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - + # Compile deps should contribute to both compile and runtime JARs compile_jars = [jar.basename for jar in javainfo_filtered.compile_jars.to_list()] transitive_runtime_jars = [jar.basename for jar in javainfo_filtered.transitive_runtime_jars.to_list()] - - asserts.true(env, len(compile_jars) > 0, - "Expected compile JARs when deps provided, got: {}".format(len(compile_jars))) - asserts.true(env, len(transitive_runtime_jars) > 0, - "Expected transitive runtime JARs when deps provided, got: {}".format(len(transitive_runtime_jars))) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + asserts.true( + env, + len(compile_jars) > 0, + "Expected compile JARs when deps provided, got: {}".format(len(compile_jars)), + ) + asserts.true( + env, + len(transitive_runtime_jars) > 0, + "Expected transitive runtime JARs when deps provided, got: {}".format(len(transitive_runtime_jars)), + ) + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) compile_deps_only_test = unittest.make(_test_compile_deps_only, attrs = { @@ -833,7 +921,7 @@ compile_deps_only_test = unittest.make(_test_compile_deps_only, attrs = { "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -847,23 +935,28 @@ def _test_single_dep_with_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_single_dep" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) single_dep_with_exclusions_test = unittest.make(_test_single_dep_with_exclusions, attrs = { @@ -882,7 +975,7 @@ single_dep_with_exclusions_test = unittest.make(_test_single_dep_with_exclusions "@unmanaged_deps_filter//:io_micrometer_micrometer_commons", ], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -896,23 +989,28 @@ def _test_one_compile_one_runtime_dep(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_single_dep_and_runtime_dep" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) one_compile_one_runtime_dep_test = unittest.make(_test_one_compile_one_runtime_dep, attrs = { @@ -932,7 +1030,7 @@ one_compile_one_runtime_dep_test = unittest.make(_test_one_compile_one_runtime_d "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [], ), "exclude_transitives": attr.bool( @@ -946,23 +1044,28 @@ def _test_path_patterns_with_special_characters(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = ">0", - expected_transitive_runtime_dropped = ">0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = ">0", + expected_transitive_runtime_dropped = ">0", + ) return unittest.end(env) path_patterns_with_special_characters_test = unittest.make(_test_path_patterns_with_special_characters, attrs = { @@ -988,7 +1091,7 @@ path_patterns_with_special_characters_test = unittest.make(_test_path_patterns_w "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "io.micrometer", # Pattern with dot "to-slf4j", # Pattern with hyphen @@ -1005,23 +1108,28 @@ def _test_case_sensitive_pattern_matching(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + test_lib_name = "base_lib_with_deps_and_runtime_deps" expected = compute_expected_jars(ctx, test_lib_name) verify_runtime_and_compile_jars( - ctx, env, javainfo_filtered, + ctx, + env, + javainfo_filtered, expected_compile_jars = expected["compile_jars"], expected_full_compile_jars = expected["full_compile_jars"], expected_transitive_compile_jars = expected["transitive_compile_jars"], expected_transitive_runtime_jars = expected["transitive_runtime_jars"], ) - - verify_dropped_counts(env, expected, - expected_compile_dropped = "0", - expected_full_compile_dropped = "0", - expected_transitive_compile_dropped = "0", - expected_transitive_runtime_dropped = "0") + + verify_dropped_counts( + env, + expected, + expected_compile_dropped = "0", + expected_full_compile_dropped = "0", + expected_transitive_compile_dropped = "0", + expected_transitive_runtime_dropped = "0", + ) return unittest.end(env) case_sensitive_pattern_matching_test = unittest.make(_test_case_sensitive_pattern_matching, attrs = { @@ -1047,18 +1155,14 @@ case_sensitive_pattern_matching_test = unittest.make(_test_case_sensitive_patter "deps_exclude_labels": attr.label_list( default = [], ), - "deps_exclude_paths": attr.string_list( + "deps_exclude_paths": attr.string_list( default = [ "SPRING", # Uppercase pattern - "Jackson", # Mixed case pattern - "HIBERNATE", # Uppercase pattern + "Jackson", # Mixed case pattern + "HIBERNATE", # Uppercase pattern ], ), "exclude_transitives": attr.bool( default = False, ), }) - - - - diff --git a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1/BUILD b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1/BUILD index d15f7ba..dd16fb8 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1/BUILD +++ b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1/BUILD @@ -1,21 +1,22 @@ +load("@rules_java//java:defs.bzl", "java_library") load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") load( "//springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1:compile_and_runtime_test.bzl", - "no_filtering_test", - "filtered_deps_test", + "empty_exclusion_lists_test", "filtered_deps_exclude_transitive_test", - "path_based_exclusions_test", + "filtered_deps_test", "interface_implementation_jars_test", "multiple_exclusions_with_transitive_test", "multiple_exclusions_without_transitive_test", - "empty_exclusion_lists_test", "multiple_paths_test", + "no_filtering_test", + "path_based_exclusions_test", ) # Dependency Graph Structure: -# base_lib -# / \ +# base_lib +# / \ # A (c) G (r) # / \ | # / \ | @@ -26,61 +27,61 @@ load( # | F (c) # \ / # C (c) -# | -# D (r) +# | +# D (r) java_library( name = "lib_a", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [ - ":lib_b", # A -> B (c) - ], runtime_deps = [ ":lib_e", # A -> E (r) ], + deps = [ + ":lib_b", # A -> B (c) + ], ) java_library( name = "lib_b", - srcs = ["src/main/java/com/depsfilter/B.java"], - deps = [":lib_c"], # B -> C (c) + srcs = ["src/main/java/com/depsfilter/B.java"], + deps = [":lib_c"], # B -> C (c) ) java_library( name = "lib_c", srcs = ["src/main/java/com/depsfilter/C.java"], - runtime_deps = [":lib_d"], # C -> D (r) + runtime_deps = [":lib_d"], # C -> D (r) ) java_library( name = "lib_d", - srcs = ["src/main/java/com/depsfilter/D.java"], + srcs = ["src/main/java/com/depsfilter/D.java"], ) java_library( name = "lib_e", srcs = ["src/main/java/com/depsfilter/E.java"], - deps = [":lib_f"], # E -> F (c) + deps = [":lib_f"], # E -> F (c) ) java_library( name = "lib_f", srcs = ["src/main/java/com/depsfilter/F.java"], - deps = [":lib_c"], # F -> C (c) + deps = [":lib_c"], # F -> C (c) ) java_library( name = "lib_g", srcs = ["src/main/java/com/depsfilter/G.java"], - deps = [":lib_f"], # G -> F (c) + deps = [":lib_f"], # G -> F (c) ) # Consumer library that uses the filtered dependencies java_library( name = "base_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":lib_a"], # base_lib -> A (c) - runtime_deps = [":lib_g"], # base_lib -> G (r) + runtime_deps = [":lib_g"], # base_lib -> G (r) + deps = [":lib_a"], # base_lib -> A (c) ) # Test 1: No filtering @@ -91,15 +92,18 @@ deps_filter( no_filtering_test( name = "deps_filter_no_filtering_test", - java_library = ":base_lib", deps_filter = ":filtered_deps", + java_library = ":base_lib", ) # Test 2: Exclude by labels and exclude_transitives = False deps_filter( name = "filtered_deps_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) filtered_deps_test( @@ -110,9 +114,12 @@ filtered_deps_test( # Test 3: Exclude by labels and exclude_transitives = True deps_filter( name = "filtered_deps_exclude_b_g_exclude_transitive", - deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + deps = [":base_lib"], ) filtered_deps_exclude_transitive_test( @@ -123,8 +130,11 @@ filtered_deps_exclude_transitive_test( # Test 4: Test for path-based exclusions deps_filter( name = "path_based_filtered_deps", + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], deps = [":base_lib"], - deps_exclude_paths = ["lib_b", "lib_f"], ) path_based_exclusions_test( @@ -135,8 +145,11 @@ path_based_exclusions_test( # Test 5: Interface vs Implementation JARs deps_filter( name = "interface_impl_filtered_deps", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) interface_implementation_jars_test( @@ -147,10 +160,10 @@ interface_implementation_jars_test( # Test 6: Multiple exclusions with exclude_transitives=True deps_filter( name = "multiple_exclusions_filtered_deps_1", - deps = [":base_lib"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + deps = [":base_lib"], ) multiple_exclusions_with_transitive_test( @@ -161,10 +174,10 @@ multiple_exclusions_with_transitive_test( # Test 7: Multiple exclusions with exclude_transitives=False deps_filter( name = "multiple_exclusions_filtered_deps_2", - deps = [":base_lib"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + deps = [":base_lib"], ) multiple_exclusions_without_transitive_test( @@ -175,9 +188,9 @@ multiple_exclusions_without_transitive_test( # Test 8: Empty exclusion lists deps_filter( name = "empty_exclusions_filtered_deps", - deps = [":base_lib"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + deps = [":base_lib"], ) empty_exclusion_lists_test( @@ -188,8 +201,11 @@ empty_exclusion_lists_test( # Test 9: Multiple paths handling deps_filter( name = "multiple_paths_filtered_deps", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) multiple_paths_test( @@ -199,6 +215,6 @@ multiple_paths_test( toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) diff --git a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1/compile_and_runtime_test.bzl b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1/compile_and_runtime_test.bzl index 243ae3b..e7d3571 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1/compile_and_runtime_test.bzl +++ b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_1/compile_and_runtime_test.bzl @@ -1,19 +1,20 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts" +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests that deps_filter preserves all dependencies when no exclusions are applied. - - Dependency Graph: - base_lib - / \\ + + Dependency Graph: + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -24,9 +25,9 @@ def _test_no_filtering(ctx): | F (c) \\ / C (c) - | - D (r) - + | + D (r) + Expected: All JARs from java_library must match deps_filter: - full_compile_jars: Implementation JARs (e.g., liblib_a.jar) - compile_jars: Interface JARs (e.g., liblib_a-hjar.jar) @@ -36,22 +37,30 @@ def _test_no_filtering(ctx): env = unittest.begin(ctx) java_lib_info = ctx.attr.java_library[JavaInfo] deps_filter_info = ctx.attr.deps_filter[JavaInfo] - + # Verify all JAR fields match between java_library and deps_filter jar_fields = [ - "full_compile_jars", # Implementation JARs - "compile_jars", # Interface JARs - "transitive_compile_time_jars", # Transitive interface JARs - "transitive_runtime_jars" # Transitive implementation JARs + "full_compile_jars", # Implementation JARs + "compile_jars", # Interface JARs + "transitive_compile_time_jars", # Transitive interface JARs + "transitive_runtime_jars", # Transitive implementation JARs ] for jar_field in jar_fields: java_lib_jars = getattr(java_lib_info, jar_field) deps_filter_jars = getattr(deps_filter_info, jar_field) - asserts.equals(env, type(java_lib_jars), type(deps_filter_jars), - "JAR type mismatch: {} vs deps_filter".format(jar_field)) - asserts.equals(env, java_lib_jars.to_list(), deps_filter_jars.to_list(), - "JAR contents mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + type(java_lib_jars), + type(deps_filter_jars), + "JAR type mismatch: {} vs deps_filter".format(jar_field), + ) + asserts.equals( + env, + java_lib_jars.to_list(), + deps_filter_jars.to_list(), + "JAR contents mismatch: {} vs deps_filter".format(jar_field), + ) return unittest.end(env) @@ -63,10 +72,10 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { def _test_filtered_deps(ctx): """ Tests basic dependency filtering with label-based exclusions. - + Dependency Graph: - base_lib - / \\ + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -77,8 +86,8 @@ def _test_filtered_deps(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":base_lib"] @@ -89,7 +98,7 @@ def _test_filtered_deps(ctx): Expected Output: JARs preserved: base_lib, A, E, F, C, D JARs excluded: B, G (by label, direct deps only, transitives preserved) - + Compile-time JARs: base_lib-hjar, A-hjar, C-hjar Runtime JARs: base_lib, A, E, F, C, D (all preserved deps + transitives) Reasoning: B,G excluded by label, but their transitives (C,D,F) are preserved @@ -104,27 +113,31 @@ def _test_filtered_deps(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { @@ -134,10 +147,10 @@ filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { def _test_filtered_deps_exclude_transitive(ctx): """ Tests dependency filtering with transitive exclusions. - + Dependency Graph: - base_lib - / \\ + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -148,8 +161,8 @@ def _test_filtered_deps_exclude_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":base_lib"] @@ -160,14 +173,14 @@ def _test_filtered_deps_exclude_transitive(ctx): Expected Output: JARs preserved: base_lib, A, E JARs excluded: B, G (by label) and all their transitives - + Compile-time JARs: base_lib-hjar, A-hjar Runtime JARs: base_lib, A, E (only preserved deps, no transitives of excluded deps) Reasoning: B,G excluded by label with exclude_transitives=True, so C,D,F also excluded """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -175,23 +188,27 @@ def _test_filtered_deps_exclude_transitive(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclude_transitive, attrs = { @@ -201,10 +218,10 @@ filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclud def _test_path_based_exclusions(ctx): """ Tests filtering based on path patterns in deps_exclude_paths. - + Dependency Graph: - base_lib - / \\ + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -215,8 +232,8 @@ def _test_path_based_exclusions(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":base_lib"] @@ -227,14 +244,14 @@ def _test_path_based_exclusions(ctx): Expected Output: JARs preserved: base_lib, A, E, C, D, G JARs excluded: B, F (by path pattern match, transitives may be preserved) - + Compile-time JARs: base_lib-hjar, A-hjar, C-hjar Runtime JARs: base_lib, A, E, C, D, G (all preserved deps + transitives not matching exclusion path patterns) - Reasoning: B,F excluded by path pattern, but their transitives are preserved as they didn't match the pattern. + Reasoning: B,F excluded by path pattern, but their transitives are preserved as they didn't match the pattern. """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -242,27 +259,31 @@ def _test_path_based_exclusions(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_c.jar", "liblib_d.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = { @@ -272,10 +293,10 @@ path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = def _test_interface_implementation_jars(ctx): """ Tests proper handling of interface (-hjar) and implementation JARs. - + Dependency Graph: - base_lib - / \\ + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -286,8 +307,8 @@ def _test_interface_implementation_jars(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":base_lib"] @@ -301,13 +322,13 @@ def _test_interface_implementation_jars(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + compile_jars = sorted([jar.basename for jar in javainfo_filtered.compile_jars.to_list()]) full_compile_jars = sorted([jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()]) - + expected_compile_jars = ["libbase_lib-hjar.jar"] expected_full_compile_jars = ["libbase_lib.jar"] - + asserts.equals(env, compile_jars, expected_compile_jars) asserts.equals(env, full_compile_jars, expected_full_compile_jars) return unittest.end(env) @@ -319,10 +340,10 @@ interface_implementation_jars_test = unittest.make(_test_interface_implementatio def _test_multiple_exclusions_with_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=True. - + Dependency Graph: - base_lib - / \\ + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -333,8 +354,8 @@ def _test_multiple_exclusions_with_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":base_lib"] @@ -345,15 +366,15 @@ def _test_multiple_exclusions_with_transitive(ctx): Expected Output: JARs preserved: base_lib, A, E, F JARs excluded: B and its transitives; G (not neccessarily its transitives as specified exclusion by path pattern is matched) - + Compile-time JARs: base_lib-hjar, A-hjar Runtime JARs: base_lib, A, E, F - Reasoning: B excluded by label with exclude_transitives=True (C,D excluded); - G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) + Reasoning: B excluded by label with exclude_transitives=True (C,D excluded); + G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -361,33 +382,37 @@ def _test_multiple_exclusions_with_transitive(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) def _test_multiple_exclusions_without_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=False. - + Dependency Graph: - base_lib - / \\ + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -398,8 +423,8 @@ def _test_multiple_exclusions_without_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":base_lib"] @@ -410,15 +435,15 @@ def _test_multiple_exclusions_without_transitive(ctx): Expected Output: JARs preserved: base_lib, A, E, F, C, D JARs excluded: B (by label, direct only); G (by path pattern match, direct only) - + Compile-time JARs: base_lib-hjar, A-hjar, C-hjar Runtime JARs: base_lib, A, E, F, C, D - Reasoning: B excluded by label (direct only, and its transitives are preserved); - G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) + Reasoning: B excluded by label (direct only, and its transitives are preserved); + G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -426,7 +451,7 @@ def _test_multiple_exclusions_without_transitive(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", @@ -435,18 +460,22 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_c.jar", "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_exclusions_with_transitive_test = unittest.make(_test_multiple_exclusions_with_transitive, attrs = { @@ -460,10 +489,10 @@ multiple_exclusions_without_transitive_test = unittest.make(_test_multiple_exclu def _test_empty_exclusion_lists(ctx): """ Tests behavior when exclusion lists are empty. - + Dependency Graph: - base_lib - / \\ + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -474,8 +503,8 @@ def _test_empty_exclusion_lists(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":base_lib"] @@ -485,14 +514,14 @@ def _test_empty_exclusion_lists(ctx): Expected Output: JARs preserved: base_lib, A, B, C, D, E, F, G - + Compile-time JARs: base_lib-hjar, A-hjar, B-hjar, C-hjar Runtime JARs: base_lib, A, B, C, D, E, F, G Reasoning: No exclusions applied, all dependencies preserved """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -500,7 +529,7 @@ def _test_empty_exclusion_lists(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", @@ -509,21 +538,25 @@ def _test_empty_exclusion_lists(ctx): "liblib_d.jar", "liblib_e.jar", "liblib_f.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_b-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -533,10 +566,10 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = def _test_multiple_paths(ctx): """ Tests handling of multiple paths to the same dependency. - + Dependency Graph: - base_lib - / \\ + base_lib + / \\ A (c) G (r) / \\ | / \\ | @@ -547,8 +580,8 @@ def _test_multiple_paths(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":base_lib"] @@ -559,14 +592,14 @@ def _test_multiple_paths(ctx): Expected Output: JARs preserved: base_lib, A, E, F, C, D JARs excluded: B, G (not duplicated if reachable via multiple paths) - + Compile-time JARs: base_lib-hjar, A-hjar, C-hjar Runtime JARs: base_lib, A, E, F, C, D Reasoning: B,G excluded by label, but transitives are preserved as exclude_transitives = False """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -574,30 +607,33 @@ def _test_multiple_paths(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_c-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_paths_test = unittest.make(_test_multiple_paths, attrs = { "filtered": attr.label(providers = [JavaInfo]), }) - diff --git a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2/BUILD b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2/BUILD index b01fbbb..0b1d266 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2/BUILD +++ b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2/BUILD @@ -1,21 +1,22 @@ +load("@rules_java//java:defs.bzl", "java_library", "java_test") load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") load( "//springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2:compile_and_runtime_test.bzl", - "filtered_deps_test", + "empty_exclusion_lists_test", "filtered_deps_exclude_transitive_test", - "path_based_exclusions_test", + "filtered_deps_test", "interface_implementation_jars_test", "multiple_exclusions_with_transitive_test", "multiple_exclusions_without_transitive_test", - "empty_exclusion_lists_test", "multiple_paths_test", + "path_based_exclusions_test", ) # Dependency Graph Structure: -# J(r) A (c) H (r) I (c) -# \ / \ | | -# \ / \ G (r) | +# J(r) A (c) H (r) I (c) +# \ / \ | | +# \ / \ G (r) | # \ / \ | / # B (c) E (r) / / # | | / / @@ -25,71 +26,71 @@ load( # | F (c) # \ / # C (c) -# | -# D (r) +# | +# D (r) java_library( name = "lib_a", srcs = ["src/main/java/com/depsfilter/A.java"], - deps = [ - ":lib_b", # A -> B (c) - ], runtime_deps = [ ":lib_e", # A -> E (r) ], + deps = [ + ":lib_b", # A -> B (c) + ], ) java_library( name = "lib_b", - srcs = ["src/main/java/com/depsfilter/B.java"], - deps = [":lib_c"], # B -> C (c) + srcs = ["src/main/java/com/depsfilter/B.java"], + deps = [":lib_c"], # B -> C (c) ) java_library( name = "lib_c", srcs = ["src/main/java/com/depsfilter/C.java"], - runtime_deps = [":lib_d"], # C -> D (r) + runtime_deps = [":lib_d"], # C -> D (r) ) java_library( name = "lib_d", - srcs = ["src/main/java/com/depsfilter/D.java"], + srcs = ["src/main/java/com/depsfilter/D.java"], ) java_library( name = "lib_e", srcs = ["src/main/java/com/depsfilter/E.java"], - deps = [":lib_f"], # E -> F (c) + deps = [":lib_f"], # E -> F (c) ) java_library( name = "lib_f", srcs = ["src/main/java/com/depsfilter/F.java"], - deps = [":lib_c"], # F -> C (c) + deps = [":lib_c"], # F -> C (c) ) java_library( name = "lib_g", srcs = ["src/main/java/com/depsfilter/G.java"], - deps = [":lib_f"], # G -> F (c) + deps = [":lib_f"], # G -> F (c) ) java_library( name = "lib_h", srcs = ["src/main/java/com/depsfilter/H.java"], - runtime_deps = [":lib_g"], # H -> G (r) + runtime_deps = [":lib_g"], # H -> G (r) ) java_library( name = "lib_i", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":lib_f"], # I -> F (c) + deps = [":lib_f"], # I -> F (c) ) java_library( name = "lib_j", srcs = ["src/main/java/com/depsfilter/J.java"], - deps = [":lib_b"], # J -> B (c) + deps = [":lib_b"], # J -> B (c) ) # Test 1: No filtering @@ -98,14 +99,23 @@ java_library( # deps = [":lib_a", ":lib_i"], # runtime_deps = [":lib_h", ":lib_j"], # ) -# We can't test this because we can't compare base_lib with deps_filter without base_lib as a dep +# We can't test this because we can't compare base_lib with deps_filter without base_lib as a dep # Test 2: Exclude by labels and exclude_transitives = False deps_filter( name = "filtered_deps_exclude_b_g", - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) filtered_deps_test( @@ -116,10 +126,19 @@ filtered_deps_test( # Test 3: Exclude by labels and exclude_transitives = True deps_filter( name = "filtered_deps_exclude_b_g_exclude_transitive", - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) filtered_deps_exclude_transitive_test( @@ -130,9 +149,18 @@ filtered_deps_exclude_transitive_test( # Test 4: Test for path-based exclusions deps_filter( name = "path_based_filtered_deps", - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], - deps_exclude_paths = ["lib_b", "lib_f"], + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) path_based_exclusions_test( @@ -143,9 +171,18 @@ path_based_exclusions_test( # Test 5: Interface vs Implementation JARs deps_filter( name = "interface_impl_filtered_deps", - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) interface_implementation_jars_test( @@ -156,11 +193,17 @@ interface_implementation_jars_test( # Test 6: Multiple exclusions with exclude_transitives=True deps_filter( name = "multiple_exclusions_filtered_deps_1", - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) multiple_exclusions_with_transitive_test( @@ -171,11 +214,17 @@ multiple_exclusions_with_transitive_test( # Test 7: Multiple exclusions with exclude_transitives=False deps_filter( name = "multiple_exclusions_filtered_deps_2", - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) multiple_exclusions_without_transitive_test( @@ -186,10 +235,16 @@ multiple_exclusions_without_transitive_test( # Test 8: Empty exclusion lists deps_filter( name = "empty_exclusions_filtered_deps", - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) empty_exclusion_lists_test( @@ -200,9 +255,18 @@ empty_exclusion_lists_test( # Test 9: Multiple paths handling deps_filter( name = "multiple_paths_filtered_deps", - deps = [":lib_a", ":lib_i"], - runtime_deps = [":lib_h", ":lib_j"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], + runtime_deps = [ + ":lib_h", + ":lib_j", + ], + deps = [ + ":lib_a", + ":lib_i", + ], ) multiple_paths_test( @@ -210,7 +274,8 @@ multiple_paths_test( filtered = ":multiple_paths_filtered_deps", ) -test_deps = ["@unmanaged_deps_filter//:junit_junit", +test_deps = [ + "@unmanaged_deps_filter//:junit_junit", "@unmanaged_deps_filter//:org_assertj_assertj_core", ] @@ -219,9 +284,9 @@ java_test( name = "DepsFilterEmptyExclusionsTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterEmptyExclusionsTest.java" - ], + ], deps = [":empty_exclusions_filtered_deps"] + test_deps, ) @@ -229,8 +294,8 @@ java_test( name = "DepsFilterFilteredDepsTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterFilteredDepsTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterFilteredDepsTest.java" ], deps = [":filtered_deps_exclude_b_g"] + test_deps, ) @@ -239,8 +304,8 @@ java_test( name = "DepsFilterExcludeTransitiveTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterExcludeTransitiveTest.java" ], deps = [":filtered_deps_exclude_b_g_exclude_transitive"] + test_deps, ) @@ -249,8 +314,8 @@ java_test( name = "DepsFilterPathBasedExclusionsTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterPathBasedExclusionsTest.java" ], deps = [":path_based_filtered_deps"] + test_deps, ) @@ -259,8 +324,8 @@ java_test( name = "DepsFilterInterfaceImplementationTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterInterfaceImplementationTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterInterfaceImplementationTest.java" ], deps = [":interface_impl_filtered_deps"] + test_deps, ) @@ -269,8 +334,8 @@ java_test( name = "DepsFilterMultipleExclusionsWithTransitiveTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitiveTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithTransitiveTest.java" ], deps = [":multiple_exclusions_filtered_deps_1"] + test_deps, ) @@ -279,8 +344,8 @@ java_test( name = "DepsFilterMultipleExclusionsWithoutTransitiveTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitiveTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterMultipleExclusionsWithoutTransitiveTest.java" ], deps = [":multiple_exclusions_filtered_deps_2"] + test_deps, ) @@ -289,13 +354,12 @@ java_test( name = "DepsFilterMultiplePathsTest", size = "small", srcs = [ + "src/test/java/com/depsfilter/DepsFilterMultiplePathsTest.java", "src/test/java/com/depsfilter/DepsFilterTestHelper.java", - "src/test/java/com/depsfilter/DepsFilterMultiplePathsTest.java" ], deps = [":multiple_paths_filtered_deps"] + test_deps, ) - # load("//tools/common/bazel/deps_filter:deps_filter.bzl", "deps_filter") # deps_filter( # name = "flattened_filtered_deps", @@ -305,13 +369,11 @@ java_test( # deps_filter( # name = "flattened_java_libary", # deps = [":lib_a"], - # runtime_deps = [":lib_g"], +# runtime_deps = [":lib_g"], # ) - toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) - diff --git a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2/compile_and_runtime_test.bzl b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2/compile_and_runtime_test.bzl index 1e197df..68cb7e1 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2/compile_and_runtime_test.bzl +++ b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_and_runtime_2/compile_and_runtime_test.bzl @@ -1,22 +1,23 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts" +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - # def _test_no_filtering(ctx): - # We can't test this because we can't compare base_lib with deps_filter without base_lib as a dep +# We can't test this because we can't compare base_lib with deps_filter without base_lib as a dep def _test_filtered_deps(ctx): """ Tests basic dependency filtering with label-based exclusions. - + Dependency Graph: - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -28,8 +29,8 @@ def _test_filtered_deps(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":lib_a", ":lib_i] @@ -41,7 +42,7 @@ def _test_filtered_deps(ctx): Expected Output: JARs preserved: A, I, C, D, E, F, H, J JARs excluded: B, G (by label, direct deps only, transitives preserved) - + Compile-time JARs: A-hjar, I-hjar, C-hjar, F-hjar Runtime JARs: A, I, C, D, E, F, H, J Reasoning: B,G excluded by label, but their transitives (C,D,F) are preserved @@ -58,7 +59,7 @@ def _test_filtered_deps(ctx): "liblib_a.jar", "liblib_i.jar", ] - + expected_transitive_runtime_jars = [ "liblib_a.jar", "liblib_c.jar", @@ -69,19 +70,23 @@ def _test_filtered_deps(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "liblib_a-hjar.jar", "liblib_c-hjar.jar", "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { @@ -91,10 +96,10 @@ filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { def _test_filtered_deps_exclude_transitive(ctx): """ Tests dependency filtering with transitive exclusions. - + Dependency Graph: - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -106,8 +111,8 @@ def _test_filtered_deps_exclude_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":lib_a", ":lib_i] @@ -119,14 +124,14 @@ def _test_filtered_deps_exclude_transitive(ctx): Expected Output: JARs preserved: A, I, E, H, J JARs excluded: B, G (by label) and all their transitives - + Compile-time JARs: A-hjar, I-hjar Runtime JARs: A, I, E, H, J (only preserved deps, no transitives of excluded deps) Reasoning: B,G excluded by label with exclude_transitives=True, so C,D,F also excluded """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "liblib_a-hjar.jar", "liblib_i-hjar.jar", @@ -136,7 +141,7 @@ def _test_filtered_deps_exclude_transitive(ctx): "liblib_a.jar", "liblib_i.jar", ] - + expected_transitive_runtime_jars = [ "liblib_a.jar", "liblib_e.jar", @@ -144,17 +149,21 @@ def _test_filtered_deps_exclude_transitive(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "liblib_a-hjar.jar", "liblib_i-hjar.jar", ] - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclude_transitive, attrs = { @@ -164,10 +173,10 @@ filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclud def _test_path_based_exclusions(ctx): """ Tests filtering based on path patterns in deps_exclude_paths. - + Dependency Graph: - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -179,8 +188,8 @@ def _test_path_based_exclusions(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":lib_a", ":lib_i] @@ -192,14 +201,14 @@ def _test_path_based_exclusions(ctx): Expected Output: JARs preserved: A, I, C, D, E, G, H, J JARs excluded: B, F (by path pattern match, transitives may be preserved) - + Compile-time JARs: A-hjar, I-hjar, C-hjar Runtime JARs: A, I, C, D, E, G, H, J (all preserved deps + transitives not matching exclusion path patterns) Reasoning: B,F excluded by path pattern, but their transitives are preserved as they didn't match the pattern """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "liblib_a-hjar.jar", "liblib_i-hjar.jar", @@ -209,7 +218,7 @@ def _test_path_based_exclusions(ctx): "liblib_a.jar", "liblib_i.jar", ] - + expected_transitive_runtime_jars = [ "liblib_a.jar", "liblib_c.jar", @@ -220,18 +229,22 @@ def _test_path_based_exclusions(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "liblib_a-hjar.jar", "liblib_c-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = { @@ -241,10 +254,10 @@ path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = def _test_interface_implementation_jars(ctx): """ Tests proper handling of interface (-hjar) and implementation JARs. - + Dependency Graph: - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -256,8 +269,8 @@ def _test_interface_implementation_jars(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":lib_a", ":lib_i] @@ -272,10 +285,10 @@ def _test_interface_implementation_jars(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + compile_jars = sorted([jar.basename for jar in javainfo_filtered.compile_jars.to_list()]) full_compile_jars = sorted([jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()]) - + expected_compile_jars = [ "liblib_a-hjar.jar", "liblib_i-hjar.jar", @@ -285,7 +298,7 @@ def _test_interface_implementation_jars(ctx): "liblib_a.jar", "liblib_i.jar", ] - + asserts.equals(env, compile_jars, expected_compile_jars) asserts.equals(env, full_compile_jars, expected_full_compile_jars) return unittest.end(env) @@ -297,10 +310,10 @@ interface_implementation_jars_test = unittest.make(_test_interface_implementatio def _test_multiple_exclusions_with_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=True. - + Dependency Graph: - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -312,8 +325,8 @@ def _test_multiple_exclusions_with_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":lib_a", ":lib_i] @@ -325,15 +338,15 @@ def _test_multiple_exclusions_with_transitive(ctx): Expected Output: JARs preserved: A, I, E, F, H, J JARs excluded: B and its transitives; G (not neccessarily its transitives as specified exclusion by path pattern is matched) - + Compile-time JARs: A-hjar, I-hjar, F-hjar Runtime JARs: A, I, E, F, H, J - Reasoning: B excluded by label with exclude_transitives=True (C,D excluded); + Reasoning: B excluded by label with exclude_transitives=True (C,D excluded); G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "liblib_a-hjar.jar", "liblib_i-hjar.jar", @@ -343,7 +356,7 @@ def _test_multiple_exclusions_with_transitive(ctx): "liblib_a.jar", "liblib_i.jar", ] - + expected_transitive_runtime_jars = [ "liblib_a.jar", "liblib_e.jar", @@ -352,27 +365,31 @@ def _test_multiple_exclusions_with_transitive(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "liblib_a-hjar.jar", "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) def _test_multiple_exclusions_without_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=False. - + Dependency Graph: - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -384,8 +401,8 @@ def _test_multiple_exclusions_without_transitive(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":lib_a", ":lib_i] @@ -397,15 +414,15 @@ def _test_multiple_exclusions_without_transitive(ctx): Expected Output: JARs preserved: A, I, C, D, E, F, H, J JARs excluded: B (by label, direct only); G (by path pattern match, direct only) - + Compile-time JARs: A-hjar, I-hjar, C-hjar, F-hjar Runtime JARs: A, I, C, D, E, F, H, J - Reasoning: B excluded by label (direct only, and its transitives are preserved); + Reasoning: B excluded by label (direct only, and its transitives are preserved); G excluded by exclusion path pattern (exclusion by path pattern doesn't exclude transitives) """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "liblib_a-hjar.jar", "liblib_i-hjar.jar", @@ -415,7 +432,7 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_a.jar", "liblib_i.jar", ] - + expected_transitive_runtime_jars = [ "liblib_a.jar", "liblib_c.jar", @@ -426,19 +443,23 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "liblib_a-hjar.jar", "liblib_c-hjar.jar", "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_exclusions_with_transitive_test = unittest.make(_test_multiple_exclusions_with_transitive, attrs = { @@ -452,10 +473,10 @@ multiple_exclusions_without_transitive_test = unittest.make(_test_multiple_exclu def _test_empty_exclusion_lists(ctx): """ Tests behavior when exclusion lists are empty. - + Dependency Graph: - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -467,8 +488,8 @@ def _test_empty_exclusion_lists(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) Input: deps = [":lib_a", ":lib_i] @@ -479,14 +500,14 @@ def _test_empty_exclusion_lists(ctx): Expected Output: JARs preserved: A, I, B, C, D, E, F, G, H, J - + Compile-time JARs: A-hjar, I-hjar, B-hjar, C-hjar, F-hjar Runtime JARs: A, I, B, C, D, E, F, G, H, J Reasoning: No exclusions applied, all dependencies preserved """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "liblib_a-hjar.jar", "liblib_i-hjar.jar", @@ -496,7 +517,7 @@ def _test_empty_exclusion_lists(ctx): "liblib_a.jar", "liblib_i.jar", ] - + expected_transitive_runtime_jars = [ "liblib_a.jar", "liblib_b.jar", @@ -509,7 +530,7 @@ def _test_empty_exclusion_lists(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "liblib_a-hjar.jar", "liblib_b-hjar.jar", @@ -517,12 +538,16 @@ def _test_empty_exclusion_lists(ctx): "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -532,10 +557,10 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = def _test_multiple_paths(ctx): """ Tests handling of multiple paths to the same dependency. - + Dependency Graph: - J(r) A (c) H (r) I (c) + J(r) A (c) H (r) I (c) \\ / \\ | | \\ / \\ G (r) | \\ / \\ | / @@ -547,8 +572,8 @@ def _test_multiple_paths(ctx): | F (c) \\ / C (c) - | - D (r) + | + D (r) # IMPORTANT_FEATURE Input: deps = [":lib_a", ":lib_i] @@ -560,14 +585,14 @@ def _test_multiple_paths(ctx): Expected Output: JARs preserved: A, I, C, D, E, F, H, J JARs excluded: B, G (not duplicated if reachable via multiple paths) - + Compile-time JARs: A-hjar, I-hjar, C-hjar, F-hjar Runtime JARs: A, I, C, D, E, F, H, J Reasoning: B,G excluded by label, but transitives are preserved as exclude_transitives = False """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "liblib_a-hjar.jar", "liblib_i-hjar.jar", @@ -577,7 +602,7 @@ def _test_multiple_paths(ctx): "liblib_a.jar", "liblib_i.jar", ] - + expected_transitive_runtime_jars = [ "liblib_a.jar", "liblib_c.jar", @@ -588,22 +613,25 @@ def _test_multiple_paths(ctx): "liblib_i.jar", "liblib_j.jar", ] - + expected_transitive_compile_jars = [ "liblib_a-hjar.jar", "liblib_c-hjar.jar", "liblib_f-hjar.jar", "liblib_i-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_paths_test = unittest.make(_test_multiple_paths, attrs = { "filtered": attr.label(providers = [JavaInfo]), }) - diff --git a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only/BUILD b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only/BUILD index bd0af66..db03901 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only/BUILD +++ b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only/BUILD @@ -1,21 +1,22 @@ +load("@rules_java//java:defs.bzl", "java_library") load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") load( "//springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only:compile_time_only_test.bzl", - "no_filtering_test", - "filtered_deps_test", + "empty_exclusion_lists_test", "filtered_deps_exclude_transitive_test", - "path_based_exclusions_test", + "filtered_deps_test", "interface_implementation_jars_test", "multiple_exclusions_with_transitive_test", "multiple_exclusions_without_transitive_test", - "empty_exclusion_lists_test", "multiple_paths_test", + "no_filtering_test", + "path_based_exclusions_test", ) # Dependency Graph Structure: -# base_lib -# / \ +# base_lib +# / \ # A G # / \ / # B E / @@ -23,59 +24,62 @@ load( # | F # \/ # C -# | -# D +# | +# D # java_library( name = "lib_a", srcs = ["src/main/java/com/depsfilter/A.java"], deps = [ - ":lib_b", # A -> B - ":lib_e", # A -> E + ":lib_b", # A -> B + ":lib_e", # A -> E ], ) java_library( name = "lib_b", - srcs = ["src/main/java/com/depsfilter/B.java"], - deps = [":lib_c"], # B -> C + srcs = ["src/main/java/com/depsfilter/B.java"], + deps = [":lib_c"], # B -> C ) java_library( name = "lib_c", srcs = ["src/main/java/com/depsfilter/C.java"], - deps = [":lib_d"], # B -> D + deps = [":lib_d"], # B -> D ) java_library( name = "lib_d", - srcs = ["src/main/java/com/depsfilter/D.java"], + srcs = ["src/main/java/com/depsfilter/D.java"], ) java_library( name = "lib_e", srcs = ["src/main/java/com/depsfilter/E.java"], - deps = [":lib_f"], # E -> F + deps = [":lib_f"], # E -> F ) java_library( name = "lib_f", srcs = ["src/main/java/com/depsfilter/F.java"], - deps = [":lib_c"], # F -> C + deps = [":lib_c"], # F -> C ) java_library( name = "lib_g", srcs = ["src/main/java/com/depsfilter/G.java"], - deps = [":lib_f"], # G -> F path + deps = [":lib_f"], # G -> F path ) # Consumer library that uses the filtered dependencies java_library( name = "base_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - deps = [":lib_a", ":lib_g"], + deps = [ + ":lib_a", + ":lib_g", + ], ) # Test 1: No filtering @@ -86,15 +90,18 @@ deps_filter( no_filtering_test( name = "deps_filter_no_filtering_test", - java_library = ":base_lib", deps_filter = ":filtered_deps", # deps_filter with no exclusions + java_library = ":base_lib", ) # Test 2: Exclude by labels and exclude_transitives = False deps_filter( name = "filtered_deps_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) filtered_deps_test( @@ -105,9 +112,12 @@ filtered_deps_test( # Test 3: Exclude by labels and exclude_transitives = True deps_filter( name = "filtered_deps_exclude_b_g_exclude_transitive", - deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + deps = [":base_lib"], ) filtered_deps_exclude_transitive_test( @@ -118,8 +128,11 @@ filtered_deps_exclude_transitive_test( # Test 4: Test for path-based exclusions deps_filter( name = "path_based_filtered_deps", + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], deps = [":base_lib"], - deps_exclude_paths = ["lib_b", "lib_f"], ) path_based_exclusions_test( @@ -130,8 +143,11 @@ path_based_exclusions_test( # Test 5: Interface vs Implementation JARs deps_filter( name = "interface_impl_filtered_deps", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) interface_implementation_jars_test( @@ -142,10 +158,10 @@ interface_implementation_jars_test( # Test 6: Multiple exclusions with exclude_transitives=True deps_filter( name = "multiple_exclusions_filtered_deps_1", - deps = [":base_lib"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + deps = [":base_lib"], ) multiple_exclusions_with_transitive_test( @@ -156,10 +172,10 @@ multiple_exclusions_with_transitive_test( # Test 7: Multiple exclusions with exclude_transitives=False deps_filter( name = "multiple_exclusions_filtered_deps_2", - deps = [":base_lib"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + deps = [":base_lib"], ) multiple_exclusions_without_transitive_test( @@ -170,9 +186,9 @@ multiple_exclusions_without_transitive_test( # Test 8: Empty exclusion lists deps_filter( name = "empty_exclusions_filtered_deps", - deps = [":base_lib"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + deps = [":base_lib"], ) empty_exclusion_lists_test( @@ -183,8 +199,11 @@ empty_exclusion_lists_test( # Test 9: Multiple paths handling deps_filter( name = "multiple_paths_filtered_deps", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) multiple_paths_test( @@ -203,9 +222,8 @@ multiple_paths_test( # deps = [":base_lib"], # ) - toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) diff --git a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only/compile_time_only_test.bzl b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only/compile_time_only_test.bzl index 68880ad..f7e199c 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only/compile_time_only_test.bzl +++ b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/compile_time_only/compile_time_only_test.bzl @@ -1,29 +1,30 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts" +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests that deps_filter preserves all dependencies when no exclusions are applied. - - Dependency Graph: + + Dependency Graph: base_lib / \\ A G / \\ / B E / | | / - | F - \\ + | F + \\ C | D - + Expected: All JARs from java_library must match deps_filter: - full_compile_jars: Implementation JARs (e.g., liblib_a.jar) - compile_jars: Interface JARs (e.g., liblib_a-hjar.jar) @@ -33,22 +34,30 @@ def _test_no_filtering(ctx): env = unittest.begin(ctx) java_lib_info = ctx.attr.java_library[JavaInfo] deps_filter_info = ctx.attr.deps_filter[JavaInfo] - + # Verify all JAR fields match between java_library and deps_filter jar_fields = [ - "full_compile_jars", # Implementation JARs - "compile_jars", # Interface JARs - "transitive_compile_time_jars", # Transitive interface JARs - "transitive_runtime_jars" # Transitive implementation JARs + "full_compile_jars", # Implementation JARs + "compile_jars", # Interface JARs + "transitive_compile_time_jars", # Transitive interface JARs + "transitive_runtime_jars", # Transitive implementation JARs ] for jar_field in jar_fields: java_lib_jars = getattr(java_lib_info, jar_field) deps_filter_jars = getattr(deps_filter_info, jar_field) - asserts.equals(env, type(java_lib_jars), type(deps_filter_jars), - "JAR type mismatch: {} vs deps_filter".format(jar_field)) - asserts.equals(env, java_lib_jars.to_list(), deps_filter_jars.to_list(), - "JAR contents mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + type(java_lib_jars), + type(deps_filter_jars), + "JAR type mismatch: {} vs deps_filter".format(jar_field), + ) + asserts.equals( + env, + java_lib_jars.to_list(), + deps_filter_jars.to_list(), + "JAR contents mismatch: {} vs deps_filter".format(jar_field), + ) return unittest.end(env) @@ -60,7 +69,7 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { def _test_filtered_deps(ctx): """ Tests basic dependency filtering with label-based exclusions. - + Dependency Graph: base_lib / \\ @@ -68,8 +77,8 @@ def _test_filtered_deps(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -96,30 +105,34 @@ def _test_filtered_deps(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_e-hjar.jar", "liblib_f-hjar.jar", "liblib_c-hjar.jar", - "liblib_d-hjar.jar" + "liblib_d-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { @@ -129,7 +142,7 @@ filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { def _test_filtered_deps_exclude_transitive(ctx): """ Tests dependency filtering with transitive exclusions. - + Dependency Graph: base_lib / \\ @@ -137,8 +150,8 @@ def _test_filtered_deps_exclude_transitive(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -157,7 +170,7 @@ def _test_filtered_deps_exclude_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -165,24 +178,28 @@ def _test_filtered_deps_exclude_transitive(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_e-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclude_transitive, attrs = { @@ -192,7 +209,7 @@ filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclud def _test_path_based_exclusions(ctx): """ Tests filtering based on path patterns in deps_exclude_paths. - + Dependency Graph: base_lib / \\ @@ -200,8 +217,8 @@ def _test_path_based_exclusions(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -220,7 +237,7 @@ def _test_path_based_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -228,30 +245,34 @@ def _test_path_based_exclusions(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_c.jar", "liblib_d.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_e-hjar.jar", "liblib_c-hjar.jar", "liblib_d-hjar.jar", - "liblib_g-hjar.jar" + "liblib_g-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = { @@ -261,7 +282,7 @@ path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = def _test_interface_implementation_jars(ctx): """ Tests proper handling of interface (-hjar) and implementation JARs. - + Dependency Graph: base_lib / \\ @@ -269,8 +290,8 @@ def _test_interface_implementation_jars(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -290,13 +311,13 @@ def _test_interface_implementation_jars(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + compile_jars = sorted([jar.basename for jar in javainfo_filtered.compile_jars.to_list()]) full_compile_jars = sorted([jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()]) - + expected_compile_jars = ["libbase_lib-hjar.jar"] expected_full_compile_jars = ["libbase_lib.jar"] - + asserts.equals(env, compile_jars, expected_compile_jars) asserts.equals(env, full_compile_jars, expected_full_compile_jars) return unittest.end(env) @@ -308,7 +329,7 @@ interface_implementation_jars_test = unittest.make(_test_interface_implementatio def _test_multiple_exclusions_with_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=True. - + Dependency Graph: base_lib / \\ @@ -316,8 +337,8 @@ def _test_multiple_exclusions_with_transitive(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -336,7 +357,7 @@ def _test_multiple_exclusions_with_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -344,32 +365,36 @@ def _test_multiple_exclusions_with_transitive(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_e-hjar.jar", "liblib_f-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) def _test_multiple_exclusions_without_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=False. - + Dependency Graph: base_lib / \\ @@ -377,8 +402,8 @@ def _test_multiple_exclusions_without_transitive(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -397,7 +422,7 @@ def _test_multiple_exclusions_without_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -405,7 +430,7 @@ def _test_multiple_exclusions_without_transitive(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", @@ -414,7 +439,7 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_c.jar", "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", @@ -423,12 +448,16 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_c-hjar.jar", "liblib_d-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_exclusions_with_transitive_test = unittest.make(_test_multiple_exclusions_with_transitive, attrs = { @@ -442,7 +471,7 @@ multiple_exclusions_without_transitive_test = unittest.make(_test_multiple_exclu def _test_empty_exclusion_lists(ctx): """ Tests behavior when exclusion lists are empty. - + Dependency Graph: base_lib / \\ @@ -450,8 +479,8 @@ def _test_empty_exclusion_lists(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -468,7 +497,7 @@ def _test_empty_exclusion_lists(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -476,7 +505,7 @@ def _test_empty_exclusion_lists(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", @@ -485,9 +514,9 @@ def _test_empty_exclusion_lists(ctx): "liblib_d.jar", "liblib_e.jar", "liblib_f.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", @@ -496,14 +525,18 @@ def _test_empty_exclusion_lists(ctx): "liblib_d-hjar.jar", "liblib_e-hjar.jar", "liblib_f-hjar.jar", - "liblib_g-hjar.jar" + "liblib_g-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -513,7 +546,7 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = def _test_multiple_paths(ctx): """ Tests handling of multiple paths to the same dependency. - + Dependency Graph: base_lib / \\ @@ -521,8 +554,8 @@ def _test_multiple_paths(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -542,7 +575,7 @@ def _test_multiple_paths(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [ "libbase_lib-hjar.jar", ] @@ -550,33 +583,36 @@ def _test_multiple_paths(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [ "libbase_lib-hjar.jar", "liblib_a-hjar.jar", "liblib_e-hjar.jar", "liblib_f-hjar.jar", "liblib_c-hjar.jar", - "liblib_d-hjar.jar" + "liblib_d-hjar.jar", ] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_paths_test = unittest.make(_test_multiple_paths, attrs = { "filtered": attr.label(providers = [JavaInfo]), }) - diff --git a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only/BUILD b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only/BUILD index 02a46a1..2aea7d3 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only/BUILD +++ b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only/BUILD @@ -1,21 +1,22 @@ +load("@rules_java//java:defs.bzl", "java_library") load("//springboot/deps_filter_rules:deps_filter.bzl", "deps_filter") load( "//springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only:runtime_only_test.bzl", - "no_filtering_test", - "filtered_deps_test", + "empty_exclusion_lists_test", "filtered_deps_exclude_transitive_test", - "path_based_exclusions_test", + "filtered_deps_test", "interface_implementation_jars_test", "multiple_exclusions_with_transitive_test", "multiple_exclusions_without_transitive_test", - "empty_exclusion_lists_test", "multiple_paths_test", + "no_filtering_test", + "path_based_exclusions_test", ) # Dependency Graph Structure: -# base_lib -# / \ +# base_lib +# / \ # A G # / \ / # B E / @@ -23,59 +24,62 @@ load( # | F # \/ # C -# | -# D +# | +# D # java_library( name = "lib_a", srcs = ["src/main/java/com/depsfilter/A.java"], runtime_deps = [ - ":lib_b", # A -> B - ":lib_e", # A -> E + ":lib_b", # A -> B + ":lib_e", # A -> E ], ) java_library( name = "lib_b", - srcs = ["src/main/java/com/depsfilter/B.java"], - runtime_deps = [":lib_c"], # B -> C + srcs = ["src/main/java/com/depsfilter/B.java"], + runtime_deps = [":lib_c"], # B -> C ) java_library( name = "lib_c", srcs = ["src/main/java/com/depsfilter/C.java"], - runtime_deps = [":lib_d"], # B -> D + runtime_deps = [":lib_d"], # B -> D ) java_library( name = "lib_d", - srcs = ["src/main/java/com/depsfilter/D.java"], + srcs = ["src/main/java/com/depsfilter/D.java"], ) java_library( name = "lib_e", srcs = ["src/main/java/com/depsfilter/E.java"], - runtime_deps = [":lib_f"], # E -> F + runtime_deps = [":lib_f"], # E -> F ) java_library( name = "lib_f", srcs = ["src/main/java/com/depsfilter/F.java"], - runtime_deps = [":lib_c"], # F -> C + runtime_deps = [":lib_c"], # F -> C ) java_library( name = "lib_g", srcs = ["src/main/java/com/depsfilter/G.java"], - runtime_deps = [":lib_f"], # G -> F path + runtime_deps = [":lib_f"], # G -> F path ) # Consumer library that uses the filtered dependencies java_library( name = "base_lib", srcs = ["src/main/java/com/depsfilter/H.java"], - runtime_deps = [":lib_a", ":lib_g"], + runtime_deps = [ + ":lib_a", + ":lib_g", + ], ) # Test 1: No filtering @@ -86,15 +90,18 @@ deps_filter( no_filtering_test( name = "deps_filter_no_filtering_test", - java_library = ":base_lib", deps_filter = ":filtered_deps", # deps_filter with no exclusions + java_library = ":base_lib", ) # Test 2: Exclude by labels and exclude_transitives = False deps_filter( name = "filtered_deps_exclude_b_g", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], runtime_deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) filtered_deps_test( @@ -105,9 +112,12 @@ filtered_deps_test( # Test 3: Exclude by labels and exclude_transitives = True deps_filter( name = "filtered_deps_exclude_b_g_exclude_transitive", - runtime_deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], exclude_transitives = True, + runtime_deps = [":base_lib"], ) filtered_deps_exclude_transitive_test( @@ -118,8 +128,11 @@ filtered_deps_exclude_transitive_test( # Test 4: Test for path-based exclusions deps_filter( name = "path_based_filtered_deps", + deps_exclude_paths = [ + "lib_b", + "lib_f", + ], runtime_deps = [":base_lib"], - deps_exclude_paths = ["lib_b", "lib_f"], ) path_based_exclusions_test( @@ -130,8 +143,11 @@ path_based_exclusions_test( # Test 5: Interface vs Implementation JARs deps_filter( name = "interface_impl_filtered_deps", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], runtime_deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) interface_implementation_jars_test( @@ -142,10 +158,10 @@ interface_implementation_jars_test( # Test 6: Multiple exclusions with exclude_transitives=True deps_filter( name = "multiple_exclusions_filtered_deps_1", - runtime_deps = [":base_lib"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = True, + runtime_deps = [":base_lib"], ) multiple_exclusions_with_transitive_test( @@ -156,10 +172,10 @@ multiple_exclusions_with_transitive_test( # Test 7: Multiple exclusions with exclude_transitives=False deps_filter( name = "multiple_exclusions_filtered_deps_2", - runtime_deps = [":base_lib"], deps_exclude_labels = [":lib_b"], deps_exclude_paths = ["lib_g"], exclude_transitives = False, + runtime_deps = [":base_lib"], ) multiple_exclusions_without_transitive_test( @@ -170,9 +186,9 @@ multiple_exclusions_without_transitive_test( # Test 8: Empty exclusion lists deps_filter( name = "empty_exclusions_filtered_deps", - runtime_deps = [":base_lib"], - deps_exclude_paths = [], deps_exclude_labels = [], + deps_exclude_paths = [], + runtime_deps = [":base_lib"], ) empty_exclusion_lists_test( @@ -183,8 +199,11 @@ empty_exclusion_lists_test( # Test 9: Multiple paths handling deps_filter( name = "multiple_paths_filtered_deps", + deps_exclude_labels = [ + ":lib_b", + ":lib_g", + ], runtime_deps = [":base_lib"], - deps_exclude_labels = [":lib_b", ":lib_g"], ) multiple_paths_test( @@ -194,6 +213,6 @@ multiple_paths_test( toolchain( name = "unittest_toolchain", - toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", toolchain = "@bazel_skylib//toolchains/unittest:toolchain", + toolchain_type = "@bazel_skylib//toolchains/unittest:toolchain_type", ) diff --git a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only/runtime_only_test.bzl b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only/runtime_only_test.bzl index 4b1acd0..946f3a6 100644 --- a/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only/runtime_only_test.bzl +++ b/springboot/deps_filter_rules/tests/depsfilter/internal_dependencies/runtime_only/runtime_only_test.bzl @@ -1,29 +1,30 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts", "unittest") -load("//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", - "verify_jars", - "verify_runtime_and_compile_jars", - "verify_jars_and_dropped_counts", - "verify_dropped_counts" +load("@rules_java//java:defs.bzl", "JavaInfo") +load( + "//springboot/deps_filter_rules/tests/test_utils:verification_utils.bzl", + "verify_dropped_counts", + "verify_jars", + "verify_jars_and_dropped_counts", + "verify_runtime_and_compile_jars", ) - def _test_no_filtering(ctx): """ Tests that deps_filter preserves all dependencies when no exclusions are applied. - - Dependency Graph: + + Dependency Graph: base_lib / \\ A G / \\ / B E / | | / - | F - \\ + | F + \\ C | D - + Expected: All JARs from java_library must match deps_filter: - full_compile_jars: Implementation JARs (e.g., liblib_a.jar) - compile_jars: Interface JARs (e.g., liblib_a-hjar.jar) @@ -33,22 +34,30 @@ def _test_no_filtering(ctx): env = unittest.begin(ctx) java_lib_info = ctx.attr.java_library[JavaInfo] deps_filter_info = ctx.attr.deps_filter[JavaInfo] - + # Verify all JAR fields match between java_library and deps_filter jar_fields = [ - "full_compile_jars", # Implementation JARs - "compile_jars", # Interface JARs - "transitive_compile_time_jars", # Transitive interface JARs - "transitive_runtime_jars" # Transitive implementation JARs + "full_compile_jars", # Implementation JARs + "compile_jars", # Interface JARs + "transitive_compile_time_jars", # Transitive interface JARs + "transitive_runtime_jars", # Transitive implementation JARs ] for jar_field in jar_fields: java_lib_jars = getattr(java_lib_info, jar_field) deps_filter_jars = getattr(deps_filter_info, jar_field) - asserts.equals(env, type(java_lib_jars), type(deps_filter_jars), - "JAR type mismatch: {} vs deps_filter".format(jar_field)) - asserts.equals(env, java_lib_jars.to_list(), deps_filter_jars.to_list(), - "JAR contents mismatch: {} vs deps_filter".format(jar_field)) + asserts.equals( + env, + type(java_lib_jars), + type(deps_filter_jars), + "JAR type mismatch: {} vs deps_filter".format(jar_field), + ) + asserts.equals( + env, + java_lib_jars.to_list(), + deps_filter_jars.to_list(), + "JAR contents mismatch: {} vs deps_filter".format(jar_field), + ) return unittest.end(env) @@ -60,7 +69,7 @@ no_filtering_test = unittest.make(_test_no_filtering, attrs = { def _test_filtered_deps(ctx): """ Tests basic dependency filtering with label-based exclusions. - + Dependency Graph: base_lib / \\ @@ -68,8 +77,8 @@ def _test_filtered_deps(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -95,23 +104,27 @@ def _test_filtered_deps(ctx): expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { @@ -121,7 +134,7 @@ filtered_deps_test = unittest.make(_test_filtered_deps, attrs = { def _test_filtered_deps_exclude_transitive(ctx): """ Tests dependency filtering with transitive exclusions. - + Dependency Graph: base_lib / \\ @@ -129,8 +142,8 @@ def _test_filtered_deps_exclude_transitive(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -150,26 +163,30 @@ def _test_filtered_deps_exclude_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [] expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", ] - + expected_transitive_compile_jars = [] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclude_transitive, attrs = { @@ -179,7 +196,7 @@ filtered_deps_exclude_transitive_test = unittest.make(_test_filtered_deps_exclud def _test_path_based_exclusions(ctx): """ Tests filtering based on path patterns in deps_exclude_paths. - + Dependency Graph: base_lib / \\ @@ -187,8 +204,8 @@ def _test_path_based_exclusions(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -207,29 +224,33 @@ def _test_path_based_exclusions(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [] expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_c.jar", "liblib_d.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = { @@ -239,7 +260,7 @@ path_based_exclusions_test = unittest.make(_test_path_based_exclusions, attrs = def _test_interface_implementation_jars(ctx): """ Tests proper handling of interface (-hjar) and implementation JARs. - + Dependency Graph: base_lib / \\ @@ -247,8 +268,8 @@ def _test_interface_implementation_jars(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -268,13 +289,13 @@ def _test_interface_implementation_jars(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + compile_jars = sorted([jar.basename for jar in javainfo_filtered.compile_jars.to_list()]) full_compile_jars = sorted([jar.basename for jar in javainfo_filtered.full_compile_jars.to_list()]) - + expected_compile_jars = [] expected_full_compile_jars = ["libbase_lib.jar"] - + asserts.equals(env, compile_jars, expected_compile_jars) asserts.equals(env, full_compile_jars, expected_full_compile_jars) return unittest.end(env) @@ -286,7 +307,7 @@ interface_implementation_jars_test = unittest.make(_test_interface_implementatio def _test_multiple_exclusions_with_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=True. - + Dependency Graph: base_lib / \\ @@ -294,8 +315,8 @@ def _test_multiple_exclusions_with_transitive(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -315,33 +336,37 @@ def _test_multiple_exclusions_with_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [] expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", ] - + expected_transitive_compile_jars = [] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) def _test_multiple_exclusions_without_transitive(ctx): """ Tests multiple exclusion levels with exclude_transitives=False. - + Dependency Graph: base_lib / \\ @@ -349,8 +374,8 @@ def _test_multiple_exclusions_without_transitive(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -370,13 +395,13 @@ def _test_multiple_exclusions_without_transitive(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [] expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", @@ -385,14 +410,18 @@ def _test_multiple_exclusions_without_transitive(ctx): "liblib_c.jar", "liblib_d.jar", ] - + expected_transitive_compile_jars = [] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_exclusions_with_transitive_test = unittest.make(_test_multiple_exclusions_with_transitive, attrs = { @@ -406,7 +435,7 @@ multiple_exclusions_without_transitive_test = unittest.make(_test_multiple_exclu def _test_empty_exclusion_lists(ctx): """ Tests behavior when exclusion lists are empty. - + Dependency Graph: base_lib / \\ @@ -414,8 +443,8 @@ def _test_empty_exclusion_lists(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -433,13 +462,13 @@ def _test_empty_exclusion_lists(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [] expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", @@ -448,16 +477,20 @@ def _test_empty_exclusion_lists(ctx): "liblib_d.jar", "liblib_e.jar", "liblib_f.jar", - "liblib_g.jar" + "liblib_g.jar", ] - + expected_transitive_compile_jars = [] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = { @@ -467,7 +500,7 @@ empty_exclusion_lists_test = unittest.make(_test_empty_exclusion_lists, attrs = def _test_multiple_paths(ctx): """ Tests handling of multiple paths to the same dependency. - + Dependency Graph: base_lib / \\ @@ -475,8 +508,8 @@ def _test_multiple_paths(ctx): / \\ / B E / | | / - | F - \\ + | F + \\ C | D @@ -497,32 +530,35 @@ def _test_multiple_paths(ctx): """ env = unittest.begin(ctx) javainfo_filtered = ctx.attr.filtered[JavaInfo] - + expected_compile_jars = [] expected_full_compile_jars = [ "libbase_lib.jar", ] - + expected_transitive_runtime_jars = [ "libbase_lib.jar", "liblib_a.jar", "liblib_e.jar", "liblib_f.jar", "liblib_c.jar", - "liblib_d.jar" + "liblib_d.jar", ] - + expected_transitive_compile_jars = [] - - verify_runtime_and_compile_jars(ctx, env, javainfo_filtered, - expected_compile_jars = expected_compile_jars, - expected_full_compile_jars = expected_full_compile_jars, - expected_transitive_compile_jars = expected_transitive_compile_jars, - expected_transitive_runtime_jars = expected_transitive_runtime_jars) + + verify_runtime_and_compile_jars( + ctx, + env, + javainfo_filtered, + expected_compile_jars = expected_compile_jars, + expected_full_compile_jars = expected_full_compile_jars, + expected_transitive_compile_jars = expected_transitive_compile_jars, + expected_transitive_runtime_jars = expected_transitive_runtime_jars, + ) return unittest.end(env) multiple_paths_test = unittest.make(_test_multiple_paths, attrs = { "filtered": attr.label(providers = [JavaInfo]), }) - diff --git a/springboot/deps_filter_rules/tests/test_utils/BUILD b/springboot/deps_filter_rules/tests/test_utils/BUILD index 65c1bfb..ffafff0 100644 --- a/springboot/deps_filter_rules/tests/test_utils/BUILD +++ b/springboot/deps_filter_rules/tests/test_utils/BUILD @@ -1,3 +1,5 @@ +load("@rules_java//java:defs.bzl", "java_library") + package(default_visibility = ["//visibility:public"]) java_library( @@ -8,4 +10,4 @@ java_library( ) # Export the dependency graph file for tests -exports_files(["dependency_graph.txt"]) \ No newline at end of file +exports_files(["dependency_graph.txt"]) diff --git a/springboot/deps_filter_rules/tests/test_utils/verification_utils.bzl b/springboot/deps_filter_rules/tests/test_utils/verification_utils.bzl index f5b07c6..41f6e09 100644 --- a/springboot/deps_filter_rules/tests/test_utils/verification_utils.bzl +++ b/springboot/deps_filter_rules/tests/test_utils/verification_utils.bzl @@ -1,13 +1,22 @@ load("@bazel_skylib//lib:unittest.bzl", "asserts") +load("@rules_java//java:defs.bzl", "JavaInfo") def verify_jars(env, actual_jars, expected_jars, jar_field): expected_jars = sorted(expected_jars) actual_jars = sorted(actual_jars) - asserts.equals(env, type(expected_jars), type(actual_jars), - "JAR type mismatch: {}".format(jar_field)) - asserts.equals(env, expected_jars, actual_jars, - "JAR contents mismatch: {}".format(jar_field)) - + asserts.equals( + env, + type(expected_jars), + type(actual_jars), + "JAR type mismatch: {}".format(jar_field), + ) + asserts.equals( + env, + expected_jars, + actual_jars, + "JAR contents mismatch: {}".format(jar_field), + ) + def verify_runtime_and_compile_jars(ctx, env, javainfo, expected_compile_jars = None, expected_full_compile_jars = None, expected_transitive_compile_jars = None, expected_transitive_runtime_jars = None): """Helper function to verify runtime and compile time JARs.""" transitive_runtime_jars = [jar.basename for jar in javainfo.transitive_runtime_jars.to_list()] @@ -26,41 +35,74 @@ def verify_jars_and_dropped_counts(env, expected, expected_compile_dropped = "0" "transitive_compile_jars_dropped": expected["transitive_compile_jars_dropped"], "transitive_runtime_jars_dropped": expected["transitive_runtime_jars_dropped"], } - verify_dropped_counts(env, dropped_counts, - expected_compile_dropped, expected_full_compile_dropped, - expected_transitive_compile_dropped, expected_transitive_runtime_dropped) + verify_dropped_counts( + env, + dropped_counts, + expected_compile_dropped, + expected_full_compile_dropped, + expected_transitive_compile_dropped, + expected_transitive_runtime_dropped, + ) def verify_dropped_counts(env, dropped_counts, expected_compile_dropped = "0", expected_full_compile_dropped = "0", expected_transitive_compile_dropped = "0", expected_transitive_runtime_dropped = "0"): """ Verifies that the correct number of JARs were dropped for each type. """ if expected_compile_dropped == "0": - asserts.equals(env, dropped_counts["compile_jars_dropped"], 0, - "Expected no compile JARs to be dropped, but {} were dropped".format(dropped_counts["compile_jars_dropped"])) + asserts.equals( + env, + dropped_counts["compile_jars_dropped"], + 0, + "Expected no compile JARs to be dropped, but {} were dropped".format(dropped_counts["compile_jars_dropped"]), + ) elif expected_compile_dropped == ">0": - asserts.true(env, dropped_counts["compile_jars_dropped"] > 0, - "Expected some compile JARs to be dropped, but {} were dropped".format(dropped_counts["compile_jars_dropped"])) - + asserts.true( + env, + dropped_counts["compile_jars_dropped"] > 0, + "Expected some compile JARs to be dropped, but {} were dropped".format(dropped_counts["compile_jars_dropped"]), + ) + if expected_full_compile_dropped == "0": - asserts.equals(env, dropped_counts["full_compile_jars_dropped"], 0, - "Expected no full compile JARs to be dropped, but {} were dropped".format(dropped_counts["full_compile_jars_dropped"])) + asserts.equals( + env, + dropped_counts["full_compile_jars_dropped"], + 0, + "Expected no full compile JARs to be dropped, but {} were dropped".format(dropped_counts["full_compile_jars_dropped"]), + ) elif expected_full_compile_dropped == ">0": - asserts.true(env, dropped_counts["full_compile_jars_dropped"] > 0, - "Expected some full compile JARs to be dropped, but {} were dropped".format(dropped_counts["full_compile_jars_dropped"])) - + asserts.true( + env, + dropped_counts["full_compile_jars_dropped"] > 0, + "Expected some full compile JARs to be dropped, but {} were dropped".format(dropped_counts["full_compile_jars_dropped"]), + ) + if expected_transitive_compile_dropped == "0": - asserts.equals(env, dropped_counts["transitive_compile_jars_dropped"], 0, - "Expected no transitive compile JARs to be dropped, but {} were dropped".format(dropped_counts["transitive_compile_jars_dropped"])) + asserts.equals( + env, + dropped_counts["transitive_compile_jars_dropped"], + 0, + "Expected no transitive compile JARs to be dropped, but {} were dropped".format(dropped_counts["transitive_compile_jars_dropped"]), + ) elif expected_transitive_compile_dropped == ">0": - asserts.true(env, dropped_counts["transitive_compile_jars_dropped"] > 0, - "Expected some transitive compile JARs to be dropped, but {} were dropped".format(dropped_counts["transitive_compile_jars_dropped"])) - + asserts.true( + env, + dropped_counts["transitive_compile_jars_dropped"] > 0, + "Expected some transitive compile JARs to be dropped, but {} were dropped".format(dropped_counts["transitive_compile_jars_dropped"]), + ) + if expected_transitive_runtime_dropped == "0": - asserts.equals(env, dropped_counts["transitive_runtime_jars_dropped"], 0, - "Expected no transitive runtime JARs to be dropped, but {} were dropped".format(dropped_counts["transitive_runtime_jars_dropped"])) + asserts.equals( + env, + dropped_counts["transitive_runtime_jars_dropped"], + 0, + "Expected no transitive runtime JARs to be dropped, but {} were dropped".format(dropped_counts["transitive_runtime_jars_dropped"]), + ) elif expected_transitive_runtime_dropped == ">0": - asserts.true(env, dropped_counts["transitive_runtime_jars_dropped"] > 0, - "Expected some transitive runtime JARs to be dropped, but {} were dropped".format(dropped_counts["transitive_runtime_jars_dropped"])) + asserts.true( + env, + dropped_counts["transitive_runtime_jars_dropped"] > 0, + "Expected some transitive runtime JARs to be dropped, but {} were dropped".format(dropped_counts["transitive_runtime_jars_dropped"]), + ) def update_jar_name(jar_name, new_jar_name, jar_list): for i, jar in enumerate(jar_list): @@ -92,7 +134,7 @@ def _compute_excluded_jars_from_labels(ctx): excluded_full_compile_jars = [] excluded_transitive_compile_jars = [] excluded_transitive_runtime_jars = [] - + if not ctx.attr.deps_exclude_labels: return { "compile_jars": excluded_compile_jars, @@ -100,10 +142,10 @@ def _compute_excluded_jars_from_labels(ctx): "transitive_compile_jars": excluded_transitive_compile_jars, "transitive_runtime_jars": excluded_transitive_runtime_jars, } - + for excluded_label in ctx.attr.deps_exclude_labels: java_info = excluded_label[JavaInfo] - + if ctx.attr.exclude_transitives: # Exclude the dep and its transitives excluded_compile_jars, _ = _collect_filtered_jars(excluded_compile_jars, java_info.compile_jars.to_list()) @@ -116,7 +158,7 @@ def _compute_excluded_jars_from_labels(ctx): excluded_full_compile_jars, _ = _collect_filtered_jars(excluded_full_compile_jars, java_info.full_compile_jars.to_list()) excluded_transitive_compile_jars, _ = _collect_filtered_jars(excluded_transitive_compile_jars, java_info.compile_jars.to_list()) excluded_transitive_runtime_jars, _ = _collect_filtered_jars(excluded_transitive_runtime_jars, java_info.full_compile_jars.to_list()) - + return { "compile_jars": excluded_compile_jars, "full_compile_jars": excluded_full_compile_jars, @@ -130,7 +172,7 @@ def compute_expected_jars(ctx, test_lib_name = None): """ excluded_jars = _compute_excluded_jars_from_labels(ctx) exclusion_patterns = ctx.attr.deps_exclude_paths or [] - + if test_lib_name == None: expected_compile_jars = [] expected_full_compile_jars = [] @@ -148,7 +190,7 @@ def compute_expected_jars(ctx, test_lib_name = None): full_compile_jars_dropped = 0 transitive_compile_jars_dropped = 0 transitive_runtime_jars_dropped = 0 - + # Process compile-time deps for dep in ctx.attr.deps_labels: java_info = dep[JavaInfo] @@ -166,14 +208,14 @@ def compute_expected_jars(ctx, test_lib_name = None): transitive_compile_jars_dropped += dropped expected_transitive_runtime_jars, dropped = _collect_filtered_jars(expected_transitive_runtime_jars, java_info.transitive_runtime_jars.to_list(), excluded_jars["transitive_runtime_jars"], exclusion_patterns) transitive_runtime_jars_dropped += dropped - + # Process runtime deps for runtime_dep in ctx.attr.runtime_deps_labels: java_info = runtime_dep[JavaInfo] expected_transitive_runtime_jars, dropped = _collect_filtered_jars(expected_transitive_runtime_jars, java_info.transitive_runtime_jars.to_list(), excluded_jars["transitive_runtime_jars"], exclusion_patterns) transitive_runtime_jars_dropped += dropped # Note: Runtime deps typically don't contribute to compile-time transitives - + return { "compile_jars": expected_compile_jars, "full_compile_jars": expected_full_compile_jars, @@ -183,4 +225,4 @@ def compute_expected_jars(ctx, test_lib_name = None): "full_compile_jars_dropped": full_compile_jars_dropped, "transitive_compile_jars_dropped": transitive_compile_jars_dropped, "transitive_runtime_jars_dropped": transitive_runtime_jars_dropped, - } \ No newline at end of file + } diff --git a/springboot/deps_filter_rules_legacy/BUILD b/springboot/deps_filter_rules_legacy/BUILD index cf39430..9dac92c 100644 --- a/springboot/deps_filter_rules_legacy/BUILD +++ b/springboot/deps_filter_rules_legacy/BUILD @@ -1,3 +1,4 @@ +load("@rules_java//java:defs.bzl", "java_test") load("//springboot/deps_filter_rules_legacy:deps_filter.bzl", "deps_filter") load("//springboot/deps_filter_rules_legacy:deps_filter_disable_transitives.bzl", "deps_filter_disable_transitives") @@ -13,76 +14,76 @@ test_deps = [ deps_filter( name = "filtered_test_deps_with_transitives_excluded", + testonly = True, + deps_exclude_labels = [ + "@maven//:org_springframework_spring_web", # share transitives with spring-jdbc + ], + exclude_transitives = True, deps = [ "@maven//:org_springframework_spring_jdbc", "@maven//:org_springframework_spring_web", ], - deps_exclude_labels = [ - "@maven//:org_springframework_spring_web", # share transitives with spring-jdbc - ], - exclude_transitives = True, - testonly = True, ) deps_filter( name = "filtered_test_deps_without_transitives_excluded", + testonly = True, + deps_exclude_labels = [ + "@maven//:org_springframework_spring_web", # share transitives with spring-jdbc + ], + exclude_transitives = False, deps = [ "@maven//:org_springframework_spring_jdbc", "@maven//:org_springframework_spring_web", ], - deps_exclude_labels = [ - "@maven//:org_springframework_spring_web", # share transitives with spring-jdbc - ], - exclude_transitives = False, - testonly = True, ) deps_filter_disable_transitives( name = "filtered_deps_disable_transitives_case_A", - deps = [ + testonly = True, + deps_to_exclude_transitives = [ "@maven//:org_springframework_spring_jdbc", "@maven//:org_springframework_spring_web", ], - deps_to_exclude_transitives = [ + deps = [ "@maven//:org_springframework_spring_jdbc", "@maven//:org_springframework_spring_web", ], - testonly = True, ) deps_filter_disable_transitives( name = "filtered_deps_disable_transitives_case_B", - deps = [ - "@maven//:org_springframework_spring_jdbc", - "@maven//:org_springframework_spring_web", - ], + testonly = True, deps_to_exclude_transitives = [ # "@maven//:org_springframework_spring_jdbc", "@maven//:org_springframework_spring_web", ], - testonly = True, -) - -deps_filter_disable_transitives( - name = "filtered_deps_disable_transitives_case_C", deps = [ "@maven//:org_springframework_spring_jdbc", "@maven//:org_springframework_spring_web", ], +) + +deps_filter_disable_transitives( + name = "filtered_deps_disable_transitives_case_C", + testonly = True, deps_to_exclude_transitives = [ "@maven//:org_springframework_spring_jdbc", # "@maven//:org_springframework_spring_web", ], - testonly = True, + deps = [ + "@maven//:org_springframework_spring_jdbc", + "@maven//:org_springframework_spring_web", + ], ) deps_filter_disable_transitives( name = "filtered_deps_disable_transitives_case_D", + testonly = True, deps = [ "@maven//:org_springframework_spring_jdbc", "@maven//:org_springframework_spring_web", ], - testonly = True, ) java_test( @@ -113,7 +114,6 @@ java_test( deps = [":filtered_deps_disable_transitives_case_D"] + test_deps, ) - java_test( name = "DepsFilterWithTransitivesExclusionTest", size = "small", diff --git a/springboot/deps_filter_rules_legacy/deps_filter.bzl b/springboot/deps_filter_rules_legacy/deps_filter.bzl index 1b7d1b3..58ae987 100644 --- a/springboot/deps_filter_rules_legacy/deps_filter.bzl +++ b/springboot/deps_filter_rules_legacy/deps_filter.bzl @@ -1,15 +1,17 @@ +load("@rules_java//java:defs.bzl", "JavaInfo", "java_common") + def _depaggregator_rule_impl(merged, ctx): """ - This method processes declared deps and their transitive closures - to assemble a cohesive set of jars essential for the build process. During - this process, it excludes deps specified in 'deps_exclude_labels', which - lists jar labels to be omitted from packaging due to issues that cannot + This method processes declared deps and their transitive closures + to assemble a cohesive set of jars essential for the build process. During + this process, it excludes deps specified in 'deps_exclude_labels', which + lists jar labels to be omitted from packaging due to issues that cannot be resolved upstream. If 'exclude_transitives' is set to 'true' (default: 'false'), any transitive deps that are only required by excluded deps - are also omitted, ensuring that only necessary transitives are included - in the final package. It uses 'deps_exclude_paths' to exclude deps - based on partial filename matches, ensuring problematic files are also - excluded from the build. This method ensures that only necessary + are also omitted, ensuring that only necessary transitives are included + in the final package. It uses 'deps_exclude_paths' to exclude deps + based on partial filename matches, ensuring problematic files are also + excluded from the build. This method ensures that only necessary deps are included for the build process. """ exclude_transitives = ctx.attr.exclude_transitives @@ -25,14 +27,14 @@ def _depaggregator_rule_impl(merged, ctx): # List to store deps info for deps present in 'deps_exclude_labels' direct_excludes = [] - # Iterate through the deps specified in 'deps_exclude_labels' to collect + # Iterate through the deps specified in 'deps_exclude_labels' to collect # jars that should be excluded from the final set. - for exclusion_info in ctx.attr.deps_exclude_labels: + for exclusion_info in ctx.attr.deps_exclude_labels: # For each excluded dependency, add its compile-time JARs to the exclusion list for compile_jar in exclusion_info[JavaInfo].full_compile_jars.to_list(): excludes[compile_jar.path] = True - + if exclude_transitives: # Mark all transitives of the current dependency as excluded # This list will be updated later based on transitives of non-excluded deps @@ -45,8 +47,8 @@ def _depaggregator_rule_impl(merged, ctx): for deps_info in ctx.attr.deps: # skip the current dependency if it is listed in 'deps_exclude_labels'. if str(deps_info) in direct_excludes: - continue - + continue + # For non-excluded deps, mark them and their transitive deps as included (not to be excluded) # (transitive_runtime_jars includes both the primary JAR and its transitive deps) for transitive_jar in deps_info[JavaInfo].transitive_runtime_jars.to_list(): @@ -54,16 +56,16 @@ def _depaggregator_rule_impl(merged, ctx): transitives_excludes[transitive_jar.path] = False # update the excludes list - for dep_path in transitives_excludes: + for dep_path in transitives_excludes: # print("Transitive:", str(dep_path), "is excluded", transitives_excludes[dep_path]) if transitives_excludes[dep_path]: excludes[dep_path] = True - + # compute the final set of jars for dep in merged.transitive_runtime_jars.to_list(): # If the current JAR is in the exclusion list, skip it (do not include it) if excludes.get(dep.path, None) != None: - pass + pass else: # Default to including the JAR unless a pattern match excludes it include = True @@ -78,19 +80,19 @@ def _depaggregator_rule_impl(merged, ctx): def _deps_filter_impl(ctx): """ - This rule filters out specified deps and JARs from the compile-time - and runtime deps. It utilizes the 'deps_exclude_labels' attribute to omit - specific JAR labels and the 'deps_exclude_paths' attribute to exclude + This rule filters out specified deps and JARs from the compile-time + and runtime deps. It utilizes the 'deps_exclude_labels' attribute to omit + specific JAR labels and the 'deps_exclude_paths' attribute to exclude deps based on partial paths in their filenames. If 'exclude_transitives' is set to `True` (default: `False`), any transitive deps solely required by the deps in 'deps_exclude_labels' are also excluded. These exclusions ensure the final collection includes only the necessary elements for the build process, eliminating problematic deps. - """ + """ if len(ctx.attr.deps) == 0: fail("Error: 'deps' cannot be an empty list") - + # magical incantation for getting upstream transitive closure of java deps merged = java_common.merge([dep[java_common.provider] for dep in ctx.attr.deps]) runtime_dep_merged = java_common.merge([runtime_dep[java_common.provider] for runtime_dep in ctx.attr.runtime_deps]) @@ -102,17 +104,15 @@ def _deps_filter_impl(ctx): fail("Error: The rule must return at least one compile-time JAR. Excluding all compile-time dependencies is not allowed.") return [ - DefaultInfo(files = depset(compile_time_jars,)), - JavaInfo( - compile_jar = None, - output_jar = compile_time_jars[0], # output jar must be non-empty, adding a dummy value to it - exports = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in compile_time_jars], - runtime_deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in - runtime_jars], - deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in compile_time_jars], - ), - ] - + DefaultInfo(files = depset(compile_time_jars)), + JavaInfo( + compile_jar = None, + output_jar = compile_time_jars[0], # output jar must be non-empty, adding a dummy value to it + exports = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in compile_time_jars], + runtime_deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in runtime_jars], + deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in compile_time_jars], + ), + ] deps_filter = rule( implementation = _deps_filter_impl, @@ -123,4 +123,4 @@ deps_filter = rule( "deps_exclude_paths": attr.string_list(), "exclude_transitives": attr.bool(default = False), }, -) \ No newline at end of file +) diff --git a/springboot/deps_filter_rules_legacy/deps_filter_disable_transitives.bzl b/springboot/deps_filter_rules_legacy/deps_filter_disable_transitives.bzl index ae4d6e4..4ef7742 100644 --- a/springboot/deps_filter_rules_legacy/deps_filter_disable_transitives.bzl +++ b/springboot/deps_filter_rules_legacy/deps_filter_disable_transitives.bzl @@ -1,8 +1,10 @@ +load("@rules_java//java:defs.bzl", "JavaInfo", "java_common") + def _depaggregator_rule_impl(merged, deps, ctx): """ - This method processes declared dependencies and their transitive closures - to assemble a cohesive set of jars essential for the build process. During - this process, it excludes all the transitives of dependencies specified + This method processes declared dependencies and their transitive closures + to assemble a cohesive set of jars essential for the build process. During + this process, it excludes all the transitives of dependencies specified in 'deps_to_exclude_transitives'. """ jars = [] @@ -21,13 +23,12 @@ def _depaggregator_rule_impl(merged, deps, ctx): for compile_jar in dep_info[JavaInfo].full_compile_jars.to_list(): if compile_jar.path in excludes: excludes[compile_jar.path] = False - + if str(dep_info) not in deps_info_to_exclude_transitives: for transitive_jar in dep_info[JavaInfo].transitive_runtime_jars.to_list(): if transitive_jar.path in excludes: excludes[transitive_jar.path] = False - - + for dep in merged.transitive_runtime_jars.to_list(): if excludes.get(dep.path, None) != None and excludes[dep.path]: pass @@ -37,13 +38,13 @@ def _depaggregator_rule_impl(merged, deps, ctx): def _deps_filter_disable_transitives_impl(ctx): """ - This rule filters out transitives of the specified dependencies and JARs - from the compile-time and runtime dependencies. - """ + This rule filters out transitives of the specified dependencies and JARs + from the compile-time and runtime dependencies. + """ if len(ctx.attr.deps) == 0: fail("Error: 'deps' cannot be an empty list") - # deps whose transitives are to be excluded must be a subset of deps + runtime_deps + # deps whose transitives are to be excluded must be a subset of deps + runtime_deps deps_info_list = [] for dep_info in ctx.attr.deps: deps_info_list.append(str(dep_info)) @@ -53,9 +54,8 @@ def _deps_filter_disable_transitives_impl(ctx): for dep_info in ctx.attr.deps_to_exclude_transitives: if str(dep_info) not in deps_info_list: - fail("Error: 'deps' specified in deps_to_exclude_transitives must be subset of deps + runtime_deps") + fail("Error: 'deps' specified in deps_to_exclude_transitives must be subset of deps + runtime_deps") - # magical incantation for getting upstream transitive closure of java deps merged = java_common.merge([dep[java_common.provider] for dep in ctx.attr.deps]) runtime_dep_merged = java_common.merge([runtime_dep[java_common.provider] for runtime_dep in ctx.attr.runtime_deps]) @@ -66,19 +66,16 @@ def _deps_filter_disable_transitives_impl(ctx): if len(compile_time_jars) == 0: fail("Error: The rule must return at least one compile-time JAR. Excluding all compile-time dependencies is not allowed.") - return [ - DefaultInfo(files = depset(compile_time_jars,)), - JavaInfo( - compile_jar = None, - output_jar = compile_time_jars[0], # output jar must be non-empty, adding a dummy value to it - exports = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in compile_time_jars], - runtime_deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in - runtime_jars], - deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in compile_time_jars], - ), - ] - + DefaultInfo(files = depset(compile_time_jars)), + JavaInfo( + compile_jar = None, + output_jar = compile_time_jars[0], # output jar must be non-empty, adding a dummy value to it + exports = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in compile_time_jars], + runtime_deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in runtime_jars], + deps = [JavaInfo(source_jar = jar, compile_jar = jar, output_jar = jar) for jar in compile_time_jars], + ), + ] deps_filter_disable_transitives = rule( implementation = _deps_filter_disable_transitives_impl, @@ -87,4 +84,4 @@ deps_filter_disable_transitives = rule( "runtime_deps": attr.label_list(providers = [java_common.provider], allow_empty = True), "deps_to_exclude_transitives": attr.label_list(providers = [java_common.provider], allow_empty = True), }, -) \ No newline at end of file +) diff --git a/springboot/import_bundles/BUILD b/springboot/import_bundles/BUILD index 3d89a20..6905358 100644 --- a/springboot/import_bundles/BUILD +++ b/springboot/import_bundles/BUILD @@ -5,11 +5,13 @@ # For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause # +load("@rules_java//java:defs.bzl", "java_library") + # List of standard imports bundles that most/all Spring Boot app will need. -java_import( +java_library( name = "springboot_required_deps", - jars = [], + srcs = [], visibility = ["//visibility:public"], exports = [ "@maven//:org_springframework_boot_spring_boot", diff --git a/springboot/springboot.bzl b/springboot/springboot.bzl index 12bc2e0..1511627 100644 --- a/springboot/springboot.bzl +++ b/springboot/springboot.bzl @@ -30,6 +30,8 @@ # Dependency Aggregator Rule # do not use directly, see the SpringBoot Macro below +load("@rules_java//java:defs.bzl", "JavaInfo", "java_binary", "java_common", "java_library") + def _depaggregator_rule_impl(ctx): # magical incantation for getting upstream transitive closure of java deps merged = java_common.merge([dep[java_common.provider] for dep in ctx.attr.deps]) @@ -698,7 +700,7 @@ def springboot( # Making the springboot rule itself executable is not recognized by IntelliJ # (because IntelliJ doesn't know how to handle the springboot rule type or # because of a misconfiguration on our end?) - native.java_binary( + java_binary( name = apprun_rule, main_class = boot_app_class, runtime_deps = java_deps,