Skip to content

Commit 920237c

Browse files
committed
Rename rpm build
1 parent 7084aaa commit 920237c

1 file changed

Lines changed: 220 additions & 0 deletions

File tree

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
name: Build Debian package (Ubuntu x64, Qt6)
2+
3+
on:
4+
push:
5+
tags:
6+
- "*"
7+
8+
jobs:
9+
build-omodsim:
10+
name: Build OpenModSim rpm package version '${{ github.ref_name }}' with Qt6
11+
runs-on: ubuntu-latest
12+
container:
13+
image: ubuntu:20.04
14+
15+
env:
16+
QT_VERSION: "6.9.3"
17+
QT_HOST: "linux"
18+
QT_TARGET: "desktop"
19+
QT_ARCH: "linux_gcc_64"
20+
QT_INSTALL_DIR: "/opt/Qt"
21+
CMAKE_COMPILER: "gcc_64"
22+
CMAKE_GENERATOR: "Ninja"
23+
BUILD_TYPE: "Release"
24+
RPM_REVISION: "1"
25+
RPM_ARCH: "x86_64"
26+
RPM_PACKAGE_NAME: "qt6-omodsim"
27+
28+
steps:
29+
- name: Checkout repository
30+
uses: actions/checkout@v4
31+
with:
32+
ref: ${{ github.ref_name }}
33+
34+
- name: Extract version from CMakeLists.txt
35+
id: extract_version
36+
run: |
37+
FULL_VERSION=$(grep -oP 'VERSION\s+\K[0-9]+\.[0-9]+\.[0-9]+' omodsim/CMakeLists.txt)
38+
39+
if [ "${GITHUB_REF_NAME}" = "dev" ]; then
40+
MAJOR_MINOR=$(echo "$FULL_VERSION" | cut -d. -f1,2)
41+
APP_VERSION="${MAJOR_MINOR}~dev"
42+
else
43+
APP_VERSION="$FULL_VERSION"
44+
fi
45+
46+
echo "APP_VERSION=$APP_VERSION" >> $GITHUB_ENV
47+
echo "Extracted version: $APP_VERSION"
48+
49+
- name: Install dependencies
50+
run: |
51+
export DEBIAN_FRONTEND=noninteractive
52+
apt-get update
53+
apt-get install -y \
54+
git build-essential ninja-build cmake patchelf rsync \
55+
rpm gpg \
56+
libglu1-mesa libgl1-mesa-dev libxkbcommon0 libxkbcommon-x11-0 \
57+
libxcb1 libxcb-xinerama0 libxcb-cursor0 libxcb-keysyms1 libxcb-xfixes0 \
58+
libxcb-shape0 libxcb-render-util0 libxcb-icccm4 libxcb-image0 \
59+
libfontconfig1 libfreetype6 libx11-6 libxext6 libxrender1 \
60+
zlib1g-dev libpng-dev libjpeg-dev libdbus-1-3 \
61+
libwayland-cursor0 libwayland-egl1-mesa \
62+
libgtk-3-0 libgdk-pixbuf2.0-0 libpangocairo-1.0-0 libpango-1.0-0 libatk1.0-0 libcairo2 libcairo-gobject2 \
63+
libcups2 \
64+
odbcinst libodbc1 \
65+
libpq5 libmysqlclient21
66+
67+
- name: Install Python 3.12 from sources
68+
run: |
69+
apt-get install -y wget libssl-dev \
70+
libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev \
71+
libffi-dev libbz2-dev liblzma-dev libgdbm-dev libnss3-dev \
72+
libncurses-dev libgdbm-compat-dev xz-utils
73+
74+
wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tgz
75+
tar xvf Python-3.12.2.tgz
76+
cd Python-3.12.2
77+
78+
./configure
79+
make -j$(nproc)
80+
make altinstall
81+
82+
- name: Set Python 3.12 as default
83+
run: |
84+
update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 2
85+
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
86+
update-alternatives --auto python3
87+
88+
- name: Upgrade pip
89+
run: |
90+
python3 -m ensurepip --upgrade
91+
python3 -m pip install --upgrade pip
92+
93+
- name: Install aqtinstall
94+
run: |
95+
python3 -m pip install aqtinstall
96+
97+
- name: Download Qt
98+
run: |
99+
mkdir -p ${{ env.QT_INSTALL_DIR }}
100+
aqt install-qt \
101+
${{ env.QT_HOST }} \
102+
${{ env.QT_TARGET }} \
103+
${{ env.QT_VERSION }} \
104+
${{ env.QT_ARCH }} \
105+
-m qt5compat qtpdf qtserialport qtserialbus \
106+
-O ${{ env.QT_INSTALL_DIR }}
107+
108+
- name: Add Qt to PATH
109+
run: echo "${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}/bin" >> $GITHUB_PATH
110+
111+
- name: Install cmake 3.26
112+
run: |
113+
apt-get remove -y cmake
114+
wget https://github.com/Kitware/CMake/releases/download/v3.26.5/cmake-3.26.5-linux-x86_64.sh
115+
sh cmake-3.26.5-linux-x86_64.sh --skip-license --prefix=/usr/local
116+
cmake --version
117+
118+
- name: Set BUILD_DIR
119+
run: echo "BUILD_DIR=build-omodsim-Qt_${{ env.QT_VERSION }}_${{ env.CMAKE_COMPILER }}bit-${{ env.BUILD_TYPE }}" >> $GITHUB_ENV
120+
121+
- name: Configure project
122+
run: |
123+
cmake omodsim -B ${{ env.BUILD_DIR }} \
124+
-G "${{ env.CMAKE_GENERATOR }}" \
125+
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
126+
-DCMAKE_PREFIX_PATH=${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}
127+
128+
- name: Build
129+
run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel
130+
131+
- name: Set BUILD_RPM_DIR
132+
run: echo "BUILD_RPM_DIR=build-rpm-package-Qt_${{ env.QT_VERSION }}_${{ env.CMAKE_COMPILER }}bit" >> $GITHUB_ENV
133+
134+
- name: Create RPM build directories
135+
run: |
136+
mkdir -p ${{ env.BUILD_RPM_DIR }}/BUILD
137+
mkdir -p ${{ env.BUILD_RPM_DIR }}/RPMS
138+
mkdir -p ${{ env.BUILD_RPM_DIR }}/SOURCES/omodsim
139+
mkdir -p ${{ env.BUILD_RPM_DIR }}/SPECS
140+
mkdir -p ${{ env.BUILD_RPM_DIR }}/SRPMS
141+
142+
- name: Copy files to BUILD_RPM_DIR
143+
run: |
144+
rsync -a .pkg/rpm/* ${{ env.BUILD_RPM_DIR }}/SPECS
145+
rsync -a .pkg/usr/* ${{ env.BUILD_RPM_DIR }}/SOURCES/omodsim/usr
146+
147+
- name: Install cqtdeployer from sources
148+
run: |
149+
git clone https://github.com/QuasarApp/CQtDeployer.git
150+
cd CQtDeployer
151+
git checkout v1.6.2365
152+
git submodule update --init --recursive
153+
cmake -B build -DCMAKE_BUILD_TYPE=Release \
154+
-DCMAKE_PREFIX_PATH=${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }} \
155+
-DBUILD_SHARED_LIBS=OFF \
156+
-DCQT_DEPLOYER_TESTS=OFF \
157+
-DCMAKE_INSTALL_PREFIX=/usr/local \
158+
-DCMAKE_INSTALL_RPATH=${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}/lib \
159+
-Wno-dev
160+
cmake --build build --parallel
161+
cmake --install build
162+
163+
- name: Bundle Qt libraries and plugins throught cqtdeployer
164+
run: |
165+
CQtDeployer -bin ${{ env.BUILD_DIR }}/omodsim \
166+
-targetDir ${{ env.BUILD_RPM_DIR }}/SOURCES/omodsim/opt/OpenModSim \
167+
-libDir ${{ env.QT_INSTALL_DIR }}/${{ env.QT_VERSION }}/${{ env.CMAKE_COMPILER }}/lib \
168+
-ignore libcrypto.so.3,libmysqlclient.so.21,libpq.so.5,libssl.so.3,libqsqlmimer.so,libqsqlmysql.so,libqsqlodbc.so,libqsqlpsql.so \
169+
-extraLibs icudata,icui18n,icuuc
170+
171+
- name: Copy OpenModsim docs
172+
run: rsync -a "${{ env.BUILD_DIR }}/docs/" "${{ env.BUILD_RPM_DIR }}/SOURCES/omodsim/opt/OpenModSim/docs/"
173+
174+
- name: Create RPM spec file
175+
run: |
176+
sed -e "s|@PACKAGE_NAME@|${{ env.RPM_PACKAGE_NAME }}|g" \
177+
-e "s|@APP_VERSION@|${{ env.APP_VERSION }}|g" \
178+
${{ env.BUILD_RPM_DIR }}/SPECS/omodsim.spec.in > ${{ env.BUILD_RPM_DIR }}/SPECS/omodsim.spec
179+
rm ${{ env.BUILD_RPM_DIR }}/SPECS/omodsim.spec.in
180+
cat -n ${{ env.BUILD_RPM_DIR }}/SPECS/omodsim.spec
181+
182+
- name: Patch binary file
183+
run: patchelf --set-rpath /opt/OpenModSim/lib "${{ env.BUILD_RPM_DIR }}/SOURCES/omodsim/opt/OpenModSim/bin/omodsim"
184+
185+
- name: Import GPG keys
186+
env:
187+
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
188+
run: echo "$GPG_PRIVATE_KEY" | gpg --batch --import
189+
190+
- name: Build RPM package
191+
working-directory: ${{ env.BUILD_RPM_DIR }}
192+
run: rpmbuild --define "_topdir `pwd`" -v -ba SPECS/omodsim.spec
193+
194+
- name: Sign RPM package
195+
working-directory: ${{ env.BUILD_RPM_DIR }}
196+
run: |
197+
RPM_FILE="${{ env.RPM_PACKAGE_NAME }}-${{ env.APP_VERSION }}-${{ env.RPM_REVISION }}.${{ env.RPM_ARCH }}.rpm"
198+
SAFE_RPM_FILE=$(echo "$RPM_FILE" | sed 's/~/−/g')
199+
mv "RPMS/${RPM_ARCH}/$RPM_FILE" "RPMS/${RPM_ARCH}/$SAFE_RPM_FILE"
200+
rpmsign --addsign --define "_gpg_name 841A6E73CED20603737BDCBA457ECBB2757E57F1" "RPMS/${RPM_ARCH}/$SAFE_RPM_FILE"
201+
mv "RPMS/${RPM_ARCH}/$SAFE_RPM_FILE" "RPMS/${RPM_ARCH}/$RPM_FILE"
202+
203+
- name: Upload RPM package
204+
uses: actions/upload-artifact@v4
205+
if: success()
206+
with:
207+
name: ${{ env.RPM_PACKAGE_NAME }}-${{ env.APP_VERSION }}-${{ env.RPM_REVISION }}.${{ env.RPM_ARCH }}
208+
path: ${{ env.BUILD_RPM_DIR }}/RPMS/${{ env.RPM_ARCH }}/${{ env.RPM_PACKAGE_NAME }}-${{ env.APP_VERSION }}-${{ env.RPM_REVISION }}.${{ env.RPM_ARCH }}.rpm
209+
210+
- name: Save public GPG key to file
211+
env:
212+
GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
213+
run: |
214+
echo "$GPG_PUBLIC_KEY" > ${{ env.RPM_PACKAGE_NAME }}.rpm.pubkey
215+
216+
- name: Upload public GPG key
217+
uses: actions/upload-artifact@v4
218+
with:
219+
name: ${{ env.RPM_PACKAGE_NAME }}.rpm.pubkey
220+
path: ${{ env.RPM_PACKAGE_NAME }}.rpm.pubkey

0 commit comments

Comments
 (0)