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

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

commit 0d659c96a982a7b64cfb4296d5a3ab797a4e416f
Author: Jarek Potiuk <[email protected]>
AuthorDate: Tue Jun 28 16:23:02 2022 +0200

    Remove "Label when approved" workflow (#24704)
    
    The labelling workflow has proven to be far less useful than we
    thought and some of the recent changes in selective checks made
    it largely obsolete. The committers can still add "full tests needed"
    label when they think it is needed and there is no need to label
    the PRs automatically for that (or any other reason).
    
    For quite a while this workflow is basically a useless noise.
    
    (cherry picked from commit 359700a450b9bf7afde5a2a6442dadadba36cd90)
---
 .gitattributes                                     |   1 -
 .github/actions/checks-action                      |   1 -
 .github/actions/label-when-approved-action         |   1 -
 .github/workflows/label_when_reviewed.yml          |  28 ----
 .../workflows/label_when_reviewed_workflow_run.yml | 177 ---------------------
 .gitmodules                                        |   6 -
 CI.rst                                             |   6 -
 CONTRIBUTING.rst                                   |  27 ----
 PULL_REQUEST_WORKFLOW.rst                          | 151 ------------------
 TESTING.rst                                        |   2 -
 dev/airflow-github                                 |   1 -
 .../src/airflow_breeze/commands/ci_commands.py     |   2 +-
 .../configuration_and_maintenance_commands.py      |   6 +-
 .../airflow_breeze/commands/developer_commands.py  |   7 +
 .../commands/production_image_commands.py          |   6 +-
 dev/breeze/src/airflow_breeze/global_constants.py  |  15 +-
 .../airflow_breeze/params/common_build_params.py   |   4 +-
 .../src/airflow_breeze/params/shell_params.py      |   6 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   6 +-
 .../src/airflow_breeze/utils/common_options.py     |  16 +-
 .../airflow_breeze/utils/docker_command_utils.py   |   7 +-
 .../src/airflow_breeze/utils/md5_build_check.py    |   2 +-
 dev/breeze/src/airflow_breeze/utils/path_utils.py  |  17 +-
 dev/breeze/src/airflow_breeze/utils/run_utils.py   |   1 +
 dev/breeze/tests/test_selective_checks.py          |  90 ++++++++++-
 images/pr/pr-full-tests-needed.png                 | Bin 88512 -> 0 bytes
 images/pr/pr-likely-ok-to-merge.png                | Bin 98362 -> 0 bytes
 images/pr/pr-no-tests-needed-comment.png           | Bin 80852 -> 0 bytes
 28 files changed, 160 insertions(+), 426 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 083e1747cb..5f8117153f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -16,7 +16,6 @@ tests export-ignore
 Dockerfile.ci export-ignore
 
 ISSUE_TRIAGE_PROCESS.rst export-ignore
-PULL_REQUEST_WORKFLOW.rst export-ignore
 STATIC_CODE_CHECKS.rst export-ignore
 TESTING.rst export-ignore
 LOCAL_VIRTUALENV.rst export-ignore
diff --git a/.github/actions/checks-action b/.github/actions/checks-action
deleted file mode 160000
index 9f02872da7..0000000000
--- a/.github/actions/checks-action
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 9f02872da71b6f558c6a6f190f925dde5e4d8798
diff --git a/.github/actions/label-when-approved-action 
b/.github/actions/label-when-approved-action
deleted file mode 160000
index 0058d0094d..0000000000
--- a/.github/actions/label-when-approved-action
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 0058d0094da27e116fad6e0da516ebe1107f26de
diff --git a/.github/workflows/label_when_reviewed.yml 
b/.github/workflows/label_when_reviewed.yml
deleted file mode 100644
index 189a2d7343..0000000000
--- a/.github/workflows/label_when_reviewed.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-# 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: Label when reviewed
-on: pull_request_review  # yamllint disable-line rule:truthy
-jobs:
-
-  label-when-reviewed:
-    name: "Label PRs when reviewed"
-    runs-on: ubuntu-20.04
-    steps:
-      - name: "Do nothing. Only trigger corresponding workflow_run event"
-        run: echo
diff --git a/.github/workflows/label_when_reviewed_workflow_run.yml 
b/.github/workflows/label_when_reviewed_workflow_run.yml
deleted file mode 100644
index b84ab34a79..0000000000
--- a/.github/workflows/label_when_reviewed_workflow_run.yml
+++ /dev/null
@@ -1,177 +0,0 @@
-# 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: Label when reviewed workflow run
-on:  # yamllint disable-line rule:truthy
-  workflow_run:
-    workflows: ["Label when reviewed"]
-    types: ['requested']
-permissions:
-  # All other permissions are set to none
-  checks: write
-  contents: read
-  pull-requests: write
-jobs:
-
-  label-when-reviewed:
-    name: "Label PRs when reviewed workflow run"
-    runs-on: ubuntu-20.04
-    outputs:
-      labelSet: ${{ steps.label-when-reviewed.outputs.labelSet }}
-    steps:
-      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v2
-        with:
-          persist-credentials: false
-          submodules: recursive
-      - name: "Get information about the original trigger of the run"
-        uses: ./.github/actions/get-workflow-origin
-        id: source-run-info
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          sourceRunId: ${{ github.event.workflow_run.id }}
-      - name: Initiate Selective Build check
-        uses: ./.github/actions/checks-action
-        id: selective-build-check
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          name: "Selective build check"
-          status: "in_progress"
-          sha: ${{ steps.source-run-info.outputs.sourceHeadSha }}
-          details_url: https://github.com/${{ github.repository 
}}/actions/runs/${{ github.run_id }}
-          output: >
-            {"summary":
-            "Checking selective status of the build in
-            [the run](https://github.com/${{ github.repository 
}}/actions/runs/${{ github.run_id }})
-            "}
-      - name: >
-          Event: ${{ steps.source-run-info.outputs.sourceEvent }}
-          Repo: ${{ steps.source-run-info.outputs.sourceHeadRepo }}
-          Branch: ${{ steps.source-run-info.outputs.sourceHeadBranch }}
-          Run id: ${{ github.run_id }}
-          Source Run id: ${{ github.event.workflow_run.id }}
-          Sha: ${{ github.sha }}
-          Source Sha: ${{ steps.source-run-info.outputs.sourceHeadSha }}
-          Merge commit Sha: ${{ steps.source-run-info.outputs.mergeCommitSha }}
-          Target commit Sha: ${{ steps.source-run-info.outputs.targetCommitSha 
}}
-        run: printenv
-      - name: >
-          Fetch incoming commit ${{ 
steps.source-run-info.outputs.targetCommitSha }} with its parent
-        uses: actions/checkout@v2
-        with:
-          ref: ${{ steps.source-run-info.outputs.targetCommitSha }}
-          fetch-depth: 2
-          persist-credentials: false
-      # checkout the main branch again, to use the right script in main 
workflow
-      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v2
-        with:
-          persist-credentials: false
-          submodules: recursive
-      - name: "Setup python"
-        uses: actions/setup-python@v2
-        with:
-          # We do not have output from selective checks yet, so we need to 
hardcode python
-          python-version: 3.7
-          cache: 'pip'
-          cache-dependency-path: ./dev/breeze/setup*
-      - run: ./scripts/ci/install_breeze.sh
-      - name: Selective checks
-        id: selective-checks
-        env:
-          PR_LABELS: "${{ steps.source-run-info.outputs.pullRequestLabels }}"
-          COMMIT_REF: "${{ steps.source-run-info.outputs.targetCommitSha }}"
-        run: breeze selective-check
-      - name: "Label when approved by committers for PRs that require full 
tests"
-        uses: ./.github/actions/label-when-approved-action
-        id: label-full-test-prs-when-approved-by-commiters
-        if: >
-          steps.selective-checks.outputs.run-tests == 'true' &&
-          contains(steps.selective-checks.outputs.test-types, 'Core')
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          label: 'full tests needed'
-          require_committers_approval: 'true'
-          remove_label_when_approval_missing: 'false'
-          pullRequestNumber: ${{ 
steps.source-run-info.outputs.pullRequestNumber }}
-          comment: >
-            The PR most likely needs to run full matrix of tests because it 
modifies parts of the core
-            of Airflow. However, committers might decide to merge it quickly 
and take the risk.
-            If they don't merge it quickly - please rebase it to the latest 
main at your convenience,
-            or amend the last commit of the PR, and push it with 
--force-with-lease.
-      - name: "Initiate GitHub Check forcing rerun of SH ${{ 
github.event.pull_request.head.sha }}"
-        uses: ./.github/actions/checks-action
-        id: full-test-check
-        if: 
steps.label-full-test-prs-when-approved-by-commiters.outputs.labelSet == 'true'
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          name: "Please rebase or amend, and force push the PR to run full 
tests"
-          status: "in_progress"
-          sha: ${{ steps.source-run-info.outputs.sourceHeadSha }}
-          details_url: https://github.com/${{ github.repository 
}}/actions/runs/${{ github.run_id }}
-          output: >
-            {"summary":
-            "The PR likely needs to run all tests! This was determined via 
selective check in
-            [the run](https://github.com/${{ github.repository 
}}/actions/runs/${{ github.run_id }})
-            "}
-      - name: "Label when approved by committers for PRs that do not require 
full tests"
-        uses: ./.github/actions/label-when-approved-action
-        id: label-simple-test-prs-when-approved-by-commiters
-        if: >
-          steps.selective-checks.outputs.run-tests == 'true' &&
-          ! contains(steps.selective-checks.outputs.test-types, 'Core')
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          label: 'okay to merge'
-          require_committers_approval: 'true'
-          pullRequestNumber: ${{ 
steps.source-run-info.outputs.pullRequestNumber }}
-          comment: >
-            The PR is likely OK to be merged with just subset of tests for 
default Python and Database
-            versions without running the full matrix of tests, because it does 
not modify the core of
-            Airflow. If the committers decide that the full tests matrix is 
needed, they will add the label
-            'full tests needed'. Then you should rebase to the latest main or 
amend the last commit
-            of the PR, and push it with --force-with-lease.
-      - name: "Label when approved by committers for PRs that do not require 
tests at all"
-        uses: ./.github/actions/label-when-approved-action
-        id: label-no-test-prs-when-approved-by-commiters
-        if: steps.selective-checks.outputs.run-tests != 'true'
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          label: 'okay to merge'
-          pullRequestNumber: ${{ 
steps.source-run-info.outputs.pullRequestNumber }}
-          require_committers_approval: 'true'
-          comment: >
-            The PR is likely ready to be merged. No tests are needed as no 
important environment files,
-            nor python files were modified by it. However, committers might 
decide that full test matrix is
-            needed and add the 'full tests needed' label. Then you should 
rebase it to the latest main
-            or amend the last commit of the PR, and push it with 
--force-with-lease.
-      - name: Update Selective Build check
-        uses: ./.github/actions/checks-action
-        if: always()
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          check_id: ${{ steps.selective-build-check.outputs.check_id }}
-          status: "completed"
-          sha: ${{ steps.source-run-info.outputs.sourceHeadSha }}
-          conclusion: ${{ job.status }}
-          details_url: https://github.com/${{ github.repository 
}}/actions/runs/${{ github.run_id }}
-          output: >
-            {"summary":
-            "Checking selective status of the build completed in
-            [the run](https://github.com/${{ github.repository 
}}/actions/runs/${{ github.run_id }})
-            "}
diff --git a/.gitmodules b/.gitmodules
index e03978e263..aa1358f884 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,9 +1,6 @@
 [submodule ".github/actions/get-workflow-origin"]
        path = .github/actions/get-workflow-origin
        url = https://github.com/potiuk/get-workflow-origin
