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 28df8ee6bfd [v3-0-test] Add possibility to apply a commit with patch 
to docs when publishing (#53668) (#53678)
28df8ee6bfd is described below

commit 28df8ee6bfd9f8899d0d33428bb8400417bf6c5b
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Jul 23 20:01:57 2025 +0200

    [v3-0-test] Add possibility to apply a commit with patch to docs when 
publishing (#53668) (#53678)
    
    You can specify commit hash to apply when you build documentation.
    This allows to regenerate past version of the documentation by
    checking out the exact version tag that was used back then and
    applying the commit hash with fixes.
    
    This might help in fixing issues like
    https://github.com/apache/airflow/issues/53646
    
    (cherry picked from commit d6a51e9ac3c02724896858c9970752001e030031)
---
 .github/actions/breeze/action.yml                  |  3 -
 .../actions/prepare_breeze_and_image/action.yml    |  2 -
 .github/workflows/additional-ci-image-checks.yml   |  2 -
 .github/workflows/airflow-distributions-tests.yml  |  2 -
 .github/workflows/backport-cli.yml                 |  4 +-
 .github/workflows/basic-tests.yml                  | 14 +---
 .github/workflows/ci-amd.yml                       |  2 -
 .github/workflows/ci-arm.yml                       |  2 -
 .github/workflows/ci-image-build.yml               |  2 -
 .github/workflows/ci-image-checks.yml              |  2 -
 .github/workflows/helm-tests.yml                   |  6 +-
 .github/workflows/prod-image-build.yml             |  4 -
 .github/workflows/publish-docs-to-s3.yml           | 68 ++++++++++++++--
 .github/workflows/push-image-cache.yml             |  4 -
 .github/workflows/release_dockerhub_image.yml      |  2 -
 .../workflows/release_single_dockerhub_image.yml   |  4 -
 dev/README_RELEASE_AIRFLOW.md                      | 19 +++++
 dev/README_RELEASE_PROVIDERS.md                    | 14 ++++
 .../images/output_workflow-run_publish-docs.svg    | 92 ++++++++++++++++++----
 .../images/output_workflow-run_publish-docs.txt    |  2 +-
 .../airflow_breeze/commands/workflow_commands.py   | 59 +++++++++++++-
 .../commands/workflow_commands_config.py           | 15 +++-
 22 files changed, 251 insertions(+), 73 deletions(-)

diff --git a/.github/actions/breeze/action.yml 
b/.github/actions/breeze/action.yml
index 40f683c5a6f..46438127df6 100644
--- a/.github/actions/breeze/action.yml
+++ b/.github/actions/breeze/action.yml
@@ -22,9 +22,6 @@ inputs:
   python-version:
     description: 'Python version to use'
     default: "3.9"
-  use-uv:
-    description: 'Whether to use uv tool'
-    required: true
 outputs:
   host-python-version:
     description: Python version used in host
diff --git a/.github/actions/prepare_breeze_and_image/action.yml 
b/.github/actions/prepare_breeze_and_image/action.yml
index 4a2685cc4eb..0724167cda5 100644
--- a/.github/actions/prepare_breeze_and_image/action.yml
+++ b/.github/actions/prepare_breeze_and_image/action.yml
@@ -43,8 +43,6 @@ runs:
       shell: bash
     - name: "Install Breeze"
       uses: ./.github/actions/breeze
-      with:
-        use-uv: ${{ inputs.use-uv }}
       id: breeze
     - name: "Check free space"
       shell: bash
diff --git a/.github/workflows/additional-ci-image-checks.yml 
b/.github/workflows/additional-ci-image-checks.yml
index 86a75b1d31f..f3982389301 100644
--- a/.github/workflows/additional-ci-image-checks.yml
+++ b/.github/workflows/additional-ci-image-checks.yml
@@ -142,7 +142,5 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - name: "Check that image builds quickly"
         run: breeze shell --max-time 900 --platform "${PLATFORM}"
diff --git a/.github/workflows/airflow-distributions-tests.yml 
b/.github/workflows/airflow-distributions-tests.yml
index 62d4ee1f6b4..98203e47b3e 100644
--- a/.github/workflows/airflow-distributions-tests.yml
+++ b/.github/workflows/airflow-distributions-tests.yml
@@ -105,8 +105,6 @@ jobs:
         if: ${{ inputs.use-local-venv == 'true' }}
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
         if: ${{ inputs.use-local-venv == 'true' }}
       - name: "Cleanup dist files"
         run: rm -fv ./dist/*
diff --git a/.github/workflows/backport-cli.yml 
b/.github/workflows/backport-cli.yml
index 0ecdfb8e63e..42f81788682 100644
--- a/.github/workflows/backport-cli.yml
+++ b/.github/workflows/backport-cli.yml
@@ -70,8 +70,8 @@ jobs:
           TARGET_BRANCH: ${{ inputs.target-branch }}
           COMMIT_SHA: ${{ inputs.commit-sha }}
         run: |
-          git config --global user.email "[email protected]"
-          git config --global user.name "Your Name"
+          git config --global user.email "[email protected]"
+          git config --global user.name "Your friendly bot"
           set +e
           {
           echo 'cherry_picker_output<<EOF'
diff --git a/.github/workflows/basic-tests.yml 
b/.github/workflows/basic-tests.yml
index 45f92c8db14..8b12aa03b65 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -80,8 +80,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - run: uv tool run --from apache-airflow-breeze pytest -n auto 
--color=yes
         working-directory: ./dev/breeze/
   tests-ui:
@@ -169,8 +167,6 @@ jobs:
           persist-credentials: false
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
         id: breeze
       - name: "Install pre-commit"
         uses: ./.github/actions/install-pre-commit
@@ -200,8 +196,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
         id: breeze
       - name: "Install pre-commit"
         uses: ./.github/actions/install-pre-commit
@@ -256,8 +250,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
         id: breeze
       - name: "Install pre-commit"
         uses: ./.github/actions/install-pre-commit
@@ -338,14 +330,12 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - name: "Cleanup dist files"
         run: rm -fv ./dist/*
       - name: Setup git for tagging
         run: |
-          git config --global user.email "[email protected]"
-          git config --global user.name "Your Name"
+          git config --global user.email "[email protected]"
+          git config --global user.name "Your friendly bot"
       - name: Install twine
         run: pip install twine
       - name: "Check Airflow create minor branch command"
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index db1a051e651..d0eb5fe70f6 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -148,8 +148,6 @@ jobs:
           persist-credentials: false
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
         id: breeze
       - name: "Get information about the Workflow"
         id: source-run-info
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index 8c309409ca3..5190bd38975 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -141,8 +141,6 @@ jobs:
           persist-credentials: false
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
         id: breeze
       - name: "Get information about the Workflow"
         id: source-run-info
diff --git a/.github/workflows/ci-image-build.yml 
b/.github/workflows/ci-image-build.yml
index f58fe1946ca..e716f85c5ad 100644
--- a/.github/workflows/ci-image-build.yml
+++ b/.github/workflows/ci-image-build.yml
@@ -124,8 +124,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - name: "Restore ci-cache mount image ${{ inputs.platform }}:${{ 
env.PYTHON_MAJOR_MINOR_VERSION }}"
         uses: 
apache/infrastructure-actions/stash/restore@1c35b5ccf8fba5d4c3fdf25a045ca91aa0cbc468
         with:
diff --git a/.github/workflows/ci-image-checks.yml 
b/.github/workflows/ci-image-checks.yml
index caa6f4c8889..116e4095a7d 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -133,8 +133,6 @@ jobs:
         if: inputs.canary-run == 'true'
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
         id: breeze
         if: inputs.canary-run == 'true'
       - name: "Install pre-commit"
diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml
index cd0abec72db..46e91cf9cf1 100644
--- a/.github/workflows/helm-tests.yml
+++ b/.github/workflows/helm-tests.yml
@@ -101,12 +101,10 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - name: Setup git for tagging
         run: |
-          git config --global user.email "[email protected]"
-          git config --global user.name "Your Name"
+          git config --global user.email "[email protected]"
+          git config --global user.name "Your friendly bot"
       - name: "Remove old artifacts"
         run: rm -rf dist/*
       - name: "Setup k8s/helm environment"
diff --git a/.github/workflows/prod-image-build.yml 
b/.github/workflows/prod-image-build.yml
index 4819ee7be14..6a075c9d521 100644
--- a/.github/workflows/prod-image-build.yml
+++ b/.github/workflows/prod-image-build.yml
@@ -136,8 +136,6 @@ jobs:
         if: inputs.upload-package-artifact == 'true'
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
         if: inputs.upload-package-artifact == 'true'
       - name: "Prepare providers packages - all providers built from sources"
         shell: bash
@@ -218,8 +216,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - name: "Cleanup dist and context file"
         shell: bash
         run: rm -fv ./dist/* ./docker-context-files/*
diff --git a/.github/workflows/publish-docs-to-s3.yml 
b/.github/workflows/publish-docs-to-s3.yml
index 6c1eb1dd48a..e6d9a1a2232 100644
--- a/.github/workflows/publish-docs-to-s3.yml
+++ b/.github/workflows/publish-docs-to-s3.yml
@@ -52,7 +52,18 @@ on:  # yamllint disable-line rule:truthy
         required: false
         default: false
         type: boolean
-
+      airflow-base-version:
+        required: false
+        description: "Override the Airflow Base Version to use for the docs 
build"
+        type: string
+      airflow-version:
+        required: false
+        description: "Override the Airflow Version to use for the docs build"
+        type: string
+      apply-commits:
+        required: false
+        description: "Optionally apply commit hashes before building - to 
patch the docs (coma separated)"
+        type: string
 permissions:
   contents: read
 jobs:
@@ -69,6 +80,9 @@ jobs:
       DESTINATION: ${{ inputs.destination }}
       SKIP_WRITE_TO_STABLE_FOLDER: ${{ inputs.skip-write-to-stable-folder }}
       BUILD_SBOMS: ${{ inputs.build-sboms }}
+      AIRFLOW_BASE_VERSION: ${{ inputs.airflow-base-version || '' }}
+      AIRFLOW_VERSION: ${{ inputs.airflow-version || '' }}
+      APPLY_COMMITS: ${{ inputs.apply-commits || '' }}
     outputs:
       include-docs: ${{ inputs.include-docs == 'all' && '' || 
inputs.include-docs }}
       destination-location: ${{ steps.parameters.outputs.destination-location 
}}
@@ -102,6 +116,9 @@ jobs:
           echo "Destination: '${DESTINATION}'"
           echo "Skip write to stable folder: '${SKIP_WRITE_TO_STABLE_FOLDER}'"
           echo "Build SBOMs: '${BUILD_SBOMS}'"
+          echo "Airflow Base Version: '${AIRFLOW_BASE_VERSION}'"
+          echo "Airflow Version: '${AIRFLOW_VERSION}'"
+          echo "Apply commits: '${APPLY_COMMITS}'"
           if [[ "${DESTINATION}" == "auto" ]]; then
              if [[ "${REF}" =~ ^.*[0-9]*\.[0-9]*\.[0-9]*$ ]]; then
                 echo "${REF} looks like final release, using live destination"
@@ -118,8 +135,20 @@ jobs:
              echo 
"destination-location=s3://staging-docs-airflow-apache-org/docs/" >> 
${GITHUB_OUTPUT}
           fi
           if [[ " ${INCLUDE_DOCS} " =~ " apache-airflow " ]]; then
-             AIRFLOW_BASE_VERSION=$(echo "${REF}" | grep -oE 
'[0-9]+\.[0-9]+\.[0-9]+')
-             AIRFLOW_VERSION="${REF}"
+             if [[ ${AIRFLOW_BASE_VERSION=} == "" && ${AIRFLOW_VERSION=} == "" 
]]; then
+                echo "No Airflow Versions provided, using ${REF} to determine 
it."
+                AIRFLOW_VERSION="${REF}"
+                set +e
+                AIRFLOW_BASE_VERSION=$(echo "${REF}" | grep -oE 
'[0-9]+\.[0-9]+\.[0-9]+')
+                set -e
+                if [[ ${AIRFLOW_BASE_VERSION=} == "" ]]; then
+                   echo
+                   echo "No Airflow Base Version found in ${REF}"
+                   echo "You need to force airflow version and airflow base 
version in the workflow."
+                   echo
+                   exit 1
+                fi
+             fi
              echo "airflow-base-version=${AIRFLOW_BASE_VERSION}" >> 
${GITHUB_OUTPUT}
              echo "airflow-version=${AIRFLOW_VERSION}" >> ${GITHUB_OUTPUT}
           else
@@ -139,6 +168,7 @@ jobs:
       INCLUDE_SUCCESS_OUTPUTS: false
       VERBOSE: "true"
       EXTRA_BUILD_OPTIONS: ${{ needs.build-info.outputs.extra-build-options }}
+      APPLY_COMMITS: ${{ inputs.apply-commits || '' }}
     steps:
       - name: "Cleanup repo"
         shell: bash
@@ -161,17 +191,43 @@ jobs:
           ref: ${{ inputs.ref }}
           fetch-depth: 0
           fetch-tags: true
+      - name: "Apply patch commits if provided"
+        run: |
+          if [[ "${APPLY_COMMITS}" != "" ]]; then
+            git config --global user.email "[email protected]"
+            git config --global user.name "Your friendly bot"
+            echo "Applying commits ${APPLY_COMMIT} to the docs"
+            # Split APPLY_COMMITS by comma and apply each commit
+            IFS=',' read -ra COMMIT_ARRAY <<< "${APPLY_COMMITS}"
+            for APPLY_COMMIT in "${COMMIT_ARRAY[@]}"; do
+              echo "Applying commit ${APPLY_COMMIT}"
+              git fetch origin "${APPLY_COMMIT}"
+              git cherry-pick "${APPLY_COMMIT}"
+            done
+          else
+            echo "No commits provided to apply, skipping."
+          fi
       - name: "Install Breeze from the ${{ inputs.ref }} reference"
         uses: ./.github/actions/breeze
         with:
-          use-uv: ${{ inputs.use-uv }}
           python-version: "${{ needs.build-info.outputs.default-python-version 
}}"
       - name: "Building image from the ${{ inputs.ref }} reference"
         env:
           INCLUDE_DOCS: ${{ needs.build-info.outputs.include-docs }}
           INCLUDE_COMMITS: ${{ startsWith(inputs.ref, 'providers') && 'true' 
|| 'false' }}
+        # if the regular breeze ci-image build fails, we will try to build the 
image using docker buildx
+        # This is needed for the case when we are building an old image which 
tries to use main as
+        # a cache and it fails because the main branch has changed and does 
not have the same pyproject.toml
+        # Structure as the one we are trying to build.
         run: >
-          breeze ci-image build
+          breeze ci-image build ||
+          docker buildx build --load --builder default --progress=auto --pull
+          --build-arg AIRFLOW_EXTRAS=devel-ci --build-arg 
AIRFLOW_PRE_CACHED_PIP_PACKAGES=false
+          --build-arg AIRFLOW_USE_UV=true --build-arg UV_HTTP_TIMEOUT=300
+          --build-arg BUILD_PROGRESS=auto --build-arg 
INSTALL_MYSQL_CLIENT_TYPE=mariadb
+          --build-arg VERSION_SUFFIX_FOR_PYPI=dev0
+          -t ghcr.io/apache/airflow/main/ci/python3.9:latest --target main .
+          -f Dockerfile.ci --platform linux/amd64
       - name: "Building docs with --docs-only flag using ${{ inputs.ref }} 
reference breeze"
         env:
           INCLUDE_DOCS: ${{ needs.build-info.outputs.include-docs }}
@@ -268,8 +324,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - name: "Download docs prepared as artifacts"
         uses: 
actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093  # v4.3.0
         with:
diff --git a/.github/workflows/push-image-cache.yml 
b/.github/workflows/push-image-cache.yml
index b523577b46c..eccd1760961 100644
--- a/.github/workflows/push-image-cache.yml
+++ b/.github/workflows/push-image-cache.yml
@@ -120,8 +120,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - name: Login to ghcr.io
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -191,8 +189,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: ${{ inputs.use-uv }}
       - name: "Cleanup dist and context file"
         run: rm -fv ./dist/* ./docker-context-files/*
       - name: "Download packages prepared as artifacts"
diff --git a/.github/workflows/release_dockerhub_image.yml 
b/.github/workflows/release_dockerhub_image.yml
index 2499e521d74..4678ea78f9d 100644
--- a/.github/workflows/release_dockerhub_image.yml
+++ b/.github/workflows/release_dockerhub_image.yml
@@ -96,8 +96,6 @@ jobs:
         run: uv run scripts/ci/airflow_version_check.py "${AIRFLOW_VERSION}" 
>> "${GITHUB_OUTPUT}"
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: "true"
       - name: Selective checks
         id: selective-checks
         env:
diff --git a/.github/workflows/release_single_dockerhub_image.yml 
b/.github/workflows/release_single_dockerhub_image.yml
index fd572adbaba..8cd5acca6aa 100644
--- a/.github/workflows/release_single_dockerhub_image.yml
+++ b/.github/workflows/release_single_dockerhub_image.yml
@@ -83,8 +83,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: "false"
       - name: Free space
         run: breeze ci free-space --answer yes
       - name: "Cleanup dist and context file"
@@ -181,8 +179,6 @@ jobs:
         run: ./scripts/ci/prepare_and_cleanup_runner.sh
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
-        with:
-          use-uv: "false"
       - name: Free space
         run: breeze ci free-space --answer yes
       - name: "Cleanup dist and context file"
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index a61ec4496a7..854582e9323 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -376,6 +376,25 @@ Other available parameters can be found with:
 breeze workflow-run publish-docs --help
 ```
 
+In case you publish the documentation from branch, you can specify 
`--airflow-version` and `--airflow-base-version`
+parameters to specify which version of airflow you want to build the 
documentation for - as it cannot
+be automatically derived from tag name. Normally both are automatically 
derived from the tag name.
+
+One of the interesting features of publishing this way is that you can also 
rebuild historical version of
+the documentation with patches applied to the documentation (if they can be 
applied cleanly).
+
+Yoy should specify the `--apply-commits` parameter with the list of commits 
you want to apply
+separated by commas and the workflow will apply those commits to the 
documentation before
+building it. (don't forget to add --skip-write-to-stable-folder if you are 
publishing
+previous version of the distribution). Example:
+
+```shell script
+breeze workflow-run publish-docs --ref 3.0.3 --site-env staging \
+  --apply-commits 
4ae273cbedec66c87dc40218c7a94863390a380d,e61e9618bdd6be8213d277b1427f67079fcb1d9b
 \
+  --skip-write-to-stable-folder \
+  apache-airflow docker-stack task-sdk
+```
+
 ### Manually using GitHub Actions
 
 There are two steps to publish the documentation:
diff --git a/dev/README_RELEASE_PROVIDERS.md b/dev/README_RELEASE_PROVIDERS.md
index 08492c7f2de..ed3e91aaaa8 100644
--- a/dev/README_RELEASE_PROVIDERS.md
+++ b/dev/README_RELEASE_PROVIDERS.md
@@ -516,6 +516,20 @@ The `--ref` parameter should be the tag of the release 
candidate you are publish
 The `--site-env` parameter should be set to `staging` for pre-release versions 
or `live` for final releases. the default option is `auto`
 if the tag is rc it publishes to `staging` bucket, otherwise it publishes to 
`live` bucket.
 
+One of the interesting features of publishing this way is that you can also 
rebuild historical version of
+the documentation with patches applied to the documentation (if they can be 
applied cleanly).
+
+Yoy should specify the `--apply-commits` parameter with the list of commits 
you want to apply
+separated by commas and the workflow will apply those commits to the 
documentation before
+building it (don't forget to add --skip-write-to-stable-folder if you are 
publishing
+previous version of the distribution). Example:
+
+```shell script
+breeze workflow-run publish-docs --ref providers-apache-hive/9.0.0 --site-env 
live \
+  --apply-commits 4ae273cbedec66c87dc40218c7a94863390a380d 
--skip-write-to-stable-folder \
+  apache.hive
+```
+
 Other available parameters can be found with:
 
 ```shell
diff --git a/dev/breeze/doc/images/output_workflow-run_publish-docs.svg 
b/dev/breeze/doc/images/output_workflow-run_publish-docs.svg
index 377cf320cee..d15db05f279 100644
--- a/dev/breeze/doc/images/output_workflow-run_publish-docs.svg
+++ b/dev/breeze/doc/images/output_workflow-run_publish-docs.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 733.1999999999999" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 1123.6" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -45,7 +45,7 @@
 
     <defs>
     <clipPath id="breeze-workflow-run-publish-docs-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="682.1999999999999" />
+      <rect x="0" y="0" width="1463.0" height="1072.6" />
     </clipPath>
     <clipPath id="breeze-workflow-run-publish-docs-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -128,9 +128,57 @@
 <clipPath id="breeze-workflow-run-publish-docs-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-27">
+    <rect x="0" y="660.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-28">
+    <rect x="0" y="684.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-29">
+    <rect x="0" y="709.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-30">
+    <rect x="0" y="733.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-31">
+    <rect x="0" y="757.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-32">
+    <rect x="0" y="782.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-33">
+    <rect x="0" y="806.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-34">
+    <rect x="0" y="831.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-35">
+    <rect x="0" y="855.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-36">
+    <rect x="0" y="879.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-37">
+    <rect x="0" y="904.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-38">
+    <rect x="0" y="928.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-39">
+    <rect x="0" y="953.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-40">
+    <rect x="0" y="977.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-41">
+    <rect x="0" y="1001.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-workflow-run-publish-docs-line-42">
+    <rect x="0" y="1026.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="731.2" rx="8"/><text 
class="breeze-workflow-run-publish-docs-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;workflow-run&#160;publish-docs</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1121.6" rx="8"/><text 
class="breeze-workflow-run-publish-docs-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;workflow-run&#160;publish-docs</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -157,17 +205,33 @@
 </text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="361.6" 
textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-14)">
 </text><text class="breeze-workflow-run-publish-docs-r1" x="12.2" y="386" 
textLength="427" 
clip-path="url(#breeze-workflow-run-publish-docs-line-15)">Trigger&#160;publish&#160;docs&#160;to&#160;S3&#160;workflow</text><text
 class="breeze-workflow-run-publish-docs-r1" x="1464" y="386" textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-15)">
 </text><text class="breeze-workflow-run-publish-docs-r1" x="1464" y="410.4" 
textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-16)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="434.8" 
textLength="24.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-17)">╭─</text><text 
class="breeze-workflow-run-publish-docs-r5" x="24.4" y="434.8" 
textLength="378.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-17)">&#160;Trigger&#160;publish&#160;docs&#160;workflow&#160;</text><text
 class="breeze-workflow-run-publish-docs-r5" x="402.6" y="434.8" 
textLength="1037" clip-path="url(#breeze-workflow-run [...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-18)">│</text><text 
class="breeze-workflow-run-publish-docs-r6" x="24.4" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-18)">*</text><text 
class="breeze-workflow-run-publish-docs-r4" x="61" y="459.2" textLength="61" 
clip-path="url(#breeze-workflow-run-publish-docs-line-18)">--ref</text><text 
class="breeze-workfl [...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-19)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="61" y="483.6" textLength="256.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-19)">--skip-tag-validation</text><text
 class="breeze-workflow-run-publish-docs-r1" x="463.6" y="483.6" 
textLength="976" 
clip-path="url(#breeze-workflow-run-publish-docs-line-19)">Skip&#160;valid [...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-20)">│</text><text 
class="breeze-workflow-run-publish-docs-r1" x="463.6" y="508" textLength="976" 
clip-path="url(#breeze-workflow-run-publish-docs-line-20)">caution.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-21)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="61" y="532.4" textLength="170.8" 
clip-path="url(#breeze-workflow-run-publish-docs-line-21)">--exclude-docs</text><text
 class="breeze-workflow-run-publish-docs-r1" x="463.6" y="532.4" 
textLength="805.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-21)">Comma&#160;separated 
[...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-22)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="61" y="556.8" textLength="122" 
clip-path="url(#breeze-workflow-run-publish-docs-line-22)">--site-env</text><text
 class="breeze-workflow-run-publish-docs-r1" x="463.6" y="556.8" 
textLength="671" 
clip-path="url(#breeze-workflow-run-publish-docs-line-22)">S3&#160;bucket&#160;to&#160;
 [...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="581.2" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-23)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="61" y="581.2" textLength="353.8" 
clip-path="url(#breeze-workflow-run-publish-docs-line-23)">--skip-write-to-stable-folder</text><text
 class="breeze-workflow-run-publish-docs-r1" x="463.6" y="581.2" 
textLength="366" 
clip-path="url(#breeze-workflow-run-publish-docs-line-23)">Skip&#1 [...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="605.6" 
textLength="1464" 
clip-path="url(#breeze-workflow-run-publish-docs-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-workflow-run-publish-docs-r1" x="1464" y="605.6" 
textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-24)">
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="630" 
textLength="24.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-25)">╭─</text><text 
class="breeze-workflow-run-publish-docs-r5" x="24.4" y="630" textLength="195.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-25)">&#160;Common&#160;options&#160;</text><text
 class="breeze-workflow-run-publish-docs-r5" x="219.6" y="630" 
textLength="1220" 
clip-path="url(#breeze-workflow-run-publish-docs-line-25)">─────── [...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-26)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="24.4" y="654.4" 
textLength="73.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-26)">--help</text><text 
class="breeze-workflow-run-publish-docs-r9" x="122" y="654.4" textLength="24.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-26)">-h</text><text 
class="breeze-w [...]
-</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="678.8" 
textLength="1464" 
clip-path="url(#breeze-workflow-run-publish-docs-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-workflow-run-publish-docs-r1" x="1464" y="678.8" 
textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-27)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="434.8" 
textLength="24.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-17)">╭─</text><text 
class="breeze-workflow-run-publish-docs-r5" x="24.4" y="434.8" 
textLength="439.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-17)">&#160;Select&#160;branch&#160;or&#160;tag&#160;to&#160;build&#160;docs&#160;</text><text
 class="breeze-workflow-run-publish-docs-r5" x="463.6" y="434.8" 
textLength="976" clip-path="url(# [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-18)">│</text><text 
class="breeze-workflow-run-publish-docs-r6" x="24.4" y="459.2" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-18)">*</text><text 
class="breeze-workflow-run-publish-docs-r4" x="61" y="459.2" textLength="61" 
clip-path="url(#breeze-workflow-run-publish-docs-line-18)">--ref</text><text 
class="breeze-workfl [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="483.6" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-19)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="61" y="483.6" textLength="256.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-19)">--skip-tag-validation</text><text
 class="breeze-workflow-run-publish-docs-r1" x="366" y="483.6" 
textLength="1000.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-19)">Skip&#160;vali [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="508" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-20)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="61" y="508" textLength="183" 
clip-path="url(#breeze-workflow-run-publish-docs-line-20)">--apply-commits</text><text
 class="breeze-workflow-run-publish-docs-r1" x="366" y="508" 
textLength="1073.6" 
clip-path="url(#breeze-workflow-run-publish-docs-line-20)">Apply&#160;commits&#160;befo
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-21)">│</text><text 
class="breeze-workflow-run-publish-docs-r1" x="366" y="532.4" 
textLength="1073.6" 
clip-path="url(#breeze-workflow-run-publish-docs-line-21)">separated&#160;list&#160;of&#160;commits).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="556.8" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-22)">│</text><text 
class="breeze-workflow-run-publish-docs-r7" x="366" y="556.8" 
textLength="1073.6" 
clip-path="url(#breeze-workflow-run-publish-docs-line-22)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="581.2" 
textLength="1464" 
clip-path="url(#breeze-workflow-run-publish-docs-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-workflow-run-publish-docs-r1" x="1464" y="581.2" 
textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-23)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="605.6" 
textLength="24.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-24)">╭─</text><text 
class="breeze-workflow-run-publish-docs-r5" x="24.4" y="605.6" 
textLength="451.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-24)">&#160;Optional&#160;airflow&#160;versions&#160;to&#160;build.&#160;</text><text
 class="breeze-workflow-run-publish-docs-r5" x="475.8" y="605.6" 
textLength="963.8" clip-path="url(#breeze- [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="630" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-25)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="24.4" y="630" textLength="207.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-25)">--airflow-version</text><text
 class="breeze-workflow-run-publish-docs-r1" x="341.6" y="630" 
textLength="1098" 
clip-path="url(#breeze-workflow-run-publish-docs-line-25)">Override&#160;Airflow&
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-26)">│</text><text 
class="breeze-workflow-run-publish-docs-r1" x="341.6" y="654.4" 
textLength="1098" 
clip-path="url(#breeze-workflow-run-publish-docs-line-26)">from&#160;the&#160;ref.&#160;If&#160;only&#160;base&#160;version&#160;is&#160;provided,&#160;it&#160;will&#160;be&#160;set&#160;to&#160;the&#160;same&#160;as&#160;the&#160;base&#160;&#160
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-27)">│</text><text 
class="breeze-workflow-run-publish-docs-r1" x="341.6" y="678.8" 
textLength="1098" 
clip-path="url(#breeze-workflow-run-publish-docs-line-27)">version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="703.2" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-28)">│</text><text 
class="breeze-workflow-run-publish-docs-r7" x="341.6" y="703.2" 
textLength="1098" 
clip-path="url(#breeze-workflow-run-publish-docs-line-28)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="727.6" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-29)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="24.4" y="727.6" 
textLength="268.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-29)">--airflow-base-version</text><text
 class="breeze-workflow-run-publish-docs-r1" x="341.6" y="727.6" 
textLength="1098" 
clip-path="url(#breeze-workflow-run-publish-docs-line-29)">Override&#1 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="752" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-30)">│</text><text 
class="breeze-workflow-run-publish-docs-r1" x="341.6" y="752" textLength="1098" 
clip-path="url(#breeze-workflow-run-publish-docs-line-30)">extracted&#160;from&#160;the&#160;ref.&#160;If&#160;airflow-version&#160;is&#160;provided,&#160;the&#160;base&#160;version&#160;of&#160;the&#160;version&#160;&#160;&#160;</text><text
 class="b [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="776.4" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-31)">│</text><text 
class="breeze-workflow-run-publish-docs-r1" x="341.6" y="776.4" 
textLength="1098" 
clip-path="url(#breeze-workflow-run-publish-docs-line-31)">provided&#160;(i.e.&#160;stripped&#160;pre-/post-/dev-&#160;suffixes).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-32)">│</text><text 
class="breeze-workflow-run-publish-docs-r7" x="341.6" y="800.8" 
textLength="1098" 
clip-path="url(#breeze-workflow-run-publish-docs-line-32)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="825.2" 
textLength="1464" 
clip-path="url(#breeze-workflow-run-publish-docs-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-workflow-run-publish-docs-r1" x="1464" y="825.2" 
textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-33)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="849.6" 
textLength="24.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-34)">╭─</text><text 
class="breeze-workflow-run-publish-docs-r5" x="24.4" y="849.6" textLength="488" 
clip-path="url(#breeze-workflow-run-publish-docs-line-34)">&#160;Select&#160;docs&#160;to&#160;exclude&#160;and&#160;destination&#160;</text><text
 class="breeze-workflow-run-publish-docs-r5" x="512.4" y="849.6" 
textLength="927.2" clip-path="url(#b [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="874" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-35)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="24.4" y="874" textLength="170.8" 
clip-path="url(#breeze-workflow-run-publish-docs-line-35)">--exclude-docs</text><text
 class="breeze-workflow-run-publish-docs-r1" x="427" y="874" 
textLength="1012.6" 
clip-path="url(#breeze-workflow-run-publish-docs-line-35)">Comma&#160;separated&#160
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="898.4" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-36)">│</text><text 
class="breeze-workflow-run-publish-docs-r1" x="427" y="898.4" 
textLength="1012.6" 
clip-path="url(#breeze-workflow-run-publish-docs-line-36)">(example:&#160;apache.druid,google)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="922.8" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-37)">│</text><text 
class="breeze-workflow-run-publish-docs-r7" x="427" y="922.8" 
textLength="1012.6" 
clip-path="url(#breeze-workflow-run-publish-docs-line-37)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="947.2" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-38)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="24.4" y="947.2" textLength="122" 
clip-path="url(#breeze-workflow-run-publish-docs-line-38)">--site-env</text><text
 class="breeze-workflow-run-publish-docs-r1" x="427" y="947.2" textLength="671" 
clip-path="url(#breeze-workflow-run-publish-docs-line-38)">S3&#160;bucket&#160;to&#160;
 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="971.6" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-39)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="24.4" y="971.6" 
textLength="353.8" 
clip-path="url(#breeze-workflow-run-publish-docs-line-39)">--skip-write-to-stable-folder</text><text
 class="breeze-workflow-run-publish-docs-r1" x="427" y="971.6" textLength="366" 
clip-path="url(#breeze-workflow-run-publish-docs-line-39)">Skip&#1 [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="996" 
textLength="1464" 
clip-path="url(#breeze-workflow-run-publish-docs-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-workflow-run-publish-docs-r1" x="1464" y="996" textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-40)">
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="1020.4" 
textLength="24.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-41)">╭─</text><text 
class="breeze-workflow-run-publish-docs-r5" x="24.4" y="1020.4" 
textLength="195.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-41)">&#160;Common&#160;options&#160;</text><text
 class="breeze-workflow-run-publish-docs-r5" x="219.6" y="1020.4" 
textLength="1220" clip-path="url(#breeze-workflow-run-publish-docs-line-41) 
[...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="1044.8" 
textLength="12.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-42)">│</text><text 
class="breeze-workflow-run-publish-docs-r4" x="24.4" y="1044.8" 
textLength="73.2" 
clip-path="url(#breeze-workflow-run-publish-docs-line-42)">--help</text><text 
class="breeze-workflow-run-publish-docs-r9" x="122" y="1044.8" 
textLength="24.4" 
clip-path="url(#breeze-workflow-run-publish-docs-line-42)">-h</text><text 
class="breez [...]
+</text><text class="breeze-workflow-run-publish-docs-r5" x="0" y="1069.2" 
textLength="1464" 
clip-path="url(#breeze-workflow-run-publish-docs-line-43)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-workflow-run-publish-docs-r1" x="1464" y="1069.2" 
textLength="12.2" clip-path="url(#breeze-workflow-run-publish-docs-line-43)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_workflow-run_publish-docs.txt 
b/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
index e253f024350..60622b27972 100644
--- a/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
+++ b/dev/breeze/doc/images/output_workflow-run_publish-docs.txt
@@ -1 +1 @@
-0484cc7039602de141764acb923c771e
+4a33a1d9ebcb6ffa3f23ee25e9b8e205
diff --git a/dev/breeze/src/airflow_breeze/commands/workflow_commands.py 
b/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
index 0fb8c4fc5d9..76de156c7df 100644
--- a/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/workflow_commands.py
@@ -59,7 +59,7 @@ def workflow_run():
 )
 @click.option(
     "--exclude-docs",
-    help="Comma separated list of docs packages to exclude from the publish.",
+    help="Comma separated short name list of docs packages to exclude from the 
publish. (example: apache.druid,google)",
     default="no-docs-excluded",
 )
 @click.option(
@@ -73,6 +73,29 @@ def workflow_run():
     help="Skip writing to stable folder.",
     is_flag=True,
 )
[email protected](
+    "--airflow-version",
+    help="Override Airflow Version to use for the docs build. "
+    "If not provided, it will be extracted from the ref. If only base version 
is provided, it will be "
+    "set to the same as the base version.",
+    default=None,
+    type=str,
+)
[email protected](
+    "--airflow-base-version",
+    help="Override Airflow Base Version to use for the docs build. "
+    "If not provided, it will be extracted from the ref. If airflow-version is 
provided, the "
+    "base version of the version provided (i.e. stripped pre-/post-/dev- 
suffixes).",
+    default=None,
+    type=str,
+)
[email protected](
+    "--apply-commits",
+    help="Apply commits before building the docs - for example to patch fixes "
+    "to the docs (comma separated list of commits). ",
+    default=None,
+    type=str,
+)
 @argument_doc_packages
 def workflow_run_publish(
     ref: str,
@@ -81,6 +104,9 @@ def workflow_run_publish(
     skip_tag_validation: bool,
     doc_packages: tuple[str, ...],
     skip_write_to_stable_folder: bool = False,
+    airflow_version: str | None = None,
+    airflow_base_version: str | None = None,
+    apply_commits: str | None = None,
 ):
     if os.environ.get("GITHUB_TOKEN", ""):
         get_console().print("\n[warning]Your authentication will use 
GITHUB_TOKEN environment variable.")
@@ -115,6 +141,30 @@ def workflow_run_publish(
     get_console().print(
         f"[blue]Triggering workflow {WORKFLOW_NAME_MAPS['publish-docs']}: at 
{APACHE_AIRFLOW_REPO}[/blue]",
     )
+    from packaging.version import InvalidVersion, Version
+
+    if airflow_version:
+        try:
+            Version(airflow_version)
+        except InvalidVersion as e:
+            f"[red]Invalid version passed as --airflow-version:  
{airflow_version}[/red]: {e}"
+            sys.exit(1)
+        get_console().print(
+            f"[blue]Using provided Airflow version: {airflow_version}[/blue]",
+        )
+    if airflow_base_version:
+        try:
+            Version(airflow_base_version)
+        except InvalidVersion as e:
+            f"[red]Invalid base version passed as --airflow-base-version:  
{airflow_version}[/red]: {e}"
+            sys.exit(1)
+        get_console().print(
+            f"[blue]Using provided Airflow base version: 
{airflow_base_version}[/blue]",
+        )
+    if not airflow_version and airflow_base_version:
+        airflow_version = airflow_base_version
+    if airflow_version and not airflow_base_version:
+        airflow_base_version = Version(airflow_version).base_version
 
     workflow_fields = {
         "ref": ref,
@@ -122,8 +172,15 @@ def workflow_run_publish(
         "include-docs": " ".join(doc_packages),
         "exclude-docs": exclude_docs,
         "skip-write-to-stable-folder": skip_write_to_stable_folder,
+        "build-sboms": "true" if "apache-airflow" in doc_packages else "false",
+        "apply-commits": apply_commits if apply_commits else "",
     }
 
+    if airflow_version:
+        workflow_fields["airflow-version"] = airflow_version
+    if airflow_base_version:
+        workflow_fields["airflow-base-version"] = airflow_base_version
+
     trigger_workflow_and_monitor(
         workflow_name=WORKFLOW_NAME_MAPS["publish-docs"],
         repo=APACHE_AIRFLOW_REPO,
diff --git a/dev/breeze/src/airflow_breeze/commands/workflow_commands_config.py 
b/dev/breeze/src/airflow_breeze/commands/workflow_commands_config.py
index 3ffb4e92f11..d1ea027628e 100644
--- a/dev/breeze/src/airflow_breeze/commands/workflow_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/workflow_commands_config.py
@@ -24,10 +24,23 @@ WORKFLOW_RUN_COMMANDS: dict[str, str | list[str]] = {
 WORKFLOW_RUN_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
     "breeze workflow-run publish-docs": [
         {
-            "name": "Trigger publish docs workflow",
+            "name": "Select branch or tag to build docs",
             "options": [
                 "--ref",
                 "--skip-tag-validation",
+                "--apply-commits",
+            ],
+        },
+        {
+            "name": "Optional airflow versions to build.",
+            "options": [
+                "--airflow-version",
+                "--airflow-base-version",
+            ],
+        },
+        {
+            "name": "Select docs to exclude and destination",
+            "options": [
                 "--exclude-docs",
                 "--site-env",
                 "--skip-write-to-stable-folder",

Reply via email to