.github/workflows/deploy.yml
name: Deploy on: push: branches: [ "master" ] pull_request: branches: [ "master" ] release: types: [published] env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release AQT_VERSION: '==3.1.*' QT_VERSION: '6.7.1' jobs:# send-slack-notification:# runs-on: ubuntu-latest# steps:# - name: send slack message# uses: docker://technosophos/slack-notify# env:# SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}# SLACK_MESSAGE: "Building QtMeshEditor in GitHub Actions - works! :D" ##################################################################### Windows Deploy#################################################################### build-n-cache-assimp-windows: runs-on: windows-latest steps: - name: Cache Assimp id: cache-assimp-windows uses: actions/cache@v3 env: cache-name: cache-assimp-windows with: # It is caching the folder that also contains source and building files, maybe in the future it would be nice cache only the includes and dll path: | C:/PROGRA~2/Assimp key: ${{ runner.os }}-build-${{ env.cache-name }} - if: steps.cache-assimp-windows.outputs.cache-hit != 'true' name: Set up MinGW uses: e-t-l/setup-mingw@patch-1 #egor-tensin/setup-mingw@v2 with: platform: x64 - if: steps.cache-assimp-windows.outputs.cache-hit != 'true' name: Check out Assimp repo uses: actions/checkout@master with: repository: assimp/assimp path: ${{github.workspace}}/assimp - if: steps.cache-assimp-windows.outputs.cache-hit != 'true' name: Build Assimp repo env: CMAKE_GENERATOR: "MinGW Makefiles" run: | cd ${{github.workspace}}/assimp cmake -S . -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_GENERATOR="MinGW Makefiles" -DASSIMP_WARNINGS_AS_ERRORS=OFF mingw32-make install -j8 xcopy /I "C:/PROGRA~2/Assimp" "${{github.workspace}}/assimp-build" shell: cmd build-n-cache-ogre-windows: needs: build-n-cache-assimp-windows runs-on: windows-latest steps: - name: Cache Assimp id: cache-assimp-windows uses: actions/cache@v3 env: cache-name: cache-assimp-windows with: path: | C:/PROGRA~2/Assimp key: ${{ runner.os }}-build-${{ env.cache-name }} - name: Cache Ogre id: cache-ogre-windows uses: actions/cache@v3 env: cache-name: cache-ogre-windows with: path: ${{github.workspace}}/ogre-build/SDK # Need to delete manually if needed to rebuild. Until I find a better solution for detecting changes in the ogre repo. key: ${{ runner.os }}-build-${{ env.cache-name }} - if: steps.cache-ogre-windows.outputs.cache-hit != 'true' name: Install Doxygen shell: cmd run: | curl -L -o doxygen-installer.exe "https://www.doxygen.nl/files/doxygen-1.9.7-setup.exe" doxygen-installer.exe /VERYSILENT - if: steps.cache-ogre-windows.outputs.cache-hit != 'true' name: Check out ogre repo uses: actions/checkout@master with: repository: OGRECave/ogre path: ${{github.workspace}}/ogre - if: steps.cache-ogre-windows.outputs.cache-hit != 'true' name: Set up MinGW uses: e-t-l/setup-mingw@patch-1 #egor-tensin/setup-mingw@v2 with: platform: x64 - if: steps.cache-ogre-windows.outputs.cache-hit != 'true' name: Build Ogre3D shell: cmd env: CMAKE_GENERATOR: "MinGW Makefiles" ASSIMP_DIR: "C:/Program Files (x86)/Assimp/lib/cmake/assimp-5.2/" run: | cd ${{github.workspace}}/ogre cmake -B ${{github.workspace}}/ogre-build -S . -DDOXYGEN_EXECUTABLE="C:\Program Files\doxygen\bin\doxygen.exe" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_STANDARD=17 -DOGRE_BUILD_PLUGIN_ASSIMP=ON -DOGRE_BUILD_PLUGIN_PCZ=ON -DOGRE_BUILD_PLUGIN_DOT_SCENE=ON -DOGRE_BUILD_RENDERSYSTEM_GL=ON -DOGRE_BUILD_RENDERSYSTEM_GL3PLUS=ON -DOGRE_BUILD_RENDERSYSTEM_GLES2=OFF -DOGRE_BUILD_RENDERSYSTEM_D3D9=OFF -DOGRE_BUILD_RENDERSYSTEM_D3D11=OFF -DOGRE_BUILD_TESTS=OFF -DOGRE_BUILD_TOOLS=OFF -DOGRE_BUILD_SAMPLES=OFF -DOGRE_BUILD_COMPONENT_CSHARP=OFF -DOGRE_BUILD_COMPONENT_JAVA=OFF -DOGRE_BUILD_COMPONENT_PYTHON=OFF -DOGRE_INSTALL_TOOLS=OFF -DOGRE_INSTALL_DOCS=OFF -DOGRE_INSTALL_SAMPLES=OFF -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} cd ${{github.workspace}}/ogre-build mingw32-make install -j8 build-windows: # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. # You can convert this to a matrix build if you need cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix needs: [build-n-cache-assimp-windows, build-n-cache-ogre-windows] runs-on: windows-latest steps: - uses: actions/checkout@v3 with: submodules: true - name: Cache Assimp id: cache-assimp-windows uses: actions/cache@v3 env: cache-name: cache-assimp-windows with: # It is caching the folder that also contains source and building files, maybe in the future it would be nice cache only the includes and dll path: | C:/PROGRA~2/Assimp key: ${{ runner.os }}-build-${{ env.cache-name }} - name: Cache Ogre id: cache-ogre-windows uses: actions/cache@v3 env: cache-name: cache-ogre-windows with: path: ${{github.workspace}}/ogre-build/SDK # Need to delete manually if needed to rebuild. Until I find a better solution for detecting changes in the ogre repo. key: ${{ runner.os }}-build-${{ env.cache-name }} - name: Set up MinGW uses: e-t-l/setup-mingw@patch-1 #egor-tensin/setup-mingw@v2 with: platform: x64 - name: Install Qt uses: jurplel/install-qt-action@v3 with: aqtversion: ${{ env.AQT_VERSION }} version: ${{ env.QT_VERSION }} host: 'windows' target: 'desktop' arch: 'win64_mingw' tools: 'tools_cmake' - name: Configure CMake env: OGRE_DIR: ${{github.workspace}}/ogre-build/SDK/CMake/ CMAKE_GENERATOR: "MinGW Makefiles" ASSIMP_DIR: C:/PROGRA~2/Assimp run: | cmake -S . -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DQT_QMAKE_EXECUTABLE=qmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_EXE_LINKER_FLAGS=-static -DQt6_DIR=D:/a/QtMeshEditor/Qt/${{env.QT_VERSION}}/gcc_64/lib/cmake/Qt6 -DQT_DIR=D:/a/QtMeshEditor/Qt/${{env.QT_VERSION}}/gcc_64/lib/cmake/Qt6 -DQt6GuiTools_DIR=D:/a/QtMeshEditor/Qt/${{env.QT_VERSION}}/gcc_64/lib/cmake/Qt6GuiTools -DOGRE_DIR=${{github.workspace}}/ogre-build/SDK/CMake/ -DASSIMP_DIR=C:/PROGRA~2/Assimp/lib/cmake/assimp-5.2 shell: cmd - name: Build run: mingw32-make install -j8 - name: Copy assimp dll to the binary folder run: | copy C:/PROGRA~2/Assimp/bin/libassimp-5.dll ${{github.workspace}}/bin - name: Copy gcc dll to the binary folder run: | echo "mingw bin" cd C:/ProgramData/mingw64/mingw64/bin dir copy C:/ProgramData/mingw64/mingw64/bin/libgcc_s_seh-1.dll ${{github.workspace}}/bin copy C:/ProgramData/mingw64/mingw64/bin/libstdc++-6.dll ${{github.workspace}}/bin copy C:/ProgramData/mingw64/mingw64/bin/libwinpthread-1.dll ${{github.workspace}}/bin copy ${{github.workspace}}/src/dependencies/zlib1.dll ${{github.workspace}}/bin/zlib1__.dll copy ${{github.workspace}}/src/dependencies/zlib1.dll ${{github.workspace}}/bin/libzlib.dll - name: Upload Artifact if: github.event_name == 'release' && github.event.action == 'published' uses: actions/upload-artifact@v3 with: name: QtMeshEditor-${{github.ref_name}}-bin-Windows path: ${{github.workspace}}/bin - name: Compress File if: github.event_name == 'release' && github.event.action == 'published' run: Compress-Archive ${{github.workspace}}/bin QtMeshEditor-${{github.ref_name}}-bin-Windows.zip shell: powershell - name: Uploadfile to release if: github.event_name == 'release' && github.event.action == 'published' uses: xresloader/upload-to-github-release@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: file: QtMeshEditor-${{github.ref_name}}-bin-Windows.zip update_latest_release: true overwrite: false verbose: true##################################################################### Linux Deploy#################################################################### build-n-cache-assimp-linux: runs-on: ubuntu-latest steps: - name: change folder permissions run: | sudo chmod -R 777 /usr/local/lib sudo chmod -R 777 /usr/local/include - name: Cache Assimp id: cache-assimp-linux uses: actions/cache@v3 env: cache-name: cache-assimp-linux with: # Assimp cache files are stored in `/home/runner/work/QtMeshEditor/QtMeshEditor/assimp` on Linux path: | /usr/local/lib/cmake/ /usr/local/include/assimp /usr/local/include/contrib /usr/local/lib/pkgconfig/assimp.pc /usr/local/lib/libassimp* /usr/local/lib/libzlibstatic.a #key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('/home/runner/work/QtMeshEditor/QtMeshEditor/assimp') }} # Need to delete manually if needed to rebuild. Until I find a better solution for detecting changes in the assimp repo. key: ${{ runner.os }}-build-${{ env.cache-name }} - if: steps.cache-assimp-linux.outputs.cache-hit != 'true' name: Check out Assimp repo uses: actions/checkout@master with: repository: assimp/assimp path: /home/runner/work/QtMeshEditor/QtMeshEditor/assimp - if: steps.cache-assimp-linux.outputs.cache-hit != 'true' name: Build Assimp repo run: | cmake -B /home/runner/work/QtMeshEditor/QtMeshEditor/assimp-build -S /home/runner/work/QtMeshEditor/QtMeshEditor/assimp -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} cd /home/runner/work/QtMeshEditor/QtMeshEditor/assimp-build/ sudo make install -j8 build-n-cache-ogre-linux: needs: build-n-cache-assimp-linux runs-on: ubuntu-latest steps: - name: change folder permissions run: | sudo chmod -R 777 /usr/local/lib sudo chmod -R 777 /usr/local/include sudo chmod -R 777 /usr/local/share - name: Cache Ogre id: cache-ogre-linux uses: actions/cache@v3 env: cache-name: cache-ogre-linux with: path: | /usr/local/lib/lib* /usr/local/share/OGRE/ /usr/local/share/OGRE* /usr/local/include/OGRE/ /usr/local/lib/OGRE/ /usr/local/lib/pkgconfig/ key: ${{ runner.os }}-build-${{ env.cache-name }} - if: steps.cache-ogre-linux.outputs.cache-hit != 'true' name: Cache Assimp id: cache-assimp-linux uses: actions/cache@v3 env: cache-name: cache-assimp-linux with: # Assimp cache files are stored in `/home/runner/work/QtMeshEditor/assimp` on Linux/macOS path: | /usr/local/lib/cmake/ /usr/local/include/assimp /usr/local/include/contrib /usr/local/lib/pkgconfig/assimp.pc /usr/local/lib/libassimp* /usr/local/lib/libzlibstatic.a #key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('/home/runner/work/QtMeshEditor/QtMeshEditor/assimp') }} # Need to delete manually if needed to rebuild. Until I find a better solution for detecting changes in the assimp repo. key: ${{ runner.os }}-build-${{ env.cache-name }} - if: steps.cache-ogre-linux.outputs.cache-hit != 'true' name: install openGL run: | sudo apt update sudo apt-get install freeglut3-dev libxrandr-dev - if: steps.cache-ogre-linux.outputs.cache-hit != 'true' name: Check out ogre repo uses: actions/checkout@master with: repository: OGRECave/ogre path: /home/runner/work/QtMeshEditor/QtMeshEditor/ogre - if: steps.cache-ogre-linux.outputs.cache-hit != 'true' name: Build Ogre3D repo run: | sudo cmake -B /home/runner/work/QtMeshEditor/QtMeshEditor/ogre-build \ -S /home/runner/work/QtMeshEditor/QtMeshEditor/ogre \ -DOGRE_BUILD_PLUGIN_ASSIMP=ON -Dassimp_DIR=/usr/local/lib/cmake/assimp-5.2 \ -DOGRE_BUILD_PLUGIN_DOT_SCENE=ON -DOGRE_BUILD_RENDERSYSTEM_GL=ON \ -DOGRE_BUILD_RENDERSYSTEM_GL3PLUS=ON -DOGRE_BUILD_RENDERSYSTEM_GLES2=OFF \ -DOGRE_BUILD_TESTS=OFF -DOGRE_BUILD_TOOLS=OFF -DOGRE_BUILD_SAMPLES=OFF \ -DOGRE_BUILD_COMPONENT_CSHARP=OFF -DOGRE_BUILD_COMPONENT_JAVA=OFF \ -DOGRE_BUILD_COMPONENT_BULLET=OFF \ -DOGRE_BUILD_COMPONENT_PYTHON=OFF -DOGRE_INSTALL_TOOLS=OFF \ -DOGRE_INSTALL_DOCS=OFF -DOGRE_INSTALL_SAMPLES=OFF \ -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} cd /home/runner/work/QtMeshEditor/QtMeshEditor/ogre-build/ sudo make install -j8 build-linux: needs: [build-n-cache-assimp-linux, build-n-cache-ogre-linux] runs-on: ubuntu-latest env: LD_LIBRARY_PATH: /usr/local/lib/:/usr/local/lib/OGRE/:/usr/local/lib/pkgconfig/ steps: - uses: actions/checkout@v3.5.3 with: submodules: true - name: Install Qt uses: jurplel/install-qt-action@v3 with: aqtversion: ${{ env.AQT_VERSION }} version: ${{ env.QT_VERSION }} host: 'linux' target: 'desktop' arch: 'linux_gcc_64' - name: change folder permissions run: | sudo chmod -R 777 /usr/local/lib sudo chmod -R 777 /usr/local/include sudo chmod -R 777 /usr/local/share - name: Cache Assimp id: cache-assimp-linux uses: actions/cache@v3 env: cache-name: cache-assimp-linux with: path: | /usr/local/lib/cmake/ /usr/local/include/assimp /usr/local/include/contrib /usr/local/lib/pkgconfig/assimp.pc /usr/local/lib/libassimp* /usr/local/lib/libzlibstatic.a key: ${{ runner.os }}-build-${{ env.cache-name }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- - name: Cache Ogre id: cache-ogre-linux uses: actions/cache@v3 env: cache-name: cache-ogre-linux with: path: | /usr/local/lib/lib* /usr/local/share/OGRE/ /usr/local/share/OGRE* /usr/local/include/OGRE/ /usr/local/lib/OGRE/ /usr/local/lib/pkgconfig/ key: ${{ runner.os }}-build-${{ env.cache-name }} - name: Configure CMake run: | sudo cmake -S . -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \ -DASSIMP_DIR=/usr/local/lib/cmake/assimp-5.2 \ -DASSIMP_INCLUDE_DIR=/usr/local/include/assimp \ -DQt6_DIR=/home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/cmake/Qt6 \ -DQT_DIR=/home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/cmake/Qt6 \ -DQt6GuiTools_DIR=/home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/cmake/Qt6GuiTools - name: Build run: sudo make install -j8 - name: Add missing libraries run: | sudo cp -R /home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/libicui18n.* ./bin sudo cp -R /home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/libicuuc.* ./bin sudo cp -R /home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/libicudata.* ./bin - name: Manual Pack run: | echo "Creating folders 'n files" mkdir -p ./pack-deb/usr/local/bin mkdir -p ./pack-deb/usr/share/qtmesheditor/ mkdir ./pack-deb/usr/share/qtmesheditor/cfg/ mkdir ./pack-deb/usr/share/qtmesheditor/media/ mkdir ./pack-deb/usr/share/qtmesheditor/platforms/ mkdir -p ./pack-deb/lib/x86_64-linux-gnu/ mkdir ./pack-deb/DEBIAN/ cp ./bin/DEBIAN-control ./pack-deb/DEBIAN/control cp ./bin/QtMeshEditor ./pack-deb/usr/share/qtmesheditor/qtmesheditor touch ./pack-deb/usr/local/bin/qtmesheditor echo "/usr/share/qtmesheditor/qtmesheditor" >> ./pack-deb/usr/local/bin/qtmesheditor sudo chmod 755 ./pack-deb/usr/local/bin/qtmesheditor cp -R ./bin/cfg/ ./pack-deb/usr/share/qtmesheditor/ sudo chmod -R 755 ./pack-deb/usr/share/qtmesheditor/cfg cp -R ./bin/media/ ./pack-deb/usr/share/qtmesheditor/ cp -R ./bin/platforms/ ./pack-deb/usr/share/qtmesheditor/ cp -R ./bin/*.so* ./pack-deb/lib/x86_64-linux-gnu/ dpkg-deb --build --root-owner-group pack-deb mv pack-deb.deb qtmesheditor_amd64.deb - uses: actions/upload-artifact@v3 if: github.event_name == 'release' && github.event.action == 'published' with: name: linux-binaries path: ${{github.workspace}}/*.deb - if: github.event_name == 'release' && github.event.action == 'published' uses: xresloader/upload-to-github-release@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: file: ${{github.workspace}}/*.deb update_latest_release: true overwrite: false verbose: true##################################################################### Unit Tests - on Linux #################################################################### unit-tests-linux: # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. # You can convert this to a matrix build if you need cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix needs: [build-n-cache-assimp-linux, build-n-cache-ogre-linux] runs-on: ubuntu-latest permissions: read-all env: LD_LIBRARY_PATH: gcc_64/lib/:/usr/local/lib/:/usr/local/lib/OGRE/:/usr/local/lib/pkgconfig/:/lib/x86_64-linux-gnu/ BUILD_WRAPPER_OUT_DIR: ./ QT_QPA_PLATFORM: minimal QT_DEBUG_PLUGINS: 1 DISPLAY: :99 steps: - uses: actions/checkout@v3.5.3 with: submodules: true fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Install Qt uses: jurplel/install-qt-action@v3 with: aqtversion: ${{ env.AQT_VERSION }} version: ${{ env.QT_VERSION }} host: 'linux' target: 'desktop' arch: 'linux_gcc_64' - name: change folder permissions run: | sudo chmod -R 777 /usr/local/lib sudo chmod -R 777 /usr/local/include sudo chmod -R 777 /usr/local/share - name: Cache Assimp id: cache-assimp-linux uses: actions/cache@v3 env: cache-name: cache-assimp-linux with: path: | /usr/local/lib/cmake/ /usr/local/include/assimp /usr/local/include/contrib /usr/local/lib/pkgconfig/assimp.pc /usr/local/lib/libassimp* /usr/local/lib/libzlibstatic.a key: ${{ runner.os }}-build-${{ env.cache-name }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- - name: Cache Ogre id: cache-ogre-linux uses: actions/cache@v3 env: cache-name: cache-ogre-linux with: path: | /usr/local/lib/lib* /usr/local/share/OGRE/ /usr/local/share/OGRE* /usr/local/include/OGRE/ /usr/local/lib/OGRE/ /usr/local/lib/pkgconfig/ key: ${{ runner.os }}-build-${{ env.cache-name }} - name: Configure CMake run: | mkdir build sudo cmake -S . -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \ -DASSIMP_DIR=/usr/local/lib/cmake/assimp-5.2 \ -DASSIMP_INCLUDE_DIR=/usr/local/include/assimp \ -DQt6_DIR=/home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/cmake/Qt6 \ -DQT_DIR=/home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/cmake/Qt6 \ -DQt6GuiTools_DIR=/home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/cmake/Qt6GuiTools \ -DBUILD_TESTS=ON -DCMAKE_CXX_FLAGS=--coverage -DCMAKE_EXE_LINKER_FLAGS=--coverage \ -DBUILD_QT_MESH_EDITOR=OFF - name: Install sonar-scanner and build-wrapper uses: SonarSource/sonarcloud-github-c-cpp@v2 - name: Run build-wrapper run: | sudo ./.sonar/build-wrapper-linux-x86/build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} sudo cmake --build . --target install - name: Add missing libraries run: | sudo cp -R /home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/libicui18n.* ./bin sudo cp -R /home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/libicuuc.* ./bin sudo cp -R /home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/libicudata.* ./bin sudo cp -R ./bin/*.so* /lib/x86_64-linux-gnu sudo cp -R /usr/local/lib/OGRE/* /lib/x86_64-linux-gnu sudo cp -R /usr/local/lib/OGRE/* ./bin - name: Test env: QT_QPA_PLATFORM: minimal QT_DEBUG_PLUGINS: 1 DISPLAY: :99 run: | export QT_QPA_PLATFORM="minimal" export QT_DEBUG_PLUGINS=1 sudo cp -R /home/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/gcc_64/lib/ /lib/x86_64-linux-gnu/ sudo apt -y install libxcb-xinerama0 libxcb-cursor0 libx11-dev xvfb Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & export DISPLAY=:99 sleep 5 ps -ef | grep Xvfb echo "DISPLAY=:99" >> $GITHUB_ENV sudo ./bin/UnitTests # sudo ctest -C ${{env.BUILD_TYPE}} --rerun-failed --output-on-failure - name: Set up Python 3.8 for gcovr uses: actions/setup-python@v4 with: python-version: 3.8 - name: install gcovr 5.0 run: | pip install gcovr==5.0 - run: sudo gcov ${{github.workspace}}/src/CMakeFiles/UnitTests.dir/*.o - name: Collect coverage into one XML report run: | gcovr --sonarqube > coverage.xml - name: Run sonar-scanner env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | sonar-scanner \ --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" \ --define sonar.coverageReportPaths=coverage.xml - name: Run lcov run: | sudo apt install lcov lcov --capture --directory . --output-file coverage.info lcov --remove coverage.info '/usr/*' \ '/home/runner/work/QtMeshEditor/Qt/*' \ '/home/runner/work/QtMeshEditor/QtMeshEditor/src/OgreXML/*' \ '/home/runner/work/QtMeshEditor/QtMeshEditor/src/dependencies/*' \ 'src/OgreXML/*.*' \ 'src/dependencies/ogre-procedural/library/src/*.*' \ 'src/UnitTests_autogen/**/*.cpp' \ '*_autogen*' \ 'src/dependencies/*' \ '**/CMakeFiles/*' \ '_deps/**/*.h' \ '_deps/**/*.cpp' \ '_deps/**/*.cc' \ '/home/runner/work/QtMeshEditor/QtMeshEditor/_deps/*' \ 'ui_files/*' \ 'moc_*' \ '*_test.cpp' \ -o filtered_coverage.info - run: | cd ${{github.workspace}} curl -L -O codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 sudo chmod +x test-reporter-latest-linux-amd64 sudo ./test-reporter-latest-linux-amd64 format-coverage --input-type lcov --output coverage.json filtered_coverage.info sudo ./test-reporter-latest-linux-amd64 upload-coverage --input coverage.json -r ${{secrets.CODECLIMATE_COVERAGE_ID}} ##################################################################### MacOS Deploy #################################################################### build-n-cache-assimp-macos: runs-on: macos-latest steps: - name: change folder permissions run: | sudo mkdir /usr/local/lib sudo mkdir /usr/local/include sudo chmod -R 777 /usr/local/lib sudo chmod -R 777 /usr/local/include - name: Cache Assimp id: cache-assimp-macos uses: actions/cache@v3 env: cache-name: cache-assimp-macos with: path: | /usr/local/lib/cmake /usr/local/include/assimp /usr/local/include/contrib /usr/local/lib/pkgconfig/assimp.pc /usr/local/lib/libassimp* /usr/local/lib/libzlibstatic.a #key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('/home/runner/work/QtMeshEditor/QtMeshEditor/assimp') }} # Need to delete manually if needed to rebuild. Until I find a better solution for detecting changes in the assimp repo. key: ${{ runner.os }}-build-${{ env.cache-name }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- - if: steps.cache-assimp-macos.outputs.cache-hit != 'true' name: Check out Assimp repo uses: actions/checkout@master with: repository: assimp/assimp path: /Users/runner/work/QtMeshEditor/QtMeshEditor/assimp - if: steps.cache-assimp-macos.outputs.cache-hit != 'true' name: Build Assimp repo run: | cmake -B /Users/runner/work/QtMeshEditor/QtMeshEditor/assimp-build -S /Users/runner/work/QtMeshEditor/QtMeshEditor/assimp -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} cd /Users/runner/work/QtMeshEditor/QtMeshEditor/assimp-build/ sudo make install -j8 build-n-cache-ogre-macos: needs: build-n-cache-assimp-macos runs-on: macos-latest steps: - name: change folder permissions run: | sudo mkdir /usr/local/lib sudo mkdir /usr/local/include sudo chmod -R 777 /usr/local/lib sudo chmod -R 777 /usr/local/include - name: Cache Assimp id: cache-assimp-macos uses: actions/cache@v3 env: cache-name: cache-assimp-macos with: path: | /usr/local/lib/cmake /usr/local/include/assimp /usr/local/include/contrib /usr/local/lib/pkgconfig/assimp.pc /usr/local/lib/libassimp* /usr/local/lib/libzlibstatic.a key: ${{ runner.os }}-build-${{ env.cache-name }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- - name: Cache Ogre id: cache-ogre-macos uses: actions/cache@v3 env: cache-name: cache-ogre-macos with: path: ${{github.workspace}}/ogre/SDK key: ${{ runner.os }}-build-${{ env.cache-name }} - if: steps.cache-ogre-macos.outputs.cache-hit != 'true' name: Check out ogre repo uses: actions/checkout@master with: repository: OGRECave/ogre path: ${{github.workspace}}/ogre - if: steps.cache-ogre-macos.outputs.cache-hit != 'true' name: Build Ogre3D repo run: | cd ${{github.workspace}}/ogre/ sudo cmake -S . -DOGRE_BUILD_PLUGIN_ASSIMP=ON -Dassimp_DIR=/usr/local/lib/cmake/assimp-5.4/ \ -DOGRE_BUILD_PLUGIN_DOT_SCENE=ON -DOGRE_BUILD_RENDERSYSTEM_GL=ON -DOGRE_BUILD_RENDERSYSTEM_GL3PLUS=ON \ -DOGRE_BUILD_RENDERSYSTEM_GLES2=OFF -DOGRE_BUILD_TESTS=OFF -DOGRE_BUILD_TOOLS=OFF -DOGRE_BUILD_SAMPLES=OFF \ -DOGRE_BUILD_COMPONENT_CSHARP=OFF -DOGRE_BUILD_COMPONENT_JAVA=OFF -DOGRE_BUILD_COMPONENT_PYTHON=OFF \ -DOGRE_INSTALL_TOOLS=OFF -DOGRE_INSTALL_DOCS=OFF -DOGRE_INSTALL_SAMPLES=OFF -DOGRE_BUILD_LIBS_AS_FRAMEWORKS=OFF \ -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} sudo make install -j8 build-macos: needs: [build-n-cache-assimp-macos, build-n-cache-ogre-macos] runs-on: macos-latest steps: - name: change folder permissions run: | sudo mkdir /usr/local/lib sudo mkdir /usr/local/include sudo chmod -R 777 /usr/local/lib sudo chmod -R 777 /usr/local/include - uses: actions/checkout@v3 with: submodules: true - run: | cd ${{github.workspace}}/src/dependencies/ogre-procedural git checkout master git pull - name: Install Qt uses: jurplel/install-qt-action@v3 with: aqtversion: ${{ env.AQT_VERSION }} version: ${{ env.QT_VERSION }} host: 'mac' target: 'desktop' arch: 'clang_64' tools: 'tools_cmake' - name: Cache Assimp id: cache-assimp-macos uses: actions/cache@v3 env: cache-name: cache-assimp-macos with: path: | /usr/local/lib/cmake /usr/local/include/assimp /usr/local/include/contrib /usr/local/lib/pkgconfig/assimp.pc /usr/local/lib/libassimp* /usr/local/lib/libzlibstatic.a key: ${{ runner.os }}-build-${{ env.cache-name }} - name: Cache Ogre id: cache-ogre-macos uses: actions/cache@v3 env: cache-name: cache-ogre-macos with: path: ${{github.workspace}}/ogre/SDK key: ${{ runner.os }}-build-${{ env.cache-name }} - name: Configure CMake env: OGRE_DIR: ${{github.workspace}}/ogre/SDK/CMake/ run: | sudo cmake -S . \ -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \ -DASSIMP_DIR=/usr/local/lib/cmake/assimp-5.4 \ -DASSIMP_INCLUDE_DIR=/usr/local/include/assimp \ -DQt6_DIR=/Users/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/clang_64/lib/cmake/Qt6 \ -DQT_DIR=/Users/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/clang_64/lib/cmake/Qt6 \ -DQt6GuiTools_DIR=/Users/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/clang_64/lib/cmake/Qt6GuiTools \ -DOGRE_DIR=${{github.workspace}}/ogre/SDK/CMake/ - name: Build # Build your program with the given configuration run: | sudo make install -j8 - name: Copy Qt libs to app folder run: | sudo cp -R /Users/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/macos/lib/QtWidgets.framework ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/QtWidgets.framework sudo cp -R /Users/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/macos/lib/QtCore.framework ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/QtCore.framework sudo cp -R /Users/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/macos/lib/QtGui.framework ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/QtGui.framework sudo cp -R /Users/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/macos/lib/QtDBus.framework ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/QtDBus.framework sudo cp -R /Users/runner/work/QtMeshEditor/Qt/${{ env.QT_VERSION }}/macos/plugins/platforms ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/platforms sudo cp -R /usr/local/lib/libassimp* ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/ - name: Prepare for packing run: | sudo cp -R ${{github.workspace}}/bin/media ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/media sudo cp -R ${{github.workspace}}/bin/cfg ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/cfg sudo cp -R ${{github.workspace}}/resources/icon.icns ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/media sudo mkdir ${{github.workspace}}/bin/QtMeshEditor.app/Contents/Resources sudo cp -R ${{github.workspace}}/resources/icon.icns ${{github.workspace}}/bin/QtMeshEditor.app/Contents/Resources sudo cp -R ${{github.workspace}}/bin/Info.plist ${{github.workspace}}/bin/QtMeshEditor.app/Contents/ sudo install_name_tool -add_rpath @loader_path/ ${{github.workspace}}/bin/QtMeshEditor.app/Contents/MacOS/QtMeshEditor - name: Pack run: | brew install create-dmg sudo create-dmg \ --volname "QtMeshEditor Installer" \ --volicon "${{github.workspace}}/resources/icon.icns" \ --window-pos 200 120 \ --window-size 800 400 \ --icon-size 100 \ --icon "QtMeshEditor.app" 200 190 \ --app-drop-link 600 185 \ QtMeshEditor-${{github.ref_name}}-MacOS.dmg \ ${{github.workspace}}/bin/QtMeshEditor.app - if: github.event_name == 'release' && github.event.action == 'published' uses: actions/upload-artifact@v3.1.2 with: name: QtMeshEditor-MacOS path: ${{github.workspace}}/QtMeshEditor-${{github.ref_name}}-MacOS.dmg - if: github.event_name == 'release' && github.event.action == 'published' uses: xresloader/upload-to-github-release@main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: file: QtMeshEditor-${{github.ref_name}}-MacOS.dmg update_latest_release: true overwrite: false verbose: true