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]]:
     """

Reply via email to