This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch v3-0-test
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/v3-0-test by this push:
     new bd8ca5c382c [v3-0-test] Simplify runs-on conditions to only 
differentiate AMD/ARM (#50181) (#50196)
bd8ca5c382c is described below

commit bd8ca5c382c1e03da3745fa1575576447785f3aa
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon May 5 12:11:56 2025 +0200

    [v3-0-test] Simplify runs-on conditions to only differentiate AMD/ARM 
(#50181) (#50196)
    
    * Simplify runs-on conditions to only differentiate AMD/ARM
    
    For now - when we do not have self-hosted runners yet, we want to
    simplify the selective check rules to only differentiate the two
    options we have now:
    
    * AMD runners (public)
    * ARM runners (also bublic)
    
    The selective checks now return two options:
    
    * amd-runners
    * arm-runners
    
    That should simplify choices and allow to bring back some of the
    disabled ARM jobs, while open up for the future possibility of
    enabling self-hosted runners. It should also allow us to finally
    run ARM tests in parallel to AMD tests and turn off experimental
    status of the ARM image.
    
    Fixes: #41935
    
    * Update .github/workflows/publish-docs-to-s3.yml
    
    
    
    ---------
    (cherry picked from commit 3b80419e28a6ea95246b546460ffba78d09f3255)
    
    Co-authored-by: GPK <[email protected]>
---
 .github/workflows/additional-ci-image-checks.yml   |  35 +-
 .github/workflows/additional-prod-image-tests.yml  |  12 +-
 .github/workflows/airflow-distributions-tests.yml  |  11 +-
 .github/workflows/basic-tests.yml                  |  14 +-
 .github/workflows/ci-image-build.yml               |  10 +-
 .github/workflows/ci-image-checks.yml              |  18 +-
 .github/workflows/ci.yml                           |  74 ++---
 .github/workflows/finalize-tests.yml               |  62 ++--
 .github/workflows/generate-constraints.yml         |   6 +-
 .github/workflows/helm-tests.yml                   |  12 +-
 .github/workflows/integration-system-tests.yml     |   8 +-
 .github/workflows/k8s-tests.yml                    |   6 +-
 .github/workflows/prod-image-build.yml             |   8 +-
 .github/workflows/prod-image-extra-checks.yml      |   8 +-
 .github/workflows/publish-docs-to-s3.yml           | 260 +++++++++++++++
 .github/workflows/push-image-cache.yml             |  12 +-
 .github/workflows/release_dockerhub_image.yml      |   4 +-
 .github/workflows/run-unit-tests.yml               |   6 +-
 .github/workflows/special-tests.yml                |  26 +-
 .github/workflows/test-providers.yml               |   8 +-
 dev/breeze/doc/ci/04_selective_checks.md           |  15 +-
 .../src/airflow_breeze/commands/ci_commands.py     |   9 +-
 dev/breeze/src/airflow_breeze/global_constants.py  |  12 +-
 .../src/airflow_breeze/utils/selective_checks.py   | 137 +-------
 dev/breeze/tests/test_pr_info.py                   | 158 +++------
 dev/breeze/tests/test_selective_checks.py          | 366 ---------------------
 26 files changed, 476 insertions(+), 821 deletions(-)

diff --git a/.github/workflows/additional-ci-image-checks.yml 
b/.github/workflows/additional-ci-image-checks.yml
index 86740494b64..6ef786e8a86 100644
--- a/.github/workflows/additional-ci-image-checks.yml
+++ b/.github/workflows/additional-ci-image-checks.yml
@@ -20,16 +20,12 @@ name: Additional CI image checks
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-default:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
+      amd-runners:
+        description: "The array of labels (in json form) determining AMD 
public runners."
         required: true
         type: string
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining public 
runners."
-        required: true
-        type: string
-      runs-on-as-json-self-hosted:
-        description: "The array of labels (in json form) determining 
self-hosted runners."
+      arm-runners:
+        description: "The array of labels (in json form) determining ARM 
public runners."
         required: true
         type: string
       python-versions:
@@ -103,8 +99,8 @@ jobs:
       # from forks. This is to prevent malicious PRs from creating images in 
the "apache/airflow" repo.
       packages: write
     with:
-      runs-on-as-json-public: ${{ inputs.runs-on-as-json-public }}
-      runs-on-as-json-self-hosted: ${{ inputs.runs-on-as-json-self-hosted }}
+      amd-runners: ${{ inputs.amd-runners }}
+      arm-runners: ${{ inputs.arm-runners }}
       cache-type: "Early"
       include-prod-images: "false"
       push-latest-images: "false"
@@ -124,7 +120,7 @@ jobs:
   check-that-image-builds-quickly:
     timeout-minutes: 11
     name: Check that image builds quickly
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       UPGRADE_TO_NEWER_DEPENDENCIES: false
       PYTHON_MAJOR_MINOR_VERSION: ${{ inputs.default-python-version }}
@@ -156,10 +152,10 @@ jobs:
       - name: "Check that image builds quickly"
         run: breeze shell --max-time 600 --platform "linux/amd64"
 
-#  # This is only a check if ARM images are successfully building when 
committer runs PR from
-#  # Apache repository. This is needed in case you want to fix failing cache 
job in "canary" run
-#  # There is no point in running this one in "canary" run, because the above 
step is doing the
-#  # same build anyway.
+# This is only a check if ARM images are successfully building when committer 
runs PR from
+# Apache repository. This is needed in case you want to fix failing cache job 
in "canary" run
+# There is no point in running this one in "canary" run, because the above 
step is doing the
+# same build anyway.
 #  build-ci-arm-images:
 #    name: Build CI ARM images
 #    uses: ./.github/workflows/ci-image-build.yml
@@ -167,17 +163,16 @@ jobs:
 #      contents: read
 #      packages: write
 #    with:
+#      amd-runners: ${{ inputs.amd-runners }}
+#      arm-runners: ${{ inputs.arm-runners }}
 #      platform: "linux/arm64"
 #      push-image: "false"
 #      upload-image-artifact: "true"
-#      upload-mount-cache-artifact:  ${{ inputs.canary-run }}
-#      runs-on-as-json-public: ${{ inputs.runs-on-as-json-public }}
-#      runs-on-as-json-self-hosted: ${{ inputs.runs-on-as-json-self-hosted }}
+#      upload-mount-cache-artifact: ${{ inputs.canary-run }}
 #      python-versions: ${{ inputs.python-versions }}
 #      branch: ${{ inputs.branch }}
 #      constraints-branch: ${{ inputs.constraints-branch }}
 #      use-uv: ${{ inputs.use-uv }}
 #      upgrade-to-newer-dependencies: ${{ inputs.upgrade-to-newer-dependencies 
}}
 #      docker-cache: ${{ inputs.docker-cache }}
-#      disable-airflow-repo-cache:  ${{ inputs.disable-airflow-repo-cache }}
-#
+#      disable-airflow-repo-cache: ${{ inputs.disable-airflow-repo-cache }}
diff --git a/.github/workflows/additional-prod-image-tests.yml 
b/.github/workflows/additional-prod-image-tests.yml
index 56badcd10ad..3834efad76e 100644
--- a/.github/workflows/additional-prod-image-tests.yml
+++ b/.github/workflows/additional-prod-image-tests.yml
@@ -20,8 +20,8 @@ name: Additional PROD image tests
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining public 
runners."
+      amd-runners:
+        description: "The array of labels (in json form) determining AMD 
public runners."
         required: true
         type: string
       default-branch:
@@ -63,7 +63,7 @@ jobs:
     name: PROD image extra checks (main)
     uses: ./.github/workflows/prod-image-extra-checks.yml
     with:
-      runs-on-as-json-public: ${{ inputs.runs-on-as-json-public }}
+      amd-runners: ${{ inputs.amd-runners }}
       python-versions: "[ '${{ inputs.default-python-version }}' ]"
       default-python-version: ${{ inputs.default-python-version }}
       branch: ${{ inputs.default-branch }}
@@ -78,7 +78,7 @@ jobs:
     name: PROD image extra checks (release)
     uses: ./.github/workflows/prod-image-extra-checks.yml
     with:
-      runs-on-as-json-public: ${{ inputs.runs-on-as-json-public }}
+      amd-runners: ${{ inputs.amd-runners }}
       python-versions: "[ '${{ inputs.default-python-version }}' ]"
       default-python-version: ${{ inputs.default-python-version }}
       branch: ${{ inputs.default-branch }}
@@ -92,7 +92,7 @@ jobs:
   test-examples-of-prod-image-building:
     timeout-minutes: 60
     name: "Test examples of PROD image building"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       GITHUB_REPOSITORY: ${{ github.repository }}
       GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -130,7 +130,7 @@ jobs:
   test-docker-compose-quick-start:
     timeout-minutes: 60
     name: "Docker Compose quick start with PROD image verifying"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       GITHUB_REPOSITORY: ${{ github.repository }}
diff --git a/.github/workflows/airflow-distributions-tests.yml 
b/.github/workflows/airflow-distributions-tests.yml
index c7071c5f34d..77b0e76462a 100644
--- a/.github/workflows/airflow-distributions-tests.yml
+++ b/.github/workflows/airflow-distributions-tests.yml
@@ -21,6 +21,10 @@ on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
       # Static inputs defined to choose which distribution to test to run
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
+        required: true
+        type: string
       distribution-name:
         description: "The name of the distribution to test"
         required: true
@@ -33,11 +37,6 @@ on:  # yamllint disable-line rule:truthy
         description: "distribution test type"  # eg task-sdk-tests
         required: true
         type: string
-      # Environment inputs
-      runs-on-as-json-default:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
-        required: true
-        type: string
       default-python-version:
         description: "Which version of python should be used by default"
         required: true
@@ -60,7 +59,7 @@ jobs:
   distributions-tests:
     timeout-minutes: 80
     name: ${{ inputs.distribution-name }}:P${{ matrix.python-version }} tests
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/basic-tests.yml 
b/.github/workflows/basic-tests.yml
index 7efc3deedc1..cdd619c9f4c 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -20,7 +20,7 @@ name: Basic tests
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
+      amd-runners:
         description: "The array of labels (in json form) determining public 
runners."
         required: true
         type: string
