Skip to content

Commit 0a14a22

Browse files
committed
Update CI and release workflows to use Fedora 43 and enhance RPM validation checks
1 parent 6a9b4db commit 0a14a22

3 files changed

Lines changed: 127 additions & 24 deletions

File tree

.github/workflows/ci.yml

Lines changed: 54 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,8 @@ jobs:
2020
build:
2121
name: Build & Test
2222
runs-on: ubuntu-latest
23-
strategy:
24-
fail-fast: false
25-
matrix:
26-
fedora: [41, 42]
2723
container:
28-
image: fedora:${{ matrix.fedora }}
24+
image: fedora:43
2925

3026
steps:
3127
- name: Checkout repository
@@ -45,7 +41,6 @@ jobs:
4541
kf6-qqc2-desktop-style \
4642
polkit-devel \
4743
clang-tools-extra \
48-
qt6-qtbase-private-devel \
4944
desktop-file-utils \
5045
appstream
5146
@@ -74,10 +69,10 @@ jobs:
7469
xargs -0 clang-format --dry-run --Werror
7570
7671
package-rpm:
77-
name: RPM Build Check
72+
name: RPM Build Check (Fedora 43)
7873
runs-on: ubuntu-latest
7974
container:
80-
image: fedora:42
75+
image: fedora:43
8176

8277
steps:
8378
- name: Checkout repository
@@ -94,12 +89,13 @@ jobs:
9489
gcc-c++ \
9590
ninja-build \
9691
qt6-qtbase-devel \
97-
qt6-qtbase-private-devel \
9892
qt6-qtdeclarative-devel \
9993
qt6-qttools-devel \
10094
qt6-qtwayland-devel \
10195
kf6-qqc2-desktop-style \
102-
polkit-devel
96+
polkit-devel \
97+
desktop-file-utils \
98+
appstream
10399
104100
- name: Prepare source tarball
105101
id: prep
@@ -123,9 +119,56 @@ jobs:
123119
124120
- name: Build RPM
125121
run: |
122+
FEDORA_VERSION=43
126123
rpmbuild -ba "${HOME}/rpmbuild/SPECS/ro-control.spec" \
127124
--define "_topdir ${HOME}/rpmbuild" \
128-
--define "upstream_version ${{ steps.prep.outputs.version }}"
125+
--define "upstream_version ${{ steps.prep.outputs.version }}" \
126+
--define "dist .fc${FEDORA_VERSION}"
127+
128+
- name: Validate desktop metadata
129+
run: |
130+
desktop-file-validate data/icons/io.github.projectroasd.rocontrol.desktop
131+
appstreamcli validate --no-net data/icons/io.github.projectroasd.rocontrol.metainfo.xml
132+
133+
- name: Verify Fedora 43 RPM compatibility
134+
run: |
135+
MAIN_RPM="$(find ~/rpmbuild/RPMS -maxdepth 2 -type f -name 'ro-control-*.x86_64.rpm' | head -n1)"
136+
COMMON_RPM="$(find ~/rpmbuild/RPMS -maxdepth 2 -type f -name 'ro-control-common-*.noarch.rpm' | head -n1)"
137+
138+
if [[ -z "${MAIN_RPM}" ]]; then
139+
echo "Failed to locate ro-control x86_64 RPM." >&2
140+
exit 1
141+
fi
142+
143+
if [[ -z "${COMMON_RPM}" ]]; then
144+
echo "Failed to locate ro-control-common noarch RPM." >&2
145+
exit 1
146+
fi
147+
148+
rpm -qpR "${MAIN_RPM}" | tee /tmp/ro-control.requires
149+
if grep -E 'Qt_6\.10|PRIVATE_API' /tmp/ro-control.requires; then
150+
echo "Forbidden Qt private or Fedora 44-era Qt ABI dependency detected." >&2
151+
exit 1
152+
fi
153+
154+
rpm -qpl "${MAIN_RPM}" | grep -Fx '/usr/bin/ro-control'
155+
if rpm -qpl "${COMMON_RPM}" | grep -Fx '/usr/bin/ro-control'; then
156+
echo "/usr/bin/ro-control must not be shipped by ro-control-common." >&2
157+
exit 1
158+
fi
159+
160+
- name: Install and smoke-test RPMs
161+
run: |
162+
MAIN_RPM="$(find ~/rpmbuild/RPMS -maxdepth 2 -type f -name 'ro-control-*.x86_64.rpm' | head -n1)"
163+
COMMON_RPM="$(find ~/rpmbuild/RPMS -maxdepth 2 -type f -name 'ro-control-common-*.noarch.rpm' | head -n1)"
164+
165+
dnf clean all
166+
dnf -y --refresh --setopt=install_weak_deps=False install "${MAIN_RPM}" "${COMMON_RPM}"
167+
168+
rpm -q ro-control
169+
command -v ro-control
170+
rpm -q --whatprovides /usr/bin/ro-control | grep -Fx 'ro-control'
171+
ldd -r /usr/bin/ro-control
129172
130173
- name: Lint built RPMs
131174
run: |