-[submodule ".github/actions/checks-action"]
-       path = .github/actions/checks-action
-       url = https://github.com/LouisBrunner/checks-action
 [submodule ".github/actions/configure-aws-credentials"]
        path = .github/actions/configure-aws-credentials
        url = https://github.com/aws-actions/configure-aws-credentials
@@ -13,6 +10,3 @@
 [submodule ".github/actions/github-push-action"]
        path = .github/actions/github-push-action
        url = https://github.com/ad-m/github-push-action
-[submodule ".github/actions/label-when-approved-action"]
-       path = .github/actions/label-when-approved-action
-       url = https://github.com/TobKed/label-when-approved-action
diff --git a/CI.rst b/CI.rst
index 7798b077ac..c058598449 100644
--- a/CI.rst
+++ b/CI.rst
@@ -426,12 +426,6 @@ CI, Production Images as well as base Python images that 
are also cached in the
 Also for those builds we only execute Python tests if important files changed 
(so for example if it is
 "no-code" change, no tests will be executed.
 
-The workflow involved in Pull Requests review and approval is a bit more 
complex than simple workflows
-in most of other projects because we've implemented some optimizations related 
to efficient use
-of queue slots we share with other Apache Software Foundation projects. More 
details about it
-can be found in `PULL_REQUEST_WORKFLOW.rst <PULL_REQUEST_WORKFLOW.rst>`_.
-
-
 Direct Push/Merge Run
 ---------------------
 
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index f862d33b19..1904c15abe 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -360,33 +360,6 @@ Step 4: Prepare PR
    PR guidelines described in `pull request guidelines 
<#pull-request-guidelines>`_.
    Create Pull Request! Make yourself ready for the discussion!
 
-5. Depending on "scope" of your changes, your Pull Request might go through 
one of few paths after approval.
-   We run some non-standard workflow with high degree of automation that 
allows us to optimize the usage
-   of queue slots in GitHub Actions. Our automated workflows determine the 
"scope" of changes in your PR
-   and send it through the right path:
-
-   * In case of a "no-code" change, approval will generate a comment that the 
PR can be merged and no
-     tests are needed. This is usually when the change modifies some 
non-documentation related RST
-     files (such as this file). No python tests are run and no CI images are 
built for such PR. Usually
-     it can be approved and merged few minutes after it is submitted (unless 
there is a big queue of jobs).
-
-   * In case of change involving python code changes or documentation changes, 
a subset of full test matrix
-     will be executed. This subset of tests perform relevant tests for single 
combination of python, backend
-     version and only builds one CI image and one PROD image. Here the scope 
of tests depends on the
-     scope of your changes:
-
-     * when your change does not change "core" of Airflow (Providers, CLI, 
WWW, Helm Chart) you will get the
-       comment that PR is likely ok to be merged without running "full matrix" 
of tests. However decision
-       for that is left to committer who approves your change. The committer 
might set a "full tests needed"
-       label for your PR and ask you to rebase your request or re-run all 
jobs. PRs with "full tests needed"
-       run full matrix of tests.
-
-     * when your change changes the "core" of Airflow you will get the comment 
that PR needs full tests and
-       the "full tests needed" label is set for your PR. Additional check is 
set that prevents from
-       accidental merging of the request until full matrix of tests succeeds 
for the PR.
-
-   More details about the PR workflow be found in `PULL_REQUEST_WORKFLOW.rst 
<PULL_REQUEST_WORKFLOW.rst>`_.
-
 
 Step 5: Pass PR Review
 ----------------------
diff --git a/PULL_REQUEST_WORKFLOW.rst b/PULL_REQUEST_WORKFLOW.rst
deleted file mode 100644
index 7d7a7860fd..0000000000
--- a/PULL_REQUEST_WORKFLOW.rst
+++ /dev/null
@@ -1,151 +0,0 @@
- .. 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.
-
-.. contents:: :local:
-
-Why non-standard pull request workflow?
----------------------------------------
-
-This document describes the Pull Request Workflow we've implemented in 
Airflow. The workflow is slightly
-more complex than regular workflow you might encounter in most of the projects 
because after experiencing
-some huge delays in processing queues in October 2020 with GitHub Actions, 
we've decided to optimize the
-workflow to minimize the use of GitHub Actions build time by utilising 
selective approach on which tests
-and checks in the CI system are run depending on analysis of which files 
changed in the incoming PR and
-allowing the Committers to control the scope of the tests during the 
approval/review process.
-
-Just to give a bit of context, we started off with the approach that we always 
run all tests for all the
-incoming PRs, however due to our matrix of tests growing, this approach did 
not scale with the increasing
-number of PRs and when we had to compete with other Apache Software Foundation 
projects for the 180
-slots that are available for the whole organization. More Apache Software 
Foundation projects started
-to use GitHub Actions and we've started to experience long queues when our 
jobs waited for free slots.
-
-We approached the problem by:
-
-1) Improving mechanism of cancelling duplicate workflow runs more efficiently 
in case of queue conditions
-   (duplicate workflow runs are generated when someone pushes a fixup quickly 
- leading to running both
-   out-dated and current run to completion, taking precious slots. This has 
been implemented by improving
-   `cancel-workflow-run <https://github.com/potiuk/cancel-workflow-runs/>`_ 
action we are using. In version
-   4.1 it got a new feature of cancelling all duplicates even if there is a 
long queue of builds.
-
-2) Heavily decreasing strain on the GitHub Actions jobs by introducing 
selective checks - mechanism
-   to control which parts of the tests are run during the tests. This is 
implemented by the
-   ``breeze selective-check`` command. It selectively chooses which tests 
should be run in the PR based on
-   type of the PR and its content. More about it can be found in
-   `Selective checks <dev/breeze/SELECTIVE_CHECKS.md>`_
-
-3) Even more optimisation came from limiting the scope of tests to only 
"default" matrix parameters. So far
-   in Airflow we always run all tests for all matrix combinations. The primary 
matrix components are:
-
-   * Python versions (currently 3.7, 3.8, 3.9, 3.10)
-   * Backend types (currently MySQL/Postgres)
-   * Backed version (currently MySQL 5.7, MySQL 8, Postgres 13
-
-   We've decided that instead of running all the combinations of parameters 
for all matrix component we will
-   only run default values (Python 3.7, Mysql 5.7, Postgres 13) for all PRs 
which are not approved yet by
-   the committers. This has a nice effect, that full set of tests (though with 
limited combinations of
-   the matrix) are still run in the CI for every Pull Request that needs tests 
at all - allowing the
-   contributors to make sure that their PR is "good enough" to be reviewed.
-
-   Even after approval, the automated workflows we've implemented, check if 
the PR seems to need
-   "full test matrix" and provide helpful information to both contributors and 
committers in the form of
-   explanatory comments and labels set automatically showing the status of the 
PR. Committers have still
-   control whether they want to merge such requests automatically or ask for 
rebase or re-run the tests
-   and run "full tests" by applying the "full tests needed" label and 
re-running such request.
-   The "full tests needed" label is also applied automatically after approval 
when the change touches
-   the "core" of Airflow - also a separate check is added to the PR so that 
the "merge" button status
-   will indicate to the committer that full tests are still needed. The 
committer might still decide,
-   whether to merge such PR without the "full matrix". The "escape hatch" we 
have - i.e. running the full
-   matrix of tests in the "merge push" will enable committers to catch and fix 
such problems quickly.
-   More about it can be found in `Approval workflow and Matrix tests 
<#approval-workflow-and-matrix-tests>`_
-   chapter.
-
-4) We've also applied (and received) funds to run self-hosted runners. They 
are used for ``main`` runs
-   and whenever the PRs are done by one of the maintainers. Maintainers can 
force using Public GitHub runners
-   by applying "use public runners" label to the PR before submitting it.
-
-
-Approval Workflow and Matrix tests
-----------------------------------
-
-As explained above the approval and matrix tests workflow works according to 
the algorithm below:
-
-1) In case of "no-code" changes - so changes that do not change any of the 
code or environment of
-   the application, no test are run (this is done via selective checks). Also 
no CI/PROD images are
-   build saving extra minutes. Such build takes less than 2 minutes currently 
and only few jobs are run
-   which is a very small fraction of the "full build" time.
-
-2) When new PR is created, only a "default set" of matrix test are running. 
Only default
-   values for each of the parameters are used effectively limiting it to 
running matrix builds for only
-   one python version and one version of each of the backends. In this case 
only one CI and one PROD
-   image is built, saving precious job slots. This build takes around 50% less 
time than the "full matrix"
-   build.
-
-3) When such PR gets approved, the system further analyses the files changed 
in this PR and further
-   decision is made that should be communicated to both Committer and Reviewer.
-
-3a) In case of "no-code" builds, a message is communicated that the PR is 
ready to be merged and
-    no tests are needed.
-
-.. image:: images/pr/pr-no-tests-needed-comment.png
-    :align: center
-    :alt: No tests needed for "no-code" builds
-
-3b) In case of "non-core" builds a message is communicated that such PR is 
likely OK to be merged as is with
-    limited set of tests, but that the committer might decide to re-run the PR 
after applying
-    "full tests needed" label, which will trigger full matrix build for tests 
for this PR. The committer
-    might make further decision on what to do with this PR.
-
-.. image:: images/pr/pr-likely-ok-to-merge.png
-    :align: center
-    :alt: Likely ok to merge the PR with only small set of tests
-
-3c) In case of "core" builds (i. e. when the PR touches some "core" part of 
Airflow) a message is
-    communicated that this PR needs "full test matrix", the "full tests 
needed" label is applied
-    automatically and either the contributor might rebase the request to 
trigger full test build or the
-    committer might re-run the build manually to trigger such full test 
rebuild. Also a check "in-progress"
-    is added, so that the committer realises that the PR is not yet "green to 
merge". Pull requests with
-    "full tests needed" label always trigger the full matrix build when 
rebased or re-run so if the
-    PR gets rebased, it will continue triggering full matrix build.
-
-.. image:: images/pr/pr-full-tests-needed.png
-    :align: center
-    :alt: Full tests are needed for the PR
-
-4) If this or another committer "request changes" in a previously approved PR 
with "full tests needed"
-   label, the bot automatically removes the label, moving it back to "run only 
default set of parameters"
-   mode. For PRs touching core of airflow once the PR gets approved back, the 
label will be restored.
-   If it was manually set by the committer, it has to be restored manually.
-
-.. note:: Note that setting the labels and adding comments might be delayed, 
due to limitation of GitHub Actions,
-      in case of queues, processing of Pull Request reviews might take some 
time, so it is advised not to merge
-      PR immediately after approval. Luckily, the comments describing the 
status of the PR trigger notifications
-      for the PRs and they provide good "notification" for the committer to 
act on a PR that was recently
-      approved.
-
-The PR approval workflow is possible thanks to two custom GitHub Actions we've 
developed:
-
-* `Get workflow origin <https://github.com/potiuk/get-workflow-origin/>`_
-* `Label when approved <https://github.com/TobKed/label-when-approved-action>`_
-
-
-Next steps
-----------
-
-We are planning to also propose the approach to other projects from Apache 
Software Foundation to
-make it a common approach, so that our effort is not limited only to one 
project.
-
-Discussion about it in `this discussion 
<https://lists.apache.org/thread.html/r1708881f52adbdae722afb8fea16b23325b739b254b60890e72375e1%40%3Cbuilds.apache.org%3E>`_
diff --git a/TESTING.rst b/TESTING.rst
index 2271e73ecf..4f7de58b76 100644
--- a/TESTING.rst
+++ b/TESTING.rst
@@ -487,8 +487,6 @@ This is done for three reasons:
 1. in order to selectively run only subset of the test types for some PRs
 2. in order to allow parallel execution of the tests on Self-Hosted runners
 
