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

raulcd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 1e0c66d6a5b GH-50133: [CI] Make extra labels entirely manual on PRs 
(#50256)
1e0c66d6a5b is described below

commit 1e0c66d6a5b9858c94666182cca558ae7f7397c3
Author: Antoine Pitrou <[email protected]>
AuthorDate: Tue Jun 30 09:16:14 2026 +0200

    GH-50133: [CI] Make extra labels entirely manual on PRs (#50256)
    
    ### Rationale for this change
    
    Our "Extra" labels for CI are currently both manual and automatic:
    * manual, such that a committer can add a label to force an additional of 
CI jobs to run on a PR
    * automatic, such that specific file changes can also force those 
additional CI jobs to run
    
    However, the two mechanisms can conflict with each other, when an Extra 
label is manually added by a committer, but none of the file changes match. The 
label can then be later removed by the automatic labelling bot.
    
    ### What changes are included in this PR?
    
    Make the "Extra" labels manual-only. The corresponding CI workflows are 
still triggered automatically on non-PR events (such as pushes and cron 
schedules).
    
    ### Are these changes tested?
    
    Manually on this PR.
    
    ### Are there any user-facing changes?
    
    No.
    * GitHub Issue: #50133
    
    Authored-by: Antoine Pitrou <[email protected]>
    Signed-off-by: Raúl Cumplido <[email protected]>
---
 .github/workflows/check_labels.yml   | 17 +------
 .github/workflows/cpp_extra.yml      | 86 +++++++++++++-----------------------
 .github/workflows/cuda_extra.yml     | 30 ++++++++++---
 .github/workflows/dev_pr/labeler.yml | 15 -------
 .github/workflows/package_linux.yml  | 36 +++++++--------
 .github/workflows/r_extra.yml        | 39 ++++++++--------
 6 files changed, 92 insertions(+), 131 deletions(-)

diff --git a/.github/workflows/check_labels.yml 
b/.github/workflows/check_labels.yml
index 6adc50371c2..bbefdd81214 100644
--- a/.github/workflows/check_labels.yml
+++ b/.github/workflows/check_labels.yml
@@ -28,9 +28,6 @@ on:
       ci-extra-labels:
         description: "The extra CI labels"
         value: ${{ jobs.check-labels.outputs.ci-extra-labels }}
-      force:
-        description: "Whether to force running the jobs"
-        value: ${{ jobs.check-labels.outputs.force }}
 
 permissions:
   contents: read
@@ -43,7 +40,6 @@ jobs:
     timeout-minutes: 5
     outputs:
       ci-extra-labels: ${{ steps.check.outputs.ci-extra-labels }}
-      force: ${{ steps.check.outputs.force }}
     steps:
       - name: Checkout Arrow
         if: github.event_name == 'pull_request'
@@ -58,9 +54,7 @@ jobs:
         run: |
           set -ex
           case "${GITHUB_EVENT_NAME}" in
-            push|schedule|workflow_dispatch)
-              echo "force=true" >> "${GITHUB_OUTPUT}"
-              ;;
+            # On PRs, extra builds are only triggered manually using labelling
             pull_request)
               {
                 echo "ci-extra-labels<<LABELS"
@@ -70,13 +64,6 @@ jobs:
                   --repo ${GITHUB_REPOSITORY}
                 echo "LABELS"
               } >> "${GITHUB_OUTPUT}"
-              git fetch origin ${GITHUB_BASE_REF}
-              git diff --stat origin/${GITHUB_BASE_REF}..
-              if git diff --stat origin/${GITHUB_BASE_REF}.. | \
-                   grep \
-                     --fixed-strings 
".github/workflows/${PARENT_WORKFLOW}.yml" \
-                     --quiet; then
-                echo "force=true" >> "${GITHUB_OUTPUT}"
-              fi
               ;;
+            # Other event types trigger through specific rules in `*_extra.yml`
           esac
