This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 7360c8bbb8 Fix case when release manager does not accept version
change (#40636)
7360c8bbb8 is described below
commit 7360c8bbb8854d9eec462703f774d001bb04e9ba
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sun Jul 7 16:11:35 2024 +0200
Fix case when release manager does not accept version change (#40636)
When release manager does not accept version change, they can select
a new "type" of change to override one coming from the individual
change assesment. The previous version applied the change-selection
first and then further bump was based on that original update which
lead to the case that when something was classified as feature
first, and bugfix later had both - minor and patchlevel versions
upgraded.
This change preserves the original content of provider yaml and
in case of selecting "no" by the release manager, the original
yaml content is used to make a subsequent version bump. We need
to restore the original content and clear package metadata
cache in order to restore the new version.
---
.../prepare_providers/provider_documentation.py | 34 +++++++++++++++-------
dev/breeze/src/airflow_breeze/utils/packages.py | 5 ++++
2 files changed, 29 insertions(+), 10 deletions(-)
diff --git
a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
index 50ac53049d..88f932a695 100644
--- a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
+++ b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
@@ -41,6 +41,7 @@ from airflow_breeze.utils.console import get_console
from airflow_breeze.utils.packages import (
HTTPS_REMOTE,
ProviderPackageDetails,
+ clear_cache_for_provider_metadata,
get_provider_details,
get_provider_jinja_context,
get_source_package_path,
@@ -461,12 +462,12 @@ def _mark_latest_changes_as_documentation_only(
def _update_version_in_provider_yaml(
provider_package_id: str,
type_of_change: TypeOfChange,
-) -> tuple[bool, bool]:
+) -> tuple[bool, bool, str]:
"""
Updates provider version based on the type of change selected by the user
:param type_of_change: type of change selected
:param provider_package_id: provider package
- :return: tuple of two bools: (with_breaking_change,
maybe_with_new_features)
+ :return: tuple of two bools: (with_breaking_change,
maybe_with_new_features, original_text)
"""
provider_details = get_provider_details(provider_package_id)
version = provider_details.versions[0]
@@ -484,11 +485,13 @@ def _update_version_in_provider_yaml(
elif type_of_change == TypeOfChange.BUGFIX:
v = v.bump_patch()
provider_yaml_path = get_source_package_path(provider_package_id) /
"provider.yaml"
- original_text = provider_yaml_path.read_text()
- new_text = re.sub(r"^versions:", f"versions:\n - {v}", original_text, 1,
re.MULTILINE)
- provider_yaml_path.write_text(new_text)
+ original_provider_yaml_content = provider_yaml_path.read_text()
+ new_provider_yaml_content = re.sub(
+ r"^versions:", f"versions:\n - {v}", original_provider_yaml_content,
1, re.MULTILINE
+ )
+ provider_yaml_path.write_text(new_provider_yaml_content)
get_console().print(f"[special]Bumped version to {v}\n")
- return with_breaking_changes, maybe_with_new_features
+ return with_breaking_changes, maybe_with_new_features,
original_provider_yaml_content
def _update_source_date_epoch_in_provider_yaml(
@@ -700,6 +703,7 @@ def update_release_notes(
)
with_breaking_changes = False
maybe_with_new_features = False
+ original_provider_yaml_content: str | None = None
if not reapply_templates_only:
if proceed:
if non_interactive:
@@ -764,8 +768,10 @@ def update_release_notes(
)
get_console().print()
if type_of_change in [TypeOfChange.BUGFIX, TypeOfChange.FEATURE,
TypeOfChange.BREAKING_CHANGE]:
- with_breaking_changes, maybe_with_new_features =
_update_version_in_provider_yaml(
- provider_package_id=provider_package_id,
type_of_change=type_of_change
+ with_breaking_changes, maybe_with_new_features,
original_provider_yaml_content = (
+ _update_version_in_provider_yaml(
+ provider_package_id=provider_package_id,
type_of_change=type_of_change
+ )
)
_update_source_date_epoch_in_provider_yaml(provider_package_id)
proceed, list_of_list_of_changes, changes_as_table =
_get_all_changes_for_package(
@@ -788,6 +794,13 @@ def update_release_notes(
answer = Answer.YES
if answer == Answer.NO:
+ if original_provider_yaml_content is not None:
+ # Restore original content of the provider.yaml
+ (get_source_package_path(provider_package_id) /
"provider.yaml").write_text(
+ original_provider_yaml_content
+ )
+ clear_cache_for_provider_metadata(provider_package_id)
+
type_of_change =
_ask_the_user_for_the_type_of_changes(non_interactive=False)
if type_of_change == TypeOfChange.SKIP:
raise PrepareReleaseDocsUserSkippedException()
@@ -799,8 +812,9 @@ def update_release_notes(
if type_of_change == TypeOfChange.DOCUMENTATION:
_mark_latest_changes_as_documentation_only(provider_package_id,
list_of_list_of_changes)
elif type_of_change in [TypeOfChange.BUGFIX, TypeOfChange.FEATURE,
TypeOfChange.BREAKING_CHANGE]:
- with_breaking_changes, maybe_with_new_features =
_update_version_in_provider_yaml(
- provider_package_id=provider_package_id,
type_of_change=type_of_change
+ with_breaking_changes, maybe_with_new_features, _ =
_update_version_in_provider_yaml(
+ provider_package_id=provider_package_id,
+ type_of_change=type_of_change,
)
_update_source_date_epoch_in_provider_yaml(provider_package_id)
proceed, list_of_list_of_changes, changes_as_table =
_get_all_changes_for_package(
diff --git a/dev/breeze/src/airflow_breeze/utils/packages.py
b/dev/breeze/src/airflow_breeze/utils/packages.py
index b11457ed8a..6c4a824140 100644
--- a/dev/breeze/src/airflow_breeze/utils/packages.py
+++ b/dev/breeze/src/airflow_breeze/utils/packages.py
@@ -147,6 +147,11 @@ def
refresh_provider_metadata_with_provider_id(provider_id: str):
refresh_provider_metadata_from_yaml_file(provider_yaml_path)
+def clear_cache_for_provider_metadata(provider_id: str):
+ get_provider_packages_metadata.cache_clear()
+ refresh_provider_metadata_with_provider_id(provider_id)
+
+
@lru_cache(maxsize=1)
def get_provider_packages_metadata() -> dict[str, dict[str, Any]]:
"""