From fcd8770f9d4c4055ac9f0136a434c31d2dace15e Mon Sep 17 00:00:00 2001 From: Florian Reimold <11774314+FlorianReimold@users.noreply.github.com> Date: Tue, 23 Apr 2024 16:16:08 +0200 Subject: [PATCH] Combined Ubuntu 22 and 20 workflow in single matrix workflow --- .github/workflows/build-ubuntu-22.yml | 157 ------------------ .../{build-ubuntu-20.yml => build-ubuntu.yml} | 109 ++++++------ 2 files changed, 56 insertions(+), 210 deletions(-) delete mode 100644 .github/workflows/build-ubuntu-22.yml rename .github/workflows/{build-ubuntu-20.yml => build-ubuntu.yml} (53%) diff --git a/.github/workflows/build-ubuntu-22.yml b/.github/workflows/build-ubuntu-22.yml deleted file mode 100644 index afc88c1c2..000000000 --- a/.github/workflows/build-ubuntu-22.yml +++ /dev/null @@ -1,157 +0,0 @@ -name: Build Ubuntu 22.04 - -on: - push: - pull_request: - branches: - - master - -jobs: - build-ubuntu: - runs-on: ubuntu-22.04 - - env: - # enable starting Qt GUI Applications - QT_QPA_PLATFORM: offscreen - - steps: - - name: Install Dependencies - run: | - sudo apt update - sudo apt-get install ninja-build doxygen graphviz libcurl4-openssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libhdf5-dev qtbase5-dev libqt5opengl5-dev libqt5svg5-dev libyaml-cpp-dev - - - name: Install Cap'n Proto - run: | - mkdir "${{ runner.workspace }}/capnp" - cd "${{ runner.workspace }}/capnp" - curl -O https://capnproto.org/capnproto-c++-0.9.0.tar.gz - tar zxf capnproto-c++-0.9.0.tar.gz - cd capnproto-c++-0.9.0 - ./configure - make -j - sudo make install - - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: 'true' - fetch-depth: 0 - - - name: Install Python requirements - shell: bash - run: | - sudo apt-get -y install python3-dev python3-venv - mkdir ".venv_build" - python3 -m venv ".venv_build" - source ".venv_build/bin/activate" - pip install --upgrade pip - pip install wheel setuptools - pip install -r "$GITHUB_WORKSPACE/doc/requirements.txt" - - - name: CMake - run: | - source ".venv_build/bin/activate" - - export CC=/usr/bin/gcc-11 - export CXX=/usr/bin/g++-11 - mkdir "${{ runner.workspace }}/_build" - cd "${{ runner.workspace }}/_build" - cmake $GITHUB_WORKSPACE -G "Ninja" \ - -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=cmake/submodule_dependencies.cmake \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ - -DHAS_HDF5=ON \ - -DHAS_QT=ON \ - -DHAS_CURL=ON \ - -DHAS_CAPNPROTO=ON \ - -DHAS_FTXUI=ON \ - -DBUILD_DOCS=ON \ - -DBUILD_APPS=ON \ - -DBUILD_SAMPLES=ON \ - -DBUILD_TIME=ON \ - -DBUILD_PY_BINDING=ON \ - -DBUILD_STANDALONE_PY_WHEEL=ON \ - -DBUILD_CSHARP_BINDING=OFF \ - -DBUILD_ECAL_TESTS=ON \ - -DECAL_INCLUDE_PY_SAMPLES=OFF \ - -DECAL_INSTALL_SAMPLE_SOURCES=ON \ - -DECAL_JOIN_MULTICAST_TWICE=OFF \ - -DECAL_NPCAP_SUPPORT=OFF \ - -DECAL_THIRDPARTY_BUILD_CMAKE_FUNCTIONS=ON \ - -DECAL_THIRDPARTY_BUILD_PROTOBUF=OFF \ - -DECAL_THIRDPARTY_BUILD_SPDLOG=ON \ - -DECAL_THIRDPARTY_BUILD_TINYXML2=ON \ - -DECAL_THIRDPARTY_BUILD_FINEFTP=ON \ - -DECAL_THIRDPARTY_BUILD_CURL=OFF \ - -DECAL_THIRDPARTY_BUILD_GTEST=ON \ - -DECAL_THIRDPARTY_BUILD_HDF5=OFF \ - -DECAL_THIRDPARTY_BUILD_RECYCLE=ON \ - -DECAL_THIRDPARTY_BUILD_TCP_PUBSUB=ON \ - -DECAL_THIRDPARTY_BUILD_QWT=ON \ - -DECAL_THIRDPARTY_BUILD_YAML-CPP=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_SYSCONFDIR=/etc \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LOCALSTATEDIR=/var \ - -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu \ - -DPython_FIND_VIRTUALENV=ONLY - - sudo mkdir /etc/ecal - sudo cp "$GITHUB_WORKSPACE/ecal/core/cfg/ecal.ini" /etc/ecal - shell: bash - - - name: Build Release - run: cmake --build . --config Release -- -k 0 - working-directory: ${{ runner.workspace }}/_build - - # Create Python Wheels - # The strang-looking double-cmake is an ugly workaround to force CMake to - # re-find Python, after we have changed the venv from the outside. The - # alternative would be to clean everything, which would cause an unnecessary - # rebuild of eCAL for each python Version. - - name: Build Python 3.11 Wheel - run: | - sudo apt-get -y install python3.11-dev python3.11-venv - mkdir ".venv_311" - python3.11 -m venv ".venv_311" - source ".venv_311/bin/activate" - pip install --upgrade pip - pip install wheel setuptools - cmake $GITHUB_WORKSPACE -DPython_FIND_VIRTUALENV=FIRST - cmake $GITHUB_WORKSPACE -DPython_FIND_VIRTUALENV=ONLY - cmake --build . --target create_python_wheel --config Release - shell: bash - working-directory: ${{ runner.workspace }}/_build - - - name: Build Python 3.10 Wheel - run: | - sudo apt-get -y install python3.10-dev python3.10-venv - mkdir ".venv_310" - python3.10 -m venv ".venv_310" - source ".venv_310/bin/activate" - pip install --upgrade pip - pip install wheel setuptools - cmake $GITHUB_WORKSPACE -DPython_FIND_VIRTUALENV=FIRST - cmake $GITHUB_WORKSPACE -DPython_FIND_VIRTUALENV=ONLY - cmake --build . --target create_python_wheel --config Release - shell: bash - working-directory: ${{ runner.workspace }}/_build - - - name: Run Tests - run: ctest -V - working-directory: ${{ runner.workspace }}/_build - - - name: Pack - run: cpack -G DEB - working-directory: ${{ runner.workspace }}/_build - - - name: Upload Debian - uses: actions/upload-artifact@v4 - with: - name: ubuntu-debian - path: ${{ runner.workspace }}/_build/_deploy/*.deb - - - name: Upload Python Wheel - uses: actions/upload-artifact@v4 - with: - name: ubuntu-python-wheel - path: ${{ runner.workspace }}/_build/_deploy/*.whl diff --git a/.github/workflows/build-ubuntu-20.yml b/.github/workflows/build-ubuntu.yml similarity index 53% rename from .github/workflows/build-ubuntu-20.yml rename to .github/workflows/build-ubuntu.yml index 06093aa99..9334a7c48 100644 --- a/.github/workflows/build-ubuntu-20.yml +++ b/.github/workflows/build-ubuntu.yml @@ -1,32 +1,63 @@ -name: Build Ubuntu 20.04 +name: Build Ubuntu on: push: pull_request: - branches: - - master jobs: build-ubuntu: - runs-on: ubuntu-20.04 + + strategy: + matrix: + os: [ubuntu-22.04, ubuntu-20.04] + + runs-on: ${{ matrix.os }} env: # enable starting Qt GUI Applications QT_QPA_PLATFORM: offscreen + PROJECT_NAME: ecal steps: + - name: Install Dependencies run: | sudo apt update - sudo apt-get install ninja-build doxygen graphviz libcurl4-openssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libhdf5-dev qt5-default libqt5opengl5-dev libqt5svg5-dev libyaml-cpp-dev + + if [ "${{ matrix.os }}" == "ubuntu-24.04" ]; then + sudo apt-get install ninja-build doxygen graphviz libcurl4-openssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libhdf5-dev qt6-base-dev qt6-svg-dev libyaml-cpp-dev + sudo apt-get -y install python python-venv + elif [ "${{ matrix.os }}" == "ubuntu-22.04" ]; then + sudo apt-get install ninja-build doxygen graphviz libcurl4-openssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libhdf5-dev qtbase5-dev libqt5opengl5-dev libqt5svg5-dev libyaml-cpp-dev + sudo apt-get -y install python python-venv + elif [ "${{ matrix.os }}" == "ubuntu-20.04" ]; then + sudo apt-get install ninja-build doxygen graphviz libcurl4-openssl-dev libprotobuf-dev libprotoc-dev protobuf-compiler libhdf5-dev qt5-default libqt5opengl5-dev libqt5svg5-dev libyaml-cpp-dev + sudo apt-get -y install python3.9 python3.9-venv + fi + + - name: Set variables + run: | + if [ "${{ matrix.os }}" == "ubuntu-24.04" ]; then + echo "ubuntu_codename=noble" >> "$GITHUB_ENV" + echo "python_version=3" >> "$GITHUB_ENV" # => default python 3 version + elif [ "${{ matrix.os }}" == "ubuntu-22.04" ]; then + echo "ubuntu_codename=focal" >> "$GITHUB_ENV" + echo "python_version=3" >> "$GITHUB_ENV" # => default python 3 version + elif [ "${{ matrix.os }}" == "ubuntu-20.04" ]; then + echo "ubuntu_codename=jammy" >> "$GITHUB_ENV" + echo "python_version=3.9" >> "$GITHUB_ENV" + fi + + # Get cpu architecture + echo "cpu_architecture=$(dpkg --print-architecture)" >> "$GITHUB_ENV" - name: Install Cap'n Proto run: | mkdir "${{ runner.workspace }}/capnp" cd "${{ runner.workspace }}/capnp" - curl -O https://capnproto.org/capnproto-c++-0.9.0.tar.gz - tar zxf capnproto-c++-0.9.0.tar.gz - cd capnproto-c++-0.9.0 + curl -O https://capnproto.org/capnproto-c++-1.0.2.tar.gz + tar zxf capnproto-c++-1.0.2.tar.gz + cd capnproto-c++-1.0.2 ./configure make -j sudo make install @@ -40,9 +71,8 @@ jobs: - name: Install Python requirements shell: bash run: | - sudo apt-get -y install python3.9-dev python3.9-venv mkdir ".venv_build" - python3.9 -m venv ".venv_build" + python${{ env.python_version }} -m venv ".venv_build" source ".venv_build/bin/activate" pip install --upgrade pip pip install wheel setuptools @@ -52,8 +82,6 @@ jobs: run: | source ".venv_build/bin/activate" - export CC=/usr/bin/gcc-9 - export CXX=/usr/bin/g++-9 mkdir "${{ runner.workspace }}/_build" cd "${{ runner.workspace }}/_build" @@ -69,8 +97,8 @@ jobs: -DBUILD_APPS=ON \ -DBUILD_SAMPLES=ON \ -DBUILD_TIME=ON \ - -DBUILD_PY_BINDING=ON \ - -DBUILD_STANDALONE_PY_WHEEL=ON \ + -DBUILD_PY_BINDING=OFF \ + -DBUILD_STANDALONE_PY_WHEEL=OFF \ -DBUILD_CSHARP_BINDING=OFF \ -DBUILD_ECAL_TESTS=ON \ -DECAL_INCLUDE_PY_SAMPLES=OFF \ @@ -104,55 +132,30 @@ jobs: run: cmake --build . --config Release -- -k 0 working-directory: ${{ runner.workspace }}/_build - # Create Python Wheels - # The strang-looking double-cmake is an ugly workaround to force CMake to - # re-find Python, after we have changed the venv from the outside. The - # alternative would be to clean everything, which would cause an unnecessary - # rebuild of eCAL for each python Version. - - name: Build Python 3.9 Wheel - run: | - sudo apt-get -y install python3.9-dev python3.9-venv - mkdir ".venv_39" - python3.9 -m venv ".venv_39" - source ".venv_39/bin/activate" - pip install --upgrade pip - pip install wheel setuptools - cmake $GITHUB_WORKSPACE -DPython_FIND_VIRTUALENV=FIRST - cmake $GITHUB_WORKSPACE -DPython_FIND_VIRTUALENV=ONLY - cmake --build . --target create_python_wheel --config Release - shell: bash + - name: Run Tests + run: ctest -V working-directory: ${{ runner.workspace }}/_build - - name: Build Python 3.8 Wheel + - name: Read Project Version from CMakeCache run: | - sudo apt-get -y install python3.8-dev python3.8-venv - mkdir ".venv_38" - python3.8 -m venv ".venv_38" - source ".venv_38/bin/activate" - pip install --upgrade pip - pip install wheel setuptools - cmake $GITHUB_WORKSPACE -DPython_FIND_VIRTUALENV=FIRST - cmake $GITHUB_WORKSPACE -DPython_FIND_VIRTUALENV=ONLY - cmake --build . --target create_python_wheel --config Release + cmake_project_version_string=$(cat "${{github.workspace}}/_build/CMakeCache.txt" | grep "^CMAKE_PROJECT_VERSION:") + arr=(${cmake_project_version_string//=/ }) + cmake_project_version=${arr[1]} + echo "CMAKE_PROJECT_VERSION=$cmake_project_version" >> "$GITHUB_ENV" shell: bash - working-directory: ${{ runner.workspace }}/_build - - - name: Run Tests - run: ctest -V - working-directory: ${{ runner.workspace }}/_build - - name: Pack + - name: CPack run: cpack -G DEB working-directory: ${{ runner.workspace }}/_build + - name: Rename .deb installer + run: | + mv *.deb '${{ env.PROJECT_NAME }}_${{ env.CMAKE_PROJECT_VERSION }}-${{ env.ubuntu_codename }}_${{ env.cpu_architecture }}.deb' + shell: bash + working-directory: ${{github.workspace}}/_build/_deploy/ + - name: Upload Debian uses: actions/upload-artifact@v4 with: name: ubuntu-debian path: ${{ runner.workspace }}/_build/_deploy/*.deb - - - name: Upload Python Wheel - uses: actions/upload-artifact@v4 - with: - name: ubuntu-python-wheel - path: ${{ runner.workspace }}/_build/_deploy/*.whl