Merge pull request #179 from Tetrapod1206/master #365
This file contains 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: 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: "2.0.0" | |
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" | |
QT_VERSION: 6.5.3 | |
QT_MODULES: qtserialport qtconnectivity qt5compat | |
QMAKE: qmake6 | |
CORES: 16 | |
#-------------------------------------------------------------------------------- | |
# Workflow jobs (GNU/Linux, macOS & Windows) | |
#-------------------------------------------------------------------------------- | |
jobs: | |
# | |
# GNU/Linux build | |
# | |
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: ${{env.QT_MODULES}} | |
aqtversion: '==2.0.0' | |
cached: ${{steps.cache-qt.outputs.cache-hit}} | |
- 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 libxcb-image0-dev libxcb-util0-dev libxcb-cursor-dev | |
- 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=${{env.REPO_DIR}}/Qt/${{env.QT_VERSION}}/gcc_64/bin/${{env.QMAKE}} | |
export PATH=${{env.REPO_DIR}}/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-12 | |
name: '🍎 macOS Monterey' | |
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: ${{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" | |
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-2022 | |
name: '🧊 Windows Server 2022' | |
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: ${{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 | |
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}}" | |
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/[email protected] | |
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 | |
# | |
# 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-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 |