Skip to content
Closed
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
35 changes: 32 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,12 @@ jobs:
fail-fast: false
matrix:
include:
# `os` is what the per-step guards key on, never the runner label:
# there are now two Linux labels, so `platform == 'ubuntu-24.04'`
# would silently skip the apt step on the arm64 leg and fail it at
# the eframe build instead.
- platform: windows-latest
os: windows
formats: nsis
# Pinned rather than `ubuntu-latest` so the glibc floor of the .deb
# and .AppImage is a decision, not whatever GitHub last moved the
Expand All @@ -29,8 +34,32 @@ jobs:
# so the Linux artifacts no longer run on Ubuntu 22.04 or Debian 12 —
# stated in the README's Install section.
- platform: ubuntu-24.04
os: linux
formats: deb,appimage
# arm64 Linux — Raspberry Pi 5, Ampere/Graviton servers, Snapdragon X
# laptops running Linux. A *native* runner, not a cross-build: this
# repo cannot cross-compile (TODO.md — `ring`'s build script needs a
# target C toolchain), and ARM AppImages can only be produced on ARM
# hardware anyway.
#
# Nothing in the sensor path is x86-specific: the Linux backend is
# sysfs and procfs (src/source/linux.rs), which is architecture
# neutral, and the one place that does read CPUID is already gated —
# src/sysinfo.rs has an explicit
# `not(any(target_arch = "x86_64", ...))` arm. So aarch64 compiles
# today; what it loses is the CPUID signature, the codename and the
# x86 feature-flag list in the System Summary, which report empty.
#
# `deb` only, deliberately. cargo-packager's AppImage path fetches
# linuxdeploy, and whether it resolves an aarch64 build of it is
# unverified — adding `appimage` here on a guess would make the leg
# red for a reason unrelated to this project. Widen it once someone
# has watched it work.
- platform: ubuntu-24.04-arm
os: linux
formats: deb
- platform: macos-latest
os: macos
formats: dmg
runs-on: ${{ matrix.platform }}
defaults:
Expand All @@ -40,7 +69,7 @@ jobs:
- uses: actions/checkout@v5

- name: Install Linux build dependencies
if: matrix.platform == 'ubuntu-24.04'
if: matrix.os == 'linux'
run: |
sudo apt-get update
sudo apt-get install -y \
Expand All @@ -55,7 +84,7 @@ jobs:
workspaces: app -> target

- name: Publish LHM bridge sidecar (Windows)
if: matrix.platform == 'windows-latest'
if: matrix.os == 'windows'
run: dotnet publish sidecar -c Release -o sidecar/publish

# Failing test names are echoed as ::error:: annotations so they show up
Expand Down Expand Up @@ -131,7 +160,7 @@ jobs:
# would break silently between tags and only be discovered while cutting
# a release. Windows-only: the embedded sidecar is a no-op elsewhere.
- name: Build the portable exe (Windows)
if: matrix.platform == 'windows-latest'
if: matrix.os == 'windows'
run: cargo build --release --features portable --target-dir target-portable

