| name: Build |
| |
| on: [push, pull_request, workflow_dispatch] |
| |
| jobs: |
| build: |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| os: |
| - ubuntu-latest |
| - macOS-13 |
| - windows-latest |
| buildType: |
| - RelWithDebInfo |
| include: |
| - python_version: '3.11' |
| - os: windows-latest |
| cmake_extra: '-A x64 -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake' |
| - os: macOS-13 |
| pkg_config_path: '/usr/local/opt/openssl@1.1/lib/pkgconfig' |
| cmake_extra: '-DBUILD_RUBY=no -DTHREADERCISER=ON' |
| ctest_extra: '--exclude-regex c-threaderciser' |
| env: |
| BuildType: ${{matrix.buildType}} |
| BuildDir: ${{github.workspace}}/BLD |
| InstallPrefix: ${{github.workspace}}/INSTALL |
| PKG_CONFIG_PATH: ${{matrix.pkg_config_path}} |
| VCPKG_DEFAULT_TRIPLET: x64-windows |
| steps: |
| - uses: actions/checkout@v4 |
| - name: Create Build and Install directories |
| run: mkdir -p "${BuildDir}" "${InstallPrefix}" |
| shell: bash |
| - name: Setup python |
| uses: actions/setup-python@v5 |
| with: |
| cache-dependency-path: python/ci_requirements.txt |
| python-version: ${{matrix.python_version}} |
| architecture: x64 |
| cache: 'pip' |
| - name: Install python dependencies |
| run: | |
| python -m pip install --upgrade pip |
| python -m pip install --upgrade -r python/ci_requirements.txt |
| - name: Install Linux dependencies |
| if: runner.os == 'Linux' |
| run: | |
| sudo apt install -y swig libpython3-dev libsasl2-dev libjsoncpp-dev |
| - name: Install Windows dependencies |
| if: runner.os == 'Windows' |
| run: | |
| choco install -y swig --version=4.0.1 |
| vcpkg install jsoncpp |
| vcpkg integrate install |
| - name: Install MacOS dependencies |
| if: runner.os == 'macOS' |
| run: | |
| brew install libuv swig pkgconfig jsoncpp |
| - name: OTel build/install |
| if: runner.os == 'Linux' |
| working-directory: ${{github.workspace}} |
| run: sudo sh ./ci/otel.sh |
| shell: bash |
| - name: cmake configure |
| working-directory: ${{env.BuildDir}} |
| run: cmake "${{github.workspace}}" "-DCMAKE_BUILD_TYPE=${BuildType}" "-DCMAKE_INSTALL_PREFIX=${InstallPrefix}" ${{matrix.cmake_extra}} |
| shell: bash |
| - name: cmake build/install |
| run: cmake --build "${BuildDir}" --config ${BuildType} -t install |
| shell: bash |
| - name: Upload Install |
| uses: actions/upload-artifact@v4 |
| with: |
| name: qpid_proton_pkg_${{matrix.os}}_${{matrix.buildType}} |
| path: ${{env.InstallPrefix}} |
| - name: Upload python source |
| uses: actions/upload-artifact@v4 |
| with: |
| name: python-src_${{matrix.os}} |
| path: ${{env.BuildDir}}/python/dist/*.tar.gz |
| - name: Upload python wheel |
| uses: actions/upload-artifact@v4 |
| with: |
| name: python-wheel_${{matrix.os}} |
| path: ${{env.BuildDir}}/python/dist/*.whl |
| - id: ctest |
| name: ctest |
| working-directory: ${{env.BuildDir}} |
| run: ctest -C ${BuildType} -V -T Test --no-compress-output ${{matrix.ctest_extra}} |
| shell: bash |
| - name: Upload Test results |
| if: always() && (steps.ctest.outcome == 'failure' || steps.ctest.outcome == 'success') |
| uses: actions/upload-artifact@v4 |
| with: |
| name: Test_Results_${{matrix.os}}_${{matrix.buildType}} |
| path: ${{env.BuildDir}}/Testing/**/*.xml |
| - name: Upload Python & C build directories on failure |
| uses: actions/upload-artifact@v4 |
| if: failure() |
| with: |
| name: Debug-python-C-BLD_${{matrix.os}}_${{matrix.buildType}} |
| path: | |
| ${{env.BuildDir}}/c |
| ${{env.BuildDir}}/python |
| - name: Environment (Linux/Windows) |
| if: always() && runner.os != 'macOS' |
| run: env -0 | sort -z | tr '\0' '\n' |
| shell: bash |
| - name: Environment (macOS) |
| if: always() && runner.os == 'macOS' |
| run: env | sort |
| shell: bash |