#-------------------------------------------------------------------------------- # Workflow configuration #-------------------------------------------------------------------------------- name: Deploy on: push: # Run on push paths-ignore: # File patterns to ignore - '**.md' # Ignore changes to *.md files pull_request: # Run on pull-request paths-ignore: # File-patterns to ignore - '**.md' # Ignore changes to *.md files #-------------------------------------------------------------------------------- # Define application name & version #-------------------------------------------------------------------------------- env: VERSION: "1.1.2" EXECUTABLE: "SerialStudio" APPLICATION: "Serial Studio" UNIXNAME: "serial-studio" QMAKE_PROJECT: "Serial-Studio.pro" QML_DIR_NIX: "assets/qml" QML_DIR_WIN: "assets\\qml" PUBLISHER: "Alex Spataru" REPO_DIR: "/home/runner/work/Serial-Studio/Serial-Studio" QT_VERSION: 6.2.0 #-------------------------------------------------------------------------------- # Workflow jobs (GNU/Linux, macOS & Windows) #-------------------------------------------------------------------------------- jobs: build-linux: runs-on: ubuntu-20.04 name: '🐧 Ubuntu 20.04' steps: - name: '🧰 Checkout' uses: actions/checkout@v2 with: submodules: recursive - name: '⚙️ Cache Qt' id: cache-qt uses: actions/cache@v1 with: path: ../Qt key: ${{runner.os}}-qtcachedir-${{env.QT_VERSION}} - name: '⚙️ Install Qt' uses: jurplel/install-qt-action@v2 with: version: ${{env.QT_VERSION}} modules: qtserialport qt5compat aqtversion: '==2.0.0' cached: ${{steps.cache-qt.outputs.cache-hit}} # Install additional dependencies, stolen from: # https://github.com/mapeditor/tiled/blob/master/.github/workflows/packages.yml - name: '⚙️ Install dependencies' run: | sudo apt-get update sudo apt-get install libgl1-mesa-dev libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libzstd-dev - name: '🚧 Compile application' run: | qmake6 ${{env.QMAKE_PROJECT}} CONFIG+=release PREFIX=/usr make -j8 - name: '⚙️ Install linuxdeploy' run: | wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage chmod +x linuxdeploy-x86_64.AppImage chmod +x linuxdeploy-plugin-qt-x86_64.AppImage - name: '📦 Create AppImage' run: | export QML_SOURCES_PATHS="${{env.QML_DIR_NIX}}" export PATH=/home/runner/work/Serial-Studio/Qt/6.2.0/gcc_64/libexec:$PATH ./linuxdeploy-x86_64.AppImage --appdir AppDir -e ${{env.UNIXNAME}} -i deploy/linux/${{env.UNIXNAME}}.png -d deploy/linux/${{env.UNIXNAME}}.desktop --plugin qt --output appimage rm linuxdeploy-x86_64.AppImage rm linuxdeploy-plugin-qt-x86_64.AppImage mv *.AppImage ${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.AppImage - name: '📤 Upload artifact: AppImage' uses: actions/upload-artifact@v2 with: name: ${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.AppImage path: ${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.AppImage # macOS build build-mac: runs-on: macos-latest name: '🍎 macOS' steps: - name: '🧰 Checkout' uses: actions/checkout@v2 with: submodules: recursive - name: '⚙️ Cache Qt' id: cache-qt uses: actions/cache@v1 with: path: ../Qt key: ${{runner.os}}-qtcachedir-${{env.QT_VERSION}} - name: '⚙️ Install Qt' uses: jurplel/install-qt-action@v2 with: version: ${{env.QT_VERSION}} modules: qtserialport qt5compat aqtversion: '==2.0.0' cached: ${{steps.cache-qt.outputs.cache-hit}} - name: '🚧 Compile application' run: | qmake6 ${{env.QMAKE_PROJECT}} CONFIG+=release make -j8 - name: '📦 Package application (macdeployqt and zipfile)' run: | macdeployqt ${{env.EXECUTABLE}}.app -qmldir="${{env.QML_DIR_NIX}}" mv "${{env.EXECUTABLE}}.app" "${{env.APPLICATION}}.app" # ZIP application "%AppName%-%Version%-macOS.zip" # We use ditto instead of zip to use the same commands as Finder ditto -c -k --sequesterRsrc --keepParent "${{env.APPLICATION}}.app" ${{env.EXECUTABLE}}-${{env.VERSION}}-macOS.zip - name: '📤 Upload artifact: ZIP' uses: actions/upload-artifact@v2 with: name: ${{env.EXECUTABLE}}-${{env.VERSION}}-macOS.zip path: ${{env.EXECUTABLE}}-${{env.VERSION}}-macOS.zip # Windows build build-windows: runs-on: windows-latest name: '🧊 Windows' steps: - name: '🧰 Checkout' uses: actions/checkout@v2 with: submodules: recursive - name: '⚙️ Configure MSVC' uses: ilammy/msvc-dev-cmd@v1 with: arch: x64 spectre: true - name: '⚙️ Cache Qt' id: cache-qt uses: actions/cache@v1 with: path: ../Qt key: ${{runner.os}}-qtcachedir-${{env.QT_VERSION}} - name: '⚙️ Install Qt' uses: jurplel/install-qt-action@v2 with: version: ${{env.QT_VERSION}} modules: qtserialport qt5compat aqtversion: '==2.0.0' cached: ${{steps.cache-qt.outputs.cache-hit}} - name: '⚙️ Install NSIS' run: | Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh') scoop bucket add extras scoop install nsis - name: '🚧 Compile application' run: | qmake6 ${{env.QMAKE_PROJECT}} CONFIG+=release nmake # Copy Qt DLLs, compiler runtime & application icon - name: '📦 Package application (windeployqt)' run: | mkdir bin move release/${{env.EXECUTABLE}}.exe bin windeployqt bin/${{env.EXECUTABLE}}.exe -qmldir="${{env.QML_DIR_WIN}}" --compiler-runtime mkdir "${{env.APPLICATION}}" move bin "${{env.APPLICATION}}" xcopy deploy\windows\resources\icon.ico "${{env.APPLICATION}}" xcopy deploy\windows\openssl\*.dll "${{env.APPLICATION}}\bin" - name: '📦 Make NSIS installer' run: | move "${{env.APPLICATION}}" deploy\windows\nsis\ cd deploy\windows\nsis makensis /X"SetCompressor /FINAL lzma" setup.nsi ren *.exe ${{env.EXECUTABLE}}-${{env.VERSION}}-Windows.exe - name: '📤 Upload artifact: NSIS installer' uses: actions/upload-artifact@v2 with: name: ${{env.EXECUTABLE}}-${{env.VERSION}}-Windows.exe path: deploy/windows/nsis/${{env.EXECUTABLE}}-${{env.VERSION}}-Windows.exe # Windows MSYS2 build msys2-makepkg: if: ${{false}} runs-on: windows-latest strategy: fail-fast: false matrix: include: - { icon: '🟪', msystem: MINGW64, arch: x86_64 } - { icon: '🟦', msystem: MINGW32, arch: i686 } name: ${{ matrix.icon }} ${{ matrix.msystem }} | ${{ matrix.arch }} | makepkg defaults: run: shell: msys2 {0} steps: - run: git config --global core.autocrlf input shell: bash - name: '🧰 Checkout' uses: actions/checkout@v2 with: fetch-depth: 0 submodules: recursive - name: '${{ matrix.icon }} Setup MSYS2' uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.msystem }} update: true install: > base-devel mingw-w64-${{ matrix.arch }}-toolchain - name: '🚧 Build' run: | cd msys2 tries=0 # Try building three times due to the arbitrary 'Bad address' error while [ $tries -lt 3 ]; do makepkg-mingw --noconfirm --noprogressbar -sCLf && break || tries=$((tries+1)) done env: MINGW_INSTALLS: ${{ matrix.msystem }} - name: '📤 Upload artifact: MSYS2 ${{ matrix.arch }} package' uses: actions/upload-artifact@v2 with: name: msys2-pkgs path: msys2/*.zst # Test Windows MSYS2 packages msys2-test: if: ${{false}} needs: msys2-makepkg runs-on: windows-latest strategy: fail-fast: false matrix: include: - { icon: '🟪', msystem: MINGW64, arch: x86_64 } - { icon: '🟦', msystem: MINGW32, arch: i686 } name: ${{ matrix.icon }} ${{ matrix.msystem }} | ${{ matrix.arch }} | Test defaults: run: shell: msys2 {0} steps: - name: '${{ matrix.icon }} Setup MSYS2' uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.msystem }} update: true install: > tree tar zstd - name: '📥 Download artifacts: MSYS2 packages' uses: actions/download-artifact@v2 with: name: msys2-pkgs - name: 'Install MSYS2 package' run: | pacman -U --noconfirm --noprogressbar *${{ matrix.arch }}*.zst - name: 'List contents of package' run: | mkdir tmp cd tmp /usr/bin/tar xf ../*${{ matrix.arch }}*.zst tree ${{ matrix.msystem }} # Upload continuous build upload: name: '🗂 Create release and upload artifacts' needs: - build-linux - build-mac - build-windows runs-on: ubuntu-latest steps: - name: '📥 Download artifacts' uses: actions/download-artifact@v2 - name: '🗂 Inspect directory after downloading artifacts' run: ls -alFR - name: '🚀 Create release and upload artifacts' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | wget -q https://github.com/TheAssassin/pyuploadtool/releases/download/continuous/pyuploadtool-x86_64.AppImage chmod +x pyuploadtool-x86_64.AppImage ./pyuploadtool-x86_64.AppImage **/${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.AppImage ./pyuploadtool-x86_64.AppImage **/${{env.EXECUTABLE}}-${{env.VERSION}}-macOS.zip ./pyuploadtool-x86_64.AppImage **/${{env.EXECUTABLE}}-${{env.VERSION}}-Windows.exe