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 5d5592b2e29 Fix unauthenticated GitHub API calls in `breeze ci 
upgrade` (#63974)
5d5592b2e29 is described below

commit 5d5592b2e29c603ecf9a5cf9961b718982034462
Author: Jarek Potiuk <[email protected]>
AuthorDate: Fri Mar 20 11:05:09 2026 +0100

    Fix unauthenticated GitHub API calls in `breeze ci upgrade` (#63974)
    
    Two GitHub API calls in upgrade_important_versions.py (for fetching
    latest releases of mprocs and openapi-generator) were not using the
    GitHub token, hitting the 60 req/hr unauthenticated rate limit.
    
    Also adds --github-token option to `breeze ci upgrade` so the token
    can be passed explicitly instead of relying on `gh auth token`.
---
 dev/breeze/doc/images/output_ci_upgrade.svg        | 54 ++++++++++++----------
 dev/breeze/doc/images/output_ci_upgrade.txt        |  2 +-
 .../src/airflow_breeze/commands/ci_commands.py     | 27 ++++++-----
 .../airflow_breeze/commands/ci_commands_config.py  |  1 +
 scripts/ci/prek/upgrade_important_versions.py      | 12 ++++-
 5 files changed, 58 insertions(+), 38 deletions(-)

diff --git a/dev/breeze/doc/images/output_ci_upgrade.svg 
b/dev/breeze/doc/images/output_ci_upgrade.svg
index af29b7e1243..917c84b3559 100644
--- a/dev/breeze/doc/images/output_ci_upgrade.svg
+++ b/dev/breeze/doc/images/output_ci_upgrade.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 977.1999999999999" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 1001.5999999999999" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-ci-upgrade-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="926.1999999999999" />
+      <rect x="0" y="0" width="1463.0" height="950.5999999999999" />
     </clipPath>
     <clipPath id="breeze-ci-upgrade-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -156,9 +156,12 @@
 <clipPath id="breeze-ci-upgrade-line-36">
     <rect x="0" y="879.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-ci-upgrade-line-37">
+    <rect x="0" y="904.3" 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="975.2" rx="8"/><text 
class="breeze-ci-upgrade-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;ci&#160;upgrade</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="999.6" rx="8"/><text 
class="breeze-ci-upgrade-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;ci&#160;upgrade</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -184,28 +187,29 @@
 </text><text class="breeze-ci-upgrade-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-13)">│</text><text 
class="breeze-ci-upgrade-r5" x="488" y="337.2" textLength="195.2" 
clip-path="url(#breeze-ci-upgrade-line-13)">../airflow-site]</text><text 
class="breeze-ci-upgrade-r6" x="695.4" y="337.2" textLength="134.2" 
clip-path="url(#breeze-ci-upgrade-line-13)">(DIRECTORY)</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="337.2" textLength="12.2" 
clip-path="url( [...]
 </text><text class="breeze-ci-upgrade-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-14)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="361.6" textLength="439.2" 
clip-path="url(#breeze-ci-upgrade-line-14)">--force-k8s-schema-sync&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-ci-upgrade-r1" x="488" y="361.6" textLength="951.6" 
clip-path="url(#breeze-ci-upgrade-line-14)">Force&#160;syncing&#160 [...]
 </text><text class="breeze-ci-upgrade-r5" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-15)">│</text><text 
class="breeze-ci-upgrade-r1" x="488" y="386" textLength="951.6" 
clip-path="url(#breeze-ci-upgrade-line-15)">published&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="410.4" textLength="1464" 
clip-path="url(#breeze-ci-upgrade-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-upgrade-r1" x="1464" y="410.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-16)">
-</text><text class="breeze-ci-upgrade-r5" x="0" y="434.8" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-17)">╭─</text><text 
class="breeze-ci-upgrade-r5" x="24.4" y="434.8" textLength="183" 
clip-path="url(#breeze-ci-upgrade-line-17)">&#160;Upgrade&#160;steps&#160;</text><text
 class="breeze-ci-upgrade-r5" x="207.4" y="434.8" textLength="1232.2" 