-For case 1. see `Pull Request Workflow 
<PULL_REQUEST_WORKFLOW.rst#selective-ci-checks>`_  for details.
-
 For case 2. We can utilise memory and CPUs available on both CI and local 
development machines to run
 test in parallel. This way we can decrease the time of running all tests in 
self-hosted runners from
 60 minutes to ~15 minutes.
diff --git a/dev/airflow-github b/dev/airflow-github
index 5dc5f5bd9d..fcda3355d9 100755
--- a/dev/airflow-github
+++ b/dev/airflow-github
@@ -126,7 +126,6 @@ def is_core_commit(files: List[str]) -> bool:
         "CONTRIBUTORS_QUICK_START.rst",
         "IMAGES.rst",
         "LOCAL_VIRTUALENV.rst",
-        "PULL_REQUEST_WORKFLOW.rst",
         "INTHEWILD.md",
         "INSTALL",
         "README.md",
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands.py 
b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
index c8260698d7..c65753e1a6 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
@@ -205,7 +205,7 @@ def selective_check(
     from airflow_breeze.utils.selective_checks import SelectiveChecks
 
     github_event = GithubEvents(github_event_name)
-    if github_event == GithubEvents.PULL_REQUEST:
+    if commit_ref is not None:
         changed_files = get_changed_files(commit_ref=commit_ref, 
dry_run=dry_run, verbose=verbose)
     else:
         changed_files = ()
diff --git 
a/dev/breeze/src/airflow_breeze/commands/configuration_and_maintenance_commands.py
 
b/dev/breeze/src/airflow_breeze/commands/configuration_and_maintenance_commands.py
index 546f52ba5a..7ef0a11a20 100644
--- 
a/dev/breeze/src/airflow_breeze/commands/configuration_and_maintenance_commands.py
+++ 
b/dev/breeze/src/airflow_breeze/commands/configuration_and_maintenance_commands.py
@@ -319,7 +319,6 @@ def version(verbose: bool):
 @click.option('-C/-c', '--cheatsheet/--no-cheatsheet', help="Enable/disable 
cheatsheet.", default=None)
 @click.option('-A/-a', '--asciiart/--no-asciiart', help="Enable/disable 
ASCIIart.", default=None)
 @click.option(
-    '-B/-b',
     '--colour/--no-colour',
     help="Enable/disable Colour mode (useful for colour blind-friendly 
communication).",
     default=None,
@@ -404,7 +403,10 @@ def command_hash_export(verbose: bool, output: IO):
         the_context_dict = ctx.to_info_dict()
         if verbose:
             get_console().print(the_context_dict)
-        output.write(dict_hash(the_context_dict) + "\n")
+        
output.write(f"main:{dict_hash(the_context_dict['command']['params'])}\n")
+        commands_dict = the_context_dict['command']['commands']
+        for command in sorted(commands_dict.keys()):
+            output.write(f"{command}:{dict_hash(commands_dict[command])}\n")
 
 
 def write_to_shell(command_to_execute: str, dry_run: bool, script_path: str, 
force_setup: bool) -> bool:
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py 
b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index a81ae92745..cbb2b10d06 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -53,6 +53,7 @@ from airflow_breeze.utils.common_options import (
     option_mount_sources,
     option_mssql_version,
     option_mysql_version,
+    option_platform_single,
     option_postgres_version,
     option_python,
     option_use_airflow_version,
@@ -226,6 +227,7 @@ DEVELOPER_PARAMETERS = {
 @option_verbose
 @option_dry_run
 @option_python
+@option_platform_single
 @option_backend
 @option_debian_version
 @option_github_repository
@@ -267,6 +269,7 @@ def shell(
     db_reset: bool,
     answer: Optional[str],
     image_tag: Optional[str],
+    platform: Optional[str],
     extra_args: Tuple,
 ):
     """Enter breeze.py environment. this is the default command use when no 
other is selected."""
@@ -296,6 +299,7 @@ def shell(
         answer=answer,
         debian_version=debian_version,
         image_tag=image_tag,
+        platform=platform,
     )
 
 
@@ -303,6 +307,7 @@ def shell(
 @main.command(name='start-airflow')
 @option_dry_run
 @option_python
+@option_platform_single
 @option_github_repository
 @option_backend
 @option_postgres_version
@@ -346,6 +351,7 @@ def start_airflow(
     image_tag: Optional[str],
     db_reset: bool,
     answer: Optional[str],
+    platform: Optional[str],
     extra_args: Tuple,
 ):
     """Enter breeze.py environment and starts all Airflow components in the 
tmux session."""
@@ -372,6 +378,7 @@ def start_airflow(
         db_reset=db_reset,
         start_airflow=True,
         image_tag=image_tag,
+        platform=platform,
         extra_args=extra_args,
         answer=answer,
     )
diff --git 
a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py 
b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
index 07bd42cab9..d08e1d89b5 100644
--- a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
@@ -37,6 +37,7 @@ from airflow_breeze.utils.common_options import (
     option_airflow_constraints_mode_prod,
     option_airflow_constraints_reference_build,
     option_answer,
+    option_builder,
     option_debian_version,
     option_dev_apt_command,
     option_dev_apt_deps,
@@ -52,7 +53,7 @@ from airflow_breeze.utils.common_options import (
     option_image_tag_for_verifying,
     option_install_providers_from_sources,
     option_parallelism,
-    option_platform,
+    option_platform_multiple,
     option_prepare_buildx_cache,
     option_pull_image,
     option_push_image,
@@ -242,7 +243,7 @@ def run_build_in_parallel(
 @option_parallelism
 @option_python_versions
 @option_upgrade_to_newer_dependencies
-@option_platform
+@option_platform_multiple
 @option_debian_version
 @option_github_repository
 @option_github_token
@@ -303,6 +304,7 @@ def run_build_in_parallel(
 @option_additional_dev_apt_env
 @option_additional_runtime_apt_env
 @option_additional_runtime_apt_command
+@option_builder
 @option_dev_apt_command
 @option_dev_apt_deps
 @option_python_image
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py 
b/dev/breeze/src/airflow_breeze/global_constants.py
index 8dedc191f7..5ba825e71f 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -19,7 +19,7 @@ Global constants that are used by all other Breeze components.
 """
 from __future__ import annotations
 
-import os
+import platform
 from enum import Enum
 from functools import lru_cache
 
@@ -106,7 +106,8 @@ ALLOWED_INSTALLATION_METHODS = ['.', 'apache-airflow']
 ALLOWED_DEBIAN_VERSIONS = ['bullseye', 'buster']
 ALLOWED_BUILD_CACHE = ["registry", "local", "disabled"]
 MULTI_PLATFORM = "linux/amd64,linux/arm64"
-ALLOWED_PLATFORMS = ["linux/amd64", "linux/arm64", MULTI_PLATFORM]
+SINGLE_PLATFORMS = ["linux/amd64", "linux/arm64"]
+ALLOWED_PLATFORMS = [*SINGLE_PLATFORMS, MULTI_PLATFORM]
 ALLOWED_USE_AIRFLOW_VERSIONS = ['none', 'wheel', 'sdist']
 
 PARAM_NAME_DESCRIPTION = {
@@ -144,8 +145,15 @@ def get_available_packages(short_version=False) -> 
list[str]:
     return package_list
 
 
+def get_default_platform_machine() -> str:
+    machine = platform.uname().machine
+    # Some additional conversion for various platforms...
+    machine = {"AMD64": "x86_64"}.get(machine, machine)
+    return machine
+
+
 # Initialise base variables
-DOCKER_DEFAULT_PLATFORM = f"linux/{os.uname().machine}"
+DOCKER_DEFAULT_PLATFORM = f"linux/{get_default_platform_machine()}"
 DOCKER_BUILDKIT = 1
 
 SSH_PORT = "12322"
@@ -296,6 +304,7 @@ class GithubEvents(Enum):
     PULL_REQUEST = "pull_request"
     PULL_REQUEST_REVIEW = "pull_request_review"
     PULL_REQUEST_TARGET = "pull_request_target"
+    PULL_REQUEST_WORKFLOW = "pull_request_workflow"
     PUSH = "push"
     SCHEDULE = "schedule"
     WORKFLOW_RUN = "workflow_run"
diff --git a/dev/breeze/src/airflow_breeze/params/common_build_params.py 
b/dev/breeze/src/airflow_breeze/params/common_build_params.py
index 68947186d6..e6c2c70029 100644
--- a/dev/breeze/src/airflow_breeze/params/common_build_params.py
+++ b/dev/breeze/src/airflow_breeze/params/common_build_params.py
@@ -22,6 +22,7 @@ from datetime import datetime
 from typing import List, Optional
 
 from airflow_breeze.branch_defaults import AIRFLOW_BRANCH
+from airflow_breeze.global_constants import DOCKER_DEFAULT_PLATFORM
 from airflow_breeze.utils.console import get_console
 from airflow_breeze.utils.platforms import get_real_platform
 
@@ -44,6 +45,7 @@ class CommonBuildParams:
     airflow_constraints_location: str = ""
     answer: Optional[str] = None
     build_id: int = 0
+    builder: str = "default"
     constraints_github_repository: str = "apache/airflow"
     debian_version: str = "bullseye"
     dev_apt_command: str = ""
@@ -56,7 +58,7 @@ class CommonBuildParams:
     github_username: str = ""
     image_tag: Optional[str] = None
     install_providers_from_sources: bool = False
-    platform: str = f"linux/{os.uname().machine}"
+    platform: str = DOCKER_DEFAULT_PLATFORM
     prepare_buildx_cache: bool = False
     python_image: Optional[str] = None
     push_image: bool = False
diff --git a/dev/breeze/src/airflow_breeze/params/shell_params.py 
b/dev/breeze/src/airflow_breeze/params/shell_params.py
index b67d362186..b4c1e73f5a 100644
--- a/dev/breeze/src/airflow_breeze/params/shell_params.py
+++ b/dev/breeze/src/airflow_breeze/params/shell_params.py
@@ -31,6 +31,7 @@ from airflow_breeze.global_constants import (
     ALLOWED_POSTGRES_VERSIONS,
     ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
     AVAILABLE_INTEGRATIONS,
+    DOCKER_DEFAULT_PLATFORM,
     MOUNT_ALL,
     MOUNT_REMOVE,
     MOUNT_SELECTED,
@@ -78,6 +79,7 @@ class ShellParams:
     mysql_version: str = ALLOWED_MYSQL_VERSIONS[0]
     num_runs: str = ""
     package_format: str = ALLOWED_INSTALLATION_PACKAGE_FORMATS[0]
+    platform: str = DOCKER_DEFAULT_PLATFORM
     postgres_version: str = ALLOWED_POSTGRES_VERSIONS[0]
     python: str = ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[0]
     skip_environment_initialization: bool = False
@@ -189,6 +191,8 @@ class ShellParams:
             backend_files = []
             for backend in ALLOWED_BACKENDS:
                 backend_files.extend(self.get_backend_compose_files(backend))
+            
compose_ci_file.append(f"{str(SCRIPTS_CI_DIR)}/docker-compose/backend-mssql-bind-volume.yml")
+            
compose_ci_file.append(f"{str(SCRIPTS_CI_DIR)}/docker-compose/backend-mssql-docker-volume.yml")
         local_docker_compose_file = 
f"{str(SCRIPTS_CI_DIR)}/docker-compose/local.yml"
         local_all_sources_docker_compose_file = 
f"{str(SCRIPTS_CI_DIR)}/docker-compose/local-all-sources.yml"
         files_docker_compose_file = 
f"{str(SCRIPTS_CI_DIR)}/docker-compose/files.yml"
@@ -239,7 +243,7 @@ class ShellParams:
         if len(integrations) > 0:
             for integration in integrations:
                 
compose_ci_file.append(f"{str(SCRIPTS_CI_DIR)}/docker-compose/integration-{integration}.yml")
-        return ':'.join(compose_ci_file)
+        return os.pathsep.join(compose_ci_file)
 
     @property
     def command_passed(self):
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py 
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index bcddfa0ec9..db839f0712 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -25,10 +25,11 @@ PRE_COMMIT_LIST = [
     'all',
     'black',
     'blacken-docs',
-    'check-airflow-2-1-compatibility',
+    'check-airflow-2-2-compatibility',
     'check-airflow-config-yaml-consistent',
     'check-airflow-providers-have-extras',
     'check-apache-license-rat',
+    'check-base-operator-partial-arguments',
     'check-base-operator-usage',
     'check-boring-cyborg-configuration',
     'check-breeze-top-dependencies-limited',
@@ -36,6 +37,7 @@ PRE_COMMIT_LIST = [
     'check-changelog-has-no-duplicates',
     'check-daysago-import-from-utils',
     'check-docstring-param-types',
+    'check-example-dags-urls',
     'check-executables-have-shebangs',
     'check-extra-packages-references',
     'check-extras-order',
@@ -59,8 +61,10 @@ PRE_COMMIT_LIST = [
     'check-setup-order',
     'check-start-date-not-used-in-defaults',
     'check-system-tests-present',
+    'check-system-tests-tocs',
     'check-xml',
     'codespell',
+    'create-missing-init-py-files-tests',
     'debug-statements',
     'detect-private-key',
     'doctoc',
diff --git a/dev/breeze/src/airflow_breeze/utils/common_options.py 
b/dev/breeze/src/airflow_breeze/utils/common_options.py
index af2b6c75e0..778b34ad1c 100644
--- a/dev/breeze/src/airflow_breeze/utils/common_options.py
+++ b/dev/breeze/src/airflow_breeze/utils/common_options.py
@@ -37,6 +37,7 @@ from airflow_breeze.global_constants import (
     ALLOWED_POSTGRES_VERSIONS,
     ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
     ALLOWED_USE_AIRFLOW_VERSIONS,
+    SINGLE_PLATFORMS,
     get_available_packages,
 )
 from airflow_breeze.utils.custom_param_types import (
@@ -214,12 +215,18 @@ option_image_tag_for_verifying = click.option(
 option_image_name = click.option(
     '-n', '--image-name', help='Name of the image to verify (overrides 
--python and --image-tag).'
 )
-option_platform = click.option(
+option_platform_multiple = click.option(
     '--platform',
     help='Platform for Airflow image.',
     envvar='PLATFORM',
     type=BetterChoice(ALLOWED_PLATFORMS),
 )
+option_platform_single = click.option(
+    '--platform',
+    help='Platform for Airflow image.',
+    envvar='PLATFORM',
+    type=BetterChoice(SINGLE_PLATFORMS),
+)
 option_debian_version = click.option(
     '--debian-version',
     help='Debian version used for the image.',
@@ -452,10 +459,15 @@ option_pull_image = click.option(
     is_flag=True,
     envvar='PULL_IMAGE',
 )
-
 option_python_image = click.option(
     '--python-image',
     help="If specified this is the base python image used to build the image. "
     "Should be something like: python:VERSION-slim-bullseye",
     envvar='PYTHON_IMAGE',
 )
+option_builder = click.option(
+    '--builder',
+    help="Buildx builder used to perform `docker buildx build` commands",
+    envvar='BUILDER',
+    default='default',
+)
diff --git a/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py 
b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
index 8af6010c40..cdb1ceb258 100644
--- a/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
@@ -28,7 +28,7 @@ from airflow_breeze.params.build_prod_params import 
BuildProdParams
 from airflow_breeze.params.common_build_params import CommonBuildParams
 from airflow_breeze.params.shell_params import ShellParams
 from airflow_breeze.utils.host_info_utils import get_host_group_id, 
get_host_os, get_host_user_id
-from airflow_breeze.utils.path_utils import AIRFLOW_SOURCES_ROOT
+from airflow_breeze.utils.path_utils import AIRFLOW_SOURCES_ROOT, 
MSSQL_DATA_VOLUME
 
 try:
     from packaging import version
@@ -352,7 +352,7 @@ def prepare_docker_build_cache_command(
     build_flags = image_params.extra_docker_build_flags
     final_command = []
     final_command.extend(["docker"])
-    final_command.extend(["buildx", "build", "--builder", "airflow_cache", 
"--progress=tty"])
+    final_command.extend(["buildx", "build", "--builder", 
image_params.builder, "--progress=tty"])
     final_command.extend(build_flags)
     final_command.extend(["--pull"])
     final_command.extend(arguments)
@@ -388,7 +388,7 @@ def prepare_base_build_command(image_params: 
CommonBuildParams, verbose: bool) -
                 "buildx",
                 "build",
                 "--builder",
-                "default",
+                image_params.builder,
                 "--progress=tty",
                 "--push" if image_params.push_image else "--load",
             ]
@@ -525,6 +525,7 @@ def update_expected_environment_variables(env: Dict[str, 
str]) -> None:
     set_value_to_default_if_not_set(env, 'LIST_OF_INTEGRATION_TESTS_TO_RUN', 
"")
     set_value_to_default_if_not_set(env, 'LOAD_DEFAULT_CONNECTIONS', "false")
     set_value_to_default_if_not_set(env, 'LOAD_EXAMPLES', "false")
+    set_value_to_default_if_not_set(env, 'MSSQL_DATA_VOLUME', 
str(MSSQL_DATA_VOLUME))
     set_value_to_default_if_not_set(env, 'PACKAGE_FORMAT', 
ALLOWED_PACKAGE_FORMATS[0])
     set_value_to_default_if_not_set(env, 'PRINT_INFO_FROM_SCRIPTS', "true")
     set_value_to_default_if_not_set(env, 'PYTHONDONTWRITEBYTECODE', "true")
diff --git a/dev/breeze/src/airflow_breeze/utils/md5_build_check.py 
b/dev/breeze/src/airflow_breeze/utils/md5_build_check.py
index 0900793a48..e572c5c373 100644
--- a/dev/breeze/src/airflow_breeze/utils/md5_build_check.py
+++ b/dev/breeze/src/airflow_breeze/utils/md5_build_check.py
@@ -86,7 +86,7 @@ def calculate_md5_checksum_for_files(
     return modified_files, not_modified_files
 
 
-def md5sum_check_if_build_is_needed(md5sum_cache_dir: Path, verbose: bool) -> 
bool:
+def md5sum_check_if_build_is_needed(md5sum_cache_dir: Path) -> bool:
     """
     Checks if build is needed based on whether important files were modified.
 
diff --git a/dev/breeze/src/airflow_breeze/utils/path_utils.py 
b/dev/breeze/src/airflow_breeze/utils/path_utils.py
index 413401c0e8..c54b54e5c7 100644
--- a/dev/breeze/src/airflow_breeze/utils/path_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/path_utils.py
@@ -238,7 +238,9 @@ def find_airflow_sources_root_to_operate_on() -> Path:
 
 AIRFLOW_SOURCES_ROOT = find_airflow_sources_root_to_operate_on().resolve()
 BUILD_CACHE_DIR = AIRFLOW_SOURCES_ROOT / '.build'
+DAGS_DIR = AIRFLOW_SOURCES_ROOT / 'dags'
 FILES_DIR = AIRFLOW_SOURCES_ROOT / 'files'
+HOOKS_DIR = AIRFLOW_SOURCES_ROOT / 'hooks'
 MSSQL_DATA_VOLUME = AIRFLOW_SOURCES_ROOT / 'tmp_mssql_volume'
 KUBE_DIR = AIRFLOW_SOURCES_ROOT / ".kube"
 LOGS_DIR = AIRFLOW_SOURCES_ROOT / 'logs'
@@ -260,12 +262,17 @@ def create_volume_if_missing(volume_name: str):
         check=False,
     )
     if res_inspect.returncode != 0:
-        run_command(
+        result = run_command(
             cmd=["docker", "volume", "create", volume_name],
-            stdout=subprocess.DEVNULL,
-            stderr=subprocess.DEVNULL,
-            check=True,
+            check=False,
+            capture_output=True,
         )
+        if result.returncode != 0:
+            get_console().print(
+                "[warning]\nMypy Cache volume could not be created. 
Continuing, but you "
+                "should make sure your docker works.\n\n"
+                f"Error: {result.stdout}\n"
+            )
 
 
 def create_static_check_volumes():
@@ -278,7 +285,9 @@ def create_directories_and_files() -> None:
     Checks if setup has been updates since last time and proposes to upgrade 
if so.
     """
     BUILD_CACHE_DIR.mkdir(parents=True, exist_ok=True)
+    DAGS_DIR.mkdir(parents=True, exist_ok=True)
     FILES_DIR.mkdir(parents=True, exist_ok=True)
+    HOOKS_DIR.mkdir(parents=True, exist_ok=True)
     MSSQL_DATA_VOLUME.mkdir(parents=True, exist_ok=True)
     KUBE_DIR.mkdir(parents=True, exist_ok=True)
     LOGS_DIR.mkdir(parents=True, exist_ok=True)
diff --git a/dev/breeze/src/airflow_breeze/utils/run_utils.py 
b/dev/breeze/src/airflow_breeze/utils/run_utils.py
index f0a44b425f..9754605f49 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_utils.py
@@ -96,6 +96,7 @@ def run_command(
             return subprocess.CompletedProcess(cmd, returncode=0)
     try:
         cmd_env = os.environ.copy()
+        cmd_env.setdefault("HOME", str(Path.home()))
         if env:
             cmd_env.update(env)
         with ci_group(title=f"Output of {title}", 
enabled=enabled_output_group):
diff --git a/dev/breeze/tests/test_selective_checks.py 
b/dev/breeze/tests/test_selective_checks.py
index 492135ebd3..2d7e8fe83d 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -298,7 +298,7 @@ def test_expected_output_full_tests_needed(
                 "upgrade-to-newer-dependencies": "false",
                 "test-types": "",
             },
-            id="Everything should run when full tests are needed even if no 
files are changed",
+            id="Nothing should run if only non-important files changed",
         ),
         pytest.param(
             (
@@ -371,6 +371,76 @@ def test_expected_output_pull_request_v2_3(
     assert_outputs_are_printed(expected_outputs, str(sc))
 
 
[email protected](
+    "files, expected_outputs,",
+    [
+        pytest.param(
+            ("INTHEWILD.md",),
+            {
+                "all-python-versions": "['3.7']",
+                "all-python-versions-list-as-string": "3.7",
+                "image-build": "false",
+                "needs-helm-tests": "false",
+                "run-tests": "false",
+                "docs-build": "false",
+                "upgrade-to-newer-dependencies": "false",
+                "test-types": "",
+            },
+            id="Nothing should run if only non-important files changed",
+        ),
+        pytest.param(
+            (
+                "airflow/cli/test.py",
+                "chart/aaaa.txt",
+                "tests/providers/google/file.py",
+            ),
+            {
+                "all-python-versions": "['3.7']",
+                "all-python-versions-list-as-string": "3.7",
+                "image-build": "true",
+                "needs-helm-tests": "true",
+                "run-tests": "true",
+                "docs-build": "true",
+                "run-kubernetes-tests": "true",
+                "upgrade-to-newer-dependencies": "false",
+                "test-types": "Always CLI",
+            },
+            id="CLI tests and Kubernetes tests should run if cli/chart files 
changed",
+        ),
+        pytest.param(
+            (
+                "airflow/file.py",
+                "tests/providers/google/file.py",
+            ),
+            {
+                "all-python-versions": "['3.7']",
+                "all-python-versions-list-as-string": "3.7",
+                "image-build": "true",
+                "needs-helm-tests": "false",
+                "run-tests": "true",
+                "docs-build": "true",
+                "run-kubernetes-tests": "false",
+                "upgrade-to-newer-dependencies": "false",
+                "test-types": "API Always CLI Core Integration Other Providers 
WWW",
+            },
+            id="All tests except should run if core file changed",
+        ),
+    ],
+)
+def test_expected_output_pull_request_target(
+    files: Tuple[str, ...],
+    expected_outputs: Dict[str, str],
+):
+    sc = SelectiveChecks(
+        files=files,
+        commit_ref="HEAD",
+        github_event=GithubEvents.PULL_REQUEST_TARGET,
+        pr_labels=(),
+        default_branch="main",
+    )
+    assert_outputs_are_printed(expected_outputs, str(sc))
+
+
 @pytest.mark.parametrize(
     "files, pr_labels, default_branch, expected_outputs,",
     [
@@ -441,11 +511,21 @@ def test_expected_output_push(
     assert_outputs_are_printed(expected_outputs, str(sc))
 
 
-def test_no_commit_provided():
[email protected](
+    "github_event",
+    [
+        GithubEvents.PUSH,
+        GithubEvents.PULL_REQUEST,
+        GithubEvents.PULL_REQUEST_TARGET,
+        GithubEvents.PULL_REQUEST_WORKFLOW,
+        GithubEvents.SCHEDULE,
+    ],
+)
+def 
test_no_commit_provided_trigger_full_build_for_any_event_type(github_event):
     sc = SelectiveChecks(
         files=(),
         commit_ref="",
-        github_event=GithubEvents.PULL_REQUEST,
+        github_event=github_event,
         pr_labels=(),
         default_branch="main",
     )
@@ -457,7 +537,9 @@ def test_no_commit_provided():
             "needs-helm-tests": "true",
             "run-tests": "true",
             "docs-build": "true",
-            "upgrade-to-newer-dependencies": "false",
+            "upgrade-to-newer-dependencies": "true"
+            if github_event in [GithubEvents.PUSH, GithubEvents.SCHEDULE]
+            else "false",
             "test-types": "API Always CLI Core Integration Other Providers 
WWW",
         },
         str(sc),
diff --git a/images/pr/pr-full-tests-needed.png 
b/images/pr/pr-full-tests-needed.png
deleted file mode 100644
index c863153d06..0000000000
Binary files a/images/pr/pr-full-tests-needed.png and /dev/null differ
diff --git a/images/pr/pr-likely-ok-to-merge.png 
b/images/pr/pr-likely-ok-to-merge.png
deleted file mode 100644
index 9c04dee422..0000000000
Binary files a/images/pr/pr-likely-ok-to-merge.png and /dev/null differ
diff --git a/images/pr/pr-no-tests-needed-comment.png 
b/images/pr/pr-no-tests-needed-comment.png
deleted file mode 100644
index 78a1181868..0000000000
Binary files a/images/pr/pr-no-tests-needed-comment.png and /dev/null differ

Reply via email to