| # |
| # 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: Build |
| |
| on: [push, pull_request] |
| |
| jobs: |
| compile: |
| name: "Compile (${{matrix.os}}, ${{matrix.runtimeCheck}})" |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-20.04] |
| buildType: [RelWithDebInfo] |
| runtimeCheck: [asan] |
| env: |
| BuildType: ${{matrix.buildType}} |
| ProtonBuildDir: ${{github.workspace}}/qpid-proton/build |
| DispatchBuildDir: ${{github.workspace}}/qpid-dispatch/build |
| InstallPrefix: ${{github.workspace}}/install |
| |
| ProtonCMakeExtraArgs: > |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache |
| -DBUILD_BINDINGS=python |
| -DBUILD_EXAMPLES=OFF |
| -DBUILD_TESTING=OFF |
| -DENABLE_FUZZ_TESTING=OFF |
| -DRUNTIME_CHECK=${{matrix.runtimeCheck}} |
| DispatchCMakeExtraArgs: > |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache |
| -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG |
| -DQD_ENABLE_ASSERTIONS=ON |
| -DCONSOLE_INSTALL=OFF |
| -DUSE_BWRAP=ON |
| -DRUNTIME_CHECK=${{matrix.runtimeCheck}} |
| |
| CCACHE_BASEDIR: ${{github.workspace}} |
| CCACHE_DIR: ${{github.workspace}}/.ccache |
| CCACHE_COMPRESS: 'true' |
| CCACHE_MAXSIZE: '400MB' |
| steps: |
| |
| - name: Show environment (Linux) |
| if: ${{ always() && runner.os == 'Linux' }} |
| run: env -0 | sort -z | tr '\0' '\n' |
| |
| - uses: actions/checkout@v2 |
| with: |
| repository: 'apache/qpid-proton' |
| ref: 'master' |
| path: 'qpid-proton' |
| |
| - uses: actions/checkout@v2 |
| with: |
| path: 'qpid-dispatch' |
| |
| # https://cristianadam.eu/20200113/speeding-up-c-plus-plus-github-actions-using-ccache/ |
| - name: Prepare ccache timestamp |
| id: ccache_cache_timestamp |
| shell: cmake -P {0} |
| run: | |
| string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) |
| message("::set-output name=timestamp::${current_date}") |
| |
| - uses: actions/cache@v2 |
| env: |
| cache-name: cache-ccache |
| with: |
| path: .ccache |
| key: ${{ matrix.os }}-${{ matrix.runtimeCheck }}-${{ env.cache-name }}-${{ steps.ccache_cache_timestamp.outputs.timestamp }} |
| restore-keys: | |
| ${{ matrix.os }}-${{ matrix.runtimeCheck }}-${{ env.cache-name }} |
| |
| - name: Create Build and Install directories |
| run: mkdir -p "${ProtonBuildDir}" "${DispatchBuildDir}" "{InstallPrefix}" |
| |
| - name: Setup python |
| uses: actions/setup-python@v2 |
| with: |
| python-version: 3.7 |
| architecture: x64 |
| |
| - name: Install Python build dependencies |
| run: python -m pip install setuptools wheel tox |
| |
| - name: Install Linux build dependencies |
| if: ${{ runner.os == 'Linux' }} |
| run: | |
| sudo apt install -y swig libpython3-dev libsasl2-dev libjsoncpp-dev libwebsockets-dev libnghttp2-dev ccache ninja-build pixz |
| |
| - name: Zero ccache stats |
| run: ccache -z |
| |
| - name: qpid-proton cmake configure |
| working-directory: ${{env.ProtonBuildDir}} |
| run: > |
| cmake "${{github.workspace}}/qpid-proton" \ |
| "-DCMAKE_INSTALL_PREFIX=${InstallPrefix}" \ |
| "-DCMAKE_BUILD_TYPE=${BuildType}" \ |
| "-GNinja" \ |
| ${ProtonCMakeExtraArgs} |
| |
| - name: qpid-proton cmake build/install |
| run: cmake --build "${ProtonBuildDir}" --config ${BuildType} -t install |
| |
| - name: Display ccache stats |
| run: ccache -s |
| |
| - name: qpid-dispatch cmake configure |
| working-directory: ${{env.DispatchBuildDir}} |
| run: > |
| cmake "${{github.workspace}}/qpid-dispatch" \ |
| "-DCMAKE_INSTALL_PREFIX=${InstallPrefix}" \ |
| "-DCMAKE_BUILD_TYPE=${BuildType}" \ |
| "-GNinja" \ |
| ${DispatchCMakeExtraArgs} |
| |
| - name: qpid-dispatch cmake build/install |
| run: cmake --build "${DispatchBuildDir}" --config ${BuildType} -t install |
| |
| - name: Display ccache stats |
| run: ccache -s |
| |
| # github actions/upload-artifact@v2 does not preserve executable permission on binaries |
| - name: Compress build |
| working-directory: ${{github.workspace}} |
| run: > |
| tar \ |
| -I pixz \ |
| -cf /tmp/archive.tar.xz \ |
| --exclude '*.o' \ |
| --exclude '*.pyc' \ |
| --exclude '.git' \ |
| --exclude='qpid-dispatch/build/console' \ |
| qpid-dispatch \ |
| install \ |
| qpid-proton/build/python/pkgs |
| |
| - name: Upload archive |
| uses: actions/upload-artifact@v2 |
| with: |
| name: qpid_dispatch_wrk_${{matrix.os}}_${{matrix.buildType}}_${{matrix.runtimeCheck}} |
| path: /tmp/archive.tar.xz |
| |
| test: |
| name: 'Test (${{matrix.os}}, ${{matrix.runtimeCheck}}, shard ${{matrix.shard}} of ${{matrix.shards}})' |
| runs-on: ${{ matrix.os }} |
| needs: [compile] |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-20.04] |
| buildType: [RelWithDebInfo] |
| runtimeCheck: [asan] |
| shard: [1, 2] |
| shards: [2] |
| env: |
| BuildType: ${{matrix.buildType}} |
| ProtonBuildDir: ${{github.workspace}}/qpid-proton/build |
| DispatchBuildDir: ${{github.workspace}}/qpid-dispatch/build |
| InstallPrefix: ${{github.workspace}}/install |
| LD_LIBRARY_PATH: ${{github.workspace}}/install/lib |
| steps: |
| |
| - name: Show environment (Linux) |
| if: ${{ always() && runner.os == 'Linux' }} |
| run: env -0 | sort -z | tr '\0' '\n' |
| |
| - name: Download Build |
| uses: actions/download-artifact@v2 |
| with: |
| name: qpid_dispatch_wrk_${{matrix.os}}_${{matrix.buildType}}_${{matrix.runtimeCheck}} |
| |
| - name: Setup python |
| uses: actions/setup-python@v2 |
| with: |
| python-version: 3.7 |
| architecture: x64 |
| |
| - name: Install Python runtime/test dependencies |
| run: python -m pip install tox quart selectors grpcio protobuf |
| |
| - name: Install Linux runtime/test dependencies |
| if: ${{ runner.os == 'Linux' }} |
| run: | |
| sudo apt install -y libsasl2-2 libsasl2-modules sasl2-bin libjsoncpp1 libwebsockets15 pixz bubblewrap curl |
| |
| - name: Unpack archive |
| run: tar -I pixz -xf archive.tar.xz |
| |
| - name: install qpid-proton python wheel |
| run: python -m pip install ${ProtonBuildDir}/python/pkgs/python_qpid_proton*.whl |
| |
| - name: CTest |
| working-directory: ${{env.DispatchBuildDir}} |
| run: | |
| ulimit -c unlimited |
| ctest -C ${BuildType} -V -T Test --no-compress-output -I ${{matrix.shard}},,${{matrix.shards}} -j2 |
| |
| - name: Upload test results |
| uses: actions/upload-artifact@v2 |
| if: ${{ ! cancelled() }} |
| with: |
| name: Test_Results_${{matrix.os}}_${{matrix.buildType}}_${{matrix.runtimeCheck}}_${{matrix.shard}} |
| path: ${{env.DispatchBuildDir}}/Testing/**/*.xml |
| |
| - name: Upload core files (if any) |
| uses: actions/upload-artifact@v2 |
| if: failure() |
| with: |
| name: cores_${{matrix.os}}_${{matrix.buildType}}_${{matrix.runtimeCheck}}_${{matrix.shard}} |
| path: | |
| **/core |
| |
| console-test: |
| name: Console Tests |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Install Dependencies |
| run: cd console/react && npm ci |
| |
| - name: Run Tests |
| run: cd console/react && npm run test |
| |
| console-eslint: |
| name: Console ESLint |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Install Dependencies |
| run: cd console/react && npm ci |
| |
| - name: Run ESLint |
| run: cd console/react && npx eslint --max-warnings 0 . |
| |
| rat_check: |
| name: RAT Check |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| - uses: actions/cache@v2 |
| with: |
| path: ~/.m2/repository |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} |
| restore-keys: | |
| ${{ runner.os }}-maven- |
| |
| - name: Install JDK ${{ matrix.java }} |
| uses: actions/setup-java@v1 |
| with: |
| java-version: 11 |
| |
| - name: RAT Check |
| run: mvn apache-rat:check |
| |
| - name: Output |
| if: ${{ ! cancelled() }} |
| run: cat target/rat.txt || echo "Unable to print output" |