clip-path="url(#breeze-ci-upgrade-line-17)">────────────────────────────────────────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-18)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="459.2" textLength="146.4" 
clip-path="url(#breeze-ci-upgrade-line-18)">--autoupdate</text><text 
class="breeze-ci-upgrade-r1" x="170.8" y="459.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-18)">/</text><text 
class="breeze-ci-upgrade-r4" x="183" y="459.2" textLength="183" 
clip-path="url(#breeze-ci-upgrade [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-19)">│</text><text 
class="breeze-ci-upgrade-r5" x="744.2" y="483.6" textLength="134.2" 
clip-path="url(#breeze-ci-upgrade-line-19)">autoupdate]</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="483.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-19)">│</text><text 
class="breeze-ci-upgrade-r1" x="1464" y="483.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgr [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="508" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-20)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="508" textLength="170.8" 
clip-path="url(#breeze-ci-upgrade-line-20)">--pin-versions</text><text 
class="breeze-ci-upgrade-r1" x="195.2" y="508" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-20)">/</text><text 
class="breeze-ci-upgrade-r4" x="207.4" y="508" textLength="207.4" 
clip-path="url(#breeze-ci-upgrade-l [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="532.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-21)">│</text><text 
class="breeze-ci-upgrade-r5" x="744.2" y="532.4" textLength="158.6" 
clip-path="url(#breeze-ci-upgrade-line-21)">pin-versions]</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="532.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-21)">│</text><text 
class="breeze-ci-upgrade-r1" x="1464" y="532.4" textLength="12.2" 
clip-path="url(#breeze-ci-up [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-22)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="556.8" textLength="329.4" 
clip-path="url(#breeze-ci-upgrade-line-22)">--update-chart-dependencies</text><text
 class="breeze-ci-upgrade-r1" x="353.8" y="556.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-22)">/</text><text 
class="breeze-ci-upgrade-r4" x="366" y="556.8" textLength="353.8" 
clip-path="url(# [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-23)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="581.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-23)">s</text><text 
class="breeze-ci-upgrade-r1" x="744.2" y="581.2" textLength="158.6" 
clip-path="url(#breeze-ci-upgrade-line-23)">dependencies&#160;</text><text 
class="breeze-ci-upgrade-r5" x="902.8" y="581.2" textLength="439.2" 
clip-path="url(#breeze- [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-24)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="605.6" textLength="341.6" 
clip-path="url(#breeze-ci-upgrade-line-24)">--upgrade-important-versions</text><text
 class="breeze-ci-upgrade-r1" x="366" y="605.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-24)">/</text><text 
class="breeze-ci-upgrade-r4" x="378.2" y="605.6" textLength="341.6" 
clip-path="url( [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-25)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="630" textLength="36.6" 
clip-path="url(#breeze-ci-upgrade-line-25)">ons</text><text 
class="breeze-ci-upgrade-r1" x="744.2" y="630" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-25)">versions&#160;</text><text 
class="breeze-ci-upgrade-r5" x="854" y="630" textLength="451.4" 
clip-path="url(#breeze-ci-upgrade-l [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="654.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-26)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="654.4" textLength="195.2" 
clip-path="url(#breeze-ci-upgrade-line-26)">--update-uv-lock</text><text 
class="breeze-ci-upgrade-r1" x="219.6" y="654.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-26)">/</text><text 
class="breeze-ci-upgrade-r4" x="231.8" y="654.4" textLength="231.8" 
clip-path="url(#breeze-ci [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="678.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-27)">│</text><text 
class="breeze-ci-upgrade-r1" x="744.2" y="678.8" textLength="427" 
clip-path="url(#breeze-ci-upgrade-line-27)">resolutions&#160;inside&#160;Breeze&#160;CI&#160;image&#160;</text><text
 class="breeze-ci-upgrade-r5" x="1171.2" y="678.8" textLength="122" 
clip-path="url(#breeze-ci-upgrade-line-27)">[default:&#160;</text><text 
class="breeze-ci-upgrade-r5" x="1451 [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-28)">│</text><text 
class="breeze-ci-upgrade-r5" x="744.2" y="703.2" textLength="183" 
clip-path="url(#breeze-ci-upgrade-line-28)">update-uv-lock]</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="703.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-28)">│</text><text 
class="breeze-ci-upgrade-r1" x="1464" y="703.2" textLength="12.2" 
clip-path="url(#breeze-ci-up [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="727.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-29)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="727.6" textLength="207.4" 
clip-path="url(#breeze-ci-upgrade-line-29)">--k8s-schema-sync</text><text 
class="breeze-ci-upgrade-r1" x="231.8" y="727.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-29)">/</text><text 
class="breeze-ci-upgrade-r4" x="244" y="727.6" textLength="244" 
clip-path="url(#breeze-ci-up [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-30)">│</text><text 
class="breeze-ci-upgrade-r5" x="744.2" y="752" textLength="195.2" 
clip-path="url(#breeze-ci-upgrade-line-30)">k8s-schema-sync]</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="752" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-30)">│</text><text 
class="breeze-ci-upgrade-r1" x="1464" y="752" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="776.4" textLength="1464" 
clip-path="url(#breeze-ci-upgrade-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-upgrade-r1" x="1464" y="776.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-31)">
-</text><text class="breeze-ci-upgrade-r5" x="0" y="800.8" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-32)">╭─</text><text 
class="breeze-ci-upgrade-r5" x="24.4" y="800.8" textLength="195.2" 
clip-path="url(#breeze-ci-upgrade-line-32)">&#160;Common&#160;options&#160;</text><text
 class="breeze-ci-upgrade-r5" x="219.6" y="800.8" textLength="1220" 
clip-path="url(#breeze-ci-upgrade-line-32)">───────────────────────────────────────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="825.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-33)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="825.2" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-33)">--answer&#160;</text><text 
class="breeze-ci-upgrade-r7" x="158.6" y="825.2" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-33)">-a</text><text 
class="breeze-ci-upgrade-r1" x="207.4" y="825.2" textLength="329.4" 
clip-path="url(#breeze-ci- [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="849.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-34)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="849.6" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-34)">--verbose</text><text 
class="breeze-ci-upgrade-r7" x="158.6" y="849.6" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-34)">-v</text><text 
class="breeze-ci-upgrade-r1" x="207.4" y="849.6" textLength="585.6" 
clip-path="url(#breeze-ci-upgra [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="874" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-35)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="874" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-35)">--dry-run</text><text 
class="breeze-ci-upgrade-r7" x="158.6" y="874" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-35)">-D</text><text 
class="breeze-ci-upgrade-r1" x="207.4" y="874" textLength="719.8" 
clip-path="url(#breeze-ci-upgrade-line- [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="898.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-36)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="898.4" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-36)">--help&#160;&#160;&#160;</text><text
 class="breeze-ci-upgrade-r7" x="158.6" y="898.4" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-36)">-h</text><text 
class="breeze-ci-upgrade-r1" x="207.4" y="898.4" textLength="329.4" 
clip-path="url(# [...]
-</text><text class="breeze-ci-upgrade-r5" x="0" y="922.8" textLength="1464" 
clip-path="url(#breeze-ci-upgrade-line-37)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-upgrade-r1" x="1464" y="922.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-37)">
+</text><text class="breeze-ci-upgrade-r5" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-16)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="410.4" textLength="439.2" 
clip-path="url(#breeze-ci-upgrade-line-16)">--github-token&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-ci-upgrade-r1" x="488" y="410.4" textLength="512.4" 
clip-path="url(#breeze [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="434.8" textLength="1464" 
clip-path="url(#breeze-ci-upgrade-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-upgrade-r1" x="1464" y="434.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-17)">
+</text><text class="breeze-ci-upgrade-r5" x="0" y="459.2" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-18)">╭─</text><text 
class="breeze-ci-upgrade-r5" x="24.4" y="459.2" textLength="183" 
clip-path="url(#breeze-ci-upgrade-line-18)">&#160;Upgrade&#160;steps&#160;</text><text
 class="breeze-ci-upgrade-r5" x="207.4" y="459.2" textLength="1232.2" 