@@ -66,7 +66,7 @@ jobs:
   run-breeze-tests:
     timeout-minutes: 10
     name: Breeze unit tests
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     steps:
       - name: "Cleanup repo"
         shell: bash
@@ -87,7 +87,7 @@ jobs:
   tests-ui:
     timeout-minutes: 15
     name: React UI tests
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     if: inputs.run-ui-tests == 'true'
     steps:
       - name: "Cleanup repo"
@@ -155,7 +155,7 @@ jobs:
   install-pre-commit:
     timeout-minutes: 5
     name: "Install pre-commit for cache"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
     steps:
@@ -183,7 +183,7 @@ jobs:
   static-checks-basic-checks-only:
     timeout-minutes: 30
     name: "Static checks: basic checks only"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     needs: install-pre-commit
     if: inputs.basic-checks-only == 'true'
     steps:
@@ -236,7 +236,7 @@ jobs:
   upgrade-check:
     timeout-minutes: 45
     name: "Upgrade checks"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     needs: install-pre-commit
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
@@ -306,7 +306,7 @@ jobs:
   test-airflow-release-commands:
     timeout-minutes: 80
     name: "Test Airflow release commands"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       GITHUB_REPOSITORY: ${{ github.repository }}
diff --git a/.github/workflows/ci-image-build.yml 
b/.github/workflows/ci-image-build.yml
index 1df2e26c090..9c032fbff37 100644
--- a/.github/workflows/ci-image-build.yml
+++ b/.github/workflows/ci-image-build.yml
@@ -20,12 +20,12 @@ name: Build CI images
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining public 
runners."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
-      runs-on-as-json-self-hosted:
-        description: "The array of labels (in json form) determining 
self-hosted runners."
+      arm-runners:
+        description: "The array of labels (in json form) determining public 
ARM runners."
         required: true
         type: string
       target-commit-sha:
@@ -110,7 +110,7 @@ jobs:
     # adding space before (with >) apparently turns the `runs-on` processed 
line into a string "Array"
     # instead of an array of strings.
     # yamllint disable-line rule:line-length
-    runs-on: ${{ (inputs.platform == 'linux/amd64') && 
fromJSON(inputs.runs-on-as-json-public) || 
fromJSON(inputs.runs-on-as-json-self-hosted) }}
+    runs-on: ${{ (inputs.platform == 'linux/amd64') && 
fromJSON(inputs.amd-runners) || fromJSON(inputs.arm-runners) }}
     env:
       BACKEND: sqlite
       PYTHON_MAJOR_MINOR_VERSION: ${{ matrix.python-version }}
diff --git a/.github/workflows/ci-image-checks.yml 
b/.github/workflows/ci-image-checks.yml
index 76c850132ea..3dca5a75cf7 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -20,12 +20,8 @@ name: CI Image Checks
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-default:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
-        required: true
-        type: string
-      runs-on-as-json-docs-build:
-        description: "The array of labels (in json form) determining the 
labels used for docs build."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
       needs-mypy:
@@ -117,7 +113,7 @@ jobs:
   install-pre-commit:
     timeout-minutes: 5
     name: "Install pre-commit for cache (only canary runs)"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
     if: inputs.basic-checks-only == 'false'
@@ -161,7 +157,7 @@ jobs:
   static-checks:
     timeout-minutes: 45
     name: "Static checks"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     needs: install-pre-commit
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
@@ -201,7 +197,7 @@ jobs:
   mypy:
     timeout-minutes: 45
     name: "MyPy checks"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     needs: install-pre-commit
     if: inputs.needs-mypy == 'true'
     strategy:
@@ -245,7 +241,7 @@ jobs:
   build-docs:
     timeout-minutes: 150
     name: "Build documentation"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     if: inputs.docs-build == 'true'
     strategy:
       fail-fast: false
@@ -387,7 +383,7 @@ jobs:
   test-python-api-client:
     timeout-minutes: 60
     name: "Test Python API client"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     if: inputs.needs-api-codegen == 'true'
     env:
       BACKEND: "postgres"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 879e16df373..b94e5d8ee39 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -83,12 +83,6 @@ jobs:
       include-success-outputs: ${{ 
steps.selective-checks.outputs.include-success-outputs }}
       individual-providers-test-types-list-as-strings-in-json: >-
         ${{ 
steps.selective-checks.outputs.individual-providers-test-types-list-as-strings-in-json
 }}
-      is-airflow-runner: ${{ steps.selective-checks.outputs.is-airflow-runner 
}}
-      is-amd-runner: ${{ steps.selective-checks.outputs.is-amd-runner }}
-      is-arm-runner: ${{ steps.selective-checks.outputs.is-arm-runner }}
-      is-k8s-runner: ${{ steps.selective-checks.outputs.is-k8s-runner }}
-      is-self-hosted-runner: ${{ 
steps.selective-checks.outputs.is-self-hosted-runner }}
-      is-vm-runner: ${{ steps.selective-checks.outputs.is-vm-runner }}
       kubernetes-combos: ${{ steps.selective-checks.outputs.kubernetes-combos 
}}
       kubernetes-combos-list-as-string: >-
         ${{ steps.selective-checks.outputs.kubernetes-combos-list-as-string }}
@@ -123,11 +117,8 @@ jobs:
       run-tests: ${{ steps.selective-checks.outputs.run-tests }}
       run-ui-tests: ${{ steps.selective-checks.outputs.run-ui-tests }}
       run-www-tests: ${{ steps.selective-checks.outputs.run-www-tests }}
-      runs-on-as-json-default: ${{ 
steps.selective-checks.outputs.runs-on-as-json-default }}
-      runs-on-as-json-docs-build: ${{ 
steps.selective-checks.outputs.runs-on-as-json-docs-build }}
-      runs-on-as-json-public: ${{ 
steps.selective-checks.outputs.runs-on-as-json-public }}
-      runs-on-as-json-self-hosted-asf: ${{ 
steps.selective-checks.outputs.runs-on-as-json-self-hosted-asf }}
-      runs-on-as-json-self-hosted: ${{ 
steps.selective-checks.outputs.runs-on-as-json-self-hosted }}
+      amd-runners: ${{ steps.selective-checks.outputs.amd-runners }}
+      arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
       selected-providers-list-as-string: >-
         ${{ steps.selective-checks.outputs.selected-providers-list-as-string }}
       skip-pre-commits: ${{ steps.selective-checks.outputs.skip-pre-commits }}
@@ -182,7 +173,7 @@ jobs:
     needs: [build-info]
     uses: ./.github/workflows/basic-tests.yml
     with:
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       run-ui-tests: ${{needs.build-info.outputs.run-ui-tests}}
       run-www-tests: ${{needs.build-info.outputs.run-www-tests}}
       needs-api-codegen: ${{needs.build-info.outputs.needs-api-codegen}}
@@ -203,17 +194,17 @@ jobs:
       # from forks. This is to prevent malicious PRs from creating images in 