diff --git a/.github/workflows/cpp_extra.yml b/.github/workflows/cpp_extra.yml
index f3772f5556d..575dccee6e9 100644
--- a/.github/workflows/cpp_extra.yml
+++ b/.github/workflows/cpp_extra.yml
@@ -45,26 +45,7 @@ on:
     tags:
       - '**'
   pull_request:
-    paths:
-      - '.dockerignore'
-      - '.github/workflows/check_labels.yml'
-      - '.github/workflows/cpp_extra.yml'
-      - '.github/workflows/cpp_windows.yml'
-      - '.github/workflows/report_ci.yml'
-      - 'ci/conda_env_*'
-      - 'ci/docker/**'
-      - 'ci/scripts/ccache_setup.sh'
-      - 'ci/scripts/cpp_*'
-      - 'ci/scripts/install_azurite.sh'
-      - 'ci/scripts/install_gcs_testbench.sh'
-      - 'ci/scripts/install_minio.sh'
-      - 'ci/scripts/msys2_*'
-      - 'ci/scripts/util_*'
-      - 'cpp/**'
-      - 'compose.yaml'
-      - 'dev/archery/archery/**'
-      - 'format/Flight.proto'
-      - 'testing'
+    # This trigger ensures that the `check_labels` workflow runs on manual 
label changes
     types:
       - labeled
       - opened
@@ -85,19 +66,30 @@ permissions:
 
 jobs:
   check-labels:
-    if: github.event_name != 'schedule' || github.repository == 'apache/arrow'
+    if: github.event_name == 'pull_request'
     uses: ./.github/workflows/check_labels.yml
     with:
       parent-workflow: cpp_extra
 
-  docker:
+  check-enabled:
+    # Check whether the CI builds in this workflow need to be run
     needs: check-labels
+    runs-on: ubuntu-latest
+    outputs:
+      is_enabled: ${{ steps.set_enabled.outputs.is_enabled }}
+    steps:
+      - id: set_enabled
+        if: >-
+          (github.event_name == 'schedule' && github.repository == 
'apache/arrow') ||
+          contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || 
'[]'), 'CI: Extra') ||
+          contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || 
'[]'), 'CI: Extra: C++')
+        run: echo "is_enabled=true" >> "$GITHUB_OUTPUT"
+
+  docker:
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: ${{ matrix.title }}
     runs-on: ${{ matrix.runs-on }}
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: C++')
     timeout-minutes: 75
     strategy:
       fail-fast: false
@@ -189,11 +181,8 @@ jobs:
         run: archery docker push ${{ matrix.image }}
 
   msvc-arm64:
-    needs: check-labels
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: C++')
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: ARM64 Windows 11 MSVC
     uses: ./.github/workflows/cpp_windows.yml
     with:
@@ -202,13 +191,10 @@ jobs:
       simd-level: NONE
 
   jni-linux:
-    needs: check-labels
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: JNI ${{ matrix.platform.runs-on }} ${{ matrix.platform.arch }}
     runs-on: ${{ matrix.platform.runs-on }}
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: C++')
     timeout-minutes: 240
     permissions:
       actions: read
@@ -276,13 +262,10 @@ jobs:
         run: archery docker push cpp-jni
 
   jni-macos:
-    needs: check-labels
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: JNI macOS
     runs-on: macos-14
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: C++')
     timeout-minutes: 45
     env:
       MACOSX_DEPLOYMENT_TARGET: "14.0"
@@ -369,13 +352,10 @@ jobs:
           key: jni-macos
 
   odbc-linux:
-    needs: check-labels
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: ODBC Linux
     runs-on: ubuntu-latest
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: C++')
     timeout-minutes: 75
     strategy:
       fail-fast: false
@@ -437,13 +417,10 @@ jobs:
         run: archery docker push ubuntu-cpp-odbc
 
   odbc-macos:
-    needs: check-labels
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: ODBC ${{ matrix.build-type }} ${{ matrix.architecture }} macOS ${{ 
matrix.macos-version }}
     runs-on: macos-${{ matrix.macos-version }}
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: C++')
     timeout-minutes: 120
     strategy:
       fail-fast: false
