2021-10-20 06:19:15 -05:00

326 lines
10 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#--------------------------------------------------------------------------------
# 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
workflow_dispatch:
#--------------------------------------------------------------------------------
# Define application name & version
#--------------------------------------------------------------------------------
env:
VERSION: "1.1.1"
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:
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