the "apache/airflow" repo.
       packages: write
     with:
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
-      runs-on-as-json-self-hosted: ${{ 
needs.build-info.outputs.runs-on-as-json-self-hosted }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
+      arm-runners: ${{ needs.build-info.outputs.arm-runners }}
       platform: "linux/amd64"
       push-image: "false"
       upload-image-artifact: "true"
       upload-mount-cache-artifact: ${{ needs.build-info.outputs.canary-run }}
       python-versions: ${{ needs.build-info.outputs.python-versions }}
       branch: ${{ needs.build-info.outputs.default-branch }}
+      constraints-branch: ${{ 
needs.build-info.outputs.default-constraints-branch }}
       use-uv: ${{ needs.build-info.outputs.use-uv }}
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
-      constraints-branch: ${{ 
needs.build-info.outputs.default-constraints-branch }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
       disable-airflow-repo-cache: ${{ 
needs.build-info.outputs.disable-airflow-repo-cache }}
     if: needs.build-info.outputs.ci-image-build == 'true'
@@ -228,9 +219,8 @@ jobs:
       id-token: write
     if: needs.build-info.outputs.canary-run == 'true'
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
-      runs-on-as-json-self-hosted: ${{ 
needs.build-info.outputs.runs-on-as-json-self-hosted }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
+      arm-runners: ${{ needs.build-info.outputs.arm-runners }}
       python-versions: ${{ needs.build-info.outputs.python-versions }}
       branch: ${{ needs.build-info.outputs.default-branch }}
       constraints-branch: ${{ 
needs.build-info.outputs.default-constraints-branch }}
@@ -251,7 +241,7 @@ jobs:
     uses: ./.github/workflows/generate-constraints.yml
     if: needs.build-info.outputs.ci-image-build == 'true'
     with:
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       python-versions-list-as-string: ${{ 
needs.build-info.outputs.python-versions-list-as-string }}
       # generate no providers constraints only in canary builds - they take 
quite some time to generate
       # they are not needed for regular builds, they are only needed to update 
constraints in canaries
@@ -267,8 +257,7 @@ jobs:
       id-token: write
       contents: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
-      runs-on-as-json-docs-build: ${{ 
needs.build-info.outputs.runs-on-as-json-docs-build }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       needs-mypy: ${{ needs.build-info.outputs.needs-mypy }}
       mypy-checks: ${{ needs.build-info.outputs.mypy-checks }}
       python-versions-list-as-string: ${{ 
needs.build-info.outputs.python-versions-list-as-string }}
@@ -303,7 +292,7 @@ jobs:
       needs.build-info.outputs.skip-providers-tests != 'true' &&
       needs.build-info.outputs.latest-versions-only != 'true'
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       canary-run: ${{ needs.build-info.outputs.canary-run }}
       default-python-version: ${{ 
needs.build-info.outputs.default-python-version }}
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
@@ -325,8 +314,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       helm-test-packages: ${{ needs.build-info.outputs.helm-test-packages }}
       default-python-version: ${{ 
needs.build-info.outputs.default-python-version }}
       use-uv: ${{ needs.build-info.outputs.use-uv }}
@@ -343,7 +331,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       backend: "postgres"
       test-name: "Postgres"
       test-scope: "DB"
@@ -370,7 +358,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       backend: "postgres"
       test-name: "Postgres"
       test-scope: "DB"
@@ -397,7 +385,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       backend: "mysql"
       test-name: "MySQL"
       test-scope: "DB"
@@ -424,7 +412,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       backend: "mysql"
       test-name: "MySQL"
       test-scope: "DB"
@@ -452,7 +440,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       backend: "sqlite"
       test-name: "Sqlite"
       test-name-separator: ""
@@ -481,7 +469,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       backend: "sqlite"
       test-name: "Sqlite"
       test-name-separator: ""
@@ -511,7 +499,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       backend: "sqlite"
       test-name: ""
       test-name-separator: ""
@@ -539,7 +527,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       backend: "sqlite"
       test-name: ""
       test-name-separator: ""
@@ -573,7 +561,7 @@ jobs:
        needs.build-info.outputs.full-tests-needed == 'true')
     with:
       default-branch: ${{ needs.build-info.outputs.default-branch }}
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       core-test-types-list-as-strings-in-json: >
         ${{ needs.build-info.outputs.core-test-types-list-as-strings-in-json }}
       providers-test-types-list-as-strings-in-json: >
@@ -598,7 +586,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       testable-core-integrations: ${{ 
needs.build-info.outputs.testable-core-integrations }}
       testable-providers-integrations: ${{ 
needs.build-info.outputs.testable-providers-integrations }}
       run-system-tests: ${{ needs.build-info.outputs.run-tests }}
@@ -621,7 +609,7 @@ jobs:
     if: >
       needs.build-info.outputs.run-tests == 'true'
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       test-name: "LowestDeps"
       force-lowest-dependencies: "true"
       test-scope: "All"
@@ -649,7 +637,7 @@ jobs:
       packages: read
     if: needs.build-info.outputs.run-tests == 'true'
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       test-name: "LowestDeps"
       force-lowest-dependencies: "true"
       test-scope: "All"
@@ -678,7 +666,7 @@ jobs:
       # from forks. This is to prevent malicious PRs from creating images in 
the "apache/airflow" repo.
       packages: write
     with:
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       build-type: "Regular"
       platform: "linux/amd64"
       push-image: "false"
@@ -699,7 +687,7 @@ jobs:
     needs: [build-info, build-prod-images, generate-constraints]
     uses: ./.github/workflows/additional-prod-image-tests.yml
     with:
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       default-branch: ${{ needs.build-info.outputs.default-branch }}
       constraints-branch: ${{ 
needs.build-info.outputs.default-constraints-branch }}
       upgrade-to-newer-dependencies: ${{ 
needs.build-info.outputs.upgrade-to-newer-dependencies }}
@@ -719,7 +707,7 @@ jobs:
       packages: read
     with:
       platform: "linux/amd64"
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       python-versions-list-as-string: ${{ 
needs.build-info.outputs.python-versions-list-as-string }}
       include-success-outputs: ${{ 
needs.build-info.outputs.include-success-outputs }}
       use-uv: ${{ needs.build-info.outputs.use-uv }}
@@ -737,7 +725,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       default-python-version: ${{ 
needs.build-info.outputs.default-python-version }}
       python-versions: ${{ needs.build-info.outputs.python-versions }}
       use-uv: ${{ needs.build-info.outputs.use-uv }}
@@ -758,7 +746,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ 
needs.build-info.outputs.runs-on-as-json-default }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
       default-python-version: ${{ 
needs.build-info.outputs.default-python-version }}
       python-versions: ${{ needs.build-info.outputs.python-versions }}
       use-uv: ${{ needs.build-info.outputs.use-uv }}
@@ -806,8 +794,8 @@ jobs:
       - tests-with-lowest-direct-resolution-providers
     uses: ./.github/workflows/finalize-tests.yml
     with:
-      runs-on-as-json-public: ${{ 
needs.build-info.outputs.runs-on-as-json-public }}
-      runs-on-as-json-self-hosted: ${{ 
needs.build-info.outputs.runs-on-as-json-self-hosted }}
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
+      arm-runners: ${{ needs.build-info.outputs.arm-runners }}
       python-versions: ${{ needs.build-info.outputs.python-versions }}
       python-versions-list-as-string: ${{ 
needs.build-info.outputs.python-versions-list-as-string }}
       branch: ${{ needs.build-info.outputs.default-branch }}
diff --git a/.github/workflows/finalize-tests.yml 
b/.github/workflows/finalize-tests.yml
index 12d3906de4c..ae1d77e0741 100644
--- a/.github/workflows/finalize-tests.yml
+++ b/.github/workflows/finalize-tests.yml
@@ -20,12 +20,12 @@ name: Finalize tests
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining public 
runners."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
-      runs-on-as-json-self-hosted:
-        description: "The array of labels (in json form) determining 
self-hosted runners."
+      arm-runners:
+        description: "The array of labels (in json form) determining public 
ARM runners."
         required: true
         type: string
       python-versions:
@@ -80,7 +80,7 @@ permissions:
   contents: read
 jobs:
   update-constraints:
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     timeout-minutes: 80
     name: "Update constraints"
     permissions:
@@ -142,8 +142,8 @@ jobs:
       # from forks. This is to prevent malicious PRs from creating images in 
the "apache/airflow" repo.
       packages: write
     with:
-      runs-on-as-json-public: ${{ inputs.runs-on-as-json-public }}
-      runs-on-as-json-self-hosted: ${{ inputs.runs-on-as-json-self-hosted }}
+      amd-runners: ${{ inputs.amd-runners }}
+      arm-runners: ${{ inputs.arm-runners }}
       cache-type: "Regular AMD"
       include-prod-images: "true"
       push-latest-images: "true"
@@ -159,34 +159,34 @@ jobs:
       inputs.canary-run == 'true' &&
       (github.event_name == 'schedule' || github.event_name == 
'workflow_dispatch')
 
-  #  push-buildx-cache-to-github-registry-arm:
-  #    name: Push Regular ARM Image Cache
-  #    needs: [update-constraints]
-  #    uses: ./.github/workflows/push-image-cache.yml
-  #    permissions:
-  #      contents: read
-  #      packages: write
-  #    with:
-  #      runs-on-as-json-public: ${{ inputs.runs-on-as-json-public }}
-  #      runs-on-as-json-self-hosted: ${{ inputs.runs-on-as-json-self-hosted }}
-  #      cache-type: "Regular ARM"
-  #      include-prod-images: "true"
-  #      push-latest-images: "true"
-  #      platform: "linux/arm64"
-  #      python-versions: ${{ inputs.python-versions }}
-  #      branch: ${{ inputs.branch }}
-  #      constraints-branch: ${{ inputs.constraints-branch }}
-  #      use-uv: "true"
-  #      include-success-outputs: ${{ inputs.include-success-outputs }}
-  #      docker-cache: ${{ inputs.docker-cache }}
-  #    if: >
-  #      inputs.canary-run == 'true' &&
-  #      (github.event_name == 'schedule' || github.event_name == 
'workflow_dispatch')
+  #    push-buildx-cache-to-github-registry-arm:
+  #      name: Push Regular ARM Image Cache
+  #      needs: [update-constraints]
+  #      uses: ./.github/workflows/push-image-cache.yml
+  #      permissions:
+  #        contents: read
+  #        packages: write
+  #      with:
+  #        amd-runners: ${{ inputs.amd-runners }}
+  #        arm-runners: ${{ inputs.arm-runners }}
+  #        cache-type: "Regular ARM"
+  #        include-prod-images: "true"
+  #        push-latest-images: "true"
+  #        platform: "linux/arm64"
+  #        python-versions: ${{ inputs.python-versions }}
+  #        branch: ${{ inputs.branch }}
+  #        constraints-branch: ${{ inputs.constraints-branch }}
+  #        use-uv: "true"
+  #        include-success-outputs: ${{ inputs.include-success-outputs }}
+  #        docker-cache: ${{ inputs.docker-cache }}
+  #      if: >
+  #        inputs.canary-run == 'true' &&
+  #        (github.event_name == 'schedule' || github.event_name == 
'workflow_dispatch')
 
   summarize-warnings:
     timeout-minutes: 15
     name: "Summarize warnings"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     steps:
       - name: "Cleanup repo"
         shell: bash
diff --git a/.github/workflows/generate-constraints.yml 
b/.github/workflows/generate-constraints.yml
index 46cb9f250bc..91b56942454 100644
--- a/.github/workflows/generate-constraints.yml
+++ b/.github/workflows/generate-constraints.yml
@@ -20,8 +20,8 @@ name: Generate constraints
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining public 
runners."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
       python-versions-list-as-string:
@@ -46,7 +46,7 @@ jobs:
       contents: read
     timeout-minutes: 70
     name: Generate constraints ${{ inputs.python-versions-list-as-string }}
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       DEBUG_RESOURCES: ${{ inputs.debug-resources }}
       GITHUB_REPOSITORY: ${{ github.repository }}
diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml
index 1b4aa19cbe5..21c7f01a528 100644
--- a/.github/workflows/helm-tests.yml
+++ b/.github/workflows/helm-tests.yml
@@ -20,12 +20,8 @@ name: Helm tests
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-default:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
-        required: true
-        type: string
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining public 
runners."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
       helm-test-packages:
@@ -46,7 +42,7 @@ jobs:
   tests-helm:
     timeout-minutes: 80
     name: "Unit tests Helm: ${{ matrix.helm-test-package }}"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     strategy:
       fail-fast: false
       matrix:
@@ -85,7 +81,7 @@ jobs:
   tests-helm-release:
     timeout-minutes: 80
     name: "Release Helm"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{inputs.default-python-version}}"
     steps:
diff --git a/.github/workflows/integration-system-tests.yml 
b/.github/workflows/integration-system-tests.yml
index fc3159223e8..9c3480432b5 100644
--- a/.github/workflows/integration-system-tests.yml
+++ b/.github/workflows/integration-system-tests.yml
@@ -20,7 +20,7 @@ name: Integration and system tests
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
+      amd-runners:
         description: "The array of labels (in json form) determining public 
runners."
         required: true
         type: string
@@ -71,7 +71,7 @@ jobs:
     timeout-minutes: 30
     if: inputs.testable-core-integrations != '[]'
     name: "Integration core ${{ matrix.integration }}"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     strategy:
       fail-fast: false
       matrix:
@@ -120,7 +120,7 @@ jobs:
     timeout-minutes: 30
     if: inputs.testable-providers-integrations != '[]' && 
inputs.skip-providers-tests != 'true'
     name: "Integration: providers ${{ matrix.integration }}"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     strategy:
       fail-fast: false
       matrix:
@@ -168,7 +168,7 @@ jobs:
     timeout-minutes: 30
     if: inputs.run-system-tests == 'true'
     name: "System Tests"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     env:
       BACKEND: "postgres"
       BACKEND_VERSION: ${{ inputs.default-postgres-version }}"
diff --git a/.github/workflows/k8s-tests.yml b/.github/workflows/k8s-tests.yml
index 2632408b813..43b30e40a97 100644
--- a/.github/workflows/k8s-tests.yml
+++ b/.github/workflows/k8s-tests.yml
@@ -24,8 +24,8 @@ on:  # yamllint disable-line rule:truthy
         description: "Platform for the build - 'linux/amd64' or 'linux/arm64'"
         required: true
         type: string
-      runs-on-as-json-default:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
       python-versions-list-as-string:
@@ -54,7 +54,7 @@ jobs:
   tests-kubernetes:
     timeout-minutes: 60
     name: "K8S System:${{ matrix.executor }}-${{ matrix.kubernetes-combo 
}}-${{ matrix.use-standard-naming }}"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     strategy:
       matrix:
         executor: [KubernetesExecutor, CeleryExecutor, LocalExecutor]
diff --git a/.github/workflows/prod-image-build.yml 
b/.github/workflows/prod-image-build.yml
index 844b0d46e7d..bf4ead70add 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -20,8 +20,8 @@ name: Build PROD images
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
+      amd-runners:
+        description: "The array of labels (in json form) determining default 
runner for AMD build."
         required: true
         type: string
       build-type:
@@ -114,7 +114,7 @@ jobs:
   build-prod-packages:
     name: "Build Airflow and provider distributions"
     timeout-minutes: 10
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     if: inputs.prod-image-build == 'true'
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
@@ -186,7 +186,7 @@ jobs:
         python-version: ${{ fromJSON(inputs.python-versions) || 
fromJSON('[""]') }}
     timeout-minutes: 80
     name: "Build PROD ${{ inputs.build-type }} image ${{ matrix.python-version 
}}"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     needs:
       - build-prod-packages
     env:
diff --git a/.github/workflows/prod-image-extra-checks.yml 
b/.github/workflows/prod-image-extra-checks.yml
index 356900c9222..640d924d873 100644
--- a/.github/workflows/prod-image-extra-checks.yml
+++ b/.github/workflows/prod-image-extra-checks.yml
@@ -20,8 +20,8 @@ name: PROD images extra checks
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining public 
runners."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
       python-versions:
@@ -62,7 +62,7 @@ jobs:
   myssql-client-image:
     uses: ./.github/workflows/prod-image-build.yml
     with:
-      runs-on-as-json-public: ${{ inputs.runs-on-as-json-public }}
+      amd-runners: ${{ inputs.amd-runners }}
       build-type: "MySQL Client"
       upload-image-artifact: "false"
       upload-package-artifact: "false"
@@ -83,7 +83,7 @@ jobs:
   pip-image:
     uses: ./.github/workflows/prod-image-build.yml
     with:
-      runs-on-as-json-public: ${{ inputs.runs-on-as-json-public }}
+      amd-runners: ${{ inputs.amd-runners }}
       build-type: "pip"
       upload-image-artifact: "false"
       upload-package-artifact: "false"
