Skip to content

Commit ea51cd1

Browse files
authored
Switch to QtIFW 3.2 for Linux (#1874)
* Swith QtIFW to 3.2 for Linux and make common scripts for multiple platforms * Run tests on the installer even if the previous ones fall * Add output param for Windows build
1 parent 82f103e commit ea51cd1

17 files changed

+251
-240
lines changed

.github/workflows/common_build.yml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,14 +171,6 @@ jobs:
171171
os: ubuntu-latest
172172
artifact_name: linux-installer
173173

174-
install-ubuntu-installer-1-concurrency:
175-
needs: [build-rockylinux-installer]
176-
uses: ./.github/workflows/installer.yml
177-
with:
178-
os: ubuntu-latest
179-
artifact_name: linux-installer
180-
concurrency: 1
181-
182174
install-rockylinux-installer:
183175
needs: [build-rockylinux-installer]
184176
uses: ./.github/workflows/installer.yml

.github/workflows/installer.yml

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ on:
1313
artifact_name:
1414
required: true
1515
type: string
16-
concurrency:
17-
required: false
18-
type: number
19-
default: 0
2016
shell:
2117
required: false
2218
type: string
@@ -82,9 +78,7 @@ jobs:
8278
export UNINSTALL_SCRIPT_PATH=$GITHUB_WORKSPACE/trik_studio_uninstallscript.qs
8379
export INSTALLER_EXT_NAME=$(ls -1d *-installer-* | head -n 1)
8480
export INSTALLER_NAME="${INSTALLER_EXT_NAME%.*}"
85-
buildScripts/github/install_installer_${{ runner.os }}.sh
86-
env:
87-
CONCURRENCY: ${{ inputs.concurrency }}
81+
buildScripts/github/install_installer.sh
8882
8983
- name: Push zip archive to dl
9084
if: ${{ inputs.deploy_archive && github.event_name != 'pull_request' && github.repository_owner == 'trikset' && startsWith(inputs.os, 'windows') }}
@@ -101,9 +95,7 @@ jobs:
10195
export UNINSTALL_SCRIPT_PATH=$GITHUB_WORKSPACE/trik_studio_uninstallscript.qs
10296
export INSTALLER_EXT_NAME=$(ls -1d *-installer-* | head -n 1)
10397
export INSTALLER_NAME="${INSTALLER_EXT_NAME%.*}"
104-
buildScripts/github/install_installer_${{ runner.os }}.sh
105-
env:
106-
CONCURRENCY: ${{ inputs.concurrency }}
98+
buildScripts/github/install_installer.sh
10799
108100
- name: Downloads minimal tests for Diagram mode
109101
run: |
@@ -113,9 +105,6 @@ jobs:
113105
- name: Prepare environment variable
114106
run: |
115107
echo "QT_QPA_PLATFORM=offscreen" >> $GITHUB_ENV
116-
echo "QT_DEBUG_PLUGINS=1" >> $GITHUB_ENV
117-
TWOD_EXEC_NAME=$(ls -1d "$BIN_DIR"/2D-model* | head -n 1) && echo "TWOD_EXEC_NAME=$TWOD_EXEC_NAME" >> $GITHUB_ENV
118-
PATCHER_NAME=$(ls -1d "$BIN_DIR"/patcher* | head -n 1) && echo "PATCHER_NAME=$PATCHER_NAME" >> $GITHUB_ENV
119108
if [[ "$RUNNER_OS" != "Windows" ]]; then
120109
TRIK_PYTHONPATH_BUNDLE_DIR="$LIB_DIR"/python-runtime
121110
TRIK_PYTHONPATH=.:"${TRIK_PYTHONPATH_BUNDLE_DIR}/base_library.zip:${TRIK_PYTHONPATH_BUNDLE_DIR}/lib-dynload:${TRIK_PYTHONPATH_BUNDLE_DIR}"

.github/workflows/setup_environment.yml

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ on:
2727
trik_qt_version:
2828
required: false
2929
type: string
30-
default: '5.12'
30+
default: '5.15'
3131
trik_python3_version_minor:
3232
required: false
3333
type: string
@@ -98,24 +98,16 @@ jobs:
9898
fetch-depth: 0
9999

100100
- name: Set up environment
101-
run: buildScripts/github/install_${{ runner.os }}.sh
101+
run: buildScripts/github/install.sh
102102
env:
103103
TRIK_QT_VERSION: ${{ inputs.trik_qt_version }}
104104
TRIK_PYTHON3_VERSION_MINOR: ${{ inputs.trik_python3_version_minor }}
105105
QTIFW_VERSION: ${{ inputs.qtifw_version }}
106106
XCODE_VERSION: ${{ inputs.xcode_version }}
107107
BUILD_INSTALLER: ${{ inputs.build_installer }}
108108
GCC_VERSION: ${{ inputs.gcc_version }}
109-
if: ${{ inputs.build && !inputs.linux_installer_environment }}
110-
111-
- name: Set up installer environment
112-
run: buildScripts/github/install_installer_environment.sh
113-
env:
114-
TRIK_QT_VERSION: ${{ inputs.trik_qt_version }}
115-
TRIK_PYTHON3_VERSION_MINOR: ${{ inputs.trik_python3_version_minor }}
116-
GCC_VERSION: ${{ inputs.gcc_version }}
117-
BUILD_INSTALLER: ${{ inputs.build_installer }}
118-
if: ${{ inputs.linux_installer_environment }}
109+
INSTALL_INSTALLER_ENVIRONMENT: ${{ inputs.linux_installer_environment }}
110+
if: ${{ inputs.build }}
119111

120112
- name: Lint
121113
run: |
@@ -155,7 +147,7 @@ jobs:
155147
if: ${{ inputs.build }}
156148

157149
- name: Run tests
158-
run: ${{ inputs.executor }} buildScripts/github/run_tests.sh && ${{ inputs.executor }} buildScripts/github/test.sh
150+
run: ${{ inputs.executor }} buildScripts/github/run_tests.sh
159151
env:
160152
TRIK_PYTHON3_VERSION_MINOR: ${{ inputs.trik_python3_version_minor }}
161153
TESTS: ${{ inputs.tests }}

.github/workflows/windows_build_with_installer.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ jobs:
5454
run:
5555
shell: msys2 {0}
5656

57+
outputs:
58+
set-artifact: ${{ steps.set-artifact.outputs.set-artifact }}
59+
5760
steps:
5861

5962
- name: Setup msys2
@@ -192,6 +195,10 @@ jobs:
192195
installer/trik-studio*installer*.exe
193196
installer/trik_studio*.qs
194197
installer/reinstall*
198+
199+
- name: Set a flag when uploading an artifact
200+
id: set-artifact
201+
run: echo "set-artifact=true" >> "$GITHUB_OUTPUT"
195202

196203
- name: Check errors
197204
if: ${{ steps.tests.outcome == 'failure' }}
@@ -231,6 +238,7 @@ jobs:
231238
232239
install-windows-installer:
233240
needs: [build]
241+
if: ${{ always() && needs.build.outputs.set-artifact == 'true' }}
234242
uses: ./.github/workflows/installer.yml
235243
with:
236244
os: windows-latest

buildScripts/github/build_installer.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ case $RUNNER_OS in
1010
TSNAME="trik-studio-installer-mac-$BRANCH_NAME.dmg"
1111
;;
1212
Linux)
13-
QTIFWBIN=$(find "$HOME"/Qt/Tools -name "bin" | head -n 1)
13+
QTIFWBIN="${QTIFWBIN:-$(find "$HOME"/Qt/Tools -name "bin" | head -n 1)}"
1414
TSNAME="trik-studio-installer-linux-$BRANCH_NAME.run"
1515
;;
1616
*) exit 1 ;;