@@ -569,13 +546,10 @@ jobs:
           ci/scripts/cpp_test.sh $(pwd) $(pwd)/build
 
   odbc-msvc:
-    needs: check-labels
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: ODBC Windows
     runs-on: windows-2022
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: C++')
     timeout-minutes: 240
     permissions:
       actions: read
diff --git a/.github/workflows/cuda_extra.yml b/.github/workflows/cuda_extra.yml
index 8a3dc7a5222..64f2597fe89 100644
--- a/.github/workflows/cuda_extra.yml
+++ b/.github/workflows/cuda_extra.yml
@@ -19,9 +19,16 @@ name: CUDA Extra
 
 on:
   push:
+    branches:
+      - '**'
+      - '!dependabot/**'
+    paths:
+      - '**/*cuda*'
+      - '**/*gpu*'
     tags:
       - '**'
   pull_request:
+    # This trigger ensures that the `check_labels` workflow runs on manual 
label changes
     types:
       - labeled
       - opened
@@ -42,19 +49,30 @@ permissions:
 
 jobs:
   check-labels:
-    if: github.event_name != 'schedule' || github.repository == 'apache/arrow'
+    if: github.event_name == 'pull_request'
     uses: ./.github/workflows/check_labels.yml
     with:
       parent-workflow: cuda_extra
 
-  docker:
+  check-enabled:
+    # Check whether the CI builds in this workflow need to be run
     needs: check-labels
+    runs-on: ubuntu-latest
+    outputs:
+      is_enabled: ${{ steps.set_enabled.outputs.is_enabled }}
+    steps:
+      - id: set_enabled
+        if: >-
+          (github.event_name == 'schedule' && github.repository == 
'apache/arrow') ||
+          contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || 
'[]'), 'CI: Extra') ||
+          contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || 
'[]'), 'CI: Extra: CUDA')
+        run: echo "is_enabled=true" >> "$GITHUB_OUTPUT"
+
+  docker:
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: ${{ matrix.title }}
     runs-on: "runs-on=${{ github.run_id 
}}/family=g4dn.xlarge/image=ubuntu24-gpu-x64/spot=capacity-optimized"
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: CUDA')
     timeout-minutes: 75
     strategy:
       fail-fast: false
diff --git a/.github/workflows/dev_pr/labeler.yml 
b/.github/workflows/dev_pr/labeler.yml
index 057a1f954f3..0950cacc2b9 100644
--- a/.github/workflows/dev_pr/labeler.yml
+++ b/.github/workflows/dev_pr/labeler.yml
@@ -73,18 +73,3 @@
   - any-glob-to-any-file:
     - docs/**/*
     - "**/*.{md, rst, Rmd, Rd}"
-
-"CI: Extra: C++":
-- changed-files:
-  - any-glob-to-any-file:
-    - .github/workflows/cpp_extra.yml
-    - cpp/src/arrow/flight/sql/odbc/**/*
-
-"CI: Extra: Package: Linux":
-- changed-files:
-  - any-glob-to-any-file:
-    - .github/workflows/package_linux.yml
-    - dev/release/binary-task.rb
-    - dev/release/verify-apt.sh
-    - dev/release/verify-yum.sh
-    - dev/tasks/linux-packages/**/*
diff --git a/.github/workflows/package_linux.yml 
b/.github/workflows/package_linux.yml
index 81c0922df6c..b5afb7f36a0 100644
--- a/.github/workflows/package_linux.yml
+++ b/.github/workflows/package_linux.yml
@@ -38,18 +38,7 @@ on:
     tags:
       - "apache-arrow-*-rc*"
   pull_request:
-    paths:
-      - '.github/workflows/check_labels.yml'
-      - '.github/workflows/package_linux.yml'
-      - '.github/workflows/report_ci.yml'
-      - 'cpp/**'
-      - 'c_glib/**'
-      - 'dev/archery/archery/**'
-      - 'dev/release/binary-task.rb'
-      - 'dev/release/verify-apt.sh'
-      - 'dev/release/verify-yum.sh'
-      - 'dev/tasks/linux-packages/**'
-      - 'format/Flight.proto'
+    # This trigger ensures that the `check_labels` workflow runs on manual 
label changes
     types:
       - labeled
       - opened
@@ -69,12 +58,28 @@ permissions:
 
 jobs:
   check-labels:
-    if: github.event_name != 'schedule' || github.repository == 'apache/arrow'
+    if: github.event_name == 'pull_request'
     uses: ./.github/workflows/check_labels.yml
     with:
       parent-workflow: package_linux
 
+  check-enabled:
+    # Check whether the CI builds in this workflow need to be run
+    needs: check-labels
+    runs-on: ubuntu-latest
+    outputs:
+      is_enabled: ${{ steps.set_enabled.outputs.is_enabled }}
+    steps:
+      - id: set_enabled
+        if: >-
+          (github.event_name == 'schedule' && github.repository == 
'apache/arrow') ||
+          contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || 
'[]'), 'CI: Extra') ||
+          contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || 
'[]'), 'CI: Extra: Package: Linux')
+        run: echo "is_enabled=true" >> "$GITHUB_OUTPUT"
+
   package:
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     permissions:
       # Upload artifacts to GitHub Release
       contents: write
@@ -82,11 +87,6 @@ jobs:
       packages: write
     name: ${{ matrix.id }}
     runs-on: ${{ contains(matrix.id, 'amd64') && 'ubuntu-latest' || 
'ubuntu-24.04-arm' }}
-    needs: check-labels
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: Package: Linux')
     timeout-minutes: 160
     strategy:
       fail-fast: false
diff --git a/.github/workflows/r_extra.yml b/.github/workflows/r_extra.yml
index 209352662ad..1ba7d2247ce 100644
--- a/.github/workflows/r_extra.yml
+++ b/.github/workflows/r_extra.yml
@@ -40,21 +40,7 @@ on:
     tags:
       - '**'
   pull_request:
-    paths:
-      - '.dockerignore'
-      - '.github/workflows/check_labels.yml'
-      - '.github/workflows/r_extra.yml'
-      - '.github/workflows/report_ci.yml'
-      - 'ci/docker/**'
-      - 'ci/etc/rprofile'
-      - 'ci/scripts/PKGBUILD'
-      - 'ci/scripts/cpp_*.sh'
-      - 'ci/scripts/install_minio.sh'
-      - 'ci/scripts/r_*.sh'
-      - 'cpp/**'
-      - 'compose.yaml'
-      - 'dev/archery/archery/**'
-      - 'r/**'
+    # This trigger ensures that the `check_labels` workflow runs on manual 
label changes
     types:
       - labeled
       - opened
@@ -75,19 +61,30 @@ permissions:
 
 jobs:
   check-labels:
-    if: github.event_name != 'schedule' || github.repository == 'apache/arrow'
+    if: github.event_name == 'pull_request'
     uses: ./.github/workflows/check_labels.yml
     with:
       parent-workflow: r_extra
 
-  docker:
+  check-enabled:
+    # Check whether the CI builds in this workflow need to be run
     needs: check-labels
+    runs-on: ubuntu-latest
+    outputs:
+      is_enabled: ${{ steps.set_enabled.outputs.is_enabled }}
+    steps:
+      - id: set_enabled
+        if: >-
+          (github.event_name == 'schedule' && github.repository == 
'apache/arrow') ||
+          contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || 
'[]'), 'CI: Extra') ||
+          contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || 
'[]'), 'CI: Extra: R')
+        run: echo "is_enabled=true" >> "$GITHUB_OUTPUT"
+
+  docker:
+    needs: check-enabled
+    if: needs.check-enabled.outputs.is_enabled == 'true'
     name: ${{ matrix.title }}
     runs-on: ${{ matrix.runs-on }}
-    if: >-
-      needs.check-labels.outputs.force == 'true' ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra') ||
-      contains(fromJSON(needs.check-labels.outputs.ci-extra-labels || '[]'), 
'CI: Extra: R')
     timeout-minutes: 75
     strategy:
       fail-fast: false

Reply via email to