clip-path="url(#breeze-ci-upgrade-line-18)">────────────────────────────────────────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-19)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="483.6" textLength="146.4" 
clip-path="url(#breeze-ci-upgrade-line-19)">--autoupdate</text><text 
class="breeze-ci-upgrade-r1" x="170.8" y="483.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-19)">/</text><text 
class="breeze-ci-upgrade-r4" x="183" y="483.6" textLength="183" 
clip-path="url(#breeze-ci-upgrade [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="508" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-20)">│</text><text 
class="breeze-ci-upgrade-r5" x="744.2" y="508" textLength="134.2" 
clip-path="url(#breeze-ci-upgrade-line-20)">autoupdate]</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="508" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-20)">│</text><text 
class="breeze-ci-upgrade-r1" x="1464" y="508" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-20)">
+</text><text class="breeze-ci-upgrade-r5" x="0" y="532.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-21)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="532.4" textLength="170.8" 
clip-path="url(#breeze-ci-upgrade-line-21)">--pin-versions</text><text 
class="breeze-ci-upgrade-r1" x="195.2" y="532.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-21)">/</text><text 
class="breeze-ci-upgrade-r4" x="207.4" y="532.4" textLength="207.4" 
clip-path="url(#breeze-ci-u [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-22)">│</text><text 
class="breeze-ci-upgrade-r5" x="744.2" y="556.8" textLength="158.6" 
clip-path="url(#breeze-ci-upgrade-line-22)">pin-versions]</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="556.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-22)">│</text><text 
class="breeze-ci-upgrade-r1" x="1464" y="556.8" textLength="12.2" 
clip-path="url(#breeze-ci-up [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-23)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="581.2" textLength="329.4" 
clip-path="url(#breeze-ci-upgrade-line-23)">--update-chart-dependencies</text><text
 class="breeze-ci-upgrade-r1" x="353.8" y="581.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-23)">/</text><text 
class="breeze-ci-upgrade-r4" x="366" y="581.2" textLength="353.8" 
clip-path="url(# [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-24)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="605.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-24)">s</text><text 
class="breeze-ci-upgrade-r1" x="744.2" y="605.6" textLength="158.6" 
clip-path="url(#breeze-ci-upgrade-line-24)">dependencies&#160;</text><text 
class="breeze-ci-upgrade-r5" x="902.8" y="605.6" textLength="439.2" 
clip-path="url(#breeze- [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-25)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="630" textLength="341.6" 
clip-path="url(#breeze-ci-upgrade-line-25)">--upgrade-important-versions</text><text
 class="breeze-ci-upgrade-r1" x="366" y="630" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-25)">/</text><text 
class="breeze-ci-upgrade-r4" x="378.2" y="630" textLength="341.6" 
clip-path="url(#breeze- [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="654.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-26)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="654.4" textLength="36.6" 
clip-path="url(#breeze-ci-upgrade-line-26)">ons</text><text 
class="breeze-ci-upgrade-r1" x="744.2" y="654.4" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-26)">versions&#160;</text><text 
class="breeze-ci-upgrade-r5" x="854" y="654.4" textLength="451.4" 
clip-path="url(#breeze-ci-u [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="678.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-27)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="678.8" textLength="195.2" 
clip-path="url(#breeze-ci-upgrade-line-27)">--update-uv-lock</text><text 
class="breeze-ci-upgrade-r1" x="219.6" y="678.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-27)">/</text><text 
class="breeze-ci-upgrade-r4" x="231.8" y="678.8" textLength="231.8" 
clip-path="url(#breeze-ci [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-28)">│</text><text 
class="breeze-ci-upgrade-r1" x="744.2" y="703.2" textLength="427" 
clip-path="url(#breeze-ci-upgrade-line-28)">resolutions&#160;inside&#160;Breeze&#160;CI&#160;image&#160;</text><text
 class="breeze-ci-upgrade-r5" x="1171.2" y="703.2" textLength="122" 
