Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 10 additions & 38 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,13 @@ jobs:
ARCHIVE_PREFIX: ${{ needs.metadata.outputs.archive_prefix }}
run: |
git archive --format=tar.gz --prefix="${ARCHIVE_PREFIX}/" --output="${ARCHIVE_PREFIX}.tar.gz" "${GITHUB_SHA}"
git archive --format=zip --prefix="${ARCHIVE_PREFIX}/" --output="${ARCHIVE_PREFIX}.zip" "${GITHUB_SHA}"

- name: Upload source archives
uses: actions/upload-artifact@v4
with:
name: ro-control-source-${{ needs.metadata.outputs.version }}
path: |
${{ needs.metadata.outputs.archive_prefix }}.tar.gz
${{ needs.metadata.outputs.archive_prefix }}.zip

rpm:
name: Build Fedora RPM (${{ matrix.arch }})
Expand Down Expand Up @@ -150,6 +148,7 @@ jobs:
find ~/rpmbuild/RPMS -maxdepth 2 -type f -name "ro-control-[0-9]*.${RPM_ARCH}.rpm" -exec cp {} dist/rpm/ \;

if [[ "${RPM_ARCH}" == "x86_64" ]]; then
find ~/rpmbuild/RPMS -maxdepth 2 -type f -name "ro-control-common-[0-9]*.noarch.rpm" -exec cp {} dist/rpm/ \;
cp ~/rpmbuild/SRPMS/*.src.rpm dist/rpm/
fi

Expand Down Expand Up @@ -179,7 +178,12 @@ jobs:
RPM_ARCH: ${{ matrix.arch }}
run: |
RPM_FILE="$(find dist/rpm -maxdepth 1 -type f -name "*.${RPM_ARCH}.rpm" | head -n1)"
dnf install -y --nogpgcheck "${RPM_FILE}"
if [[ "${RPM_ARCH}" == "x86_64" ]]; then
NOARCH_FILE="$(find dist/rpm -maxdepth 1 -type f -name "*.noarch.rpm" | head -n1)"
dnf install -y --nogpgcheck "${RPM_FILE}" "${NOARCH_FILE}"
else
dnf install -y --nogpgcheck "${RPM_FILE}"
fi

INSTALLED_VERSION="$(ro-control --version | tr -d '\n')"
if [[ "${INSTALLED_VERSION}" != "${VERSION}" ]]; then
Expand All @@ -199,43 +203,12 @@ jobs:
sha256sum * > "ro-control-${VERSION}-${RPM_ARCH}-SHA256SUMS.txt"
)

- name: Create per-arch release bundle
env:
VERSION: ${{ needs.metadata.outputs.version }}
RPM_ARCH: ${{ matrix.arch }}
run: |
mkdir -p dist/release

RPM_FILE="$(find dist/rpm -maxdepth 1 -type f -name "*.${RPM_ARCH}.rpm" | head -n1)"
INFO_FILE="dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-info.txt"
REQUIRES_FILE="dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-requires.txt"
FILES_FILE="dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-files.txt"
CHECKSUM_FILE="dist/rpm/ro-control-${VERSION}-${RPM_ARCH}-SHA256SUMS.txt"
BUNDLE_DIR="dist/release/ro-control-${VERSION}-${RPM_ARCH}"
BUNDLE_NAME="ro-control-${VERSION}-${RPM_ARCH}-fedora42.tar.gz"

if [[ -z "${RPM_FILE}" ]]; then
echo "Failed to locate built ${RPM_ARCH} RPM for release bundling." >&2
exit 1
fi

mkdir -p "${BUNDLE_DIR}"
cp "${RPM_FILE}" "${BUNDLE_DIR}/"
cp "${INFO_FILE}" "${BUNDLE_DIR}/"
cp "${REQUIRES_FILE}" "${BUNDLE_DIR}/"
cp "${FILES_FILE}" "${BUNDLE_DIR}/"
cp "${CHECKSUM_FILE}" "${BUNDLE_DIR}/"

tar -C dist/release -czf "dist/release/${BUNDLE_NAME}" "ro-control-${VERSION}-${RPM_ARCH}"
rm -rf "${BUNDLE_DIR}"

- name: Upload RPM artifacts
uses: actions/upload-artifact@v4
with:
name: ro-control-rpm-${{ matrix.arch }}-${{ needs.metadata.outputs.version }}
path: |
dist/rpm/*
dist/release/*

release:
name: Create GitHub Release
Expand All @@ -257,12 +230,11 @@ jobs:
target_commitish: ${{ github.sha }}
generate_release_notes: true
files: |
dist/ro-control-${{ needs.metadata.outputs.version }}.tar.gz
dist/ro-control-${{ needs.metadata.outputs.version }}.zip
dist/*.rpm
dist/*.x86_64.rpm
dist/*.aarch64.rpm
dist/*.noarch.rpm
dist/*.src.rpm
dist/*SHA256SUMS.txt
dist/*-requires.txt
dist/*-info.txt
dist/*-files.txt
dist/*-fedora42.tar.gz
14 changes: 3 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,10 @@ Additional PNG screenshots should be added before wider store distribution.

### RPM Package

Download the latest Fedora `.rpm` or the matching release bundle from [Releases](https://github.com/Project-Ro-ASD/ro-Control/releases), then choose the asset that matches your machine architecture (`i686` for 32-bit x86 systems, `x86_64` for 64-bit x86 systems, or `aarch64` for ARM64 systems):
Download the latest Fedora `.rpm` from [Releases](https://github.com/Project-Ro-ASD/ro-Control/releases), then choose the asset that matches your machine architecture (`x86_64` for 64-bit x86 systems or `aarch64` for ARM64 systems). Shared assets are shipped in the companion `noarch` RPM:

```bash
sudo dnf install ./ro-control-*.rpm
sudo dnf install ./ro-control-*.<arch>.rpm ./ro-control-common-*.noarch.rpm
```

### Building from Source
Expand All @@ -131,15 +131,7 @@ Fedora quick bootstrap:
./scripts/fedora-bootstrap.sh
```

Native Fedora KDE Desktop `i686` build:

```bash
TARGET_ARCH=i686 ./scripts/fedora-bootstrap.sh
```

`i686` builds are supported for compilation, UI, CLI, and monitoring. Fedora
NVIDIA driver install/update/remove flows remain available only on `x86_64` and
`aarch64`.
GitHub Releases publish only `x86_64`, `aarch64`, `noarch`, and `src` RPM artifacts.

For Fedora-specific runtime notes, see [docs/FEDORA.md](docs/FEDORA.md).

Expand Down
14 changes: 3 additions & 11 deletions README.tr.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,10 @@ Daha geniş mağaza / distro dağıtımı öncesinde PNG ekran görüntüleri ek

### RPM Paketi

[Releases](https://github.com/Project-Ro-ASD/ro-Control/releases) sayfasından sistem mimarinize uygun en güncel Fedora `.rpm` paketini veya release bundle dosyasını indirin (`i686` = 32-bit x86 sistemler, `x86_64` = 64-bit x86 sistemler, `aarch64` = ARM64 sistemler):
[Releases](https://github.com/Project-Ro-ASD/ro-Control/releases) sayfasından sistem mimarinize uygun en güncel Fedora `.rpm` paketini indirin (`x86_64` = 64-bit x86 sistemler, `aarch64` = ARM64 sistemler). Ortak dosyalar eşlik eden `noarch` RPM içinde gelir:

```bash
sudo dnf install ./ro-control-*.rpm
sudo dnf install ./ro-control-*.<arch>.rpm ./ro-control-common-*.noarch.rpm
```

### Kaynaktan Derleme
Expand All @@ -117,15 +117,7 @@ Fedora hızlı kurulum:
./scripts/fedora-bootstrap.sh
```

Fedora KDE Desktop üzerinde native `i686` derleme:

```bash
TARGET_ARCH=i686 ./scripts/fedora-bootstrap.sh
```

`i686` build desteği derleme, arayüz, CLI ve izleme özelliklerini kapsar.
Fedora NVIDIA sürücü kurulum/güncelleme/kaldırma akışları ise yalnızca
`x86_64` ve `aarch64` build'lerde etkindir.
GitHub Releases yalnızca `x86_64`, `aarch64`, `noarch` ve `src` RPM çıktıları yayınlar.

Fedora çalışma notları için [docs/FEDORA.md](docs/FEDORA.md) dosyasına bakın.

Expand Down
24 changes: 11 additions & 13 deletions docs/BUILDING.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Building ro-Control from Source

This guide covers building ro-Control from source on Linux systems with Qt 6 and CMake.
The primary target is Fedora KDE Desktop, including native `i686`, `x86_64`,
and `aarch64` builds.
The primary target is Fedora KDE Desktop, with official release artifacts for
`x86_64`, `aarch64`, `noarch`, and `src`.

---

Expand All @@ -26,7 +26,7 @@ and `aarch64` builds.

The script installs Fedora dependencies, builds the app, and runs tests by default.
It auto-detects the host architecture and reports whether the resulting build is
`i686`, `x86_64`, or `aarch64`.
`x86_64` or `aarch64`.
For Fedora-specific runtime notes, see [FEDORA.md](FEDORA.md).

---
Expand All @@ -47,9 +47,8 @@ sudo dnf install \
polkit-devel
```

On Fedora KDE Desktop `i686`, the application still builds normally, but the
NVIDIA driver install/update/remove workflows are intentionally disabled at
runtime because Fedora NVIDIA packages are not shipped for that architecture.
Official release outputs do not include `i686`. Driver install/update/remove
workflows are supported on `x86_64` and `aarch64` release builds.

Runtime tools used by diagnostics and driver operations:

Expand Down Expand Up @@ -84,15 +83,14 @@ cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
```

### Native Fedora KDE Desktop x86 (`i686`) build
### Official Fedora Release Outputs

```bash
TARGET_ARCH=i686 ./scripts/fedora-bootstrap.sh
```
The GitHub release pipeline publishes only:

For native 32-bit Fedora hosts this is just a convenience flag. On `x86_64`
Fedora, prefer a native `i686` builder or chroot/container when you need a real
32-bit RPM output.
- `x86_64` RPM
- `aarch64` RPM
- `noarch` RPM
- `src` RPM

### Refresh translations (recommended before release)

Expand Down
9 changes: 3 additions & 6 deletions docs/FEDORA.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ Optional flags via environment variables:
```bash
ENABLE_TESTS=0 BUILD_TYPE=Debug ./scripts/fedora-bootstrap.sh
INSTALL_AFTER_BUILD=1 INSTALL_PREFIX=/usr ./scripts/fedora-bootstrap.sh
TARGET_ARCH=i686 ./scripts/fedora-bootstrap.sh
```

## 2) Manual dependency install (equivalent)
Expand Down Expand Up @@ -51,10 +50,8 @@ ctest --test-dir build --output-on-failure
./build/ro-control
```

If you are preparing a Fedora KDE Desktop `i686` build, use a native `i686`
environment when possible. The bootstrap script labels the target architecture,
but NVIDIA driver management remains disabled on `i686` because Fedora does not
ship the required RPM Fusion NVIDIA stack there.
Official GitHub release outputs are limited to `x86_64`, `aarch64`, `noarch`,
and `src` RPM artifacts.

## 4) Install (optional)

Expand All @@ -68,7 +65,7 @@ sudo cmake --install build
- For proprietary NVIDIA flow, the app enables RPM Fusion and installs
`akmod-nvidia` using `dnf`.
- NVIDIA driver management is supported on Fedora `x86_64` and `aarch64`
builds. `i686` builds are supported for compilation and monitoring only.
builds.
- A reboot is required after install/update/remove flows.
- On Secure Boot systems, kernel module signing policy may still require manual steps.

Expand Down
4 changes: 2 additions & 2 deletions docs/RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Use this checklist for every production release.
## 4. Packaging

- [ ] `packaging/rpm/ro-control.spec` release/version fields are correct.
- [ ] Build Fedora RPM artifacts successfully for `i686`, `x86_64`, and `aarch64`.
- [ ] Build Fedora RPM artifacts successfully for `x86_64`, `aarch64`, `noarch`, and `src`.
- [ ] Verify installation and launch on the target desktop environment.
- [ ] Verify `man ro-control` and shell completions install correctly.
- [ ] Confirm release tag version matches `CMakeLists.txt` and `packaging/rpm/ro-control.spec`.
Expand All @@ -36,7 +36,7 @@ Use this checklist for every production release.

- [ ] Create annotated tag: `vX.Y.Z`.
- [ ] Push tag to trigger release workflow.
- [ ] Verify GitHub Release includes source archives, `i686`, `x86_64`, and `aarch64` RPMs, per-arch release bundles, and one source RPM.
- [ ] Verify GitHub Release includes only `x86_64`, `aarch64`, `noarch`, and `src` RPM outputs.
- [ ] Verify the attached checksum and RPM metadata files are present.

## 6. Post-release
Expand Down
16 changes: 5 additions & 11 deletions packaging/rpm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ This directory contains the RPM recipe for ro-Control.
- Produce a reproducible RPM from a release tarball
- Require translation tooling so localized builds are never emitted partially
- Run the upstream Qt test suite during `%check`
- Publish GitHub Release RPMs for `i686`, `x86_64`, and `aarch64`
- Publish GitHub Release RPMs for `x86_64`, `aarch64`, `noarch`, and `src`

## Source archive expectations

Expand Down Expand Up @@ -55,19 +55,13 @@ Fish so command discovery works out of the box on release systems.

## Release automation

The GitHub release workflow builds:
The GitHub release workflow publishes only:

- source archives (`.tar.gz`, `.zip`)
- one Fedora binary RPM for `i686`
- one Fedora binary RPM for `x86_64`
- one Fedora binary RPM for `aarch64`
- one Fedora release bundle for `i686`
- one Fedora release bundle for `x86_64`
- one Fedora release bundle for `aarch64`
- one source RPM
- one Fedora shared-assets RPM for `noarch`
- one source RPM (`src`)

Each architecture job also performs a smoke install with `dnf install` and
verifies that `ro-control --version` matches the tagged release version before
publishing assets. Each release bundle contains the architecture-specific RPM,
package metadata, dependency list, and checksum manifest for easier download
from the GitHub Releases page.
publishing assets.
24 changes: 19 additions & 5 deletions packaging/rpm/ro-control.spec
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Summary: Smart NVIDIA driver manager and system monitor
License: GPL-3.0-or-later
URL: https://github.com/Project-Ro-ASD/ro-Control
Source0: %{name}-%{version}.tar.gz
ExclusiveArch: i686 x86_64 aarch64
ExclusiveArch: x86_64 aarch64

BuildRequires: cmake
BuildRequires: gcc-c++
Expand All @@ -23,9 +23,19 @@ BuildRequires: qt6-qtwayland-devel
BuildRequires: kf6-qqc2-desktop-style
BuildRequires: polkit-devel

Requires: %{name}-common = %{version}-%{release}
Requires: qt6-qtbase
Requires: qt6-qtdeclarative
Requires: qt6-qtwayland

%description
ro-Control is a Qt6/KDE Plasma desktop application that helps users
manage NVIDIA drivers and monitor core system metrics.

%package common
Summary: Shared assets for the ro-Control desktop application
BuildArch: noarch

Requires: kf6-qqc2-desktop-style
Requires: polkit
Requires: /usr/bin/dnf
Expand All @@ -40,9 +50,10 @@ Recommends: /usr/sbin/akmods
Recommends: /usr/bin/dracut
Recommends: /usr/sbin/grubby

%description
ro-Control is a Qt6/KDE Plasma desktop application that helps users
manage NVIDIA drivers and monitor core system metrics.
%description common
ro-Control common ships the desktop entry, helper script, shell completions,
metadata, icons, PolicyKit action, and documentation shared by all supported
CPU architectures.

%prep
%autosetup -c -T -n %{name}-%{version}
Expand All @@ -61,9 +72,11 @@ tar -xzf %{SOURCE0} --strip-components=1
%ctest --output-on-failure

%files
%{_bindir}/ro-control

%files common
%license LICENSE
%doc README.md README.tr.md CHANGELOG.md
%{_bindir}/ro-control
%{_datadir}/applications/io.github.projectroasd.rocontrol.desktop
%{_datadir}/man/man1/ro-control.1*
%{_datadir}/metainfo/io.github.projectroasd.rocontrol.metainfo.xml
Expand All @@ -80,6 +93,7 @@ tar -xzf %{SOURCE0} --strip-components=1
- Fix installed helper path resolution for privileged operations on system installs
- Activate saved KDE-friendly interface preferences and theme switching in the UI
- Harden Fedora CI and release validation for metadata and RPM packaging
- Limit published RPM outputs to x86_64, aarch64, src, and noarch artifacts only

* Sun Mar 22 2026 ro-Control Maintainers <noreply@github.com> - 0.1.0-1
- Prepare first GitHub Release RPMs for i686, x86_64, and aarch64
Expand Down
Loading