Prepare release v2.2.0 (#3874)
Work towards #3867
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 21108ff..bcb6c6d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,6 +29,45 @@
directory, or view the [latest generated
changelog](https://rules-python.readthedocs.io/en/latest/changelog.html).
+{#v2-2-0}
+## [2.2.0] - 2026-06-30
+
+[2.2.0]: https://github.com/bazel-contrib/rules_python/releases/tag/2.2.0
+
+{#v2-2-0-changed}
+### Changed
+* Renamed most public bzl_library targets from `{foo}_bzl` to `{foo}` to follow
+gazelle naming conventions. Deprecated aliases are left for backwards
+compatibility.
+* (binaries/tests) Added a deprecation warning for targets relying on implicit `__init__.py` creation.
+
+{#v2-2-0-fixed}
+### Fixed
+* Fixed a flaky error on Windows 2022 when looking up the win32 version during
+site initialization by retrying the lookup
+([#3721](https://github.com/bazel-contrib/rules_python/issues/3721)).
+* (coverage) Skip lcov report when no data was collected.
+* (pypi) Fixed `experimental_index_url` checking truthiness before envsubst
+expansion.
+* (rules) Fixed venv output paths for `py_binary` and `py_test` targets whose
+names contain path separators so distinct targets with the same basename no
+longer share the same venv output directory.
+
+{#v2-2-0-added}
+### Added
+* Added {bzl:obj}`features.loadable_symbols` to allow detecting public symbols
+exported by bzl files.
+* Exposed {bzl:obj}`VenvSymlinkEntry` and {bzl:obj}`VenvSymlinkKind` in
+{bzl:target}`//python:py_info.bzl`.
+* (pypi) Added `@pypi` repo: a unified hub of `pip.parse` hubs.
+* (uv) Support for basic `uv.lock` generation via the `lock` rule
+and basic support for importing the `uv.lock` file itself. Since this
+may have bugs, please report this by creating new tickets.
+Work towards [#2787](https://github.com/bazel-contrib/rules_python/issues/2787)
+and [#1975](https://github.com/bazel-contrib/rules_python/issues/1975).
+
+
+
{#v2-1-0}
## [2.1.0] - 2026-06-17
diff --git a/docs/api/rules_python/python/config_settings/index.md b/docs/api/rules_python/python/config_settings/index.md
index 7908a28..6b7a150 100644
--- a/docs/api/rules_python/python/config_settings/index.md
+++ b/docs/api/rules_python/python/config_settings/index.md
@@ -362,7 +362,7 @@
specified concrete PyPI hub (corresponding to a
{obj}`pip.parse.hub_name` value).
-:::{versionadded} VERSION_NEXT_FEATURE
+:::{versionadded} 2.2.0
:::
::::
diff --git a/docs/environment-variables.md b/docs/environment-variables.md
index 983ae3c..3eb6222 100644
--- a/docs/environment-variables.md
+++ b/docs/environment-variables.md
@@ -126,7 +126,7 @@
to `0`), a warning is printed advising to rename the hub, and the collision
is not resolved.
-:::{versionadded} VERSION_NEXT_FEATURE
+:::{versionadded} 2.2.0
:::
:::
diff --git a/docs/pypi/download.md b/docs/pypi/download.md
index 6705df1..161a753 100644
--- a/docs/pypi/download.md
+++ b/docs/pypi/download.md
@@ -53,7 +53,7 @@
(unified-pypi-hub)=
## Unified `@pypi` Hub for Multi-Hub Configurations
-:::{versionadded} VERSION_NEXT_FEATURE
+:::{versionadded} 2.2.0
Unified `@pypi` hub repository for Bzlmod multi-hub configurations.
:::
diff --git a/news/2945.changed.md b/news/2945.changed.md
deleted file mode 100644
index c0ff002..0000000
--- a/news/2945.changed.md
+++ /dev/null
@@ -1 +0,0 @@
-(binaries/tests) Added a deprecation warning for targets relying on implicit `__init__.py` creation.
diff --git a/news/3785.added.md b/news/3785.added.md
deleted file mode 100644
index db0ec56..0000000
--- a/news/3785.added.md
+++ /dev/null
@@ -1,5 +0,0 @@
-(uv) Support for basic `uv.lock` generation via the `lock` rule
-and basic support for importing the `uv.lock` file itself. Since this
-may have bugs, please report this by creating new tickets.
-Work towards [#2787](https://github.com/bazel-contrib/rules_python/issues/2787)
-and [#1975](https://github.com/bazel-contrib/rules_python/issues/1975).
diff --git a/news/3828.fixed.md b/news/3828.fixed.md
deleted file mode 100644
index 64de2cc..0000000
--- a/news/3828.fixed.md
+++ /dev/null
@@ -1,2 +0,0 @@
-(pypi) Fixed `experimental_index_url` checking truthiness before envsubst
-expansion.
diff --git a/news/3832.fixed.md b/news/3832.fixed.md
deleted file mode 100644
index f1dd32d..0000000
--- a/news/3832.fixed.md
+++ /dev/null
@@ -1 +0,0 @@
-(coverage) Skip lcov report when no data was collected.
diff --git a/news/3837.added.md b/news/3837.added.md
deleted file mode 100644
index 6d3e4b5..0000000
--- a/news/3837.added.md
+++ /dev/null
@@ -1 +0,0 @@
-(pypi) Added `@pypi` repo: a unified hub of `pip.parse` hubs.
diff --git a/news/expose-venv-symlink.added.md b/news/expose-venv-symlink.added.md
deleted file mode 100644
index e339bb5..0000000
--- a/news/expose-venv-symlink.added.md
+++ /dev/null
@@ -1,2 +0,0 @@
-Exposed {bzl:obj}`VenvSymlinkEntry` and {bzl:obj}`VenvSymlinkKind` in
-{bzl:target}`//python:py_info.bzl`.
diff --git a/news/gazelle-bzl-library.changed.md b/news/gazelle-bzl-library.changed.md
deleted file mode 100644
index 0d60211..0000000
--- a/news/gazelle-bzl-library.changed.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Renamed most public bzl_library targets from `{foo}_bzl` to `{foo}` to follow
-gazelle naming conventions. Deprecated aliases are left for backwards
-compatibility.
diff --git a/news/loadable-symbols.added.md b/news/loadable-symbols.added.md
deleted file mode 100644
index 7d92df7..0000000
--- a/news/loadable-symbols.added.md
+++ /dev/null
@@ -1,2 +0,0 @@
-Added {bzl:obj}`features.loadable_symbols` to allow detecting public symbols
-exported by bzl files.
diff --git a/news/slash-target-venv-output.fixed.md b/news/slash-target-venv-output.fixed.md
deleted file mode 100644
index 780b498..0000000
--- a/news/slash-target-venv-output.fixed.md
+++ /dev/null
@@ -1,3 +0,0 @@
-(rules) Fixed venv output paths for `py_binary` and `py_test` targets whose
-names contain path separators so distinct targets with the same basename no
-longer share the same venv output directory.
diff --git a/news/win32_version_lookup.fixed.md b/news/win32_version_lookup.fixed.md
deleted file mode 100644
index 6f01c9e..0000000
--- a/news/win32_version_lookup.fixed.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Fixed a flaky error on Windows 2022 when looking up the win32 version during
-site initialization by retrying the lookup
-([#3721](https://github.com/bazel-contrib/rules_python/issues/3721)).
diff --git a/python/features.bzl b/python/features.bzl
index ee850ad..33323b8 100644
--- a/python/features.bzl
+++ b/python/features.bzl
@@ -54,7 +54,7 @@
A map of bzl paths to the list of public symbols they export.
- :::{versionadded} VERSION_NEXT_FEATURE
+ :::{versionadded} 2.2.0
:::
::::
diff --git a/python/private/py_info.bzl b/python/private/py_info.bzl
index da94216..dac1dde 100644
--- a/python/private/py_info.bzl
+++ b/python/private/py_info.bzl
@@ -125,7 +125,7 @@
:type: DepsetBuilder[File]
:::
- :::{versionadded} VERSION_NEXT_FEATURE
+ :::{versionadded} 2.2.0
:::
"""
@@ -677,7 +677,7 @@
def _PyInfoBuilder_add_venv_symlink(self):
"""Create and return a new VenvSymlinkEntryBuilder.
- :::{versionadded} VERSION_NEXT_FEATURE
+ :::{versionadded} 2.2.0
:::
Args:
diff --git a/python/private/pypi/extension.bzl b/python/private/pypi/extension.bzl
index 62d2c8d..02c5ad0 100644
--- a/python/private/pypi/extension.bzl
+++ b/python/private/pypi/extension.bzl
@@ -845,7 +845,7 @@
hubs can be created, and each program can use its respective hub's targets.
Targets from different hubs should not be used together.
-:::{versionchanged} VERSION_NEXT_FEATURE
+:::{versionchanged} 2.2.0
Using the hub name `"pypi"` is deprecated and is changed to
`{module_name}_pypi` depending on the
{envvar}`RULES_PYTHON_PYPI_HUB_RESERVED` environment variable.
diff --git a/python/uv/private/lock.bzl b/python/uv/private/lock.bzl
index 8caf0ed..695591e 100644
--- a/python/uv/private/lock.bzl
+++ b/python/uv/private/lock.bzl
@@ -387,7 +387,7 @@
The lock rule that does the locking in a build action and also prepares information for a `bazel
run` executable rule.
-:::{versionadded} VERSION_NEXT_FEATURE
+:::{versionadded} 2.2.0
:::
""",
attrs = _common_attrs | {