clip-path="url(#breeze-ci-upgrade-line-28)">[default:&#160;</text><text 
class="breeze-ci-upgrade-r5" x="1451 [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="727.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-29)">│</text><text 
class="breeze-ci-upgrade-r5" x="744.2" y="727.6" textLength="183" 
clip-path="url(#breeze-ci-upgrade-line-29)">update-uv-lock]</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="727.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-29)">│</text><text 
class="breeze-ci-upgrade-r1" x="1464" y="727.6" textLength="12.2" 
clip-path="url(#breeze-ci-up [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-30)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="752" textLength="207.4" 
clip-path="url(#breeze-ci-upgrade-line-30)">--k8s-schema-sync</text><text 
class="breeze-ci-upgrade-r1" x="231.8" y="752" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-30)">/</text><text 
class="breeze-ci-upgrade-r4" x="244" y="752" textLength="244" 
clip-path="url(#breeze-ci-upgrade-li [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="776.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-31)">│</text><text 
class="breeze-ci-upgrade-r5" x="744.2" y="776.4" textLength="195.2" 
clip-path="url(#breeze-ci-upgrade-line-31)">k8s-schema-sync]</text><text 
class="breeze-ci-upgrade-r5" x="1451.8" y="776.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-31)">│</text><text 
class="breeze-ci-upgrade-r1" x="1464" y="776.4" textLength="12.2" 
clip-path="url(#breeze-ci [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="800.8" textLength="1464" 
clip-path="url(#breeze-ci-upgrade-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-upgrade-r1" x="1464" y="800.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-32)">
+</text><text class="breeze-ci-upgrade-r5" x="0" y="825.2" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-33)">╭─</text><text 
class="breeze-ci-upgrade-r5" x="24.4" y="825.2" textLength="195.2" 
clip-path="url(#breeze-ci-upgrade-line-33)">&#160;Common&#160;options&#160;</text><text
 class="breeze-ci-upgrade-r5" x="219.6" y="825.2" textLength="1220" 
clip-path="url(#breeze-ci-upgrade-line-33)">───────────────────────────────────────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="849.6" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-34)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="849.6" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-34)">--answer&#160;</text><text 
class="breeze-ci-upgrade-r7" x="158.6" y="849.6" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-34)">-a</text><text 
class="breeze-ci-upgrade-r1" x="207.4" y="849.6" textLength="329.4" 
clip-path="url(#breeze-ci- [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="874" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-35)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="874" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-35)">--verbose</text><text 
class="breeze-ci-upgrade-r7" x="158.6" y="874" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-35)">-v</text><text 
class="breeze-ci-upgrade-r1" x="207.4" y="874" textLength="585.6" 
clip-path="url(#breeze-ci-upgrade-line- [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="898.4" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-36)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="898.4" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-36)">--dry-run</text><text 
class="breeze-ci-upgrade-r7" x="158.6" y="898.4" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-36)">-D</text><text 
class="breeze-ci-upgrade-r1" x="207.4" y="898.4" textLength="719.8" 
clip-path="url(#breeze-ci-upgra [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="922.8" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-37)">│</text><text 
class="breeze-ci-upgrade-r4" x="24.4" y="922.8" textLength="109.8" 
clip-path="url(#breeze-ci-upgrade-line-37)">--help&#160;&#160;&#160;</text><text
 class="breeze-ci-upgrade-r7" x="158.6" y="922.8" textLength="24.4" 
