#-------------------------------------------------------------------------------- # 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.0.0" EXECUTABLE: "RFID-TaskFlow" APPLICATION: "RFID TaskFlow" UNIXNAME: "rfid-taskflow" QMAKE_PROJECT: "RFID-TaskFlow.pro" QML_DIR_NIX: "qml" QML_DIR_WIN: "qml" PUBLISHER: "Matusica S.A. de C.V." QT_VERSION: 6.4.1 QT_MODULES: qtserialport qtconnectivity qtmultimedia QMAKE: qmake6 CORES: 12 #-------------------------------------------------------------------------------- # 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 - name: '⚙️ Cache Qt' id: cache-qt uses: actions/cache@v1 with: path: ../Qt key: ${{runner.os}}-qt${{env.QT_VERSION}} - name: '⚙️ Install Qt' uses: jurplel/install-qt-action@v2 with: version: ${{env.QT_VERSION}} modules: ${{env.QT_MODULES}} 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 libssl-dev libusb-dev sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio - name: '🚧 Compile application' run: | ${{env.QMAKE}} ${{env.QMAKE_PROJECT}} CONFIG+=release PREFIX=/usr make -j${{env.CORES}} - 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 QMAKE=/home/runner/work/${{env.EXECUTABLE}}/Qt/${{env.QT_VERSION}}/gcc_64/bin/qmake6 export PATH=/home/runner/work/${{env.EXECUTABLE}}/Qt/${{env.QT_VERSION}}/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 - name: '⚙️ Cache Qt' id: cache-qt uses: actions/cache@v1 with: path: ../Qt key: ${{runner.os}}-qt${{env.QT_VERSION}} - name: '⚙️ Install Qt' uses: jurplel/install-qt-action@v2 with: version: ${{env.QT_VERSION}} modules: ${{env.QT_MODULES}} aqtversion: '==2.0.0' cached: ${{steps.cache-qt.outputs.cache-hit}} - name: '🚧 Compile application' run: | ${{env.QMAKE}} ${{env.QMAKE_PROJECT}} CONFIG+=release PREFIX=/usr make -j${{env.CORES}} - 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 - 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}}-qt${{env.QT_VERSION}} - name: '⚙️ Install Qt' uses: jurplel/install-qt-action@v2 with: version: ${{env.QT_VERSION}} modules: ${{env.QT_MODULES}} aqtversion: '==2.0.0' cached: ${{steps.cache-qt.outputs.cache-hit}} - name: '🚧 Compile application' run: | ${{env.QMAKE}} ${{env.QMAKE_PROJECT}} CONFIG+=release nmake - 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" move "${{env.APPLICATION}}" deploy\windows\nsis\ - name: '📦 Portable application' run: | mkdir "${{env.EXECUTABLE}}-${{env.VERSION}}-Windows" xcopy "deploy\windows\nsis\${{env.APPLICATION}}\icon.ico" "${{env.EXECUTABLE}}-${{env.VERSION}}-Windows" xcopy "deploy\windows\nsis\${{env.APPLICATION}}\bin" "${{env.EXECUTABLE}}-${{env.VERSION}}-Windows" /E Compress-Archive -Path "${{env.EXECUTABLE}}-${{env.VERSION}}-Windows" -DestinationPath "${{env.EXECUTABLE}}-${{env.VERSION}}-Windows.zip" - name: '📦 Make NSIS installer' uses: joncloud/makensis-action@v3.6 with: script-file: deploy/windows/nsis/setup.nsi - name: '📦 Check NSIS version & hash' run: | makensis /HDRINFO - name: '📦 Rename installer' run: | dir cd deploy/windows/nsis/ dir 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 - name: '📤 Upload artifact: Portable application' uses: actions/upload-artifact@v2 with: name: ${{env.EXECUTABLE}}-${{env.VERSION}}-Windows.zip path: ${{env.EXECUTABLE}}-${{env.VERSION}}-Windows.zip # Upload continuous build upload: name: '🗂 Create release and upload artifacts' needs: - build-mac - build-windows - build-linux runs-on: ubuntu-20.04 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 ./pyuploadtool-x86_64.AppImage **/${{env.EXECUTABLE}}-${{env.VERSION}}-Windows.zip