-
Notifications
You must be signed in to change notification settings - Fork 90
280 lines (242 loc) · 11.5 KB
/
build-deb-qt6-amd64.yml
File metadata and controls
280 lines (242 loc) · 11.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
name: Build Debian package (Ubuntu x64, Qt6)
on:
push:
tags:
- "*"
workflow_dispatch:
inputs:
branch:
description: 'Checkout branch'
required: false
default: dev
tag:
description: 'Checkout tag'
required: false
permissions:
contents: write
jobs:
build-omodscan:
name: Build OpenModScan deb package version '${{ github.event.inputs.tag || github.event.inputs.branch || github.ref_name }}' with Qt6
runs-on: ubuntu-latest
container:
image: ubuntu:20.04
env:
QT_VERSION: "6.9.3"
QT_HOST: "linux"
QT_TARGET: "desktop"
QT_ARCH: "linux_gcc_64"
QT_INSTALL_DIR: "/opt/Qt"
QT_QPA_PLATFORM: "xcb"
CMAKE_COMPILER: "gcc_64"
CMAKE_GENERATOR: "Ninja"
BUILD_TYPE: "Release"
DEB_REVISION: "1"
DEB_ARCH: "amd64"
DEB_PACKAGE_NAME: "qt6-omodscan"
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.tag || github.event.inputs.branch || github.ref_name }}
- name: Determine ref_type and ref_name
run: |
if [ "${{ github.ref_type }}" = "tag" ] || [ -n "${{ github.event.inputs.tag }}" ]; then
REF_TYPE="tags"
if [ -n "${{ github.event.inputs.tag }}" ]; then
REF_NAME="${{ github.event.inputs.tag }}"
else
REF_NAME="${{ github.ref_name }}"
fi
else
REF_TYPE="heads"
REF_NAME="${{ github.ref_name }}"
fi
echo "REF_TYPE=$REF_TYPE" >> $GITHUB_ENV
echo "REF_NAME=$REF_NAME" >> $GITHUB_ENV
echo "Ref name is: $REF_NAME"
echo "Ref type is: $REF_TYPE"
- name: Extract version from CMakeLists.txt
id: extract_version
run: |
FULL_VERSION=$(grep -oP 'VERSION\s+\K[0-9]+\.[0-9]+\.[0-9]+' src/CMakeLists.txt)
if [ "${{ env.REF_NAME }}" = "dev" ] || { [ "${{ github.event.inputs.branch }}" = "dev" ] && [ -z "${{ github.event.inputs.tag }}" ]; }; then
MAJOR_MINOR=$(echo "$FULL_VERSION" | cut -d. -f1,2)
APP_VERSION="${MAJOR_MINOR}~dev"
else
APP_VERSION="$FULL_VERSION"
fi
echo "APP_VERSION=$APP_VERSION" >> $GITHUB_ENV
echo "Extracted version: $APP_VERSION"
- name: Install dependencies
run: |
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y \
git build-essential ninja-build cmake patchelf rsync \
dh-make debhelper debhelper-compat lintian fakeroot \
libglu1-mesa libgl1-mesa-dev libxkbcommon0 libxkbcommon-x11-0 \
libxcb1 libxcb-xinerama0 libxcb-cursor0 libxcb-keysyms1 libxcb-xfixes0 \
libxcb-shape0 libxcb-render-util0 libxcb-icccm4 libxcb-image0 \
libfontconfig1 libfreetype6 libx11-6 libxext6 libxrender1 \
zlib1g-dev libpng-dev libjpeg-dev libdbus-1-3 \
libwayland-cursor0 libwayland-egl1-mesa \
libgtk-3-0 libgdk-pixbuf2.0-0 libpangocairo-1.0-0 libpango-1.0-0 libatk1.0-0 libcairo2 libcairo-gobject2 \
libcups2 \
odbcinst libodbc1 \
libpq5 libmysqlclient21
- name: Install Python 3.12 from sources
run: |
apt-get install -y wget libssl-dev \
libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev \
libffi-dev libbz2-dev liblzma-dev libgdbm-dev libnss3-dev \
libncurses-dev libgdbm-compat-dev xz-utils
wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tgz
tar xvf Python-3.12.2.tgz
cd Python-3.12.2
./configure
make -j$(nproc)
make altinstall
- name: Set Python 3.12 as default
run: |
update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 2
update-alternatives --set python3 /usr/local/bin/python3.12
- name: Upgrade pip
run: |
python3 -m ensurepip --upgrade
python3 -m pip install --upgrade pip
- name: Install aqtinstall
run: |
python3 -m pip install aqtinstall
- name: Download Qt
run: |
mkdir -p ${{ env.QT_INSTALL_DIR }}
aqt install-qt \
${{ env.QT_HOST }} \
${{ env.QT_TARGET }} \
${{ env.QT_VERSION }} \
${{ env.QT_ARCH }} \
-m qt5compat qtpdf qtserialport qtserialbus \
-O ${{ env.QT_INSTALL_DIR }}
- name: Add Qt to PATH
run: echo "${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}/bin" >> $GITHUB_PATH
- name: Install cmake 3.26
run: |
apt-get remove -y cmake
wget https://github.com/Kitware/CMake/releases/download/v3.26.5/cmake-3.26.5-linux-x86_64.sh
sh cmake-3.26.5-linux-x86_64.sh --skip-license --prefix=/usr/local
cmake --version
- name: Set BUILD_DIR
run: echo "BUILD_DIR=build-omodscan-Qt_${{ env.QT_VERSION }}_${{ env.CMAKE_COMPILER }}bit-${{ env.BUILD_TYPE }}" >> $GITHUB_ENV
- name: Configure project
run: |
cmake src -B ${{ env.BUILD_DIR }} \
-G "${{ env.CMAKE_GENERATOR }}" \
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
-DCMAKE_PREFIX_PATH=${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}
- name: Build
run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel
- name: Set BUILD_DEB_DIR
run: echo "BUILD_DEB_DIR=build-deb-package-Qt_${{ env.QT_VERSION }}_${{ env.CMAKE_COMPILER }}bit" >> $GITHUB_ENV
- name: Set DEB_SRC_DIR
run: echo "DEB_SRC_DIR=${{ env.BUILD_DEB_DIR }}/${{ env.DEB_PACKAGE_NAME }}-${{ env.APP_VERSION }}-${{ env.DEB_REVISION }}_${{ env.DEB_ARCH }}" >> $GITHUB_ENV
- name: Create DEB build directories
run: |
mkdir -p ${{ env.DEB_SRC_DIR }}/debian
mkdir -p ${{ env.DEB_SRC_DIR }}/usr
- name: Copy files to DEB_SRC_DIR
run: |
cp -r .github/linux/deb/* ${{ env.DEB_SRC_DIR }}/debian
cp -r .github/linux/usr/* ${{ env.DEB_SRC_DIR }}/usr
- name: Install cqtdeployer from sources
run: |
git clone https://github.com/QuasarApp/CQtDeployer.git
cd CQtDeployer
git checkout v1.6.2365
wget -qO- https://github.com/QuasarApp/CQtDeployer/pull/846.patch | git apply
git submodule update --init --recursive
cmake -B build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }} \
-DBUILD_SHARED_LIBS=OFF \
-DCQT_DEPLOYER_TESTS=OFF \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_INSTALL_RPATH=${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}/lib \
-Wno-dev
cmake --build build --parallel
cmake --install build
- name: Bundle Qt libraries and plugins throught cqtdeployer
run: |
CQtDeployer -bin ${{ env.BUILD_DIR }}/omodscan \
-targetDir ${{ env.DEB_SRC_DIR }}/opt/OpenModScan \
-libDir ${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}/lib \
-ignore libcrypto.so.3,libmysqlclient.so.21,libpq.so.5,libssl.so.3,libqsqlmimer.so,libqsqlmysql.so,libqsqlodbc.so,libqsqlpsql.so \
-extraLibs icudata,icui18n,icuuc,libxcb-util \
-customScript 'export QT_QPA_PLATFORM=${{ env.QT_QPA_PLATFORM }}'
- name: Create Debian control file
run: |
sed -e "s|@PACKAGE_NAME@|${{ env.DEB_PACKAGE_NAME }}|g" \
-e "s|@PACKAGE_SOURCE@|${{ env.DEB_PACKAGE_NAME }}|g" \
${{ env.DEB_SRC_DIR }}/debian/control.in > ${{ env.DEB_SRC_DIR }}/debian/control
rm ${{ env.DEB_SRC_DIR }}/debian/control.in
cat -n ${{ env.DEB_SRC_DIR }}/debian/control
- name: Create Debian changelog file
run: |
sed -e "s|@PACKAGE_NAME@|${{ env.DEB_PACKAGE_NAME }}|g" \
-e "s|@APP_VERSION@|${{ env.APP_VERSION }}|g" \
-e "s|@DEB_REVISION@|${{ env.DEB_REVISION }}|g" \
-e "s|@RELEASE_DATE@|$(date -R)|g" \
${{ env.DEB_SRC_DIR }}/debian/changelog.in > ${{ env.DEB_SRC_DIR }}/debian/changelog
rm ${{ env.DEB_SRC_DIR }}/debian/changelog.in
cat -n ${{ env.DEB_SRC_DIR }}/debian/changelog
- name: Create Debian copyrigth file
run: |
sed -e "s|@PACKAGE_NAME@|${{ env.DEB_PACKAGE_NAME }}|g" \
-e "s|@RELEASE_YEAR@|$(date +%Y)|g" \
${{ env.DEB_SRC_DIR }}/debian/copyrigth.in > ${{ env.DEB_SRC_DIR }}/debian/copyrigth
rm ${{ env.DEB_SRC_DIR }}/debian/copyrigth.in
cat -n ${{ env.DEB_SRC_DIR }}/debian/copyrigth
- name: Create Debian rules file
run: |
sed -e "s|@QT_LIB_PATH@|${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}/lib|g" \
-e "s|@PACKAGE_NAME@|${{ env.DEB_PACKAGE_NAME }}|g" \
${{ env.DEB_SRC_DIR }}/debian/rules.in > ${{ env.DEB_SRC_DIR }}/debian/rules
rm ${{ env.DEB_SRC_DIR }}/debian/rules.in
cat -n ${{ env.DEB_SRC_DIR }}/debian/rules
- name: Create metainfo file
run: |
sed -e "s|@REF_NAME@|${{ env.REF_NAME }}|g" \
-e "s|@REF_TYPE@|${{ env.REF_TYPE }}|g" \
-e "s|@COMPONENT_ID@|omodscan.desktop|g" \
-e "s|@APP_VERSION@|${{ env.APP_VERSION }}|g" \
-e "s|@BUILD_DATE@|$(date +%Y-%m-%d)|g" \
${{ env.DEB_SRC_DIR }}/usr/share/metainfo/omodscan.metainfo.xml.in > ${{ env.DEB_SRC_DIR }}/usr/share/metainfo/omodscan.metainfo.xml
rm ${{ env.DEB_SRC_DIR }}/usr/share/metainfo/omodscan.metainfo.xml.in
cat -n ${{ env.DEB_SRC_DIR }}/usr/share/metainfo/omodscan.metainfo.xml
- name: Create desktop file
run: |
sed -e "s|@APP_EXEC@|omodscan|g" \
-e "s|@APP_ICON@|omodscan|g" \
${{ env.DEB_SRC_DIR }}/usr/share/applications/omodscan.desktop.in > ${{ env.DEB_SRC_DIR }}/usr/share/applications/omodscan.desktop
rm ${{ env.DEB_SRC_DIR }}/usr/share/applications/omodscan.desktop.in
cat -n ${{ env.DEB_SRC_DIR }}/usr/share/applications/omodscan.desktop
- name: Patch binary file
run: patchelf --set-rpath /opt/OpenModScan/lib "${{ env.DEB_SRC_DIR }}/opt/OpenModScan/bin/omodscan"
- name: Build DEB package
working-directory: ${{ env.DEB_SRC_DIR }}
run: dpkg-buildpackage -us -uc -tc -b
- name: Upload DEB package
uses: actions/upload-artifact@v4
if: success()
with:
name: ${{ env.DEB_PACKAGE_NAME }}_${{ env.APP_VERSION }}-${{ env.DEB_REVISION }}_${{ env.DEB_ARCH }}
path: ${{ env.BUILD_DEB_DIR }}/${{ env.DEB_PACKAGE_NAME }}_${{ env.APP_VERSION }}-${{ env.DEB_REVISION }}_${{ env.DEB_ARCH }}.deb
- name: Create or update GitHub Release and upload DEB
if: success() && github.event_name == 'push' && github.ref_type == 'tag'
uses: softprops/action-gh-release@v2
with:
draft: true
tag_name: ${{ github.ref_name }}
name: Open ModScan ${{ env.APP_VERSION }}
files: |
${{ env.BUILD_DEB_DIR }}/${{ env.DEB_PACKAGE_NAME }}_${{ env.APP_VERSION }}-${{ env.DEB_REVISION }}_${{ env.DEB_ARCH }}.deb
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}