Add workflow_dispatch definitions
#674
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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: C++ Extra | |
| on: | |
| push: | |
| branches: | |
| - '**' | |
| - '!dependabot/**' | |
| 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' | |
| 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' | |
| types: | |
| - labeled | |
| - opened | |
| - reopened | |
| - synchronize | |
| schedule: | |
| - cron: | | |
| 0 0 * * * | |
| workflow_dispatch: | |
| # Example: gh workflow run cpp_extra.yml --ref apache-arrow-24.0.0-rc0 -f odbc_upload=dll | |
| # -AL- todo implement dispatch variables. | |
| # -AL- I need to make sure the workflows run first before implementing | |
| # dispatch in workflow A and B. Assume that user trigger via tag. | |
| # -AL- can use: | |
| # if: inputs.odbc_upload == 'dll' # For CI A, trigger first | |
| # if: inputs.odbc_upload == 'msi' # For CI B, trigger after upload signed DLL | |
| # And then replace `${RELEASE_CANDIDATE_TAG_NAME}` with `GITHUB_REF_NAME` | |
| inputs: | |
| odbc_upload: | |
| description: 'ODBC Component Upload' | |
| required: true | |
| default: 'dll' | |
| type: choice | |
| options: | |
| - dll | |
| - msi | |
| concurrency: | |
| group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }} | |
| cancel-in-progress: true | |
| permissions: | |
| actions: read | |
| contents: read | |
| pull-requests: read | |
| jobs: | |
| check-labels: | |
| if: github.event_name != 'schedule' || github.repository == 'apache/arrow' | |
| 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.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 | |
| # matrix: | |
| # include: | |
| # - image: alpine-linux-cpp | |
| # runs-on: ubuntu-latest | |
| # title: AMD64 Alpine Linux | |
| # - image: conda-cpp | |
| # run-options: >- | |
| # -e ARROW_USE_MESON=ON | |
| # runs-on: ubuntu-latest | |
| # title: AMD64 Ubuntu Meson | |
| # # TODO: We should remove this "continue-on-error: true" once GH-47207 is resolved | |
| # - continue-on-error: true | |
| # envs: | |
| # - DEBIAN=13 | |
| # image: debian-cpp | |
| # run-options: >- | |
| # -e CMAKE_CXX_STANDARD=23 | |
| # runs-on: ubuntu-latest | |
| # title: AMD64 Debian C++23 | |
| # env: | |
| # ARCHERY_DEBUG: 1 | |
| # ARROW_ENABLE_TIMING_TESTS: OFF | |
| # DOCKER_VOLUME_PREFIX: ".docker/" | |
| # steps: | |
| # - name: Checkout Arrow | |
| # uses: actions/checkout@v6 | |
| # with: | |
| # fetch-depth: 0 | |
| # submodules: recursive | |
| # - name: Cache Docker Volumes | |
| # uses: actions/cache@v5 | |
| # with: | |
| # path: .docker | |
| # key: extra-${{ matrix.image }}-${{ hashFiles('cpp/**') }} | |
| # restore-keys: extra-${{ matrix.image }}- | |
| # - name: Setup Python | |
| # uses: actions/setup-python@v6 | |
| # with: | |
| # python-version: 3 | |
| # - name: Setup Archery | |
| # run: python3 -m pip install -e dev/archery[docker] | |
| # - name: Execute Docker Build | |
| # continue-on-error: ${{ matrix.continue-on-error || false }} | |
| # env: | |
| # ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} | |
| # ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} | |
| # ENVS: ${{ toJSON(matrix.envs) }} | |
| # run: | | |
| # # GH-40558: reduce ASLR to avoid ASAN/LSAN crashes | |
| # sudo sysctl -w vm.mmap_rnd_bits=28 | |
| # source ci/scripts/util_enable_core_dumps.sh | |
| # if [ "${ENVS}" != "null" ]; then | |
| # echo "${ENVS}" | jq -r '.[]' | while read env; do | |
| # echo "${env}" >> .env | |
| # done | |
| # fi | |
| # archery docker run ${{ matrix.run-options || '' }} ${{ matrix.image }} | |
| # - name: Docker Push | |
| # if: >- | |
| # success() && | |
| # github.event_name == 'push' && | |
| # github.repository == 'apache/arrow' && | |
| # github.ref_name == 'main' | |
| # env: | |
| # ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} | |
| # ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} | |
| # continue-on-error: true | |
| # 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++') | |
| # name: ARM64 Windows 11 MSVC | |
| # uses: ./.github/workflows/cpp_windows.yml | |
| # with: | |
| # arch: arm64 | |
| # os: windows-11-arm | |
| # simd-level: NONE | |
| # jni-linux: | |
| # needs: check-labels | |
| # 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: | |
| # # This is for using GitHub Packages for vcpkg cache | |
| # packages: write | |
| # strategy: | |
| # fail-fast: false | |
| # matrix: | |
| # platform: | |
| # - arch: "amd64" | |
| # runs-on: ubuntu-latest | |
| # - arch: "arm64v8" | |
| # runs-on: ubuntu-24.04-arm | |
| # env: | |
| # ARCH: ${{ matrix.platform.arch }} | |
| # REPO: ghcr.io/${{ github.repository }}-dev | |
| # steps: | |
| # - name: Checkout Arrow | |
| # uses: actions/checkout@v6 | |
| # with: | |
| # fetch-depth: 0 | |
| # submodules: recursive | |
| # - name: Free up disk space | |
| # run: | | |
| # ci/scripts/util_free_space.sh | |
| # - name: Cache Docker Volumes | |
| # uses: actions/cache@v5 | |
| # with: | |
| # path: .docker | |
| # key: jni-${{ matrix.platform.runs-on }}-${{ hashFiles('cpp/**') }} | |
| # restore-keys: jni-${{ matrix.platform.runs-on }}- | |
| # - name: Setup Python | |
| # uses: actions/setup-python@v6 | |
| # with: | |
| # python-version: 3 | |
| # - name: Setup Archery | |
| # run: python3 -m pip install -e dev/archery[docker] | |
| # - name: Execute Docker Build | |
| # env: | |
| # ARCHERY_DOCKER_USER: ${{ github.actor }} | |
| # ARCHERY_DOCKER_PASSWORD: ${{ secrets.GITHUB_TOKEN }} | |
| # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # VCPKG_BINARY_SOURCES: "clear;nuget,GitHub,readwrite" | |
| # run: | | |
| # source ci/scripts/util_enable_core_dumps.sh | |
| # archery docker run cpp-jni | |
| # - name: Docker Push | |
| # if: >- | |
| # success() && | |
| # github.event_name == 'push' && | |
| # github.ref_name == 'main' | |
| # env: | |
| # ARCHERY_DOCKER_USER: ${{ github.actor }} | |
| # ARCHERY_DOCKER_PASSWORD: ${{ secrets.GITHUB_TOKEN }} | |
| # continue-on-error: true | |
| # run: archery docker push cpp-jni | |
| # jni-macos: | |
| # needs: check-labels | |
| # 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" | |
| # steps: | |
| # - name: Checkout Arrow | |
| # uses: actions/checkout@v6 | |
| # with: | |
| # fetch-depth: 0 | |
| # submodules: recursive | |
| # - name: Install dependencies | |
| # run: | | |
| # brew bundle --file=cpp/Brewfile | |
| # # We want to link aws-sdk-cpp statically but Homebrew's | |
| # # aws-sdk-cpp provides only shared library. If we have | |
| # # Homebrew's aws-sdk-cpp, our build mix Homebrew's | |
| # # aws-sdk-cpp and bundled aws-sdk-cpp. We uninstall Homebrew's | |
| # # aws-sdk-cpp to ensure using only bundled aws-sdk-cpp. | |
| # brew uninstall aws-sdk-cpp | |
| # # We want to use bundled RE2 for static linking. If | |
| # # Homebrew's RE2 is installed, its header file may be used. | |
| # # We uninstall Homebrew's RE2 to ensure using bundled RE2. | |
| # brew uninstall grpc || : # gRPC depends on RE2 | |
| # brew uninstall grpc@1.54 || : # gRPC 1.54 may be installed too | |
| # brew uninstall re2 | |
| # # We want to use bundled Protobuf for static linking. If | |
| # # Homebrew's Protobuf is installed, its library file may be | |
| # # used on test We uninstall Homebrew's Protobuf to ensure using | |
| # # bundled Protobuf. | |
| # brew uninstall protobuf | |
| # - name: Prepare ccache | |
| # run: | | |
| # echo "CCACHE_DIR=${PWD}/ccache" >> ${GITHUB_ENV} | |
| # - name: Cache ccache | |
| # uses: actions/cache@v5 | |
| # with: | |
| # path: ccache | |
| # key: jni-macos-${{ hashFiles('cpp/**') }} | |
| # restore-keys: jni-macos- | |
| # - name: CMake | |
| # run: | | |
| # cmake \ | |
| # -S cpp \ | |
| # -B cpp.build \ | |
| # --preset=ninja-release-jni-macos \ | |
| # -DARROW_BUILD_TESTS=ON \ | |
| # -DCMAKE_INSTALL_PREFIX=$PWD/cpp.install | |
| # - name: Build | |
| # run: | | |
| # cmake --build cpp.build | |
| # - name: Install | |
| # run: | | |
| # cmake --install cpp.build | |
| # - name: Test | |
| # env: | |
| # ARROW_TEST_DATA: ${{ github.workspace }}/testing/data | |
| # PARQUET_TEST_DATA: ${{ github.workspace }}/cpp/submodules/parquet-testing/data | |
| # run: | | |
| # # MinIO is required | |
| # exclude_tests="arrow-s3fs-test" | |
| # # unstable | |
| # exclude_tests="${exclude_tests}|arrow-acero-asof-join-node-test" | |
| # exclude_tests="${exclude_tests}|arrow-acero-hash-join-node-test" | |
| # ctest \ | |
| # --exclude-regex "${exclude_tests}" \ | |
| # --label-regex unittest \ | |
| # --output-on-failure \ | |
| # --parallel "$(sysctl -n hw.ncpu)" \ | |
| # --test-dir "cpp.build" \ | |
| # --timeout 300 | |
| # - name: Build example | |
| # run: | | |
| # cmake \ | |
| # -S cpp/examples/minimal_build/ \ | |
| # -B cpp/examples/minimal_build.build \ | |
| # -GNinja \ | |
| # -DCMAKE_INSTALL_PREFIX=$PWD/cpp.install | |
| # cmake --build cpp/examples/minimal_build.build | |
| # cd cpp/examples/minimal_build | |
| # ../minimal_build.build/arrow-example | |
| # odbc-linux: | |
| # needs: check-labels | |
| # 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 | |
| # env: | |
| # ARCH: amd64 | |
| # ARCHERY_DEBUG: 1 | |
| # ARROW_ENABLE_TIMING_TESTS: OFF | |
| # CLANG_TOOLS: 18 | |
| # DOCKER_VOLUME_PREFIX: ".docker/" | |
| # LLVM: 18 | |
| # UBUNTU: 24.04 | |
| # steps: | |
| # - name: Checkout Arrow | |
| # uses: actions/checkout@v6 | |
| # with: | |
| # fetch-depth: 0 | |
| # submodules: recursive | |
| # - name: Cache Docker Volumes | |
| # uses: actions/cache@v5 | |
| # with: | |
| # path: .docker | |
| # key: ubuntu-cpp-odbc-${{ hashFiles('cpp/**') }} | |
| # restore-keys: ubuntu-cpp-odbc- | |
| # - name: Setup Python on hosted runner | |
| # uses: actions/setup-python@v6 | |
| # with: | |
| # python-version: 3 | |
| # - name: Setup Archery | |
| # run: python3 -m pip install -e dev/archery[docker] | |
| # - name: Execute Docker Build | |
| # env: | |
| # ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} | |
| # ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} | |
| # run: | | |
| # # GH-40558: reduce ASLR to avoid ASAN/LSAN crashes | |
| # sudo sysctl -w vm.mmap_rnd_bits=28 | |
| # source ci/scripts/util_enable_core_dumps.sh | |
| # archery docker run ubuntu-cpp-odbc | |
| # - name: Docker Push | |
| # if: >- | |
| # success() && | |
| # github.event_name == 'push' && | |
| # github.repository == 'apache/arrow' && | |
| # github.ref_name == 'main' | |
| # env: | |
| # ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} | |
| # ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} | |
| # continue-on-error: true | |
| # run: archery docker push ubuntu-cpp-odbc | |
| # odbc-macos: | |
| # needs: check-labels | |
| # 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: 75 | |
| # strategy: | |
| # fail-fast: false | |
| # matrix: | |
| # include: | |
| # - { architecture: AMD64, macos-version: "15-intel", build-type : debug } | |
| # - { architecture: AMD64, macos-version: "15-intel", build-type : release } | |
| # - { architecture: ARM64, macos-version: "14", build-type : debug } | |
| # - { architecture: ARM64, macos-version: "14", build-type : release } | |
| # env: | |
| # ARROW_BUILD_TESTS: ON | |
| # ARROW_BUILD_TYPE: ${{ matrix.build-type }} | |
| # ARROW_DEPENDENCY_SOURCE: BUNDLED | |
| # ARROW_DEPENDENCY_USE_SHARED: OFF | |
| # ARROW_FLIGHT_SQL_ODBC: ON | |
| # ARROW_HOME: /tmp/local | |
| # ARROW_MIMALLOC: OFF | |
| # steps: | |
| # - name: Checkout Arrow | |
| # uses: actions/checkout@v6.0.1 | |
| # with: | |
| # fetch-depth: 0 | |
| # submodules: recursive | |
| # - name: Install Dependencies | |
| # run: | | |
| # brew bundle --file=cpp/Brewfile | |
| # # We want to use bundled RE2 for static linking. If | |
| # # Homebrew's RE2 is installed, its header file may be used. | |
| # # We uninstall Homebrew's RE2 to ensure using bundled RE2. | |
| # brew uninstall grpc || : # gRPC depends on RE2 | |
| # brew uninstall grpc@1.54 || : # gRPC 1.54 may be installed too | |
| # brew uninstall re2 | |
| # # We want to use bundled Protobuf for static linking. If | |
| # # Homebrew's Protobuf is installed, its library file may be | |
| # # used on test We uninstall Homebrew's Protobuf to ensure using | |
| # # bundled Protobuf. | |
| # brew uninstall protobuf | |
| # # We want to use bundled Boost for static linking. | |
| # brew uninstall boost | |
| # - name: Setup ccache | |
| # run: | | |
| # ci/scripts/ccache_setup.sh | |
| # - name: ccache info | |
| # id: ccache-info | |
| # run: | | |
| # echo "cache-dir=$(ccache --get-config cache_dir)" >> $GITHUB_OUTPUT | |
| # - name: Cache ccache | |
| # uses: actions/cache@v5.0.2 | |
| # with: | |
| # path: ${{ steps.ccache-info.outputs.cache-dir }} | |
| # key: cpp-odbc-ccache-macos-${{ matrix.macos-version }}-${{ matrix.build-type }}-${{ hashFiles('cpp/**') }} | |
| # restore-keys: cpp-odbc-ccache-macos-${{ matrix.macos-version }}-${{ matrix.build-type }}- | |
| # - name: Build | |
| # run: | | |
| # # Homebrew uses /usr/local as prefix. So packages | |
| # # installed by Homebrew also use /usr/local/include. We | |
| # # want to include headers for packages installed by | |
| # # Homebrew as system headers to ignore warnings in them. | |
| # # But "-isystem /usr/local/include" isn't used by CMake | |
| # # because /usr/local/include is marked as the default | |
| # # include path. So we disable -Werror to avoid build error | |
| # # by warnings from packages installed by Homebrew. | |
| # export BUILD_WARNING_LEVEL=PRODUCTION | |
| # LIBIODBC_DIR="$(brew --cellar libiodbc)/$(brew list --versions libiodbc | awk '{print $2}')" | |
| # ODBC_INCLUDE_DIR=$LIBIODBC_DIR/include | |
| # export ARROW_CMAKE_ARGS="-DODBC_INCLUDE_DIR=$ODBC_INCLUDE_DIR" | |
| # export CXXFLAGS="$CXXFLAGS -I$ODBC_INCLUDE_DIR" | |
| # if [ "${{ matrix.macos-version }}" = "15-intel" ]; then | |
| # # GH-49563 Explicitly set llvm path to avoid linking to libunwind | |
| # export CLANG_TOOLS_PATH=/usr/local/opt/llvm@18/bin | |
| # fi | |
| # ci/scripts/cpp_build.sh $(pwd) $(pwd)/build | |
| # - name: Setup Python | |
| # uses: actions/setup-python@v6 | |
| # with: | |
| # python-version: 3 | |
| # - name: Setup Archery | |
| # run: python3 -m pip install -e dev/archery | |
| # - name: Check ODBC Dependency | |
| # run: | | |
| # # ODBC dependency should not include other Arrow or third party libraries | |
| # archery linking check-dependencies \ | |
| # --allow CoreFoundation \ | |
| # --allow libSystem \ | |
| # --allow libarrow_flight_sql_odbc \ | |
| # --allow libc++ \ | |
| # --allow libiconv \ | |
| # --allow libresolv \ | |
| # --allow libz \ | |
| # "$(pwd)/build/cpp/${{ matrix.build-type }}/libarrow_flight_sql_odbc.dylib" | |
| # - name: Register Flight SQL ODBC Driver | |
| # run: | | |
| # sudo cpp/src/arrow/flight/sql/odbc/install/unix/install_odbc.sh $(pwd)/build/cpp/${{ matrix.build-type }}/libarrow_flight_sql_odbc.dylib | |
| # - name: Test | |
| # shell: bash | |
| # run: | | |
| # sudo sysctl -w kern.coredump=1 | |
| # sudo sysctl -w kern.corefile=/tmp/core.%N.%P | |
| # ulimit -c unlimited # must enable within the same shell | |
| # # Give CI write access for system DSN | |
| # sudo mkdir -p /Library/ODBC | |
| # sudo chown -R $USER /Library/ODBC | |
| # ci/scripts/cpp_test.sh $(pwd) $(pwd)/build | |
| # -AL- todo create CI A, and CI B. | |
| # - [get ODBC DLL] Trigger CI A - This CI will build `arrow_flight_sql_odbc.dll` and | |
| # upload the DLL to GitHub release as `arrow_flight_sql_odbc_unsigned.dll` | |
| # to differentiate from signed DLL. | |
| # - [get ODBC MSI] Trigger CI B - This CI will generate cpack files (and unsigned ODBC), | |
| # then download signed `arrow_flight_sql_odbc.dll` from GitHub release, | |
| # and then replace unsigned DLL with the signed DLL locally. | |
| # Then run `cpack` and build the unsigned MSI, and upload the MSI to GitHub release. | |
| # This MSI will pick up the signed DLL. | |
| # -AL- todo need to add `github.event_name != 'workflow_dispatch' ||` to all existing workflows after uncomment | |
| # (except CI A and B ofc) | |
| odbc-msvc: | |
| needs: check-labels | |
| name: ODBC Windows | |
| runs-on: windows-2022 | |
| if: >- | |
| github.event_name != 'workflow_dispatch' || | |
| 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: | |
| packages: write | |
| env: &odbc_msvc_env | |
| ARROW_BUILD_SHARED: ON | |
| ARROW_BUILD_STATIC: OFF | |
| ARROW_BUILD_TESTS: ON | |
| ARROW_BUILD_TYPE: release | |
| # Turn Arrow CSV off to disable `find_package(Arrow)` check on MSVC CI. | |
| # GH-49050 TODO: enable `find_package(Arrow)` check on MSVC CI. | |
| ARROW_CSV: OFF | |
| ARROW_DEPENDENCY_SOURCE: VCPKG | |
| ARROW_FLIGHT_SQL_ODBC: ON | |
| ARROW_FLIGHT_SQL_ODBC_INSTALLER: ON | |
| ARROW_HOME: /usr | |
| CMAKE_GENERATOR: Ninja | |
| CMAKE_INSTALL_PREFIX: /usr | |
| VCPKG_BINARY_SOURCES: 'clear;nugettimeout,600;nuget,GitHub,readwrite' | |
| VCPKG_DEFAULT_TRIPLET: x64-windows | |
| steps: | |
| - name: Checkout Arrow | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| submodules: recursive | |
| - name: Build ODBC Windows | |
| uses: ./.github/actions/odbc-windows | |
| - name: Test | |
| shell: cmd | |
| run: | | |
| set VCPKG_ROOT_KEEP=%VCPKG_ROOT% | |
| call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 | |
| set VCPKG_ROOT=%VCPKG_ROOT_KEEP% | |
| # Convert VCPKG Windows path to MSYS path | |
| for /f "usebackq delims=" %%I in (`bash -c "cygpath -u \"$VCPKG_ROOT_KEEP\""` ) do set VCPKG_ROOT=%%I | |
| bash -c "ci/scripts/cpp_test.sh $(pwd) $(pwd)/build" | |
| - name: Install WiX Toolset | |
| shell: pwsh | |
| run: | | |
| Invoke-WebRequest -Uri https://github.com/wixtoolset/wix/releases/download/v6.0.0/wix-cli-x64.msi -OutFile wix-cli-x64.msi | |
| Start-Process -FilePath wix-cli-x64.msi -ArgumentList '/quiet', 'Include_freethreaded=1' -Wait | |
| echo "C:\Program Files\WiX Toolset v6.0\bin\" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| - name: Build MSI ODBC installer | |
| shell: pwsh | |
| run: | | |
| # Verify WiX version | |
| wix --version | |
| cd build/cpp | |
| cpack | |
| - name: Upload ODBC MSI to the job | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: flight-sql-odbc-msi-installer | |
| path: build/cpp/Apache-Arrow-Flight-SQL-ODBC-*-win64.msi | |
| if-no-files-found: error | |
| - name: Install ODBC MSI | |
| run: | | |
| cd build/cpp | |
| $odbc_msi = Get-ChildItem -Filter "Apache-Arrow-Flight-SQL-ODBC-*-win64.msi" | |
| if (-not $odbc_msi) { | |
| Write-Error "ODBC MSI not found" | |
| exit 1 | |
| } | |
| foreach ($msi in $odbc_msi) { | |
| Write-Host "Installing $($msi.Name) with logs" | |
| $log = "odbc-install.log" | |
| Start-Process msiexec.exe -Wait -ArgumentList "/i `"$msi`"", "/qn", "/L*V `"$log`"" | |
| Get-Content $log | |
| } | |
| - name: Check ODBC DLL installation | |
| run: | | |
| $dirs = Get-ChildItem "C:\Program Files" -Directory -Filter "Apache-Arrow-Flight-SQL-ODBC*" | |
| foreach ($dir in $dirs) { | |
| $bin = Join-Path $dir.FullName "bin" | |
| if (Test-Path $bin) { | |
| tree $bin /f | |
| $dll = Join-Path $bin "arrow_flight_sql_odbc.dll" | |
| if (Test-Path $dll) { | |
| Write-Host "Found ODBC DLL: $dll" | |
| exit 0 | |
| } | |
| } | |
| } | |
| Write-Error "ODBC DLL not found" | |
| exit 1 | |
| # -AL- todo keep upload dll code in here! Can remove installer upload code. | |
| # -AL- This is CI A. | |
| odbc-msvc-upload-dll: | |
| needs: check-labels | |
| name: ODBC Windows Upload Unsigned DLL | |
| runs-on: windows-2022 | |
| # -AL- todo: change to dispatch workflow instead of trigger by defualt. | |
| 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: | |
| packages: write | |
| env: *odbc_msvc_env | |
| steps: | |
| - name: Checkout Arrow | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| submodules: recursive | |
| - name: Build ODBC Windows | |
| uses: ./.github/actions/odbc-windows | |
| - name: Name Unsigned ODBC DLL | |
| run: | | |
| Rename-Item ` | |
| -Path build/cpp/${{ env.ARROW_BUILD_TYPE }}/arrow_flight_sql_odbc.dll ` | |
| -NewName arrow_flight_sql_odbc_unsigned.dll | |
| - name: Upload ODBC DLL to the job | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: flight-sql-odbc-dll | |
| path: build/cpp/${{ env.ARROW_BUILD_TYPE }}/arrow_flight_sql_odbc_unsigned.dll | |
| if-no-files-found: error | |
| # -AL- CI A's follow up | |
| odbc-dll-release: | |
| needs: odbc-msvc-upload-dll | |
| name: Upload Unsigned ODBC DLL | |
| runs-on: ubuntu-latest | |
| permissions: | |
| # Upload to GitHub Release | |
| contents: write | |
| env: | |
| RELEASE_CANDIDATE_TAG_NAME: 'apache-arrow-test-24.0.0-rc0' #ALINA_TEST_TAG -AL- | |
| steps: | |
| - name: Checkout Arrow | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| submodules: recursive | |
| - name: Download the artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: flight-sql-odbc-dll | |
| - name: Test Echo RELEASE_CANDIDATE_TAG_NAME # -AL- delete later | |
| run: | | |
| echo ${RELEASE_CANDIDATE_TAG_NAME} | |
| - name: Wait for creating GitHub Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| dev/release/utils-watch-gh-workflow.sh \ | |
| ${RELEASE_CANDIDATE_TAG_NAME} \ | |
| release_candidate.yml | |
| - name: Upload the artifacts to GitHub Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh release upload ${RELEASE_CANDIDATE_TAG_NAME} \ | |
| --clobber \ | |
| arrow_flight_sql_odbc_unsigned.dll | |
| # -AL- This is CI B draft. | |
| odbc-msvc-upload-msi: | |
| needs: check-labels | |
| name: ODBC Windows Upload Unsigned MSI | |
| runs-on: windows-2022 | |
| # -AL- todo: change to dispatch workflow instead of trigger by defualt. | |
| # -AL- todo 2: add RELEASE_CANDIDATE_TAG_NAME as input. Example: "v12.0.0-rc1" | |
| 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: | |
| packages: write | |
| env: *odbc_msvc_env | |
| steps: | |
| - name: Checkout Arrow | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| submodules: recursive | |
| - name: Build ODBC Windows | |
| uses: ./.github/actions/odbc-windows | |
| - name: Download signed ODBC DLL | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh release download ${RELEASE_CANDIDATE_TAG_NAME} ` | |
| --pattern arrow_flight_sql_odbc.dll ` | |
| --clobber | |
| # Let ODBC Build (build should come after download to save time in case signed DLL is not available) | |
| - name: Replace signed DLL with unsigned DLL | |
| run: | | |
| Move-Item -Path .\arrow_flight_sql_odbc.dll -Destination .\build\cpp\release\Release\arrow_flight_sql_odbc.dll -Force | |
| - name: Install WiX Toolset | |
| shell: pwsh | |
| run: | | |
| Invoke-WebRequest -Uri https://github.com/wixtoolset/wix/releases/download/v6.0.0/wix-cli-x64.msi -OutFile wix-cli-x64.msi | |
| Start-Process -FilePath wix-cli-x64.msi -ArgumentList '/quiet', 'Include_freethreaded=1' -Wait | |
| echo "C:\Program Files\WiX Toolset v6.0\bin\" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
| - name: Build MSI ODBC installer | |
| shell: pwsh | |
| run: | | |
| # Verify WiX version | |
| wix --version | |
| cd build/cpp | |
| cpack | |
| - name: Upload the artifacts to GitHub Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| gh release upload ${RELEASE_CANDIDATE_TAG_NAME} \ | |
| --clobber \ | |
| Apache-Arrow-Flight-SQL-ODBC-*-win64.msi | |
| odbc-nightly: | |
| needs: odbc-msvc | |
| name: ODBC nightly | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'schedule' && github.repository == 'apache/arrow' | |
| steps: | |
| - name: Download the artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: flight-sql-odbc-msi-installer | |
| - name: Prepare ODBC installer for sync | |
| run: | | |
| mkdir odbc-installer | |
| mv *.msi odbc-installer/ | |
| # Add `dev-yyyy-mm-dd` to ODBC MSI before `win64.msi`: | |
| # Apache Arrow Flight SQL ODBC-24.0.0-win64.msi -> | |
| # Apache Arrow Flight SQL ODBC-24.0.0-dev-2026-02-06-win64.msi | |
| cd odbc-installer | |
| msi_name=$(ls *.msi) | |
| dev_msi_name=$(echo ${msi_name} | sed -e "s/win64\.msi$/dev-$(date +%Y-%m-%d)-win64.msi/") | |
| mv "${msi_name}" "${dev_msi_name}" | |
| cd .. | |
| tree odbc-installer | |
| - name: Checkout Arrow | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 1 | |
| path: arrow | |
| repository: apache/arrow | |
| ref: main | |
| submodules: recursive | |
| - name: Sync to Remote | |
| uses: ./arrow/.github/actions/sync-nightlies | |
| with: | |
| upload: true | |
| switches: -avzh --update --delete --progress | |
| local_path: odbc-installer | |
| remote_path: ${{ secrets.NIGHTLIES_RSYNC_PATH }}/arrow/odbc | |
| remote_host: ${{ secrets.NIGHTLIES_RSYNC_HOST }} | |
| remote_port: ${{ secrets.NIGHTLIES_RSYNC_PORT }} | |
| remote_user: ${{ secrets.NIGHTLIES_RSYNC_USER }} | |
| remote_key: ${{ secrets.NIGHTLIES_RSYNC_KEY }} | |
| remote_host_key: ${{ secrets.NIGHTLIES_RSYNC_HOST_KEY }} | |
| # -AL- this can be removed? | |
| # odbc-release: | |
| # needs: odbc-msvc | |
| # name: ODBC release | |
| # runs-on: ubuntu-latest | |
| # if: ${{ startsWith(github.ref_name, 'apache-arrow-') && contains(github.ref_name, '-rc') }} | |
| # permissions: | |
| # # Upload to GitHub Release | |
| # contents: write | |
| # steps: | |
| # - name: Checkout Arrow | |
| # uses: actions/checkout@v6 | |
| # with: | |
| # fetch-depth: 0 | |
| # submodules: recursive | |
| # - name: Download the artifacts | |
| # uses: actions/download-artifact@v8 | |
| # with: | |
| # name: flight-sql-odbc-msi-installer | |
| # - name: Wait for creating GitHub Release | |
| # env: | |
| # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # run: | | |
| # dev/release/utils-watch-gh-workflow.sh \ | |
| # ${GITHUB_REF_NAME} \ | |
| # release_candidate.yml | |
| # - name: Upload the artifacts to GitHub Release | |
| # env: | |
| # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # run: | | |
| # gh release upload ${GITHUB_REF_NAME} \ | |
| # --clobber \ | |
| # Apache-Arrow-Flight-SQL-ODBC-*-win64.msi | |
| # -AL- draft code for upload; I was thinking that in the final product, | |
| # the `Download the artifacts` step could have been skipped, | |
| # and we do github release directly. Or maybe not because it needs | |
| # ubuntu... nvm | |
| # - name: Download the artifacts | |
| # uses: actions/download-artifact@v8 | |
| # with: | |
| # name: flight-sql-odbc-dll | |
| # - name: Upload the artifacts to GitHub Release | |
| # env: | |
| # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # run: | | |
| # gh release download ${GITHUB_REF_NAME} \ | |
| # --clobber \ | |
| # arrow_flight_sql_odbc_unsigned.dll | |
| # End of ODBC DLL draft code | |
| # -AL- below is draft code for downloading signed DLL and using it | |
| # I think we can have `RELEASE_CANDIDATE_TAG_NAME` as input? that part needs review later though | |
| # Also for CI B, we don't actually need the `Wait for creating GitHub Release` step, | |
| # so Windows should be ok. | |
| # - name: Download signed ODBC DLL | |
| # env: | |
| # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # run: | | |
| # gh release download ${RELEASE_CANDIDATE_TAG_NAME} \ | |
| # --pattern arrow_flight_sql_odbc.dll \ | |
| # --clobber | |
| # # Let ODBC Build (build should come after download to save time in case signed DLL is not available) | |
| # - name: Replace signed DLL with unsigned DLL | |
| # run: | | |
| # Move-Item -Path .\arrow_flight_sql_odbc.dll -Destination .\build\cpp\release\Release\arrow_flight_sql_odbc.dll -Force | |
| report-extra-cpp: | |
| if: github.event_name == 'schedule' && always() | |
| needs: | |
| # - docker | |
| # - jni-linux | |
| # - jni-macos | |
| # - msvc-arm64 | |
| # - odbc-linux | |
| # - odbc-macos | |
| - odbc-msvc | |
| - odbc-msvc-upload-dll | |
| - odbc-msvc-upload-msi | |
| - odbc-nightly | |
| # - odbc-release # -AL- can be removed after CI A and CI B implement | |
| uses: ./.github/workflows/report_ci.yml | |
| secrets: inherit |