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