.github/workflows/release.yml

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ jobs:
120120
- arch: aarch64
121121
runs_on: ubuntu-24.04-arm
122122
container:
123-
image: fedora:latest
123+
image: fedora:43
124124

125125
steps:
126126
- name: Checkout repository
@@ -142,7 +142,6 @@ jobs:
142142
gcc-c++ \
143143
ninja-build \
144144
qt6-qtbase-devel \
145-
qt6-qtbase-private-devel \
146145
qt6-qtdeclarative-devel \
147146
qt6-qttools-devel \
148147
qt6-qtwayland-devel \
@@ -160,7 +159,7 @@ jobs:
160159
mkdir -p ~/rpmbuild/SOURCES ~/rpmbuild/SPECS dist/rpm
161160
cp "dist/${ARCHIVE_PREFIX}.tar.gz" "${HOME}/rpmbuild/SOURCES/"
162161
cp packaging/rpm/ro-control.spec "${HOME}/rpmbuild/SPECS/ro-control.spec"
163-
FEDORA_VERSION="$(rpm -E %fedora)"
162+
FEDORA_VERSION=43
164163
MAIN_RPM_PATTERN="ro-control-[0-9]*.${RPM_ARCH}.rpm"
165164
COMMON_RPM_PATTERN="ro-control-common-[0-9]*.noarch.rpm"
166165
@@ -191,6 +190,33 @@ jobs:
191190
rpm -qp --info "${RPM_FILE}" > "dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-info.txt"
192191
rpm -qp --requires "${RPM_FILE}" | sort > "dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-requires.txt"
193192
rpm -qlp "${RPM_FILE}" | sort > "dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-files.txt"
193+
if grep -E 'Qt_6\.10|PRIVATE_API' "dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-requires.txt"; then
194+
echo "Forbidden Qt private ABI dependency detected." >&2
195+
exit 1
196+
fi
197+
grep -Fx '/usr/bin/ro-control' "dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-files.txt"
198+
199+
- name: Verify main/common package split
200+
env:
201+
RPM_ARCH: ${{ matrix.arch }}
202+
run: |
203+
MAIN_RPM_FILE="$(find dist/rpm -maxdepth 1 -type f -name "ro-control-*.${RPM_ARCH}.rpm" | head -n1)"
204+
COMMON_RPM_FILE="$(find dist/rpm -maxdepth 1 -type f -name 'ro-control-common-*.noarch.rpm' | head -n1)"
205+
206+
if [[ -z "${MAIN_RPM_FILE}" ]]; then
207+
echo "Main ro-control RPM is missing." >&2
208+
exit 1
209+
fi
210+
211+
if [[ -z "${COMMON_RPM_FILE}" ]]; then
212+
echo "ro-control-common noarch RPM is missing." >&2
213+
exit 1
214+
fi
215+
216+
if rpm -qpl "${COMMON_RPM_FILE}" | grep -Fx '/usr/bin/ro-control'; then
217+
echo "/usr/bin/ro-control must not be shipped by ro-control-common." >&2
218+
exit 1
219+
fi
194220
195221
- name: Validate desktop metadata
196222
run: |
@@ -226,6 +252,10 @@ jobs:
226252
exit 1
227253
fi
228254
255+
rpm -q ro-control
256+
command -v ro-control
257+
rpm -q --whatprovides /usr/bin/ro-control | grep -Fx 'ro-control'
258+
ldd -r /usr/bin/ro-control
229259
ro-control --help > /dev/null
230260
231261
- name: Generate per-arch checksums

.github/workflows/rpm-artifacts.yml

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
- arch: aarch64
7878
runs_on: ubuntu-24.04-arm
7979
container:
80-
image: fedora:latest
80+
image: fedora:43
8181