clip-path="url(#breeze-ci-upgrade-line-37)">-h</text><text 
class="breeze-ci-upgrade-r1" x="207.4" y="922.8" textLength="329.4" 
clip-path="url(# [...]
+</text><text class="breeze-ci-upgrade-r5" x="0" y="947.2" textLength="1464" 
clip-path="url(#breeze-ci-upgrade-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-upgrade-r1" x="1464" y="947.2" textLength="12.2" 
clip-path="url(#breeze-ci-upgrade-line-38)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_ci_upgrade.txt 
b/dev/breeze/doc/images/output_ci_upgrade.txt
index 503e0f9e686..226af6867f8 100644
--- a/dev/breeze/doc/images/output_ci_upgrade.txt
+++ b/dev/breeze/doc/images/output_ci_upgrade.txt
@@ -1 +1 @@
-11b5a671d33f354055eca66092e06228
+aad5200916061836455394f1a8fa0355
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands.py 
b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
index 18dd8a65cdd..5d5f7c63320 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
@@ -37,6 +37,7 @@ from airflow_breeze.commands.common_options import (
     option_answer,
     option_dry_run,
     option_github_repository,
+    option_github_token,
     option_verbose,
 )
 from airflow_breeze.global_constants import (
@@ -590,6 +591,7 @@ def _sync_k8s_schemas_to_airflow_site(airflow_site: Path, 
force: bool, command_e
     show_default=True,
     help="Sync K8s JSON schemas to airflow-site",
 )
+@option_github_token
 @option_answer
 @option_verbose
 @option_dry_run
@@ -605,6 +607,7 @@ def upgrade(
     upgrade_important_versions: bool,
     update_uv_lock: bool,
     k8s_schema_sync: bool,
+    github_token: str | None,
 ):
     # Validate target_branch pattern
     target_branch_pattern = re.compile(r"^(main|v\d+-\d+-test)$")
@@ -759,24 +762,26 @@ def upgrade(
 
     console_print("[info]Running upgrade of important CI environment.[/]")
 
-    # Get GitHub token from gh CLI and set it in environment copy
-    gh_token_result = run_command(
-        ["gh", "auth", "token"],
-        capture_output=True,
-        text=True,
-        check=False,
-    )
+    # Resolve GitHub token: prefer --github-token / GITHUB_TOKEN env var, fall 
back to gh CLI
+    if not github_token:
+        gh_token_result = run_command(
+            ["gh", "auth", "token"],
+            capture_output=True,
+            text=True,
+            check=False,
+        )
+        if gh_token_result.returncode == 0 and gh_token_result.stdout.strip():
+            github_token = gh_token_result.stdout.strip()
 
     # Create a copy of the environment to pass to commands
     command_env = os.environ.copy()
 
-    if gh_token_result.returncode == 0 and gh_token_result.stdout.strip():
-        github_token = gh_token_result.stdout.strip()
+    if github_token:
         command_env["GITHUB_TOKEN"] = github_token
-        console_print("[success]GitHub token retrieved from gh CLI and set in 
environment.[/]")
+        console_print("[success]GitHub token set in environment.[/]")
     else:
         console_print(
-            "[warning]Could not retrieve GitHub token from gh CLI. "
+            "[warning]Could not retrieve GitHub token from --github-token or 
gh CLI. "
             "Commands may fail if they require authentication.[/]"
         )
 
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands_config.py 
b/dev/breeze/src/airflow_breeze/commands/ci_commands_config.py
index aeb6ad42563..6d883b3eafa 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands_config.py
@@ -77,6 +77,7 @@ CI_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
                 "--switch-to-base",
                 "--airflow-site",
                 "--force-k8s-schema-sync",
+                "--github-token",
             ],
         },
         {
diff --git a/scripts/ci/prek/upgrade_important_versions.py 
b/scripts/ci/prek/upgrade_important_versions.py
index 704189f413f..450dc8178e2 100755
--- a/scripts/ci/prek/upgrade_important_versions.py
+++ b/scripts/ci/prek/upgrade_important_versions.py
@@ -46,6 +46,9 @@ from packaging.version import Version
 
 DOCKER_IMAGES_EXAMPLE_DIR_PATH = AIRFLOW_ROOT_PATH / "docker-stack-docs" / 
"docker-examples"
 
+# Module-level GitHub token, set during main() via retrieve_gh_token()
+_github_token: str | None = None
+
 
 # List of files to update and whether to keep total length of the original 
value when replacing.
 FILES_TO_UPDATE: list[tuple[Path, bool]] = [
@@ -284,6 +287,9 @@ def get_latest_github_release_version(repo: str) -> str:
 
     url = f"https://api.github.com/repos/{repo}/releases/latest";
     headers = {"User-Agent": "Python requests"}
+    if _github_token:
+        headers["Authorization"] = f"Bearer {_github_token}"
+        headers["X-GitHub-Api-Version"] = "2022-11-28"
     response = requests.get(url, headers=headers)
     response.raise_for_status()
 
@@ -324,6 +330,9 @@ def get_latest_openapi_generator_version() -> str:
         console.print("[bright_blue]Fetching latest OpenAPI generator version 
from GitHub")
     url = 
"https://api.github.com/repos/OpenAPITools/openapi-generator/releases/latest";
     headers = {"User-Agent": "Python requests"}
+    if _github_token:
+        headers["Authorization"] = f"Bearer {_github_token}"
+        headers["X-GitHub-Api-Version"] = "2022-11-28"
     response = requests.get(url, headers=headers)
     response.raise_for_status()
     data = response.json()
@@ -909,7 +918,8 @@ def is_within_cooldown(cooldown_days: int) -> bool:
 
 def main() -> None:
     """Main entry point for the version upgrade script."""
-    retrieve_gh_token(description="airflow-upgrade-important-versions", 
scopes="public_repo")
+    global _github_token
+    _github_token = 
retrieve_gh_token(description="airflow-upgrade-important-versions", 
scopes="public_repo")
 
     versions = fetch_all_package_versions()
     log_special_versions(versions)

Reply via email to