buildScripts/github/install.sh

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#!/bin/bash
2+
set -euxo pipefail
3+
TRIK_PYTHON=python3.${TRIK_PYTHON3_VERSION_MINOR}
4+
5+
install_qt(){
6+
# Usage: install_qt <os> <platform-type> <qt-version> <path-to-install-qt> <modules> <archives>
7+
# TODO: add <addittional-options>
8+
"$TRIK_PYTHON" -m venv venv
9+
. ./venv/bin/activate
10+
"$TRIK_PYTHON" -m pip install -U pip
11+
"$TRIK_PYTHON" -m pip install aqtinstall
12+
if [ -z "${6+x}" ]; then
13+
"$TRIK_PYTHON" -m aqt install-qt "$1" "$2" "$3" -O "$4" -m "${modules[@]}"
14+
else
15+
"$TRIK_PYTHON" -m aqt install-qt "$1" "$2" "$3" -O "$4" -m "${modules[@]}" --archives "${archives[@]}"
16+
fi
17+
if [ "$BUILD_INSTALLER" = "true" ]; then
18+
[ -d $HOME/qtifw ] || env TRIK_QTIFW_INSTALL_DIR="$HOME/qtifw" "$(dirname $(realpath ${BASH_SOURCE[0]}))"/install_qtifw.sh
19+
fi
20+
deactivate
21+
}
22+
23+
case "$(uname)" in
24+
Darwin)
25+
export HOMEBREW_NO_INSTALL_CLEANUP=1
26+
export HOMEBREW_NO_AUTO_UPDATE=1
27+
brew tap "hudochenkov/sshpass"
28+
TRIK_BREW_PACKAGES="ccache coreutils libusb pkg-config gnu-sed sshpass p7zip python@3.${TRIK_PYTHON3_VERSION_MINOR}"
29+
for pkg in $TRIK_BREW_PACKAGES ; do
30+
p="${pkg##*/}"
31+
p="${p%.*}"
32+
brew install --quiet "$pkg" || brew upgrade "$pkg" || brew link --force "$pkg" || echo "Failed to install/upgrade $pkg"
33+
done
34+
modules=("qtscript")
35+
install_qt mac desktop "${TRIK_QT_VERSION}" "$HOME/Qt" $modules
36+
sudo xcode-select -s /Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer
37+
xcodebuild -showsdks
38+
xcrun -sdk macosx --show-sdk-path
39+
;;
40+
Linux)
41+
ID=$(grep '^ID=' /etc/os-release | cut -d'=' -f2)
42+
43+
if [ "$ID" = "altlinux" ]; then
44+
sudo apt-get update && sudo apt-get install -y gcc-c++ curl xz p7zip-standalone rsync libusb-devel \
45+
libudev-devel libGL-devel libGLX-mesa python3-dev zlib-devel make ccache python3-module-pip time \
46+
qt5-multimedia-devel qt5-svg-devel qt5-script-devel qt5-tools qt5-serialport-devel
47+
elif [ "$ID" = "ubuntu" ]; then
48+
sudo apt-get update && sudo apt-get install -y --no-install-recommends ccache curl libusb-1.0-0-dev \
49+
make qtscript5-dev qttools5-dev-tools qtmultimedia5-dev libqt5serialport5-dev libqt5svg5-dev \
50+
libudev-dev "$TRIK_PYTHON"-dev qtbase5-private-dev qtwayland5
51+
elif [[ "$ID" = "rocky" || "$ID" = '"rocky"' ]]; then
52+
GCC_VERSION=${GCC_VERSION:-13}
53+
sudo yum update -y && sudo yum install -y --setopt=install_weak_deps=False epel-release
54+
sudo yum install --allowerasing -y --setopt=install_weak_deps=False sudo which libusbx-devel curl \
55+
wget make gcc-toolset-"$GCC_VERSION"-{gcc-c++,libasan-devel,libubsan-devel,gdb} git-core ccache \
56+
zlib-devel rsync "$TRIK_PYTHON"-{devel,pip,urllib3} mesa-libGL-devel systemd-devel fontconfig p7zip xz time findutils
57+
58+
#no desire to enumerate all required libraries for QtIFw
59+
# pulseaudio-libs-glib2 to run TS and 2D-model even with `minimal` platform
60+
sudo yum install -y --setopt=install_weak_deps=False pulseaudio-libs-glib2 libxkbcommon-x11 qt5-qtbase-gui libwayland-{server,client,cursor}
61+
62+
echo $INSTALL_INSTALLER_ENVIRONMENT
63+
if [ "$INSTALL_INSTALLER_ENVIRONMENT" != "true" ]; then
64+
sudo yum install -y --setopt=install_weak_deps=False qt5-qtscript-devel qt5-qttools-devel qt5-qtmultimedia-devel qt5-qtserialport-devel \
65+
qt5-qtsvg-devel qt5-qtbase-devel qt5-qtbase-private-devel qt5-qtwayland
66+
else
67+
sudo yum install -y --setopt=install_weak_deps=False libX11-xcb libXext libxkbcommon-x11 fontconfig freetype libXrender
68+
#libQt5WaylandCompositor.so.5.15: libQt5Quick.so.5 libQt5Qml.so.5 libQt5QmlModels.so.5
69+
modules=("qtscript" "qtwaylandcompositor")
70+
archives=("qtbase" "qtmultimedia" "qtsvg" "qtscript" "qttools" "qtserialport" "qtimageformats" "icu" "qtwayland" "qtdeclarative")
71+
install_qt linux desktop "$TRIK_QT_VERSION" "$HOME/Qt" $modules $archives
72+
QT_ROOT_DIR=$(ls -1d "$HOME"/Qt/$TRIK_QT_VERSION*/gcc_64 | head -n 1)
73+
echo "$QT_ROOT_DIR/bin" >> $GITHUB_PATH
74+
fi
75+
echo "source scl_source enable gcc-toolset-$GCC_VERSION" >> ~/.bash_profile
76+
fi
77+
;;
78+
*) exit 1 ;;
79+
esac