- name: Install cargo-packager
Expand Down
30 changes: 25 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,11 @@ jobs:
#
# These paths are relative to the *workspace root*, not to app/. See
# the note on the publish step.
#
# `os` — not the runner label — is what the per-step guards key on,
# because there are now two Linux labels. See ci.yml.
- platform: windows-latest
os: windows
formats: nsis
artifacts: |
app/target/release/*-setup.exe
Expand All @@ -122,11 +126,26 @@ jobs:
# from 2026-09-17). See the matching note in ci.yml for the glibc
# 2.39 floor this puts on the .deb and .AppImage.
- platform: ubuntu-24.04
os: linux
formats: deb,appimage
artifacts: |
app/target/release/*.deb
app/target/release/*.AppImage
# arm64 Linux, built natively — see the long note in ci.yml for why
# this is a real runner rather than a cross-build, and why it is
# `deb` only.
#
# Both Linux legs glob `*.deb`, which is safe because cargo-packager
# puts the architecture in the filename (`_amd64.deb` vs
# `_arm64.deb`), so neither leg can match the other's artifact and
# the release ends up with both.
- platform: ubuntu-24.04-arm
os: linux
formats: deb
artifacts: |
app/target/release/*.deb
- platform: macos-latest
os: macos
formats: dmg
artifacts: |
app/target/release/*.dmg
Expand All @@ -142,7 +161,7 @@ jobs:
ref: ${{ needs.prepare.outputs.tag }}

- name: Install Linux build dependencies
if: matrix.platform == 'ubuntu-24.04'
if: matrix.os == 'linux'
run: |
sudo apt-get update
sudo apt-get install -y \
Expand Down Expand Up @@ -217,7 +236,7 @@ jobs:
grep -m1 'MyAppVersion "' installer/SensorView_Setup.iss

- name: Publish LHM bridge sidecar (Windows)
if: matrix.platform == 'windows-latest'
if: matrix.os == 'windows'
run: dotnet publish sidecar -c Release -o sidecar/publish

- name: Run tests
Expand All @@ -235,7 +254,7 @@ jobs:
EXPECTED: ${{ needs.prepare.outputs.version }}
run: |
bin=target/release/sensorview
[ "${{ matrix.platform }}" = "windows-latest" ] && bin=target/release/sensorview.exe
[ "${{ matrix.os }}" = "windows" ] && bin=target/release/sensorview.exe
actual="$("$bin" --version | awk '{print $NF}')"
echo "expected $EXPECTED, binary reports $actual"
if [ "$actual" != "$EXPECTED" ]; then
Expand All @@ -261,7 +280,7 @@ jobs:
# cargo-packager has just wrapped into the installer, then copied into
# target/release/ under its final name for the upload glob below.
- name: Build the portable exe (Windows)
if: matrix.platform == 'windows-latest'
if: matrix.os == 'windows'
shell: bash
env:
VERSION: ${{ needs.prepare.outputs.version }}
Expand Down Expand Up @@ -321,7 +340,8 @@ jobs:
| Windows | `SensorView_*_x64-setup.exe` | Installer |
| Windows | `SensorView-*-portable.exe` | Single file, no install — see below |
| macOS (Apple Silicon) | `*.dmg` | Unsigned; System Settings → Privacy & Security → Open Anyway |
| Linux | `*.deb` / `*.AppImage` | |
| Linux (x86-64) | `*_amd64.deb` / `*.AppImage` | Needs glibc 2.39+ |
| Linux (arm64) | `*_arm64.deb` | Pi 5, Ampere/Graviton, Snapdragon X |

**The portable Windows build** is one self-contained `.exe`. It
carries the LibreHardwareMonitor sensor bridge inside it and unpacks
Expand Down
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,8 @@ Download the installer for your platform from [Releases](https://github.com/Zekt
| Windows | `SensorView_<ver>_x64-setup.exe` (NSIS) | Bundles the sensor sidecar; optionally installs the PawnIO driver |
| Windows | `SensorView-<ver>-portable.exe` | One file, no install — see below |
| macOS | `SensorView_<ver>_aarch64.dmg` | Apple Silicon only; **unsigned** — see below |
| Linux | `.deb` / `.AppImage` | |
| Linux (x86-64) | `.deb` / `.AppImage` | |
| Linux (arm64) | `_arm64.deb` | Raspberry Pi 5, Ampere/Graviton, Snapdragon X — see below |

**The portable Windows build** is a single self-contained `.exe`. Every Windows
sensor comes from the LibreHardwareMonitor sidecar, so the portable build
Expand All @@ -257,6 +258,15 @@ carries that sidecar inside the binary and unpacks it to
several times the size of the installer, and why it works from a USB stick with
nothing beside it. Delete that folder to reclaim the space once you are done.

**Linux on arm64** gets a `.deb` only — no AppImage yet. Sensor coverage is the
same as on x86-64, because the Linux backend reads `hwmon`, `/proc` and
`cpufreq`, none of which are architecture-specific. What is missing is the
x86-only part of the **System Summary**: the CPUID signature, the
microarchitecture codename and the instruction-set feature list are blank,
since those come from the `CPUID` instruction. Everything else — temperatures,
per-core load, clocks, power, disks, network, the Task Manager, the web
dashboard — behaves identically.

**Linux glibc requirement:** the `.deb` and `.AppImage` are built on Ubuntu
24.04, so they need **glibc 2.39 or newer** — Ubuntu 24.04+, Debian 13+,
Fedora 40+. They will not run on Ubuntu 22.04 or Debian 12; build from source
Expand Down
Loading