2021-10-01 01:26:24 -07:00

307 lines
9.5 KiB
YAML

#--------------------------------------------------------------------------------
# Workflow configuration
#--------------------------------------------------------------------------------
name: Build
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
workflow_dispatch:
#--------------------------------------------------------------------------------
# Define application name & version
#--------------------------------------------------------------------------------
env:
VERSION: "1.0.24"
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"
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: '⚙️ Install CQtDeployer'
run: |
sudo snap install cqtdeployer
- name: '🚧 Compile application'
run: |
qmake6 ${{env.QMAKE_PROJECT}} CONFIG+=release PREFIX=/usr
make -j8
- name: '📦 Create CQtDeployer Installer'
run: |
cqtdeployer -bin ${{env.UNIXNAME}} -icon deploy/linux/${{env.UNIXNAME}}.png -qmlDir "${{env.QML_DIR_NIX}}" qif -qifLogo deploy/linux/${{env.UNIXNAME}}.png -name "${{env.APPLICATION}}" -deployVersion ${{env.VERSION}} -description "Multi-purpose serial data visualization software" -publisher "${{env.PUBLISHER}}"
cqtdeployer -bin ${{env.UNIXNAME}} -icon deploy/linux/${{env.UNIXNAME}}.png -qmlDir "${{env.QML_DIR_NIX}}" deb -name "${{env.UNIXNAME}}" -deployVersion ${{env.VERSION}} -description "Multi-purpose serial data visualization software" -publisher "${{env.PUBLISHER}}"
cd DistributionKit
mv "Installer${{env.APPLICATION}}.run" "../${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.run"
mv "${{env.UNIXNAME}}.deb" "../${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.deb"
- name: '📤 Upload artifact: Installer'
uses: actions/upload-artifact@v2
with:
name: ${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.run
path: ${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.run
- name: '📤 Upload artifact: Debian package'
uses: actions/upload-artifact@v2
with:
name: ${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.deb
path: ${{env.EXECUTABLE}}-${{env.VERSION}}-Linux.deb
# 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:
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 }}