buildScripts/github/install_Linux.sh

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#!/bin/bash
2+
set -eux
3+
4+
prepare_environment(){
5+
case "$(uname)" in
6+
Linux)
7+
ID=$(grep '^ID=' /etc/os-release | cut -d'=' -f2)
8+
if [ "$ID" = "altlinux" ]; then
9+
sudo apt-get update && sudo apt-get install -y fontconfig libdbus libX11 libXrender libXext libxkbcommon-x11
10+
elif [ "$ID" = "ubuntu" ]; then
11+
sudo apt-get update && sudo apt-get install -y --no-install-recommends fontconfig libdbus-1-3 libx11-xcb1 libxkbcommon-x11-0
12+
elif [ "$ID" = "arch" ]; then
13+
sudo pacman -Sy && sudo pacman -S fontconfig libx11 libxrender libxext libxkbcommon-x11 --noconfirm
14+
elif [[ "$ID" = "rocky" || "$ID" = '"rocky"' ]]; then
15+
sudo yum install -y --setopt=install_weak_deps=False libX11-xcb libXext libxkbcommon-x11 fontconfig freetype libXrender
16+
fi
17+
return 0 ;;
18+
Darwin) return 0 ;;
19+
MINGW64*) return 0 ;;
20+
*) exit 1 ;;
21+
esac
22+
}
23+
24+
install_installer(){
25+
case "$(uname)" in
26+
Darwin)
27+
sudo hdiutil attach "$INSTALLER_EXT_NAME"
28+
sudo cp -rf "/Volumes/$INSTALLER_NAME/$INSTALLER_NAME.app" $GITHUB_WORKSPACE
29+
sudo hdiutil detach /Volumes/"$INSTALLER_NAME"
30+
./"$INSTALLER_NAME".app/Contents/MacOS/$INSTALLER_NAME --verbose --script trik_studio_installscript.qs
31+
sudo rm -rf "$INSTALLER_NAME".app
32+
return 0 ;;
33+
Linux)
34+
INSTALLER_NAME="$INSTALLER_NAME.run"
35+
chmod +x "$INSTALLER_NAME"
36+
./"$INSTALLER_NAME" --verbose --script trik_studio_installscript.qs --platform minimal
37+
return 0 ;;
38+
MINGW64*)
39+
./"$INSTALLER_NAME" --verbose --script trik_studio_installscript.qs
40+
return 0 ;;
41+
*) exit 1 ;;
42+
esac
43+
}
44+
45+
prepare_environment_variable_and_check_tools(){
46+
EXT=""
47+
case "$(uname)" in
48+
Darwin)
49+
PREFIX="/Applications"
50+
LIB_DIR="$PREFIX/TRIKStudio/TRIK Studio.app/Contents/Lib"
51+
export DYLD_LIBRARY_PATH="$LIB_DIR"
52+
;;
53+
Linux)
54+
ID=$(grep '^ID=' /etc/os-release | cut -d'=' -f2)
55+
if [[ $ID = ubuntu ]]; then PREFIX="$HOME"; else PREFIX="/opt"; fi
56+
LIB_DIR="$PREFIX/TRIKStudio/lib"
57+
export LD_LIBRARY_PATH="$LIB_DIR"
58+
export QT_QPA_PLATFORM=minimal
59+
;;
60+
MINGW64*)
61+
PREFIX="/C"
62+
LIB_DIR="$PREFIX/TRIKStudio"
63+
export LD_LIBRARY_PATH="LIB_DIR"
64+
EXT=".exe"
65+
;;
66+
*) exit 1 ;;
67+
esac
68+
69+
APP_DIR="$PREFIX/TRIKStudio"
70+
71+
TWOD_EXEC_NAME=$(find "$APP_DIR" -name "2D-model$EXT" -print -quit)
72+
PATCHER_NAME=$(find "$APP_DIR" -name "patcher$EXT" -print -quit)
73+
TRIK_STUDIO_NAME=$(find "$APP_DIR" -name "trik-studio$EXT" -print -quit)
74+
MAINTENANCE=$(find "$APP_DIR" -name "maintenance$EXT" -print -quit)
75+
76+
"$TWOD_EXEC_NAME" --version
77+
"$PATCHER_NAME" --version
78+
"$TRIK_STUDIO_NAME" --version
79+
"$MAINTENANCE" --version
80+
81+
echo "TWOD_EXEC_NAME=$TWOD_EXEC_NAME" >> $GITHUB_ENV
82+
echo "PATCHER_NAME=$PATCHER_NAME" >> $GITHUB_ENV
83+
echo "LIB_DIR=$LIB_DIR" >> $GITHUB_ENV
84+
echo "APP_DIR=$APP_DIR" >> $GITHUB_ENV
85+
}
86+
87+
dll_search(){
88+
cd "$LIB_DIR"
89+
case "$(uname)" in
90+
Darwin)
91+
ls -- *.dylib | xargs otool -L | grep "not found" || exit 0
92+
;;
93+
Linux)
94+
# Find dependencies that have not been packaged, but are still in the system
95+
ls -- *.so* | xargs ldd | grep -Ev "not found$" | grep so | sed -e '/^[^\t]/ d' | sed -e 's/\t//' \
96+
| sed -e 's/.*=..//' | sed -e 's/ (0.*)//' | grep -Ev "lib(c|dl|m|pthread|rt)\.so.*" \
97+
| grep -Ev "$LD_LIBRARY_PATH" | grep -Ev "ld|linux-vdso"
98+
ls -- *.so* | xargs ldd | grep "not found" || exit 0
99+
;;
100+
MINGW64*)
101+
# Find dependencies that have not been packaged, but are still in the system
102+
ls -- *.dll* | xargs ldd | grep -Ev "not found$" | grep dll | sed -e '/^[^\t]/ d' | sed -e 's/\t//' \
103+
| sed -e 's/.*=..//' | sed -e 's/ (0.*)//' | grep -Ev "lib(System|SYSTEM)32.*dll" \
104+
| grep -Ev "$LD_LIBRARY_PATH"
105+
106+
ls -- *.dll* | xargs ldd | grep "not found" || exit 0
107+
;;
108+
*) exit 1 ;;
109+
esac
110+
exit 1
111+
}
112+
113+
prepare_environment
114+
install_installer
115+
prepare_environment_variable_and_check_tools
116+
dll_search

0 commit comments

Comments
 (0)