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 19961713421 Advanced auto classification for provider documentation
(#52902)
19961713421 is described below
commit 19961713421885c8306d3a51a4c3eaf5f27f6cb7
Author: Amogh Desai <[email protected]>
AuthorDate: Sun Jul 6 03:43:11 2025 +0530
Advanced auto classification for provider documentation (#52902)
---
.../prepare_providers/provider_documentation.py | 11 +++---
dev/breeze/tests/test_provider_documentation.py | 39 ++++++++++++++++++----
2 files changed, 39 insertions(+), 11 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 cef1cc9f764..e3e86d7c15e 100644
--- a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
+++ b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
@@ -195,7 +195,10 @@ TYPE_OF_CHANGE_DESCRIPTION = {
}
-def classification_result(changed_files):
+def classification_result(provider_id, changed_files):
+ provider_path = f"providers/{provider_id}/"
+ changed_files = list(filter(lambda f: f.startswith(provider_path),
changed_files))
+
if not changed_files:
return "other"
@@ -224,7 +227,7 @@ def classification_result(changed_files):
return "other"
-def classify_provider_pr_files(commit_hash: str) -> str:
+def classify_provider_pr_files(provider_id: str, commit_hash: str) -> str:
"""
Classify a provider commit based on changed files.
@@ -245,7 +248,7 @@ def classify_provider_pr_files(commit_hash: str) -> str:
# safe to return other here
return "other"
- return classification_result(changed_files)
+ return classification_result(provider_id, changed_files)
def _get_git_log_command(
@@ -837,7 +840,7 @@ def update_release_notes(
)
change = list_of_list_of_changes[0][table_iter]
- classification = classify_provider_pr_files(change.full_hash)
+ classification = classify_provider_pr_files(provider_id,
change.full_hash)
if classification == "documentation":
get_console().print(
f"[green]Automatically classifying change as
DOCUMENTATION since it contains only doc changes:[/]\n"
diff --git a/dev/breeze/tests/test_provider_documentation.py
b/dev/breeze/tests/test_provider_documentation.py
index f328edd44aa..8392a0aba14 100644
--- a/dev/breeze/tests/test_provider_documentation.py
+++ b/dev/breeze/tests/test_provider_documentation.py
@@ -395,16 +395,20 @@ def test_get_most_impactful_change(changes, expected):
@pytest.mark.parametrize(
- "changed_files, expected",
+ "provider_id, changed_files, expected",
[
- pytest.param(["providers/slack/docs/slack.rst"], "documentation",
id="only_docs"),
- pytest.param(["providers/slack/tests/test_slack.py"],
"test_or_example_only", id="only_tests"),
+ pytest.param("slack", ["providers/slack/docs/slack.rst"],
"documentation", id="only_docs"),
pytest.param(
+ "slack", ["providers/slack/tests/test_slack.py"],
"test_or_example_only", id="only_tests"
+ ),
+ pytest.param(
+ "slack",
["providers/slack/src/airflow/providers/slack/example_dags/example_notify.py"],
"test_or_example_only",
id="only_example_dags",
),
pytest.param(
+ "slack",
[
"providers/slack/tests/test_slack.py",
"providers/slack/src/airflow/providers/slack/example_dags/example_notify.py",
@@ -413,6 +417,7 @@ def test_get_most_impactful_change(changes, expected):
id="tests_and_example_dags",
),
pytest.param(
+ "slack",
[
"providers/slack/tests/test_slack.py",
"providers/slack/docs/slack.rst",
@@ -421,6 +426,7 @@ def test_get_most_impactful_change(changes, expected):
id="docs_and_tests",
),
pytest.param(
+ "slack",
[
"providers/slack/src/airflow/providers/slack/hooks/slack.py",
"providers/slack/tests/test_slack.py",
@@ -429,6 +435,7 @@ def test_get_most_impactful_change(changes, expected):
id="real_code_and_tests",
),
pytest.param(
+ "slack",
[
"providers/slack/src/airflow/providers/slack/hooks/slack.py",
"providers/slack/tests/test_slack.py",
@@ -437,10 +444,28 @@ def test_get_most_impactful_change(changes, expected):
"other",
id="docs_and_real_code",
),
- pytest.param(["airflow/utils/db.py"], "other", id="non_provider_file"),
- pytest.param([], "other", id="empty_commit"),
+ pytest.param(
+ "google",
+ [
+ "providers/google/tests/some_test.py",
+ "providers/amazon/tests/test_something.py",
+ ],
+ "test_or_example_only",
+ id="tests_in_multiple_providers",
+ ),
+ pytest.param(
+ "amazon",
+ [
+ "providers/google/tests/some_test.py",
+ "providers/amazon/tests/test_something.py",
+ ],
+ "test_or_example_only",
+ id="tests_in_multiple_providers",
+ ),
+ pytest.param("slack", ["airflow/utils/db.py"], "other",
id="non_provider_file"),
+ pytest.param("slack", [], "other", id="empty_commit"),
],
)
-def test_classify_provider_pr_files_logic(changed_files, expected):
- result = classification_result(changed_files)
+def test_classify_provider_pr_files_logic(provider_id, changed_files,
expected):
+ result = classification_result(provider_id, changed_files)
assert result == expected