Work on the build system #82
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #------------------------------------------------------------------------------- | |
| # Workflow configuration | |
| #------------------------------------------------------------------------------- | |
| name: "MiniAnalyser CI builds" | |
| on: | |
| push: | |
| pull_request: | |
| workflow_dispatch: | |
| #------------------------------------------------------------------------------- | |
| # Define application name & version | |
| #------------------------------------------------------------------------------- | |
| env: | |
| APP_NAME: "mini_analyser" | |
| APP_VERSION: "50" | |
| QT_VERSION: "6.8.3" | |
| #------------------------------------------------------------------------------- | |
| # Workflow jobs | |
| #------------------------------------------------------------------------------- | |
| jobs: | |
| ## GNU/Linux build ########################################################### | |
| build-linux: | |
| name: "Linux CI build" | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| # Checkout the repository (and submodules) | |
| - name: Checkout repository (and submodules) | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| # Install dependencies (from package manager) | |
| - name: Install dependencies (from package manager) | |
| run: | | |
| sudo apt-get install libgl1-mesa-dev libxcb1-dev libxkbcommon-x11-dev libx11-xcb-dev libxcb-cursor0 libzstd-dev -y; | |
| sudo apt-get install linux-headers-generic -y; | |
| sudo apt-get install appstream -y; | |
| # Install Qt | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: ${{ env.QT_VERSION }} | |
| # Setup env | |
| - name: Setup env | |
| run: | | |
| echo "CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)" >> $GITHUB_ENV | |
| qmake --version | |
| cmake --version | |
| ninja --version | |
| # Build library | |
| - name: Build library | |
| run: | | |
| cd minivideo/ | |
| cmake -B build/ -G Ninja -DCMAKE_BUILD_TYPE=Release -DMINIVIDEO_BUILD_SHARED:BOOL=ON -DMINIVIDEO_BUILD_STATIC:BOOL=OFF -DCMAKE_INSTALL_PREFIX=bin/ | |
| cmake --build build/ --config Release | |
| cmake --install build/ | |
| # Build application | |
| - name: Build application | |
| run: | | |
| cd mini_analyser/ | |
| cmake -B build/ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DMiniVideo_ROOT=../minivideo/bin/ | |
| cmake --build build/ --config Release | |
| DESTDIR=bin/ cmake --install build/ | |
| # Package application | |
| - name: Package application | |
| run: | | |
| cd mini_analyser/ | |
| wget -c -nv "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" | |
| wget -c -nv "https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage" | |
| wget -c -nv "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" | |
| chmod a+x linuxdeploy-x86_64.AppImage | |
| chmod a+x linuxdeploy-plugin-appimage-x86_64.AppImage | |
| chmod a+x linuxdeploy-plugin-qt-x86_64.AppImage | |
| export EXTRA_QT_PLUGINS="svg" | |
| ./linuxdeploy-x86_64.AppImage --appdir bin/ --plugin qt --output appimage | |
| mv ${{ env.APP_NAME }}-x86_64.AppImage ../${{ env.APP_NAME }}-${{ env.APP_VERSION }}-linux64.AppImage | |
| # Upload application | |
| - name: Upload application | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-linux64.AppImage | |
| path: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-linux64.AppImage | |
| archive: false | |
| ## macOS build ############################################################### | |
| build-mac: | |
| name: "macOS CI build" | |
| runs-on: macos-15 | |
| steps: | |
| # Checkout the repository (and submodules) | |
| - name: Checkout repository (and submodules) | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| # Install dependencies | |
| #- name: Install dependencies | |
| # run: | | |
| # brew install qt6 | |
| # Install Qt | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: ${{ env.QT_VERSION }} | |
| # Setup env | |
| - name: Setup env | |
| run: | | |
| echo "CMAKE_BUILD_PARALLEL_LEVEL=`sysctl -n hw.logicalcpu`" >> $GITHUB_ENV | |
| qmake --version | |
| cmake --version | |
| ninja --version | |
| # Build library | |
| - name: Build library | |
| run: | | |
| cd minivideo/ | |
| cmake -B build/ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DMINIVIDEO_BUILD_SHARED:BOOL=ON -DMINIVIDEO_BUILD_STATIC:BOOL=OFF -DCMAKE_INSTALL_PREFIX=bin/ | |
| cmake --build build/ --config Release | |
| cmake --install build/ | |
| # Build application | |
| - name: Build application | |
| run: | | |
| cd mini_analyser/ | |
| cmake -B build/ -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_INSTALL_PREFIX=bin/ -DMiniVideo_ROOT=../minivideo/bin/ | |
| cmake --build build/ --config Release | |
| cmake --install build/ | |
| # Package application | |
| - name: Package application | |
| run: | | |
| cd mini_analyser/ | |
| zip -r -X ../${{ env.APP_NAME}}-${{ env.APP_VERSION }}-macOS.zip bin/${{ env.APP_NAME }}.app | |
| # Upload application | |
| - name: Upload application | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-macOS.zip | |
| path: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-macOS.zip | |
| archive: false | |
| ## Windows build ############################################################# | |
| build-windows: | |
| name: "Windows CI build" | |
| runs-on: windows-2022 | |
| steps: | |
| # Checkout the repository (and submodules) | |
| - name: Checkout repository (and submodules) | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| # Configure MSVC | |
| - name: Configure MSVC | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| with: | |
| arch: x64 | |
| # Install Qt | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: ${{ env.QT_VERSION }} | |
| arch: 'win64_msvc2022_64' | |
| # Install NSIS (already installed in 'windows-2022') | |
| #- name: Install NSIS | |
| # run: | | |
| # Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') | |
| # scoop bucket add extras | |
| # scoop install nsis | |
| # Setup env | |
| - name: Setup env | |
| run: | | |
| qmake --version | |
| cmake --version | |
| # Build library | |
| - name: Build library | |
| run: | | |
| cd minivideo/ | |
| cmake -B build/ -DCMAKE_BUILD_TYPE=Release -DMINIVIDEO_BUILD_SHARED:BOOL=ON -DMINIVIDEO_BUILD_STATIC:BOOL=OFF -DCMAKE_INSTALL_PREFIX=bin/ | |
| cmake --build build/ --config Release | |
| cmake --install build/ | |
| # Build application | |
| - name: Build application | |
| run: | | |
| cd mini_analyser/ | |
| cmake -B build/ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=bin/ -DMiniVideo_ROOT=../minivideo/bin/ | |
| cmake --build build/ --config Release | |
| cmake --install build/ | |
| # Package application | |
| - name: Package application | |
| run: | | |
| cp minivideo/build/minivideo.lib mini_analyser/bin/minivideo.lib | |
| cp minivideo/build/minivideo.dll mini_analyser/bin/minivideo.dll | |
| windeployqt mini_analyser/bin/ | |
| mv mini_analyser/bin mini_analyser/${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64 | |
| 7z a ../${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64.zip ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64 | |
| # Upload application | |
| - name: Upload application | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64.zip | |
| path: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}-win64.zip | |
| archive: false |