diff --git a/.github/workflows/publish-docs-to-s3.yml 
b/.github/workflows/publish-docs-to-s3.yml
new file mode 100644
index 00000000000..71cd4e2d290
--- /dev/null
+++ b/.github/workflows/publish-docs-to-s3.yml
@@ -0,0 +1,260 @@
+# 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.
+#
+---
+name: Publish Docs to S3
+on:  # yamllint disable-line rule:truthy
+  workflow_dispatch:
+    inputs:
+      ref:
+        description: "The branch or tag to checkout for the docs publishing"
+        required: true
+        type: string
+      exclude-docs:
+        description: "Comma separated list of docs to exclude"
+        required: false
+        default: "NO_DOCS"
+        type: string
+      destination-location:
+        description: "The destination location in S3"
+        required: false
+        default: "s3://staging-docs-airflow-apache-org/docs"
+        type: string
+      docs-list-as-string:
+        description: "Space separated list of docs to build"
+        required: false
+        default: ""
+        type: string
+env:
+  AIRFLOW_ROOT_PATH: "/home/runner/work/temp-airflow-repo-reference"  # 
checkout dir for referenced tag
+permissions:
+  contents: read
+jobs:
+  build-info:
+    timeout-minutes: 10
+    name: "Build Info"
+    runs-on: ["ubuntu-24.04"]
+    outputs:
+      amd-runners: ${{ steps.selective-checks.outputs.amd-runners }}
+      arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
+    env:
+      GITHUB_CONTEXT: ${{ toJson(github) }}
+      VERBOSE: true
+      REF: ${{ inputs.ref }}
+      EXCLUDE_DOCS: ${{ inputs.exclude-docs }}
+      DESTINATION_LOCATION: ${{ inputs.destination-location }}
+      DOCS_LIST_AS_STRING: ${{ inputs.docs-list-as-string }}
+    if: contains(fromJSON('[
+      "ashb",
+      "eladkal",
+      "ephraimbuddy",
+      "jedcunningham",
+      "kaxil",
+      "pierrejeambrun",
+      "potiuk",
+      "utkarsharma2"
+      ]'), github.event.sender.login)
+    steps:
+      - name: "Input parameters summary"
+        shell: bash
+        run: |
+          echo "Input parameters summary"
+          echo "========================="
+          echo "Ref: '${REF}'"
+          echo "Exclude docs: '${EXCLUDE_DOCS}'"
+          echo "Destination location: '${DESTINATION_LOCATION}'"
+          echo "Docs list as string: '${DOCS_LIST_AS_STRING}'"
+      - name: "Cleanup repo"
+        shell: bash
+        run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm 
-rf /workspace/*"
+      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
+        uses: actions/checkout@v4
+        with:
+          persist-credentials: false
+      - name: "Cleanup docker"
+        run: ./scripts/ci/cleanup_docker.sh
+      - name: "Install uv"
+        run: curl -LsSf https://astral.sh/uv/install.sh | sh
+      - name: "Install Breeze"
+        uses: ./.github/actions/breeze
+        with:
+          use-uv: "true"
+      - name: Selective checks
+        id: selective-checks
+        env:
+          VERBOSE: "false"
+        run: breeze ci selective-check 2>> ${GITHUB_OUTPUT}
+
+  build-ci-images:
+    name: Build CI images
+    uses: ./.github/workflows/ci-image-build.yml
+    needs: [build-info]
+    permissions:
+      contents: read
+      # This write is only given here for `push` events from "apache/airflow" 
repo. It is not given for PRs
+      # from forks. This is to prevent malicious PRs from creating images in 
the "apache/airflow" repo.
+      packages: write
+    with:
+      amd-runners: ${{ needs.build-info.outputs.amd-runners }}
+      arm-runners: ${{ needs.build-info.outputs.arm-runners }}
+      platform: "linux/amd64"
+      push-image: "false"
+      upload-image-artifact: "true"
+      upload-mount-cache-artifact: false
+      python-versions: "['3.9']"
+      branch: ${{ inputs.ref }}
+      use-uv: true
+      upgrade-to-newer-dependencies: false
+      constraints-branch: "constraints-main"
+      docker-cache: registry
+      disable-airflow-repo-cache: false
+
+  build-docs:
+    needs: [build-ci-images]
+    timeout-minutes: 150
+    name: "Build documentation"
+    runs-on: ubuntu-latest
+    env:
+      GITHUB_REPOSITORY: ${{ github.repository }}
+      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      GITHUB_USERNAME: ${{ github.actor }}
+      INCLUDE_NOT_READY_PROVIDERS: "true"
+      INCLUDE_SUCCESS_OUTPUTS: false
+      PYTHON_MAJOR_MINOR_VERSION: ${{ inputs.default-python-version }}
+      VERBOSE: "true"
+    steps:
+      - name: "Cleanup repo"
+        shell: bash
+        run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm 
-rf /workspace/*"
+      - name: "Checkout ${{ github.ref }} "
+        uses: actions/checkout@v4
+        with:
+          persist-credentials: false
+      - name: "Checkout from ${{ inputs.ref }} to build docs"
+        run: |
+          git clone https://github.com/apache/airflow.git 
"${AIRFLOW_ROOT_PATH}"
+          cd "${AIRFLOW_ROOT_PATH}" && git checkout ${REF}
+        env:
+          REF: ${{ inputs.ref }}
+      - name: "Prepare breeze & CI image: 3.9"
+        uses: ./.github/actions/prepare_breeze_and_image
+        with:
+          platform: "linux/amd64"
+          python: 3.9
+          use-uv: true
+      - name: "Building docs with --docs-only flag"
+        env:
+          DOCS_LIST_AS_STRING: ${{ inputs.docs-list-as-string }}
+        run: >
+          breeze build-docs ${DOCS_LIST_AS_STRING} --docs-only
+      - name: "Upload build docs"
+        uses: actions/upload-artifact@v4
+        with:
+          name: airflow-docs
+          path: ${{ env.AIRFLOW_ROOT_PATH }}/generated/_build
+          retention-days: '7'
+          if-no-files-found: 'error'
+          overwrite: 'true'
+
+  publish-docs-to-s3:
+    needs: [build-docs]
+    name: "Publish documentation to S3"
+    permissions:
+      id-token: write
+      contents: read
+    runs-on: ubuntu-latest
+    env:
+      GITHUB_REPOSITORY: ${{ github.repository }}
+      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      GITHUB_USERNAME: ${{ github.actor }}
+      INCLUDE_NOT_READY_PROVIDERS: "true"
+      INCLUDE_SUCCESS_OUTPUTS: false
+      PYTHON_MAJOR_MINOR_VERSION: 3.9
+      VERBOSE: "true"
+    steps:
+      - name: "Cleanup repo"
+        shell: bash
+        run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm 
-rf /workspace/*"
+      - name: "Checkout ${{ github.ref }} "
+        uses: actions/checkout@v4
+        with:
+          persist-credentials: false
+      - name: "Cleanup docker"
+        run: ./scripts/ci/cleanup_docker.sh
+      - name: "Checkout ${{ inputs.ref }}"
+        run: |
+          git clone https://github.com/apache/airflow.git 
"${AIRFLOW_ROOT_PATH}"
+          cd "${AIRFLOW_ROOT_PATH}" && git checkout ${REF}
+        env:
+          REF: ${{ inputs.ref }}
+      - name: "Download docs prepared as artifacts"
+        uses: actions/download-artifact@v4
+        with:
+          name: airflow-docs
+          path: ${{ env.AIRFLOW_ROOT_PATH }}/generated/_build
+      - name: Check disk space available
+        run: df -h
+      # Here we will create temp airflow-site dir to publish
+      # docs and for back-references
+      - name: Create /mnt/airflow-site directory
+        run: |
+          sudo mkdir -p /mnt/airflow-site && sudo chown -R "${USER}" 
/mnt/airflow-site
+           echo "AIRFLOW_SITE_DIRECTORY=/mnt/airflow-site/" >> "$GITHUB_ENV"
+      - name: "Prepare breeze & CI image: 3.9"
+        uses: ./.github/actions/prepare_breeze_and_image
+        with:
+          platform: "linux/amd64"
+          python: 3.9
+          use-uv: true
+      - name: "Publish docs to tmp directory"
+        env:
+          DOCS_LIST_AS_STRING: ${{ inputs.docs-list-as-string }}
+        run: >
+          breeze release-management publish-docs --override-versioned 
--run-in-parallel
+          ${DOCS_LIST_AS_STRING}
+      - name: Check disk space available
+        run: df -h
+      - name: "Generate back references for providers"
+        run: breeze release-management add-back-references all-providers
+      - name: "Generate back references for apache-airflow"
+        run: breeze release-management add-back-references apache-airflow
+      - name: "Generate back references for docker-stack"
+        run: breeze release-management add-back-references docker-stack
+      - name: "Generate back references for helm-chart"
+        run: breeze release-management add-back-references helm-chart
+      - name: Install AWS CLI v2
+        run: |
+          curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"; -o 
/tmp/awscliv2.zip
+          unzip -q /tmp/awscliv2.zip -d /tmp
+          rm /tmp/awscliv2.zip
+          sudo /tmp/aws/install --update
+          rm -rf /tmp/aws/
+      - name: Configure AWS credentials
+        uses: 
aws-actions/configure-aws-credentials@010d0da01d0b5a38af31e9c3470dbfdabdecca3a  
# v4.0.1
+        with:
+          aws-access-key-id: ${{ secrets.DOCS_AWS_ACCESS_KEY_ID }}
+          aws-secret-access-key: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }}
+          aws-region: us-east-2
+      - name: "Syncing docs to S3"
+        env:
+          DESTINATION_LOCATION: "${{ inputs.destination-location }}"
+          SOURCE_DIR_PATH: "/mnt/airflow-site/docs-archive/"
+          EXCLUDE_DOCS: "${{ inputs.exclude-docs }}"
+        run: |
+          breeze release-management publish-docs-to-s3 --source-dir-path 
${SOURCE_DIR_PATH} \
+          --destination-location ${DESTINATION_LOCATION} --stable-versions \
+          --exclude-docs ${EXCLUDE_DOCS}
diff --git a/.github/workflows/push-image-cache.yml 
b/.github/workflows/push-image-cache.yml
index 7db441c3cc7..2dc539956d7 100644
--- a/.github/workflows/push-image-cache.yml
+++ b/.github/workflows/push-image-cache.yml
@@ -20,12 +20,12 @@ name: Push image cache
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-public:
-        description: "The array of labels (in json form) determining public 
runners."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
-      runs-on-as-json-self-hosted:
-        description: "The array of labels (in json form) determining 
self-hosted runners."
+      arm-runners:
+        description: "The array of labels (in json form) determining public 
ARM runners."
         required: true
         type: string
       cache-type:
@@ -87,7 +87,7 @@ jobs:
     # adding space before (with >) apparently turns the `runs-on` processed 
line into a string "Array"
     # instead of an array of strings.
     # yamllint disable-line rule:line-length
-    runs-on: ${{ (inputs.platform == 'linux/amd64') && 
fromJSON(inputs.runs-on-as-json-public) || 
fromJSON(inputs.runs-on-as-json-self-hosted) }}
+    runs-on: ${{ (inputs.platform == 'linux/amd64') && 
fromJSON(inputs.amd-runners) || fromJSON(inputs.arm-runners) }}
     permissions:
       contents: read
       packages: write
@@ -162,7 +162,7 @@ jobs:
     # adding space before (with >) apparently turns the `runs-on` processed 
line into a string "Array"
     # instead of an array of strings.
     # yamllint disable-line rule:line-length
-    runs-on: ${{ (inputs.platform == 'linux/amd64') && 
fromJSON(inputs.runs-on-as-json-public) || 
fromJSON(inputs.runs-on-as-json-self-hosted) }}
+    runs-on: ${{ (inputs.platform == 'linux/amd64') && 
fromJSON(inputs.amd-runners) || fromJSON(inputs.arm-runners) }}
     permissions:
       contents: read
       packages: write
diff --git a/.github/workflows/release_dockerhub_image.yml 
b/.github/workflows/release_dockerhub_image.yml
index a82738d9973..9ed8590e32d 100644
--- a/.github/workflows/release_dockerhub_image.yml
+++ b/.github/workflows/release_dockerhub_image.yml
@@ -48,6 +48,8 @@ jobs:
       platformMatrix: ${{ steps.determine-matrix.outputs.platformMatrix }}
       airflowVersion: ${{ steps.check-airflow-version.outputs.airflowVersion }}
       skipLatest: ${{ steps.selective-checks.outputs.skipLatest }}
+      amd-runners: ${{ steps.selective-checks.outputs.amd-runners }}
+      arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
     env:
       GITHUB_CONTEXT: ${{ toJson(github) }}
       VERBOSE: true
@@ -109,7 +111,7 @@ jobs:
     timeout-minutes: 50
     # yamllint disable rule:line-length
     name: "Build: ${{ github.event.inputs.airflowVersion }}, ${{ 
matrix.python-version }}, ${{ matrix.platform }}"
-    runs-on: ${{ matrix.platform == 'linux/amd64' && 
fromJSON('["ubuntu-22.04"]') || fromJSON('["ubuntu-22.04-arm"]') }}
+    runs-on: ${{ (inputs.platform == 'linux/amd64') && 
fromJSON(needs.build-info.outputs.amd-runners) || 
fromJSON(needs.build-info.outputs.arm-runners) }}
     needs: [build-info]
     strategy:
       fail-fast: false
diff --git a/.github/workflows/run-unit-tests.yml 
b/.github/workflows/run-unit-tests.yml
index 939fa2b6341..cdfb7b58f0d 100644
--- a/.github/workflows/run-unit-tests.yml
+++ b/.github/workflows/run-unit-tests.yml
@@ -20,8 +20,8 @@ name: Unit tests
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-default:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
       test-group:
@@ -125,7 +125,7 @@ jobs:
       ${{ inputs.test-scope }}-${{ inputs.test-group }}:\
       ${{ inputs.test-name }}${{ inputs.test-name-separator }}${{ 
matrix.backend-version }}:\
       ${{ matrix.python-version}}:${{ matrix.test-types.description }}"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/special-tests.yml 
b/.github/workflows/special-tests.yml
index d47907f923f..7f20ce11111 100644
--- a/.github/workflows/special-tests.yml
+++ b/.github/workflows/special-tests.yml
@@ -20,8 +20,8 @@ name: Special tests
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-default:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
       default-branch:
@@ -90,7 +90,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       downgrade-sqlalchemy: "true"
       test-name: "MinSQLAlchemy-Postgres"
       test-scope: "DB"
@@ -113,7 +113,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       downgrade-sqlalchemy: "true"
       test-name: "MinSQLAlchemy-Postgres"
       test-scope: "DB"
@@ -136,7 +136,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       upgrade-boto: "true"
       test-name: "LatestBoto-Postgres"
       test-scope: "All"
@@ -160,7 +160,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       upgrade-boto: "true"
       test-name: "LatestBoto-Postgres"
       test-scope: "All"
@@ -185,7 +185,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       downgrade-pendulum: "true"
       test-name: "Pendulum2-Postgres"
       test-scope: "All"
@@ -209,7 +209,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       downgrade-pendulum: "true"
       test-name: "Pendulum2-Postgres"
       test-scope: "All"
@@ -233,7 +233,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       test-name: "Postgres"
       test-scope: "Quarantined"
       test-group: "core"
@@ -256,7 +256,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       test-name: "Postgres"
       test-scope: "Quarantined"
       test-group: "providers"
@@ -280,7 +280,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       test-name: "Postgres"
       test-scope: "ARM collection"
       test-group: "core"
@@ -304,7 +304,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       test-name: "Postgres"
       test-scope: "ARM collection"
       test-group: "providers"
@@ -329,7 +329,7 @@ jobs:
       contents: read
       packages: read
     with:
-      runs-on-as-json-default: ${{ inputs.runs-on-as-json-default }}
+      amd-runners: ${{ inputs.amd-runners }}
       test-name: "SystemTest"
       test-scope: "System"
       test-group: "core"
diff --git a/.github/workflows/test-providers.yml 
b/.github/workflows/test-providers.yml
index 9775df78061..0fbeaaee052 100644
--- a/.github/workflows/test-providers.yml
+++ b/.github/workflows/test-providers.yml
@@ -20,8 +20,8 @@ name: Provider tests
 on:  # yamllint disable-line rule:truthy
   workflow_call:
     inputs:
-      runs-on-as-json-default:
-        description: "The array of labels (in json form) determining default 
runner used for the build."
+      amd-runners:
+        description: "The array of labels (in json form) determining public 
AMD runners."
         required: true
         type: string
       canary-run:
@@ -68,7 +68,7 @@ jobs:
   prepare-install-verify-provider-distributions:
     timeout-minutes: 80
     name: "Providers ${{ matrix.package-format }} tests"
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     strategy:
       fail-fast: false
       matrix:
@@ -163,7 +163,7 @@ jobs:
     timeout-minutes: 80
     # yamllint disable rule:line-length
     name: Compat ${{ matrix.compat.airflow-version }}:P${{ 
matrix.compat.python-version }}:${{ matrix.compat.test-types.description }}
-    runs-on: ${{ fromJSON(inputs.runs-on-as-json-default) }}
+    runs-on: ${{ fromJSON(inputs.amd-runners) }}
     strategy:
       fail-fast: false
       matrix:
diff --git a/dev/breeze/doc/ci/04_selective_checks.md 
b/dev/breeze/doc/ci/04_selective_checks.md
index c450342f7d1..615bee819b7 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -196,14 +196,8 @@ GitHub Actions to pass the list of parameters to a command 
to execute
 | helm-version                                            | Which Helm version 
to use for tests                                                                
    | v3.15.3                                 |      |
 | include-success-outputs                                 | Whether to include 
outputs of successful parallel tests ("true"/"false")                           
    | false                                   |      |
 | individual-providers-test-types-list-as-strings-in-json | Which test types 
should be run for unit tests for providers (individually listed)                
      | Providers[\amazon\] Providers\[google\] | *    |
-| is-airflow-runner                                       | Whether runner 
used is an airflow or infrastructure runner (true if airflow/false if 
infrastructure)   | false                                   |      |
-| is-amd-runner                                           | Whether runner 
used is an AMD one                                                              
        | true                                    |      |
-| is-arm-runner                                           | Whether runner 
used is an ARM one                                                              
        | false                                   |      |
 | is-committer-build                                      | Whether the build 
is triggered by a committer                                                     
     | false                                   |      |
-| is-k8s-runner                                           | Whether the build 
runs on our k8s infrastructure                                                  
     | false                                   |      |
 | is-legacy-ui-api-labeled                                | Whether the PR is 
labeled as legacy UI/API                                                        
     | false                                   |      |
-| is-self-hosted-runner                                   | Whether the runner 
is self-hosted                                                                  
    | false                                   |      |
-| is-vm-runner                                            | Whether the runner 
uses VM to run                                                                  
    | true                                    |      |
 | kind-version                                            | Which Kind version 
to use for tests                                                                
    | v0.24.0                                 |      |
 | kubernetes-combos-list-as-string                        | All combinations 
of Python version and Kubernetes version to use for tests as space-separated 
string   | 3.9-v1.25.2 3.10-v1.28.13               | *    |
 | kubernetes-versions                                     | All Kubernetes 
versions to use for tests as JSON array                                         
        | \['v1.25.2'\]                           |      |
@@ -234,11 +228,8 @@ GitHub Actions to pass the list of parameters to a command 
to execute
 | run-tests                                               | Whether unit tests 
should be run ("true"/"false")                                                  
    | true                                    |      |
 | run-ui-tests                                            | Whether UI tests 
should be run ("true"/"false")                                                  
      | true                                    |      |
 | run-www-tests                                           | Whether Legacy WWW 
tests should be run ("true"/"false")                                            
    | true                                    |      |
-| runs-on-as-json-default                                 | List of labels 
assigned for runners for that build for default runs for that build (as string) 
        | \["ubuntu-22.04"\]                      |      |
-| runs-on-as-json-docs-build                              | List of labels 
assigned for runners for that build for ddcs build (as string)                  
        | \["ubuntu-22.04"\]                      |      |
-| runs-on-as-json-self-hosted                             | List of labels 
assigned for runners for that build for self hosted runners                     
        | \["self-hosted", "Linux", "X64"\]       |      |
-| runs-on-as-json-self-hosted-asf                         | List of labels 
assigned for runners for that build for ASF self hosted runners                 
        | \["self-hosted", "Linux", "X64"\]       |      |
-| runs-on-as-json-public                                  | List of labels 
assigned for runners for that build for public runners                          
        | \["ubuntu-22.04"\]                      |      |
+| amd-runners                                             | List of labels 
assigned for runners for that build for public AMD runners                      
        | \["ubuntu-22.04"\]                      |      |
+| arm-runners                                             | List of labels 
assigned for runners for that build for public ARM runners                      
        | \["ubuntu-22.04-arm"\]                  |      |
 | selected-providers-list-as-string                       | List of providers 
affected when they are selectively affected.                                    
     | airbyte http                            | *    |
 | skip-pre-commits                                        | Which pre-commits 
should be skipped during the static-checks run                                  
     | flynt,identity                          |      |
 | skip-providers-tests                                    | When provider 
tests should be skipped (on non-main branch or when no provider changes 
detected)        | true                                    |      |
@@ -329,8 +320,6 @@ This table summarizes the labels you can use on PRs to 
control the selective che
 | latest versions only             | *-versions-*, *-versions-*       | If 
set, the number of Python, Kubernetes, DB versions will be limited to the 
latest ones. |
 | non committer build              | is-committer-build               | If 
set, the scripts used for images are used from target branch for committers.    
       |
 | upgrade to newer dependencies    | upgrade-to-newer-dependencies    | If set 
to true (default false) then dependencies in the CI image build are upgraded.   
   |
-| use public runners               | runs-on-as-json-public           | Force 
using public runners as default runners.                                        
    |
-| use self-hosted runners          | runs-on-as-json-default          | Force 
using self-hosted runners as default runners.                                   
    |
 
 -----
 
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands.py 
b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
index 18e76153b95..a5453794a31 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
@@ -41,8 +41,7 @@ from airflow_breeze.commands.common_options import (
 )
 from airflow_breeze.global_constants import (
     DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
-    RUNS_ON_PUBLIC_RUNNER,
-    RUNS_ON_SELF_HOSTED_RUNNER,
+    PUBLIC_AMD_RUNNERS,
     GithubEvents,
     github_events,
 )
@@ -307,10 +306,8 @@ class WorkflowInfo(NamedTuple):
         for label in self.pull_request_labels:
             if "use public runners" in label:
                 get_console().print("[info]Force running on public runners")
-                return RUNS_ON_PUBLIC_RUNNER
-        if not os.environ.get("AIRFLOW_SELF_HOSTED_RUNNER"):
-            return RUNS_ON_PUBLIC_RUNNER
-        return RUNS_ON_SELF_HOSTED_RUNNER
+                return PUBLIC_AMD_RUNNERS
+        return PUBLIC_AMD_RUNNERS
 
     def is_canary_run(self) -> str:
         if (
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py 
b/dev/breeze/src/airflow_breeze/global_constants.py
index 2bd56e49eef..fcb9b4f70ed 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -34,16 +34,8 @@ from airflow_breeze.utils.path_utils import (
     AIRFLOW_ROOT_PATH,
 )
 
-RUNS_ON_PUBLIC_RUNNER = '["ubuntu-22.04"]'
-# we should get more sophisticated logic here in the future, but for now we 
just check if
-# we use self airflow, vm-based, amd hosted runner as a default
-# TODO: temporarily we need to switch to public runners to avoid issues with 
self-hosted runners
-RUNS_ON_SELF_HOSTED_RUNNER = '["ubuntu-22.04"]'
-RUNS_ON_SELF_HOSTED_ASF_RUNNER = '["self-hosted", "asf-runner"]'
-# TODO: when we have it properly set-up with labels we should change it to
-# RUNS_ON_SELF_HOSTED_RUNNER = '["self-hosted", "airflow-runner", "vm-runner", 
"X64"]'
-# RUNS_ON_SELF_HOSTED_RUNNER = '["self-hosted", "Linux", "X64"]'
-SELF_HOSTED_RUNNERS_CPU_COUNT = 8
+PUBLIC_AMD_RUNNERS = '["ubuntu-22.04"]'
+PUBLIC_ARM_RUNNERS = '["ubuntu-22.04-arm"]'
 
 ANSWER = ""
 
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py 
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 52c14bcadc6..64836539432 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -46,9 +46,8 @@ from airflow_breeze.global_constants import (
     KIND_VERSION,
     NUMBER_OF_LOW_DEP_SLICES,
     PROVIDERS_COMPATIBILITY_TESTS_MATRIX,
-    RUNS_ON_PUBLIC_RUNNER,
-    RUNS_ON_SELF_HOSTED_ASF_RUNNER,
-    RUNS_ON_SELF_HOSTED_RUNNER,
+    PUBLIC_AMD_RUNNERS,
+    PUBLIC_ARM_RUNNERS,
     TESTABLE_CORE_INTEGRATIONS,
     TESTABLE_PROVIDERS_INTEGRATIONS,
     GithubEvents,
@@ -86,7 +85,6 @@ LOG_WITHOUT_MOCK_IN_TESTS_EXCEPTION_LABEL = "log exception"
 NON_COMMITTER_BUILD_LABEL = "non committer build"
 UPGRADE_TO_NEWER_DEPENDENCIES_LABEL = "upgrade to newer dependencies"
 USE_PUBLIC_RUNNERS_LABEL = "use public runners"
-USE_SELF_HOSTED_RUNNERS_LABEL = "use self-hosted runners"
 
 ALL_CI_SELECTIVE_TEST_TYPES = "API Always CLI Core Other Serialization"
 
@@ -1257,135 +1255,12 @@ class SelectiveChecks:
         return " ".join(sorted(affected_providers))
 
     @cached_property
-    def runs_on_as_json_default(self) -> str:
-        if self._github_repository == APACHE_AIRFLOW_GITHUB_REPOSITORY:
-            if self._is_canary_run():
-                return RUNS_ON_SELF_HOSTED_RUNNER
-            if self._pr_labels and USE_PUBLIC_RUNNERS_LABEL in self._pr_labels:
-                # Forced public runners
-                return RUNS_ON_PUBLIC_RUNNER
-            actor = self._github_actor
-            if self._github_event in (GithubEvents.PULL_REQUEST, 
GithubEvents.PULL_REQUEST_TARGET):
-                try:
-                    actor = 
self._github_context_dict["event"]["pull_request"]["user"]["login"]
-                    get_console().print(
-                        f"[warning]The actor: {actor} retrieved from 
GITHUB_CONTEXT's"
-                        f" event.pull_request.user.login[/]"
-                    )
-                except Exception as e:
-                    get_console().print(f"[warning]Exception when reading user 
login: {e}[/]")
-                    get_console().print(
-                        f"[info]Could not find the actor from pull request, "
-                        f"falling back to the actor who triggered the PR: 
{actor}[/]"
-                    )
-            if (
-                actor not in COMMITTERS
-                and self._pr_labels
-                and USE_SELF_HOSTED_RUNNERS_LABEL in self._pr_labels
-            ):
-                get_console().print(
-                    f"[error]The PR has `{USE_SELF_HOSTED_RUNNERS_LABEL}` 
label, but "
-                    f"{actor} is not a committer. This is not going to 
work.[/]"
-                )
-                sys.exit(1)
-            if USE_SELF_HOSTED_RUNNERS_LABEL in self._pr_labels:
-                # Forced self-hosted runners
-                return RUNS_ON_SELF_HOSTED_RUNNER
-            return RUNS_ON_PUBLIC_RUNNER
-        return RUNS_ON_PUBLIC_RUNNER
-
-    @cached_property
-    def runs_on_as_json_self_hosted(self) -> str:
-        return RUNS_ON_SELF_HOSTED_RUNNER
+    def amd_runners(self) -> str:
+        return PUBLIC_AMD_RUNNERS
 
     @cached_property
-    def runs_on_as_json_self_hosted_asf(self) -> str:
-        return RUNS_ON_SELF_HOSTED_ASF_RUNNER
-
-    @cached_property
-    def runs_on_as_json_docs_build(self) -> str:
-        # We used to run docs build on self-hosted runners because they had 
more space, but
-        # It turned out that public runners have a lot of space in /mnt folder 
that we can utilise
-        # but in the future we might want to switch back to self-hosted 
runners so we have this
-        # separate property to determine that and place to implement different 
logic if needed
-        return RUNS_ON_PUBLIC_RUNNER
-
-    @cached_property
-    def runs_on_as_json_public(self) -> str:
-        return RUNS_ON_PUBLIC_RUNNER
-
-    @cached_property
-    def is_self_hosted_runner(self) -> bool:
-        """
-        True if the job has runs_on labels indicating It should run on 
"self-hosted" runner.
-
-        All self-hosted runners have "self-hosted" label.
-        """
-        return "self-hosted" in json.loads(self.runs_on_as_json_default)
-
-    @cached_property
-    def is_airflow_runner(self) -> bool:
-        """
-        True if the job has runs_on labels indicating It should run on Airflow 
managed runner.
-
-        All Airflow team-managed runners will have "airflow-runner" label.
-        """
-        # TODO: when we have it properly set-up with labels we should just 
check for
-        #       "airflow-runner" presence in runs_on
-        runs_on_array = json.loads(self.runs_on_as_json_default)
-        return "Linux" in runs_on_array and "X64" in runs_on_array and 
"self-hosted" in runs_on_array
-
-    @cached_property
-    def is_amd_runner(self) -> bool:
-        """
-        True if the job has runs_on labels indicating AMD architecture.
-
-        Matching amd label, asf-runner, and any ubuntu that does not contain 
arm
-        The last case is just in case - currently there are no public runners 
that have ARM
-        instances, but they can add them in the future. It might be that for 
compatibility
-        they will just add arm in the runner name - because currently GitHub 
users use just
-        one label "ubuntu-*" for all their work and depend on them being AMD 
ones.
-        """
-        return any(
-            [
-                label.lower() == "amd"
-                or label.lower() == "amd64"
-                or label.lower() == "x64"
-                or label == "asf-runner"
-                or ("ubuntu" in label and "arm" not in label.lower())
-                for label in json.loads(self.runs_on_as_json_public)
-            ]
-        )
-
-    @cached_property
-    def is_arm_runner(self) -> bool:
-        """
-        True if the job has runs_on labels indicating ARM architecture.
-
-        Matches any label containing arm - including ASF-specific "asf-arm" 
label.
-
-        # See 
https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=INFRA&title=ASF+Infra+provided+self-hosted+runners
-        """
-        return any(
-            [
-                label.lower() == "arm" or label.lower() == "arm64" or label == 
"asf-arm"
-                for label in json.loads(self.runs_on_as_json_public)
-            ]
-        )
-
-    @cached_property
-    def is_vm_runner(self) -> bool:
-        """Whether the runner is VM runner (managed by airflow)."""
-        # TODO: when we have it properly set-up with labels we should just 
check for
-        #       "airflow-runner" presence in runs_on
-        return self.is_airflow_runner
-
-    @cached_property
-    def is_k8s_runner(self) -> bool:
-        """Whether the runner is K8s runner (managed by airflow)."""
-        # TODO: when we have it properly set-up with labels we should just 
check for
-        #       "k8s-runner" presence in runs_on
-        return False
+    def arm_runners(self) -> str:
+        return PUBLIC_ARM_RUNNERS
 
     @cached_property
     def has_migrations(self) -> bool:
diff --git a/dev/breeze/tests/test_pr_info.py b/dev/breeze/tests/test_pr_info.py
index 1c874e5c4db..2a2f814c7dd 100644
--- a/dev/breeze/tests/test_pr_info.py
+++ b/dev/breeze/tests/test_pr_info.py
@@ -16,9 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-import os
 from pathlib import Path
-from unittest import mock
 
 from airflow_breeze.commands.ci_commands import workflow_info
 
@@ -26,123 +24,57 @@ TEST_PR_INFO_DIR = Path(__file__).parent / 
"test_pr_info_files"
 
 
 def test_pr_info():
-    with mock.patch.dict(os.environ, {"AIRFLOW_SELF_HOSTED_RUNNER": ""}):
-        json_string = (TEST_PR_INFO_DIR / "pr_github_context.json").read_text()
-        wi = workflow_info(json_string)
-        assert wi.pull_request_labels == [
-            "area:providers",
-            "area:dev-tools",
-            "area:logging",
-            "kind:documentation",
-        ]
-        assert wi.target_repo == "apache/airflow"
-        assert wi.head_repo == "test/airflow"
-        assert wi.event_name == "pull_request"
-        assert wi.pr_number == 26004
-        assert wi.get_runs_on() == '["ubuntu-22.04"]'
-        assert wi.is_canary_run() == "false"
-        assert wi.run_coverage() == "false"
+    json_string = (TEST_PR_INFO_DIR / "pr_github_context.json").read_text()
+    wi = workflow_info(json_string)
+    assert wi.pull_request_labels == [
+        "area:providers",
+        "area:dev-tools",
+        "area:logging",
+        "kind:documentation",
+    ]
+    assert wi.target_repo == "apache/airflow"
+    assert wi.head_repo == "test/airflow"
+    assert wi.event_name == "pull_request"
+    assert wi.pr_number == 26004
+    assert wi.get_runs_on() == '["ubuntu-22.04"]'
+    assert wi.is_canary_run() == "false"
+    assert wi.run_coverage() == "false"
 
 
 def test_push_info():
-    with mock.patch.dict(os.environ, {"AIRFLOW_SELF_HOSTED_RUNNER": ""}):
-        json_string = (TEST_PR_INFO_DIR / 
"push_github_context.json").read_text()
-        wi = workflow_info(json_string)
-        assert wi.pull_request_labels == []
-        assert wi.target_repo == "apache/airflow"
-        assert wi.head_repo == "apache/airflow"
-        assert wi.event_name == "push"
-        assert wi.pr_number is None
-        assert wi.get_runs_on() == '["ubuntu-22.04"]'
-        assert wi.is_canary_run() == "true"
-        assert wi.run_coverage() == "true"
+    json_string = (TEST_PR_INFO_DIR / "push_github_context.json").read_text()
+    wi = workflow_info(json_string)
+    assert wi.pull_request_labels == []
+    assert wi.target_repo == "apache/airflow"
+    assert wi.head_repo == "apache/airflow"
+    assert wi.event_name == "push"
+    assert wi.pr_number is None
+    assert wi.get_runs_on() == '["ubuntu-22.04"]'
+    assert wi.is_canary_run() == "true"
+    assert wi.run_coverage() == "true"
 
 
 def test_schedule():
-    with mock.patch.dict(os.environ, {"AIRFLOW_SELF_HOSTED_RUNNER": ""}):
-        json_string = (TEST_PR_INFO_DIR / 
"schedule_github_context.json").read_text()
-        wi = workflow_info(json_string)
-        assert wi.pull_request_labels == []
-        assert wi.target_repo == "apache/airflow"
-        assert wi.head_repo == "apache/airflow"
-        assert wi.event_name == "schedule"
-        assert wi.pr_number is None
-        assert wi.get_runs_on() == '["ubuntu-22.04"]'
-        assert wi.is_canary_run() == "true"
-        assert wi.run_coverage() == "false"
-
-
-def test_runs_on_self_hosted():
-    with mock.patch.dict(os.environ, {"AIRFLOW_SELF_HOSTED_RUNNER": "true"}):
-        json_string = (TEST_PR_INFO_DIR / "simple_pr.json").read_text()
-        wi = workflow_info(json_string)
-        assert wi.pull_request_labels == ["another"]
-        assert wi.target_repo == "apache/airflow"
-        assert wi.head_repo == "apache/airflow"
-        assert wi.event_name == "pull_request"
-        assert wi.pr_number == 1234
-        # TODO: fix it when we fix self-hosted runners
-        assert wi.get_runs_on() == '["ubuntu-22.04"]'
-        # assert wi.get_runs_on() == '["self-hosted", "Linux", "X64"]'
-        assert wi.is_canary_run() == "false"
-        assert wi.run_coverage() == "false"
-
-
-def test_runs_on_forced_public_runner():
-    with mock.patch.dict(os.environ, {"AIRFLOW_SELF_HOSTED_RUNNER": "true"}):
-        json_string = (TEST_PR_INFO_DIR / 
"self_hosted_forced_pr.json").read_text()
-        wi = workflow_info(json_string)
-        assert wi.pull_request_labels == ["use public runners", "another"]
-        assert wi.target_repo == "apache/airflow"
-        assert wi.head_repo == "apache/airflow"
-        assert wi.event_name == "pull_request"
-        assert wi.pr_number == 1234
-        assert wi.get_runs_on() == '["ubuntu-22.04"]'
-        assert wi.is_canary_run() == "false"
-        assert wi.run_coverage() == "false"
+    json_string = (TEST_PR_INFO_DIR / 
"schedule_github_context.json").read_text()
+    wi = workflow_info(json_string)
+    assert wi.pull_request_labels == []
+    assert wi.target_repo == "apache/airflow"
+    assert wi.head_repo == "apache/airflow"
+    assert wi.event_name == "schedule"
+    assert wi.pr_number is None
+    assert wi.get_runs_on() == '["ubuntu-22.04"]'
+    assert wi.is_canary_run() == "true"
+    assert wi.run_coverage() == "false"
 
 
 def test_runs_on_simple_pr_other_repo():
-    with mock.patch.dict(os.environ, {"AIRFLOW_SELF_HOSTED_RUNNER": ""}):
-        json_string = (TEST_PR_INFO_DIR / 
"simple_pr_different_repo.json").read_text()
-        wi = workflow_info(json_string)
-        assert wi.pull_request_labels == ["another"]
-        assert wi.target_repo == "apache/airflow"
-        assert wi.head_repo == "test/airflow"
-        assert wi.event_name == "pull_request"
-        assert wi.pr_number == 1234
-        assert wi.get_runs_on() == '["ubuntu-22.04"]'
-        assert wi.is_canary_run() == "false"
-        assert wi.run_coverage() == "false"
-
-
-def test_runs_on_push_other_branch():
-    with mock.patch.dict(os.environ, {"AIRFLOW_SELF_HOSTED_RUNNER": "true"}):
-        json_string = (TEST_PR_INFO_DIR / "push_other_branch.json").read_text()
-        wi = workflow_info(json_string)
-        assert wi.pull_request_labels == []
-        assert wi.target_repo == "apache/airflow"
-        assert wi.head_repo == "apache/airflow"
-        assert wi.event_name == "push"
-        assert wi.pr_number is None
-        # TODO: revert it when we fix self-hosted runners
-        assert wi.get_runs_on() == '["ubuntu-22.04"]'
-        # assert wi.get_runs_on() == '["self-hosted", "Linux", "X64"]'
-        assert wi.is_canary_run() == "false"
-        assert wi.run_coverage() == "false"
-
-
-def test_runs_on_push_v_test_branch():
-    with mock.patch.dict(os.environ, {"AIRFLOW_SELF_HOSTED_RUNNER": "true"}):
-        json_string = (TEST_PR_INFO_DIR / 
"push_v_test_branch.json").read_text()
-        wi = workflow_info(json_string)
-        assert wi.pull_request_labels == []
-        assert wi.target_repo == "apache/airflow"
-        assert wi.head_repo == "apache/airflow"
-        assert wi.event_name == "push"
-        assert wi.pr_number is None
-        # TODO: revert it when we fix self-hosted runners
-        assert wi.get_runs_on() == '["ubuntu-22.04"]'
-        # assert wi.get_runs_on() == '["self-hosted", "Linux", "X64"]'
-        assert wi.is_canary_run() == "true"
-        assert wi.run_coverage() == "false"
+    json_string = (TEST_PR_INFO_DIR / 
"simple_pr_different_repo.json").read_text()
+    wi = workflow_info(json_string)
+    assert wi.pull_request_labels == ["another"]
+    assert wi.target_repo == "apache/airflow"
+    assert wi.head_repo == "test/airflow"
+    assert wi.event_name == "pull_request"
+    assert wi.pr_number == 1234
+    assert wi.get_runs_on() == '["ubuntu-22.04"]'
+    assert wi.is_canary_run() == "false"
+    assert wi.run_coverage() == "false"
diff --git a/dev/breeze/tests/test_selective_checks.py 
b/dev/breeze/tests/test_selective_checks.py
index b49ab34c00c..11997e9fdfd 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -28,7 +28,6 @@ from rich.console import Console
 from airflow_breeze.global_constants import (
     ALLOWED_KUBERNETES_VERSIONS,
     ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
-    COMMITTERS,
     DEFAULT_KUBERNETES_VERSION,
     DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
     NUMBER_OF_LOW_DEP_SLICES,
@@ -2422,302 +2421,6 @@ def 
test_provider_yaml_or_pyproject_toml_changes_trigger_ci_build(
     assert_outputs_are_printed(expected_outputs, str(stderr))
 
 
[email protected](
-    (
-        "github_event, github_actor, github_repository, pr_labels, "
-        "github_context_dict, runs_on_as_json_default, runs_on_as_docs_build, 
is_self_hosted_runner, "
-        "is_airflow_runner, is_amd_runner, is_arm_runner, is_vm_runner, 
is_k8s_runner, exception"
-    ),
-    [
-        pytest.param(
-            GithubEvents.PUSH,
-            "user",
-            "apache/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            # "true",
-            # "true",
-            "true",
-            "false",
-            # TODO: revert it when we fix self-hosted runners
-            "false",
-            # "true",
-            "false",
-            False,
-            id="Push event",
-        ),
-        pytest.param(
-            GithubEvents.PUSH,
-            "user",
-            "private/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Push event for private repo",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST,
-            "user",
-            "apache/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST,
-            "user",
-            "private/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request private repo",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST,
-            COMMITTERS[0],
-            "apache/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request committer",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST,
-            COMMITTERS[0],
-            "apache/airflow",
-            (),
-            dict(event=dict(pull_request=dict(user=dict(login="user")))),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request committer pr non-committer",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST,
-            COMMITTERS[0],
-            "private/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request private repo committer",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST_TARGET,
-            "user",
-            "apache/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request target",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST_TARGET,
-            "user",
-            "private/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request target private repo",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST_TARGET,
-            COMMITTERS[0],
-            "apache/airflow",
-            [],
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request target committer",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST,
-            COMMITTERS[0],
-            "apache/airflow",
-            (),
-            dict(event=dict(pull_request=dict(user=dict(login="user")))),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request target committer pr non-committer",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST_TARGET,
-            COMMITTERS[0],
-            "private/airflow",
-            (),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request targe private repo committer",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST,
-            "user",
-            "apache/airflow",
-            ("use self-hosted runners",),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            True,
-            id="Pull request by non committer with 'use self-hosted runners' 
label.",
-        ),
-        pytest.param(
-            GithubEvents.PULL_REQUEST,
-            COMMITTERS[0],
-            "apache/airflow",
-            ("use public runners",),
-            dict(),
-            '["ubuntu-22.04"]',
-            '["ubuntu-22.04"]',
-            "false",
-            "false",
-            "true",
-            "false",
-            "false",
-            "false",
-            False,
-            id="Pull request by committer with 'use public runners' label.",
-        ),
-    ],
-)
-def test_runs_on(
-    github_event: GithubEvents,
-    github_actor: str,
-    github_repository: str,
-    pr_labels: tuple[str, ...],
-    github_context_dict: dict[str, Any],
-    runs_on_as_json_default: str,
-    runs_on_as_docs_build: str,
-    is_self_hosted_runner: str,
-    is_airflow_runner: str,
-    is_amd_runner: str,
-    is_arm_runner: str,
-    is_vm_runner: str,
-    is_k8s_runner: str,
-    exception: bool,
-):
-    def get_output() -> str:
-        return str(
-            SelectiveChecks(
-                files=(),
-                commit_ref="",
-                github_repository=github_repository,
-                github_event=github_event,
-                github_actor=github_actor,
-                github_context_dict=github_context_dict,
-                pr_labels=pr_labels,
-                default_branch="main",
-            )
-        )
-
-    if exception:
-        with pytest.raises(SystemExit):
-            get_output()
-    else:
-        stderr = get_output()
-        assert_outputs_are_printed({"runs-on-as-json-default": 
runs_on_as_json_default}, str(stderr))
-        assert_outputs_are_printed({"runs-on-as-json-docs-build": 
runs_on_as_docs_build}, str(stderr))
-        assert_outputs_are_printed({"is-self-hosted-runner": 
is_self_hosted_runner}, str(stderr))
-        assert_outputs_are_printed({"is-airflow-runner": is_airflow_runner}, 
str(stderr))
-        assert_outputs_are_printed({"is-amd-runner": is_amd_runner}, 
str(stderr))
-        assert_outputs_are_printed({"is-arm-runner": is_arm_runner}, 
str(stderr))
-        assert_outputs_are_printed({"is-vm-runner": is_vm_runner}, str(stderr))
-        assert_outputs_are_printed({"is-k8s-runner": is_k8s_runner}, 
str(stderr))
-
-
 @pytest.mark.parametrize(
     "files, has_migrations",
     [
@@ -2857,75 +2560,6 @@ def test_mypy_matches(
     assert_outputs_are_printed(expected_outputs, str(stderr))
 
 
[email protected](
-    "files, expected_outputs, github_actor, pr_labels",
-    [
-        pytest.param(
-            ("README.md",),
-            {
-                "is-committer-build": "false",
-                "runs-on-as-json-default": '["ubuntu-22.04"]',
-            },
-            "",
-            (),
-            id="Regular pr",
-        ),
-        pytest.param(
-            ("README.md",),
-            {
-                "is-committer-build": "true",
-                "runs-on-as-json-default": '["ubuntu-22.04"]',
-            },
-            "potiuk",
-            (),
-            id="Committer regular PR",
-        ),
-        pytest.param(
-            ("README.md",),
-            {
-                "is-committer-build": "false",
-                "runs-on-as-json-default": '["ubuntu-22.04"]',
-            },
-            "potiuk",
-            ("non committer build",),
-            id="Committer regular PR - forcing non-committer build",
-        ),
-        pytest.param(
-            ("README.md",),
-            {
-                "docker-cache": "disabled",
-                "disable-airflow-repo-cache": "true",
-            },
-            "potiuk",
-            ("disable image cache",),
-            id="Disabled cache",
-        ),
-        pytest.param(
-            ("README.md",),
-            {
-                "docker-cache": "registry",
-                "disable-airflow-repo-cache": "false",
-            },
-            "potiuk",
-            (),
-            id="Standard cache",
-        ),
-    ],
-)
-def test_pr_labels(
-    files: tuple[str, ...], expected_outputs: dict[str, str], github_actor: 
str, pr_labels: tuple[str, ...]
-):
-    stderr = SelectiveChecks(
-        files=files,
-        commit_ref=NEUTRAL_COMMIT,
-        default_branch="main",
-        github_actor=github_actor,
-        github_event=GithubEvents.PULL_REQUEST,
-        pr_labels=pr_labels,
-    )
-    assert_outputs_are_printed(expected_outputs, str(stderr))
-
-
 @pytest.mark.parametrize(
     "files, pr_labels, github_event",
     [

Reply via email to