8282
steps:
8383
- name: Checkout repository
@@ -99,12 +99,13 @@ jobs:
9999
gcc-c++ \
100100
ninja-build \
101101
qt6-qtbase-devel \
102-
qt6-qtbase-private-devel \
103102
qt6-qtdeclarative-devel \
104103
qt6-qttools-devel \
105104
qt6-qtwayland-devel \
106105
kf6-qqc2-desktop-style \
107-
polkit-devel
106+
polkit-devel \
107+
desktop-file-utils \
108+
appstream
108109
109110
- name: Build RPM artifacts
110111
env:
@@ -115,24 +116,53 @@ jobs:
115116
mkdir -p ~/rpmbuild/SOURCES ~/rpmbuild/SPECS dist/rpm
116117
cp "dist/${ARCHIVE_PREFIX}.tar.gz" "${HOME}/rpmbuild/SOURCES/"
117118
cp packaging/rpm/ro-control.spec "${HOME}/rpmbuild/SPECS/ro-control.spec"
118-
FEDORA_VERSION="$(rpm -E %fedora)"
119-
RPM_PATTERN="ro-control-[0-9]*.${RPM_ARCH}.rpm"
119+
FEDORA_VERSION=43
120+
MAIN_RPM_PATTERN="ro-control-[0-9]*.${RPM_ARCH}.rpm"
121+
COMMON_RPM_PATTERN="ro-control-common-[0-9]*.noarch.rpm"
120122
121123
rpmbuild -ba "${HOME}/rpmbuild/SPECS/ro-control.spec" \
122124
--define "_topdir ${HOME}/rpmbuild" \
123125
--define "upstream_version ${VERSION}" \
124126
--define "dist .fc${FEDORA_VERSION}"
125127
126-
RPM_FILE="$(find ~/rpmbuild/RPMS -maxdepth 2 -type f -name "${RPM_PATTERN}" | head -n1)"
127-
if [[ -z "${RPM_FILE}" ]]; then
128-
echo "Failed to find built ${RPM_ARCH} RPM." >&2
128+
MAIN_RPM_FILE="$(find ~/rpmbuild/RPMS -maxdepth 2 -type f -name "${MAIN_RPM_PATTERN}" | head -n1)"
129+
if [[ -z "${MAIN_RPM_FILE}" ]]; then
130+
echo "Failed to find built ${RPM_ARCH} main RPM." >&2
131+
exit 1
132+
fi
133+
134+
cp "${MAIN_RPM_FILE}" dist/rpm/
135+
136+
COMMON_RPM_FILE="$(find ~/rpmbuild/RPMS -maxdepth 2 -type f -name "${COMMON_RPM_PATTERN}" | head -n1)"
137+
if [[ -n "${COMMON_RPM_FILE}" ]]; then
138+
cp "${COMMON_RPM_FILE}" dist/rpm/
139+
fi
140+
141+
- name: Validate metadata and RPM dependency surface
142+
env:
143+
RPM_ARCH: ${{ matrix.arch }}
144+
run: |
145+
desktop-file-validate data/icons/io.github.projectroasd.rocontrol.desktop
146+
appstreamcli validate --no-net data/icons/io.github.projectroasd.rocontrol.metainfo.xml
147+
148+
MAIN_RPM_FILE="$(find dist/rpm -maxdepth 1 -type f -name "ro-control-*.${RPM_ARCH}.rpm" | head -n1)"
149+
COMMON_RPM_FILE="$(find dist/rpm -maxdepth 1 -type f -name 'ro-control-common-*.noarch.rpm' | head -n1)"
150+
151+
rpm -qpR "${MAIN_RPM_FILE}" | tee /tmp/ro-control.requires
152+
if grep -E 'Qt_6\.10|PRIVATE_API' /tmp/ro-control.requires; then
153+
echo "Forbidden Qt private ABI dependency detected." >&2
154+
exit 1
155+
fi
156+
157+
rpm -qpl "${MAIN_RPM_FILE}" | grep -Fx '/usr/bin/ro-control'
158+
if [[ -n "${COMMON_RPM_FILE}" ]] && rpm -qpl "${COMMON_RPM_FILE}" | grep -Fx '/usr/bin/ro-control'; then
159+
echo "/usr/bin/ro-control must only be shipped by the main RPM." >&2
129160
exit 1
130161
fi
131-
cp "${RPM_FILE}" "dist/rpm/ro-control-${RPM_ARCH}.rpm"
132162
133163
- name: Upload RPM artifacts
134164
uses: actions/upload-artifact@v4
135165
with:
136166
name: ro-control-${{ matrix.arch }}-rpm
137167
path: |
138-
dist/rpm/ro-control-${{ matrix.arch }}.rpm
168+
dist/rpm/*

0 commit comments

Comments
 (0)