You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2024/04/01 13:56:50 UTC
(airflow) branch main updated: Introducing --latest for generate-issue-content-helm-chart command (#38648)
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 1cac59ed6f Introducing --latest for generate-issue-content-helm-chart command (#38648)
1cac59ed6f is described below
commit 1cac59ed6fd008b08a0ad5576b0bd3edc57f2509
Author: Amogh Desai <am...@gmail.com>
AuthorDate: Mon Apr 1 19:26:43 2024 +0530
Introducing --latest for generate-issue-content-helm-chart command (#38648)
* Introducing --latest for generate-issue-content-helm-chart command
* testing only
* fetching tags
* review comments from potiuk
---
.github/workflows/helm-tests.yml | 6 ++-
...anagement_generate-issue-content-helm-chart.svg | 40 ++++++++++----------
...anagement_generate-issue-content-helm-chart.txt | 2 +-
.../commands/release_management_commands.py | 44 ++++++++++++++--------
.../commands/release_management_commands_config.py | 1 +
.../src/airflow_breeze/utils/version_utils.py | 37 ++++++++++++++++++
6 files changed, 92 insertions(+), 38 deletions(-)
diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml
index 96597840e7..0c18472648 100644
--- a/.github/workflows/helm-tests.yml
+++ b/.github/workflows/helm-tests.yml
@@ -121,11 +121,13 @@ jobs:
run: ./dev/sign.sh dist/airflow-*.tgz dist/airflow-*-source.tar.gz
env:
SIGN_WITH: dev@airflow.apache.org
+ - name: "Fetch Git Tags"
+ run: git fetch --tags
- name: "Test helm chart issue generation automatically"
# Adding same tags for now, will address in a follow-up
run: >
- breeze release-management generate-issue-content-helm-chart
- --previous-release helm-chart/0.0.0dev0 --current-release helm-chart/0.0.0dev0
+ breeze release-management generate-issue-content-helm-chart --limit-pr-count 10
+ --latest --verbose
- name: "Upload Helm artifacts"
uses: actions/upload-artifact@v4
with:
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
index 9cb4c5c6db..83d3bf3d73 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 538.0" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -38,14 +38,12 @@
.breeze-release-management-generate-issue-content-helm-chart-r4 { fill: #68a0b3;font-weight: bold }
.breeze-release-management-generate-issue-content-helm-chart-r5 { fill: #868887 }
.breeze-release-management-generate-issue-content-helm-chart-r6 { fill: #8d7b39 }
-.breeze-release-management-generate-issue-content-helm-chart-r7 { fill: #cc555a }
-.breeze-release-management-generate-issue-content-helm-chart-r8 { fill: #8a4346 }
-.breeze-release-management-generate-issue-content-helm-chart-r9 { fill: #98a84b;font-weight: bold }
+.breeze-release-management-generate-issue-content-helm-chart-r7 { fill: #98a84b;font-weight: bold }
</style>
<defs>
<clipPath id="breeze-release-management-generate-issue-content-helm-chart-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
+ <rect x="0" y="0" width="1463.0" height="487.0" />
</clipPath>
<clipPath id="breeze-release-management-generate-issue-content-helm-chart-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -101,9 +99,12 @@
<clipPath id="breeze-release-management-generate-issue-content-helm-chart-line-17">
<rect x="0" y="416.3" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-release-management-generate-issue-content-helm-chart-line-18">
+ <rect x="0" y="440.7" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="511.6" rx="8"/><text class="breeze-release-management-generate-issue-content-helm-chart-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management generate-issue-content-helm-chart</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="536" rx="8"/><text class="breeze-release-management-generate-issue-content-helm-chart-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: release-management generate-issue-content-helm-chart</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -119,19 +120,20 @@
</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="12.2" y="93.2" textLength="719.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-3)">Generates content for issue to test the helm chart release.</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-conte [...]
</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-4)">
</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-5)">╭─</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="24.4" y="142" textLength="268.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-5)"> Generate issue flags </text><text class="breeze-release-managem [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="190.8" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">variable set. Can be generated with:    [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="329.4" y="215.2" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">https://github.com/settings/tokens/new?description=Read%20sssues&scopes=rep [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="329.4" y="239.6" textLength="1110.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">(TEXT)            & [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r7" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">*</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r7" x="24.4" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">*</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="61" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-gener [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">╭─</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="24.4" y="386" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)"> Common options </text><text class="breeze-release-management-gener [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-gener [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-6)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="190.8" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-7)">set. Can be generated with:     &# [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="292.8" y="215.2" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-8)">https://github.com/settings/tokens/new?description=Read%20sssues&scopes=rep [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r6" x="292.8" y="239.6" textLength="1146.8" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-9)">(TEXT)            & [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-10)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-11)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-12)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-13)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-14)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="386" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate- [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)">╭─</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="24.4" y="410.4" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-16)"> Common options </text><text class="breeze-release-management-g [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-17)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">│</text><text class="breeze-release-management-generate-issue-content-helm-chart-r4" x="24.4" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-18)">-</text><text class="breeze-release-management-generate-issue-content-helm-chart [...]
+</text><text class="breeze-release-management-generate-issue-content-helm-chart-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-helm-chart-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-helm-chart-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-gener [...]
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
index e9b6a70e80..20d87ba8df 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-helm-chart.txt
@@ -1 +1 @@
-66451b1e0d4897113e3763e04d73b65e
+3e0e080fa8422853ed7df3967725b35f
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index b714c01103..11e062252e 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -155,6 +155,7 @@ from airflow_breeze.utils.run_utils import (
run_command,
)
from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
+from airflow_breeze.utils.version_utils import get_latest_airflow_version, get_latest_helm_chart_version
from airflow_breeze.utils.versions import is_pre_release
from airflow_breeze.utils.virtualenv_utils import create_pip_command, create_venv
@@ -2290,13 +2291,11 @@ def print_issue_content(
@click.option(
"--previous-release",
type=str,
- required=True,
help="commit reference (for example hash or tag) of the previous release.",
)
@click.option(
"--current-release",
type=str,
- required=True,
help="commit reference (for example hash or tag) of the current release.",
)
@click.option("--excluded-pr-list", type=str, help="Coma-separated list of PRs to exclude from the issue.")
@@ -2306,6 +2305,11 @@ def print_issue_content(
default=None,
help="Limit PR count processes (useful for testing small subset of PRs).",
)
+@click.option(
+ "--latest",
+ is_flag=True,
+ help="Run the command against latest released version of airflow helm charts",
+)
@option_verbose
def generate_issue_content_helm_chart(
github_token: str,
@@ -2313,6 +2317,7 @@ def generate_issue_content_helm_chart(
current_release: str,
excluded_pr_list: str,
limit_pr_count: int | None,
+ latest: bool,
):
generate_issue_content(
github_token,
@@ -2321,7 +2326,7 @@ def generate_issue_content_helm_chart(
excluded_pr_list,
limit_pr_count,
is_helm_chart=True,
- latest=False,
+ latest=latest,
)
@@ -3264,18 +3269,25 @@ def generate_issue_content(
current = current_release
if latest:
- import requests
-
- response = requests.get("https://pypi.org/pypi/apache-airflow/json")
- response.raise_for_status()
- latest_released_version = response.json()["info"]["version"]
- previous = str(latest_released_version)
- current = os.getenv("VERSION", "HEAD")
- if current == "HEAD":
- get_console().print(
- "\n[warning]Environment variable VERSION not set, setting current release "
- "version as 'HEAD'\n"
- )
+ if is_helm_chart:
+ latest_helm_version = get_latest_helm_chart_version()
+ get_console().print(f"\n[info] Latest stable version of helm chart is {latest_helm_version}\n")
+ previous = f"helm-chart/{latest_helm_version}"
+ current = os.getenv("VERSION", "HEAD")
+ if current == "HEAD":
+ get_console().print(
+ "\n[warning]Environment variable VERSION not set, setting current release "
+ "version as 'HEAD' for helm chart release\n"
+ )
+ else:
+ latest_airflow_version = get_latest_airflow_version()
+ previous = str(latest_airflow_version)
+ current = os.getenv("VERSION", "HEAD")
+ if current == "HEAD":
+ get_console().print(
+ "\n[warning]Environment variable VERSION not set, setting current release "
+ "version as 'HEAD'\n"
+ )
changes = get_changes(verbose, previous, current, is_helm_chart)
change_prs = [change.pr for change in changes]
@@ -3342,4 +3354,4 @@ def generate_issue_content(
users[pr_number].add(linked_issue.user.login)
progress.advance(task)
- print_issue_content(current_release, pull_requests, linked_issues, users, is_helm_chart)
+ print_issue_content(current, pull_requests, linked_issues, users, is_helm_chart)
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
index 97df6a7740..4013476737 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
@@ -113,6 +113,7 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
"--current-release",
"--excluded-pr-list",
"--limit-pr-count",
+ "--latest",
],
}
],
diff --git a/dev/breeze/src/airflow_breeze/utils/version_utils.py b/dev/breeze/src/airflow_breeze/utils/version_utils.py
new file mode 100644
index 0000000000..7b41fa46bd
--- /dev/null
+++ b/dev/breeze/src/airflow_breeze/utils/version_utils.py
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+
+def get_latest_helm_chart_version():
+ import requests
+
+ response = requests.get("https://airflow.apache.org/_gen/packages-metadata.json")
+ data = response.json()
+ for package in data:
+ if package["package-name"] == "helm-chart":
+ stable_version = package["stable-version"]
+ return stable_version
+
+
+def get_latest_airflow_version():
+ import requests
+
+ response = requests.get("https://pypi.org/pypi/apache-airflow/json")
+ response.raise_for_status()
+ latest_released_version = response.json()["info"]["version"]
+ return latest_released_version