diff --git a/.github/workflows/check_labels.yml b/.github/workflows/check_labels.yml new file mode 100644 index 0000000000000..ee4a080f83827 --- /dev/null +++ b/.github/workflows/check_labels.yml @@ -0,0 +1,75 @@ +# 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: Check Labels Reusable + +on: + workflow_call: + inputs: + parent-workflow: + description: "The parent workflow filename (without .yml)" + required: true + type: string + outputs: + 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 }} + +jobs: + check-labels: + name: Check labels + runs-on: ubuntu-latest + 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' + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - name: Check + id: check + env: + GH_TOKEN: ${{ github.token }} + run: | + set -ex + case "${GITHUB_EVENT_NAME}" in + push|schedule|workflow_dispatch) + echo "force=true" >> "${GITHUB_OUTPUT}" + ;; + pull_request) + { + echo "ci-extra-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/${{ inputs.parent-workflow }}.yml" \ + --quiet; then + echo "force=true" >> "${GITHUB_OUTPUT}" + fi + ;; + esac diff --git a/.github/workflows/cpp_extra.yml b/.github/workflows/cpp_extra.yml index 2907ae3bcd18a..97dbadd25d58c 100644 --- a/.github/workflows/cpp_extra.yml +++ b/.github/workflows/cpp_extra.yml @@ -24,7 +24,9 @@ on: - '!dependabot/**' paths: - '.dockerignore' + - '.github/workflows/check_labels.yml' - '.github/workflows/cpp_extra.yml' + - '.github/workflows/report_ci.yml' - 'ci/conda_env_*' - 'ci/docker/**' - 'ci/scripts/ccache_setup.sh' @@ -43,7 +45,9 @@ on: pull_request: paths: - '.dockerignore' + - '.github/workflows/check_labels.yml' - '.github/workflows/cpp_extra.yml' + - '.github/workflows/report_ci.yml' - 'ci/conda_env_*' - 'ci/docker/**' - 'ci/scripts/ccache_setup.sh' @@ -75,53 +79,19 @@ permissions: jobs: check-labels: - name: Check labels - runs-on: ubuntu-latest - timeout-minutes: 5 - outputs: - ci-extra: ${{ steps.check.outputs.ci-extra }} - steps: - - name: Checkout Arrow - if: github.event_name == 'pull_request' - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - - name: Check - id: check - env: - GH_TOKEN: ${{ github.token }} - run: | - case "${GITHUB_EVENT_NAME}" in - push|schedule) - ci_extra=true - ;; - pull_request) - n_ci_extra_labels=$( - gh pr view ${{ github.event.number }} \ - --jq '.labels[].name | select(. == "CI: Extra")' \ - --json labels \ - --repo ${GITHUB_REPOSITORY} | wc -l) - if [ "${n_ci_extra_labels}" -eq 1 ]; then - ci_extra=true - else - git fetch origin ${GITHUB_BASE_REF} - if git diff --stat origin/${GITHUB_BASE_REF}.. | \ - grep \ - --fixed-strings ".github/workflows/cpp_extra.yml" \ - --quiet; then - ci_extra=true - else - ci_extra=false - fi - fi - ;; - esac - - echo "ci-extra=${ci_extra}" >> "${GITHUB_OUTPUT}" + uses: ./.github/workflows/check_labels.yml + secrets: inherit + with: + parent-workflow: cpp_extra docker: needs: check-labels name: ${{ matrix.title }} runs-on: ${{ matrix.runs-on }} - if: needs.check-labels.outputs.ci-extra == 'true' + 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 @@ -198,7 +168,10 @@ jobs: needs: check-labels name: JNI macOS runs-on: macos-14 - if: needs.check-labels.outputs.ci-extra == 'true' + 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" @@ -280,58 +253,8 @@ jobs: ../minimal_build.build/arrow-example report-extra-cpp: - runs-on: ubuntu-latest needs: - docker - jni-macos - # We don't have the job id as part of the context neither the job name. - # The GitHub API exposes numeric id or job name but not the github.job (report-extra-cpp). - # We match github.job to the name so we can pass it via context in order to be ignored on the report. - # The job is still running. - name: ${{ github.job }} - if: github.event_name == 'schedule' && always() - steps: - - name: Checkout Arrow - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - with: - fetch-depth: 0 - - name: Setup Python - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: 3 - - name: Setup Archery - run: python3 -m pip install -e dev/archery[crossbow] - - name: Prepare common options - run: | - if [ "${GITHUB_REPOSITORY}" = "apache/arrow" ]; then - echo "COMMON_OPTIONS=--send" >> "${GITHUB_ENV}" - else - echo "COMMON_OPTIONS=--dry-run" >> "${GITHUB_ENV}" - fi - - name: Send email - env: - GH_TOKEN: ${{ github.token }} - SMTP_PASSWORD: ${{ secrets.ARROW_SMTP_PASSWORD }} - run: | - archery ci report-email \ - --ignore ${{ github.job }} \ - --recipient-email 'builds@arrow.apache.org' \ - --repository ${{ github.repository }} \ - --sender-email 'arrow@commit-email.info' \ - --sender-name Arrow \ - --smtp-port 587 \ - --smtp-server 'commit-email.info' \ - --smtp-user arrow \ - ${COMMON_OPTIONS} \ - ${{ github.run_id }} - - name: Send chat message - if: always() - env: - GH_TOKEN: ${{ github.token }} - CHAT_WEBHOOK: ${{ secrets.ARROW_ZULIP_WEBHOOK }} - run: | - archery ci report-chat \ - --ignore ${{ github.job }} \ - --repository ${{ github.repository }} \ - ${COMMON_OPTIONS} \ - ${{ github.run_id }} + uses: ./.github/workflows/report_ci.yml + secrets: inherit diff --git a/.github/workflows/package_linux.yml b/.github/workflows/package_linux.yml new file mode 100644 index 0000000000000..cc5ef00fcb951 --- /dev/null +++ b/.github/workflows/package_linux.yml @@ -0,0 +1,311 @@ +# 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: Package Linux + +on: + push: + branches: + - '**' + - '!dependabot/**' + paths: + - '.github/workflows/check_labels.yml' + - '.github/workflows/package_linux.yml' + - '.github/workflows/report_ci.yml' + - 'cpp/**' + - 'c_glib/**' + - 'dev/tasks/linux-packages/**' + - 'format/Flight.proto' + 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/tasks/linux-packages/**' + - 'format/Flight.proto' + types: + - labeled + - opened + - reopened + - synchronize + schedule: + - cron: "0 2 * * *" + +concurrency: + group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }} + cancel-in-progress: true + +permissions: + # Upload to GitHub Release + contents: write + +jobs: + check-labels: + uses: ./.github/workflows/check_labels.yml + secrets: inherit + with: + parent-workflow: package_linux + + package: + 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: 75 + strategy: + fail-fast: false + matrix: + id: + - almalinux-8-amd64 + - almalinux-8-arm64 + - almalinux-9-amd64 + - almalinux-9-arm64 + - almalinux-10-amd64 + - almalinux-10-arm64 + - amazon-linux-2023-amd64 + - amazon-linux-2023-arm64 + - centos-9-stream-amd64 + - centos-9-stream-arm64 + - centos-7-amd64 + - debian-bookworm-amd64 + - debian-bookworm-arm64 + - debian-trixie-amd64 + - debian-trixie-arm64 + - debian-forky-amd64 + - debian-forky-arm64 + - ubuntu-jammy-amd64 + - ubuntu-jammy-arm64 + - ubuntu-noble-amd64 + - ubuntu-noble-arm64 + env: + DOCKER_VOLUME_PREFIX: ".docker/" + steps: + - name: Checkout Arrow + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + fetch-depth: 0 + submodules: recursive + - name: Free up disk space + run: | + ci/scripts/util_free_space.sh + - name: Prepare environment variables + env: + ID: ${{ matrix.id }} + run: | + set -x + case "${ID}" in + centos-*) + # Example: centos-9-stream-amd64 -> centos + distribution="${ID%%-*}" + ;; + *) + # Example: almalinux-8-amd64 -> almalinux + # Example: amazon-linux-2023-amd64 -> amazon-linux + distribution="${ID%-*-*}" + ;; + esac + echo "DISTRIBUTION=${distribution}" >> "${GITHUB_ENV}" + # Example: almalinux-8-amd64 -> amd64 + architecture="${ID##*-}" + echo "ARCHITECTURE=${architecture}" >> "${GITHUB_ENV}" + # Example: almalinux-8-amd64 -> almalinux-8 + target="${ID%-*}" + case "${target}" in + almalinux-*|amazon-linux-*|centos-*) + echo "TASK_NAMESPACE=yum" >> "${GITHUB_ENV}" + if [ "${architecture}" = "arm64" ]; then + # Example: almalinux-8 -> almalinux-8-aarch64 + target="${target}-aarch64" + fi + echo "YUM_TARGETS=${target}" >> "${GITHUB_ENV}" + ;; + *) + echo "TASK_NAMESPACE=apt" >> "${GITHUB_ENV}" + if [ "${architecture}" = "arm64" ]; then + # Example: ubuntu-noble -> ubuntu-noble-arm64 + target="${target}-arm64" + fi + echo "APT_TARGETS=${target}" >> "${GITHUB_ENV}" + ;; + esac + echo "TARGET=${target}" >> "${GITHUB_ENV}" + + if [ "${GITHUB_REF_TYPE}" = "tag" ]; then + # Example: apache-arrow-21.0.0-rc0 -> 21.0.0-rc0 + version="${GITHUB_REF_NAME#apache-arrow-}" + echo "ARROW_VERSION=${version}" >> "${GITHUB_ENV}" + fi + - name: Cache Docker Volumes + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + with: + path: .docker + key: package-linux-${{ matrix.id }}-${{ hashFiles('cpp/**', 'c_glib/**') }} + restore-keys: package-linux-${{ matrix.id }}- + - name: Set up Ruby + run: | + sudo apt update + sudo apt install -y \ + rake \ + ruby \ + ruby-dev + - name: Prepare apache-arrow-apt-source for arm64 + if: env.ARCHITECTURE == 'arm64' + run: | + pushd dev/tasks/linux-packages/apache-arrow-apt-source/apt + for target in *-*; do + cp -a ${target} ${target}-arm64 + done + popd + - name: Prepare apache-arrow-release for arm64 + if: env.ARCHITECTURE == 'arm64' + run: | + pushd dev/tasks/linux-packages/apache-arrow-release/yum + for target in *-*; do + cp -a ${target} ${target}-aarch64 + done + popd + - name: Update version + if: github.ref_type != 'tag' + run: | + pushd dev/tasks/linux-packages + rake version:update + popd + - name: Login to GitHub Container registry + uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Wait for creating GitHub Release + if: github.ref_type == 'tag' + run: | + dev/release/utils-watch-gh-workflow.sh \ + ${GITHUB_REF_NAME} \ + release_candidate.yml + - name: Build + run: | + pushd dev/tasks/linux-packages + rake docker:pull || : + rake --trace ${TASK_NAMESPACE}:build BUILD_DIR=build + popd + - name: Docker Push + continue-on-error: true + if: >- + success() && + github.event_name == 'push' && + github.ref_name == 'main' + run: | + pushd dev/tasks/linux-packages + rake docker:push + popd + - name: Build artifact tarball + run: | + mkdir -p "${DISTRIBUTION}" + cp -a \ + dev/tasks/linux-packages/*/${TASK_NAMESPACE}/repositories/${DISTRIBUTION}/* \ + "${DISTRIBUTION}/" + # We use latest .deb/.rpm of + # apache-arrow-apt-source/apache-arrow-release built for + # amd64 because they are architecture independent. + if [ "${ARCHITECTURE}" = "amd64" ]; then + if [ "${APT_TASK_NAMESPACE}" = "apt" ]; then + # Example: debian-bookworm-amd64 -> debian-bookworm + code_name="${ID%-*}" + # Example: debian-bookworm -> bookworm + code_name="${code_name#*-}" + # Create + # https://packages.apache.org/artifactory/arrow/${DISTRIBUTION}/apache-arrow-apt-source-latest-${code_name}.deb + # for easy to install. + cp -a \ + "${DISTRIBUTION}/pool/${code_name}/a/apache-arrow-apt-source/*.deb \ + "${DISTRIBUTION}/apache-arrow-apt-source-latest-${code_name}.deb" + else + # Example: centos-9-stream-amd64 -> centos-9-stream + # Example: amazon-linux-2023-amd64 -> amazon-linux-2023 + version="${ID%-*}" + # Example: centos-9-stream -> 9-stream + # Example: amazon-linux-2023 -> 2023 + version="${version##${DISTRIBUTION}-}" + # Create + # https://packages.apache.org/artifactory/arrow/${DISTRIBUTION}/${version}/apache-arrow-release-latest.rpm + # for easy to install. + cp -a \ + "${DISTRIBUTION}/${version}/x86_64/Packages/apache-arrow-release-*.rpm \ + "${DISTRIBUTION}/${version}/apache-arrow-release-latest.rpm" + fi + fi + tar cvzf ${{ matrix.id }}.tar.gz ${DISTRIBUTION} + dev/release/utils-generate-checksum.sh ${{ matrix.id }}.tar.gz + - name: Upload the artifacts to the job + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: ${{ matrix.id }} + path: ${{ matrix.id }}.tar.gz* + - name: Upload the artifacts to GitHub Release + if: github.ref_type == 'tag' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload ${GITHUB_REF_NAME} \ + --clobber \ + ${{ matrix.id }}.tar.gz* + - name: Set up test + run: | + sudo apt install -y \ + apt-utils \ + cpio \ + createrepo-c \ + devscripts \ + gpg \ + rpm \ + rsync + gem install --user-install apt-dists-merge + { + echo "Key-Type: RSA" + echo "Key-Length: 4096" + echo "Name-Real: Test" + echo "Name-Email: test@example.com" + echo "%no-protection" + } | gpg --full-generate-key --batch + GPG_KEY_ID=$(gpg --list-keys --with-colon test@example.com | grep fpr | cut -d: -f10) + echo "GPG_KEY_ID=${GPG_KEY_ID}" >> ${GITHUB_ENV} + if [ "${TASK_NAMESPACE}" = "yum" ]; then + repositories_dir=dev/tasks/linux-packages/apache-arrow-release/yum/repositories + rpm2cpio ${repositories_dir}/*/*/*/Packages/apache-arrow-release-*.noarch.rpm | + cpio -id + mv etc/pki/rpm-gpg/RPM-GPG-KEY-Apache-Arrow \ + dev/tasks/linux-packages/KEYS + fi + gpg --export --armor test@example.com >> dev/tasks/linux-packages/KEYS + - name: Test + run: | + pushd dev/tasks/linux-packages + rake --trace ${TASK_NAMESPACE}:test + popd + + report-package-linux: + needs: + - package + uses: ./.github/workflows/report_ci.yml + secrets: inherit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 655d67df69efd..611e76167963a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,9 +20,8 @@ name: Release on: push: tags: - # Trigger workflow when a tag whose name matches the pattern - # pattern "apache-arrow-{MAJOR}.{MINOR}.{PATCH}" is pushed. - - "apache-arrow-[0-9]+.[0-9]+.[0-9]+" + - "apache-arrow-*" + - "!apache-arrow-*-rc*" permissions: contents: write diff --git a/.github/workflows/release_candidate.yml b/.github/workflows/release_candidate.yml index d9d0b470deb65..cb6b71837da61 100644 --- a/.github/workflows/release_candidate.yml +++ b/.github/workflows/release_candidate.yml @@ -23,9 +23,7 @@ on: - '**' - '!dependabot/**' tags: - # Trigger workflow when a tag whose name matches the pattern - # "apache-arrow-{MAJOR}.{MINOR}.{PATCH}-rc{RC_NUM}" is pushed. - - "apache-arrow-[0-9]+.[0-9]+.[0-9]+-rc[0-9]+" + - "apache-arrow-*-rc*" paths: - ".github/workflows/release_candidate.sh" - "dev/release/utils-create-release-tarball.sh" diff --git a/.github/workflows/report_ci.yml b/.github/workflows/report_ci.yml new file mode 100644 index 0000000000000..8d3e6ffc04b04 --- /dev/null +++ b/.github/workflows/report_ci.yml @@ -0,0 +1,76 @@ +# 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: Report CI results + +on: + workflow_call: + +jobs: + report-ci: + runs-on: ubuntu-latest + # We don't have the job id as part of the context neither the job name. + # The GitHub API exposes numeric id or job name but not the github.job (report-ci). + # We match github.job to the name so we can pass it via context in order to be ignored on the report. + # The job is still running. + name: ${{ github.job }} + if: github.event_name == 'schedule' && always() + steps: + - name: Checkout Arrow + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + fetch-depth: 0 + - name: Setup Python + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: 3 + - name: Setup Archery + run: python3 -m pip install -e dev/archery[crossbow] + - name: Prepare common options + run: | + if [ "${GITHUB_REPOSITORY}" = "apache/arrow" ]; then + echo "COMMON_OPTIONS=--send" >> "${GITHUB_ENV}" + else + echo "COMMON_OPTIONS=--dry-run" >> "${GITHUB_ENV}" + fi + - name: Send email + env: + GH_TOKEN: ${{ github.token }} + SMTP_PASSWORD: ${{ secrets.ARROW_SMTP_PASSWORD }} + run: | + archery ci report-email \ + --ignore ${{ github.job }} \ + --recipient-email 'builds@arrow.apache.org' \ + --repository ${{ github.repository }} \ + --sender-email 'arrow@commit-email.info' \ + --sender-name Arrow \ + --smtp-port 587 \ + --smtp-server 'commit-email.info' \ + --smtp-user arrow \ + ${COMMON_OPTIONS} \ + ${{ github.run_id }} + - name: Send chat message + if: always() + env: + GH_TOKEN: ${{ github.token }} + CHAT_WEBHOOK: ${{ secrets.ARROW_ZULIP_WEBHOOK }} + run: | + archery ci report-chat \ + --ignore ${{ github.job }} \ + --repository ${{ github.repository }} \ + ${COMMON_OPTIONS} \ + ${{ github.run_id }} diff --git a/ci/scripts/util_free_space.sh b/ci/scripts/util_free_space.sh index dd6ba2c4600a9..4b6e26c6b2240 100755 --- a/ci/scripts/util_free_space.sh +++ b/ci/scripts/util_free_space.sh @@ -87,8 +87,9 @@ sudo rm -rf /opt/hostedtoolcache/PyPy || : # 376MB sudo rm -rf /opt/hostedtoolcache/node || : # Remove Web browser packages -sudo apt purge -y \ - firefox \ - google-chrome-stable \ - microsoft-edge-stable +sudo apt purge -y firefox +# google-chrome-stable isn't installed on arm64 image. +sudo apt purge -y google-chrome-stable || : +# microsoft-edge-stable isn't installed on arm64 image. +sudo apt purge -y microsoft-edge-stable || : df -h diff --git a/dev/archery/archery/ci/core.py b/dev/archery/archery/ci/core.py index 6cb4fa847ef4b..45364ffb0ddd9 100644 --- a/dev/archery/archery/ci/core.py +++ b/dev/archery/archery/ci/core.py @@ -66,7 +66,11 @@ def jobs(self): if jobs_resp.status_code == 200: jobs_data = jobs_resp.json() for job_data in jobs_data.get('jobs', []): - if job_data.get('name') != self.ignore_job: + # Ignore jobs that contain the ignore_job pattern + # from the reusable workflow this will be report-ci. + # The real job_data['name'] is the display name, like + # "report-extra-cpp / report-ci". + if self.ignore_job in job_data.get('name'): job = Job(job_data) jobs.append(job) return jobs diff --git a/dev/release/04-binary-download.sh b/dev/release/04-binary-download.sh index 16530478ce41f..d0ee7f1f965e3 100755 --- a/dev/release/04-binary-download.sh +++ b/dev/release/04-binary-download.sh @@ -31,6 +31,7 @@ rc_number=$1 shift version_with_rc="${version}-rc${rc_number}" crossbow_job_prefix="release-${version_with_rc}" +tag="apache-arrow-${version_with_rc}" # archery will submit a job with id: "${crossbow_job_prefix}-0" unless there # are jobs submitted with the same prefix (the integer at the end is auto @@ -39,3 +40,14 @@ crossbow_job_prefix="release-${version_with_rc}" : ${CROSSBOW_JOB_ID:="${crossbow_job_prefix}-${CROSSBOW_JOB_NUMBER}"} archery crossbow download-artifacts --no-fetch ${CROSSBOW_JOB_ID} "$@" + +# Download Linux packages. +gh release download "${tag}" \ + --dir "${crossbow_job_prefix}" \ + --pattern "almalinux-*.tar.gz" \ + --pattern "amazon-linux-*.tar.gz" \ + --pattern "centos-*.tar.gz" \ + --pattern "debian-*.tar.gz" \ + --pattern "ubuntu-*.tar.gz" \ + --repo "${REPOSITORY:-apache/arrow}" \ + --skip-existing diff --git a/dev/release/binary-task.rb b/dev/release/binary-task.rb index 22dfb7ffa91f1..dfe32b41e1fea 100644 --- a/dev/release/binary-task.rb +++ b/dev/release/binary-task.rb @@ -1649,41 +1649,16 @@ def define_apt_rc_tasks pool_dir = "#{distribution_dir}/pool/#{code_name}" rm_rf(pool_dir, verbose: verbose?) mkdir_p(pool_dir, verbose: verbose?) + source_dir_prefix = "#{artifacts_dir}/#{distribution}-#{code_name}" - # apache/arrow uses debian-bookworm-{amd64,arm64} but - # apache/arrow-adbc uses debian-bookworm. So the following + # apache/arrow uses debian-bookworm-{amd64,arm64}.tar.gz but + # apache/arrow-adbc uses debian-bookworm.tar.gz So the following # glob must much both of them. - Dir.glob("#{source_dir_prefix}*/*") do |path| - base_name = File.basename(path) - package_name = ENV["DEB_PACKAGE_NAME"] - if package_name.nil? or package_name.empty? - if base_name.start_with?("apache-arrow-apt-source") - package_name = "apache-arrow-apt-source" - else - package_name = "apache-arrow" - end - end - destination_path = [ - pool_dir, - component, - package_name[0], - package_name, - base_name, - ].join("/") - copy_artifact(path, - destination_path, - progress_reporter) - case base_name - when /\A[^_]+-apt-source_.*\.deb\z/ - latest_apt_source_package_path = [ - distribution_dir, - "#{package_name}-latest-#{code_name}.deb" - ].join("/") - copy_artifact(path, - latest_apt_source_package_path, - progress_reporter) - end + Dir.glob("#{source_dir_prefix}*.tar.gz") do |tar_gz| + sh("tar", "xf", tar_gz, "-C", incoming_dir) + progress_reporter.advance end + progress_reporter.finish end end @@ -1876,7 +1851,6 @@ def available_yum_targets ["almalinux", "8"], ["amazon-linux", "2023"], ["centos", "9-stream"], - ["centos", "8-stream"], ["centos", "7"], ] end @@ -2043,59 +2017,43 @@ def define_yum_rc_tasks progress_label = "Copying: #{distribution} #{distribution_version}" progress_reporter = ProgressReporter.new(progress_label) - destination_prefix = [ - incoming_dir, - distribution, - distribution_version, - ].join("/") - rm_rf(destination_prefix, verbose: verbose?) + destination_dir = File.join(incoming_dir, + distribution, + distribution_version) + rm_rf(destination_dir, verbose: verbose?) + mkdir_p(destination_dir, verbose: verbose?) + source_dir_prefix = "#{artifacts_dir}/#{distribution}-#{distribution_version}" - Dir.glob("#{source_dir_prefix}*/*.rpm") do |path| - base_name = File.basename(path) - type = base_name.split(".")[-2] - destination_paths = [] - case type - when "src" - destination_paths << [ - destination_prefix, - "Source", - "SPackages", - base_name, - ].join("/") - when "noarch" - yum_architectures.each do |architecture| - destination_paths << [ - destination_prefix, - architecture, - "Packages", - base_name, - ].join("/") - end - else - destination_paths << [ - destination_prefix, - type, - "Packages", - base_name, - ].join("/") - end - destination_paths.each do |destination_path| - copy_artifact(path, - destination_path, - progress_reporter) - end - case base_name - when /\A(apache-arrow-release)-.*\.noarch\.rpm\z/ - package_name = $1 - latest_release_package_path = [ - destination_prefix, - "#{package_name}-latest.rpm" - ].join("/") - copy_artifact(path, - latest_release_package_path, - progress_reporter) - end + # apache/arrow uses almalinux-10-{amd64,arm64}.tar.gz but + # apache/arrow-adbc uses almalinux-10.tar.gz So the + # following glob must much both of them. + Dir.glob("#{source_dir_prefix}*.tar.gz") do |tar_gz| + sh("tar", "xf", tar_gz, "-C", incoming_dir) + progress_reporter.advance + end + + case "#{distribution}-#{distribution_version}" + when "almalinux-10", + "almalinux-9", + "almalinux-8", + "amazon-linux-2023", + "centos-9-stream", + "centos-7" + # Adjust source packages directory for backward + # compatibility. We don't need this for new supported + # distribution because we don't need to care about + # backward compatibility for them. + # + # Example: + # almalinux/10/Source/Packages/ -> + # almalinux/10/source/SPackages/ + mv(File.join(destination_dir, "Source"), + File.join(destination_dir, "source"), + verbose: true) + mv(File.join(destination_dir, "source", "Packages"), + File.join(destination_dir, "source", "SPackages"), + verbose: true) end progress_reporter.finish @@ -2364,6 +2322,8 @@ def apt_test_targets_default # "debian-bookworm-arm64", "debian-trixie", # "debian-trixie-arm64", + "debian-forky", + # "debian-forky-arm64", "ubuntu-jammy", # "ubuntu-jammy-arm64", "ubuntu-noble", @@ -2424,8 +2384,6 @@ def yum_test_targets_default # "amazon-linux-2023-aarch64", "centos-9-stream", # "centos-9-stream-aarch64", - "centos-8-stream", - # "centos-8-stream-aarch64", "centos-7", # "centos-7-aarch64", ] diff --git a/dev/release/verify-apt.sh b/dev/release/verify-apt.sh index 1aa6c45acf5d3..e01e44741d852 100755 --- a/dev/release/verify-apt.sh +++ b/dev/release/verify-apt.sh @@ -84,6 +84,9 @@ esac if [ "${TYPE}" = "local" ]; then case "${VERSION}" in + *-dev*) + package_version="$(echo "${VERSION}" | sed -E -e 's/-(dev.*)$/~\1/g')" + ;; *-rc*) package_version="$(echo "${VERSION}" | sed -e 's/-rc.*$//g')" ;; @@ -96,6 +99,7 @@ if [ "${TYPE}" = "local" ]; then apt_source_path+="/${distribution}/pool/${code_name}/main" apt_source_path+="/a/apache-arrow-apt-source" apt_source_path+="/apache-arrow-apt-source_${package_version}_all.deb" + find "${local_prefix}/apt/repositories/" ${APT_INSTALL} "${apt_source_path}" else package_version="${VERSION}-1" diff --git a/dev/tasks/linux-packages/github.linux.yml b/dev/tasks/linux-packages/github.linux.yml deleted file mode 100644 index e514931fd1b6a..0000000000000 --- a/dev/tasks/linux-packages/github.linux.yml +++ /dev/null @@ -1,129 +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. - -{% import 'macros.jinja' as macros with context %} - -{{ macros.github_header() }} - -jobs: - package: - name: Package - {% if architecture == "amd64" %} - runs-on: ubuntu-latest - {% else %} - runs-on: ubuntu-24.04-arm - {% endif %} - env: - ARCHITECTURE: {{ architecture }} - steps: - {{ macros.github_checkout_arrow()|indent }} - {{ macros.github_login_dockerhub()|indent }} - {{ macros.github_free_space()|indent }} - - - name: Set up Ruby - run: | - sudo apt update - sudo apt install -y \ - rake \ - ruby \ - ruby-dev - - name: Prepare apache-arrow-apt-source for arm64 - if: | - env.ARCHITECTURE == 'arm64' - run: | - pushd arrow/dev/tasks/linux-packages/apache-arrow-apt-source/apt - for target in *-*; do - cp -a ${target} ${target}-arm64 - done - popd - - name: Prepare apache-arrow-release for arm64 - if: | - env.ARCHITECTURE == 'arm64' - run: | - pushd arrow/dev/tasks/linux-packages/apache-arrow-release/yum - for target in *-*; do - cp -a ${target} ${target}-aarch64 - done - popd - - name: Build - run: | - set -e - pushd arrow/dev/tasks/linux-packages - rake version:update ARROW_RELEASE_TIME="$(date --iso-8601=seconds)" - rake docker:pull || : - rake --trace {{ task_namespace }}:build BUILD_DIR=build - popd - env: - APT_TARGETS: {{ target }} - ARROW_VERSION: {{ arrow.version }} - REPO: {{ '${{ secrets.REPO }}' }} - YUM_TARGETS: {{ target }} - - name: Docker Push - continue-on-error: true - shell: bash - run: | - pushd arrow/dev/tasks/linux-packages - rake docker:push - popd - env: - APT_TARGETS: {{ target }} - REPO: {{ '${{ secrets.REPO }}' }} - YUM_TARGETS: {{ target }} - - {% set patterns = upload_extensions | format_all("arrow/dev/tasks/linux-packages/*/*/repositories/**/*{}") %} - {{ macros.github_upload_releases(patterns)|indent }} - - - name: Set up test - run: | - sudo apt install -y \ - apt-utils \ - cpio \ - createrepo-c \ - devscripts \ - gpg \ - rpm \ - rsync - gem install --user-install apt-dists-merge - (echo "Key-Type: RSA"; \ - echo "Key-Length: 4096"; \ - echo "Name-Real: Test"; \ - echo "Name-Email: test@example.com"; \ - echo "%no-protection") | \ - gpg --full-generate-key --batch - GPG_KEY_ID=$(gpg --list-keys --with-colon test@example.com | grep fpr | cut -d: -f10) - echo "GPG_KEY_ID=${GPG_KEY_ID}" >> ${GITHUB_ENV} - case "{{ target }}" in - almalinux-*|amazon-linux-*|centos-*) - repositories_dir=arrow/dev/tasks/linux-packages/apache-arrow-release/yum/repositories - rpm2cpio ${repositories_dir}/*/*/*/Packages/apache-arrow-release-*.rpm | \ - cpio -id - mv etc/pki/rpm-gpg/RPM-GPG-KEY-Apache-Arrow \ - arrow/dev/tasks/linux-packages/KEYS - ;; - esac - gpg --export --armor test@example.com >> arrow/dev/tasks/linux-packages/KEYS - - name: Test - run: | - set -e - pushd arrow/dev/tasks/linux-packages - rake --trace {{ task_namespace }}:test - rm -rf {{ task_namespace }}/repositories - popd - env: - APT_TARGETS: {{ target }} - ARROW_VERSION: {{ arrow.version }} - YUM_TARGETS: {{ target }} diff --git a/dev/tasks/linux-packages/helper.rb b/dev/tasks/linux-packages/helper.rb index 0354188046d1c..ccb95eec51acf 100644 --- a/dev/tasks/linux-packages/helper.rb +++ b/dev/tasks/linux-packages/helper.rb @@ -72,13 +72,12 @@ def detect_env(name) raise "Failed to detect #{name} environment variable" end - def detect_repo - detect_env("REPO") + def github_repository + ENV["GITHUB_REPOSITORY"] || "apache/arrow" end def docker_image(os, architecture) - architecture ||= "amd64" - "#{detect_repo}:#{architecture}-#{os}-package-#{@package}" + "ghcr.io/#{github_repository}/package-#{super}" end end end diff --git a/dev/tasks/linux-packages/yum/build.sh b/dev/tasks/linux-packages/yum/build.sh index 264684bb16c3f..d4631f92a195b 100755 --- a/dev/tasks/linux-packages/yum/build.sh +++ b/dev/tasks/linux-packages/yum/build.sh @@ -93,7 +93,7 @@ fi repositories="/host/repositories" repository="${repositories}/${distribution}/${distribution_version}" rpm_dir="${repository}/${architecture}/Packages" -srpm_dir="${repository}/source/SRPMS" +srpm_dir="${repository}/Source/Packages" run mkdir -p "${rpm_dir}" "${srpm_dir}" # for debug diff --git a/dev/tasks/tasks.yml b/dev/tasks/tasks.yml index 6ac50421768e8..11831e646c3e2 100644 --- a/dev/tasks/tasks.yml +++ b/dev/tasks/tasks.yml @@ -28,38 +28,14 @@ groups: - wheel-* - python-sdist - linux: - - almalinux-* - - amazon-linux-* - - centos-* - - debian-* - - ubuntu-* - - linux-amd64: - - almalinux-*-amd64 - - amazon-linux-*-amd64 - - centos-*-amd64 - - debian-*-amd64 - - ubuntu-*-amd64 - - linux-arm64: - - almalinux-*-arm64 - - debian-*-arm64 - - ubuntu-*-arm64 - homebrew: - homebrew-* packaging: - - almalinux-* - - amazon-linux-* - - centos-* - conan-* - - debian-* - matlab - python-sdist - r-binary-packages - - ubuntu-* - wheel-* - test-debian-*-docs @@ -132,11 +108,6 @@ groups: nightly: - verify-rc-source-* - - almalinux-* - - amazon-linux-* - - debian-* - - ubuntu-* - - centos-* - conan-* - homebrew-cpp - test-* @@ -151,11 +122,6 @@ groups: - example-* nightly-packaging: - - almalinux-* - - amazon-linux-* - - debian-* - - ubuntu-* - - centos-* - conan-* - homebrew-cpp - wheel-* @@ -291,223 +257,6 @@ tasks: artifacts: - pyarrow-{no_rc_version}.tar.gz -{############################## Linux PKGS ####################################} - -{% for target in ["debian-bookworm", - "debian-trixie", - "debian-forky", - "ubuntu-jammy", - "ubuntu-noble"] %} - {% for architecture in ["amd64", "arm64"] %} - {{ target }}-{{ architecture }}: - ci: github - template: linux-packages/github.linux.yml - params: - architecture: "{{ architecture }}" - {% if architecture == "amd64" %} - target: "{{ target }}" - {% else %} - target: "{{ target }}-arm64" - {% endif %} - task_namespace: "apt" - upload_extensions: - - .ddeb - - .deb - - .debian.tar.xz - - .dsc - - .orig.tar.gz - artifacts: - - arrow-tools_{no_rc_version}-1_[a-z0-9]+.deb - {% if architecture == "amd64" %} - - apache-arrow-apt-source_{no_rc_version}-1.debian.tar.xz - - apache-arrow-apt-source_{no_rc_version}-1.dsc - - apache-arrow-apt-source_{no_rc_version}-1_all.deb - - apache-arrow-apt-source_{no_rc_version}.orig.tar.gz - - apache-arrow_{no_rc_version}-1.debian.tar.xz - - apache-arrow_{no_rc_version}-1.dsc - - apache-arrow_{no_rc_version}.orig.tar.gz - {% endif %} - - gir1.2-arrow-1.0_{no_rc_version}-1_[a-z0-9]+.deb - - gir1.2-arrow-dataset-1.0_{no_rc_version}-1_[a-z0-9]+.deb - - gir1.2-arrow-flight-1.0_{no_rc_version}-1_[a-z0-9]+.deb - - gir1.2-arrow-flight-sql-1.0_{no_rc_version}-1_[a-z0-9]+.deb - - gir1.2-gandiva-1.0_{no_rc_version}-1_[a-z0-9]+.deb - - gir1.2-parquet-1.0_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-acero-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-acero{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-acero{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-compute-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-compute{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-compute{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-dataset-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-dataset-glib-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-dataset-glib-doc_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-dataset-glib{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-dataset-glib{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-dataset{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-dataset{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-glib-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-glib-doc_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-glib{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-flight-glib{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-sql-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-sql-glib-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-sql-glib-doc_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-sql-glib{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-flight-sql-glib{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight-sql{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-flight-sql{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-flight{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-flight{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-glib-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-glib-doc_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-glib{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-glib{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libgandiva-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libgandiva-glib-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libgandiva-glib-doc_{no_rc_version}-1_[a-z0-9]+.deb - - libgandiva-glib{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libgandiva-glib{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libgandiva{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libgandiva{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libparquet-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libparquet-glib-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libparquet-glib-doc_{no_rc_version}-1_[a-z0-9]+.deb - - libparquet-glib{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libparquet-glib{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libparquet{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libparquet{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - parquet-tools_{no_rc_version}-1_[a-z0-9]+.deb - {% if architecture == "amd64" %} - - gir1.2-arrow-cuda-1.0_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-cuda-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-cuda-glib-dev_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-cuda-glib{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-cuda-glib{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - - libarrow-cuda{so_version}-dbgsym_{no_rc_version}-1_[a-z0-9]+.d?deb - - libarrow-cuda{so_version}_{no_rc_version}-1_[a-z0-9]+.deb - {% endif %} - {% endfor %} -{% endfor %} - -{% for target in ["almalinux-10", - "almalinux-9", - "almalinux-8", - "amazon-linux-2023", - "centos-9-stream", - "centos-7"] %} - {% set is_rhel7_based = (target == "centos-7") %} - {% for architecture - in ["amd64", "arm64"] - if not (target == "centos-7" and architecture == "arm64") %} - {{ target }}-{{ architecture }}: - ci: github - template: linux-packages/github.linux.yml - params: - architecture: "{{ architecture }}" - {% if architecture == "amd64" %} - target: "{{ target }}" - {% else %} - target: "{{ target }}-aarch64" - {% endif %} - task_namespace: "yum" - upload_extensions: - - .rpm - artifacts: - {% if architecture == "amd64" %} - - apache-arrow-release-{no_rc_version}-1.[a-z0-9]+.noarch.rpm - - apache-arrow-release-{no_rc_version}-1.[a-z0-9]+.src.rpm - {% endif %} - - arrow[0-9]+-acero-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-acero-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow[0-9]+-acero-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - arrow[0-9]+-compute-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-compute-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow[0-9]+-compute-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - arrow[0-9]+-dataset-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-dataset-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-dataset-glib-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-dataset-glib-doc-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow[0-9]+-dataset-glib-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - arrow[0-9]+-dataset-glib-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow[0-9]+-dataset-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - arrow-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow-debugsource-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - arrow-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow-flight-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-flight-glib-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-flight-glib-doc-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-flight-sql-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-flight-sql-glib-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-flight-sql-glib-doc-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow[0-9]+-flight-glib-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow[0-9]+-flight-glib-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow[0-9]+-flight-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow[0-9]+-flight-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow[0-9]+-flight-sql-glib-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow[0-9]+-flight-sql-glib-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow[0-9]+-flight-sql-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow[0-9]+-flight-sql-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - arrow-glib-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - arrow-glib-doc-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow[0-9]+-glib-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - arrow[0-9]+-glib-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow[0-9]+-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - arrow[0-9]+-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if architecture == "amd64" %} - - arrow-{no_rc_version}-1.[a-z0-9]+.src.rpm - {% endif %} - - arrow-tools-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - arrow-tools-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - {% if not is_rhel7_based %} - - gandiva-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - gandiva-glib-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - gandiva-glib-doc-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - gandiva[0-9]+-glib-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - gandiva[0-9]+-glib-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - gandiva[0-9]+-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - gandiva[0-9]+-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - parquet-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - parquet-glib-devel-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - parquet-glib-doc-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - parquet[0-9]+-glib-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - parquet[0-9]+-glib-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - parquet[0-9]+-libs-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - - parquet[0-9]+-libs-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - - parquet-tools-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% if not is_rhel7_based %} - - parquet-tools-debuginfo-{no_rc_version}-1.[a-z0-9]+.[a-z0-9_]+.rpm - {% endif %} - {% endfor %} -{% endfor %} - ############################## Homebrew Tasks ################################ homebrew-cpp: