| # |
| # 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: CI - CPP build |
| on: |
| pull_request: |
| branches: |
| - master |
| - branch-2.11 |
| paths: |
| - '.github/workflows/**' |
| - 'pulsar-client-cpp/**' |
| workflow_dispatch: |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.ref }} |
| cancel-in-progress: true |
| |
| jobs: |
| changed_files_job: |
| name: Preconditions |
| runs-on: ubuntu-20.04 |
| outputs: |
| docs_only: ${{ needs.changed_files_job.outputs.docs_only }} |
| cpp_only: ${{ needs.changed_files_job.outputs.cpp_only }} |
| steps: |
| - name: checkout |
| uses: actions/checkout@v2 |
| |
| - name: Detect changed files |
| id: changes |
| uses: apache/pulsar-test-infra/paths-filter@master |
| with: |
| filters: .github/changes-filter.yaml |
| list-files: csv |
| |
| - name: Check changed files |
| id: check_changes |
| run: | |
| echo "::set-output name=docs_only::${{ fromJSON(steps.changes.outputs.all_count) == fromJSON(steps.changes.outputs.docs_count) && fromJSON(steps.changes.outputs.docs_count) > 0 }}" |
| |
| - name: Check if the PR has been approved for testing |
| if: ${{ steps.check_changes.outputs.docs_only != 'true' && github.repository == 'apache/pulsar' && github.event_name == 'pull_request' }} |
| env: |
| GITHUB_RUN_ATTEMPT: ${{ github.run_attempt }} |
| GITHUB_TOKEN: ${{ github.token }} |
| run: | |
| build/pulsar_ci_tool.sh check_ready_to_test |
| |
| cpp-build-centos7: |
| needs: changed_files_job |
| name: Build CPP Client on CentOS7 |
| runs-on: ubuntu-20.04 |
| if: ${{ needs.changed_files_job.outputs.docs_only != 'true' }} |
| timeout-minutes: 120 |
| |
| steps: |
| - name: checkout |
| uses: actions/checkout@v2 |
| |
| - name: Tune Runner VM |
| uses: ./.github/actions/tune-runner-vm |
| |
| - name: build cpp client on centos 7 |
| run: | |
| echo "Build C++ client library on CentOS 7" |
| pulsar-client-cpp/docker-build-centos7.sh |
| |
| cpp-build-windows: |
| needs: changed_files_job |
| timeout-minutes: 120 |
| name: Build CPP Client on ${{ matrix.name }} |
| runs-on: ${{ matrix.os }} |
| if: ${{ needs.changed_files_job.outputs.docs_only != 'true' }} |
| env: |
| VCPKG_ROOT: '${{ github.workspace }}/vcpkg' |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - name: 'Windows x64' |
| os: windows-2022 |
| triplet: x64-windows |
| vcpkg_dir: 'C:\vcpkg' |
| suffix: 'windows-win64' |
| generator: 'Visual Studio 17 2022' |
| arch: '-A x64' |
| - name: 'Windows x86' |
| os: windows-2022 |
| triplet: x86-windows |
| vcpkg_dir: 'C:\vcpkg' |
| suffix: 'windows-win32' |
| generator: 'Visual Studio 17 2022' |
| arch: '-A Win32' |
| |
| steps: |
| - name: checkout |
| uses: actions/checkout@v2 |
| |
| - name: Restore vcpkg and its artifacts. |
| uses: actions/cache@v2 |
| id: vcpkg-cache |
| with: |
| path: | |
| ${{ env.VCPKG_ROOT }} |
| pulsar-client-cpp/vcpkg_installed |
| !${{ env.VCPKG_ROOT }}/.git |
| !${{ env.VCPKG_ROOT }}/buildtrees |
| !${{ env.VCPKG_ROOT }}/packages |
| !${{ env.VCPKG_ROOT }}/downloads |
| key: | |
| ${{ runner.os }}-${{ matrix.triplet}}-${{ hashFiles( 'pulsar-client-cpp/vcpkg.json' ) }} |
| |
| - name: Get vcpkg(windows) |
| if: ${{ runner.os == 'Windows' && steps.vcpkg-cache.outputs.cache-hit != 'true' }} |
| run: | |
| cd ${{ github.workspace }} |
| mkdir build -force |
| git clone https://github.com/Microsoft/vcpkg.git |
| cd vcpkg |
| .\bootstrap-vcpkg.bat |
| |
| - name: remove system vcpkg(windows) |
| if: runner.os == 'Windows' |
| run: rm -rf "$VCPKG_INSTALLATION_ROOT" |
| shell: bash |
| |
| - name: Install vcpkg packages |
| run: | |
| cd pulsar-client-cpp && ${{ env.VCPKG_ROOT }}\vcpkg.exe install --triplet ${{ matrix.triplet }} |
| |
| - name: Configure (default) |
| |
| shell: bash |
| run: | |
| if [ "$RUNNER_OS" == "Windows" ]; then |
| cd pulsar-client-cpp && \ |
| cmake \ |
| -B ./build-0 \ |
| -G "${{ matrix.generator }}" ${{ matrix.arch }} \ |
| -DBUILD_PYTHON_WRAPPER=OFF -DBUILD_TESTS=OFF \ |
| -DVCPKG_TRIPLET=${{ matrix.triplet }} \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -S . |
| fi |
| |
| - name: Compile |
| shell: bash |
| run: | |
| if [ "$RUNNER_OS" == "Windows" ]; then |
| cd pulsar-client-cpp && \ |
| cmake --build ./build-0 --parallel --config Release |
| fi |
| |
| - name: Configure (dynamic library only) |
| shell: bash |
| run: | |
| if [ "$RUNNER_OS" == "Windows" ]; then |
| cd pulsar-client-cpp && \ |
| cmake \ |
| -B ./build-1 \ |
| -G "${{ matrix.generator }}" ${{ matrix.arch }} \ |
| -DBUILD_PYTHON_WRAPPER=OFF -DBUILD_TESTS=OFF \ |
| -DVCPKG_TRIPLET=${{ matrix.triplet }} \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DBUILD_STATIC_LIB=OFF \ |
| -S . |
| fi |
| |
| - name: Compile |
| shell: bash |
| run: | |
| if [ "$RUNNER_OS" == "Windows" ]; then |
| cd pulsar-client-cpp && \ |
| cmake --build ./build-1 --parallel --config Release |
| fi |
| cpp-deb-rpm-packaging: |
| needs: changed_files_job |
| name: Build CPP Client on RPM |
| runs-on: ubuntu-20.04 |
| timeout-minutes: 120 |
| if: ${{ needs.changed_files_job.outputs.docs_only != 'true' }} |
| |
| steps: |
| - name: checkout |
| uses: actions/checkout@v2 |
| |
| - name: Tune Runner VM |
| uses: ./.github/actions/tune-runner-vm |
| |
| - name: Cache local Maven repository |
| uses: actions/cache@v2 |
| with: |
| path: | |
| ~/.m2/repository/*/*/* |
| !~/.m2/repository/org/apache/pulsar |
| key: ${{ runner.os }}-m2-dependencies-core-modules-${{ hashFiles('**/pom.xml') }} |
| restore-keys: | |
| ${{ runner.os }}-m2-dependencies-core-modules- |
| |
| - name: Set up JDK 17 |
| uses: actions/setup-java@v2 |
| with: |
| distribution: 'temurin' |
| java-version: 17 |
| |
| - name: clean disk |
| run: | |
| sudo apt clean |
| docker rmi $(docker images -q) -f |
| df -h |
| |
| - name: Package Pulsar source |
| run: mvn -B -ntp -q clean package -pl pulsar-client-api -am -DskipTests |
| |
| - name: Build Debian packages |
| run: | |
| echo "Build Debian packages" |
| BUILD_IMAGE=1 pulsar-client-cpp/pkg/deb/docker-build-deb.sh |
| |
| - name: Build RPM packages |
| run: | |
| echo "Build RPM packages" |
| BUILD_IMAGE=1 pulsar-client-cpp/pkg/rpm/docker-build-rpm.sh |
| |
| build-python-wheel: |
| needs: changed_files_job |
| name: Build Python Client |
| runs-on: ubuntu-20.04 |
| timeout-minutes: 120 |
| if: ${{ needs.changed_files_job.outputs.docs_only != 'true' }} |
| |
| steps: |
| - name: checkout |
| uses: actions/checkout@v2 |
| |
| - name: Tune Runner VM |
| uses: ./.github/actions/tune-runner-vm |
| |
| - name: build python3.9 client |
| |
| run: | |
| echo "Build Python3.9 client library" |
| pulsar-client-cpp/docker-build-python3.9.sh |