A desktop server browser for Arma Reforger, built on the reforgermods.net v2 API. Live server list with search, sort and filters; a detail inspector with population history and mod readiness; measured ICMP latency; favorites, recents and settings; and direct joining through Steam. Tauri 2 and Rust, with a Preact frontend that builds to 80 KB of JavaScript in one chunk. Logic lives in rfm-core, which has no Tauri dependency and is tested directly; src-tauri is the window, the command surface and the wiring. Packaged for the public beta: a per-user NSIS installer, a portable .exe and an Arch package, with signature-verified background updates on Windows and a release pipeline that builds from a tag. The artifacts are not yet Authenticode-signed — that is wired and waiting on an Azure Trusted Signing identity, and docs/distribution.md says so plainly rather than letting anyone discover it at the SmartScreen dialog. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
95 lines
3.9 KiB
Bash
95 lines
3.9 KiB
Bash
# Maintainer: reforgermods.net
|
|
#
|
|
# Builds the launcher from a source tarball produced by scripts/build-arch.sh.
|
|
# The tarball is the working tree minus node_modules/target/dist, so this
|
|
# packages exactly what is checked out — not a tagged release.
|
|
|
|
pkgname=reforgermods-launcher
|
|
pkgver=0.1.0
|
|
pkgrel=1
|
|
pkgdesc="Server browser and direct launcher for Arma Reforger (reforgermods.net)"
|
|
arch=('x86_64')
|
|
url="https://reforgermods.net"
|
|
license=('LicenseRef-Proprietary')
|
|
|
|
# webkit2gtk-4.1 pulls gtk3, libsoup3, glib2 and the rest of the WebKit stack.
|
|
# The binary links rustls rather than OpenSSL, so there is no openssl dependency.
|
|
depends=('webkit2gtk-4.1' 'gtk3' 'libsoup3' 'glibc' 'gcc-libs')
|
|
# cmake builds aws-lc-sys, the C crypto library behind rustls' default
|
|
# provider. Without it the crate's build script produces no library and the
|
|
# link fails late with a wall of undefined aws_lc_* symbols.
|
|
makedepends=('rust' 'nodejs' 'npm' 'cmake')
|
|
|
|
# !lto: makepkg's default OPTIONS put -flto=auto into CFLAGS/LDFLAGS. That
|
|
# makes aws-lc-sys compile its C crypto into GCC LTO bitcode, which the
|
|
# linker rustc drives cannot resolve — the build dies at the very last step
|
|
# with a page of undefined aws_lc_* symbols. Rust-level LTO is unaffected:
|
|
# that comes from [profile.release] in the workspace manifest.
|
|
# !debug: the release profile already strips, so a -debug split package would
|
|
# be empty. One artifact to hand over is the point.
|
|
options=('!lto' '!debug')
|
|
|
|
source=("$pkgname-$pkgver.tar.gz")
|
|
sha256sums=('SKIP')
|
|
|
|
build() {
|
|
cd "$srcdir/$pkgname-$pkgver"
|
|
|
|
# The frontend is embedded into the binary by tauri-build, so it has to exist
|
|
# before cargo runs.
|
|
npm ci
|
|
npm run build
|
|
|
|
# --features custom-protocol is what makes this a production build: without
|
|
# it tauri-build sets cfg(dev) and the app loads its UI from the Vite dev
|
|
# server on localhost:1420 instead of the embedded assets. See the comment on
|
|
# that feature in src-tauri/Cargo.toml.
|
|
cargo build --release --locked -p reforgermods-launcher --features custom-protocol
|
|
|
|
# Assert the result is not a dev build. You cannot tell by inspecting the
|
|
# binary — tauri embeds the whole config, devUrl included, either way, and
|
|
# brotli-compresses the assets. The signal is the cargo:rustc-cfg=dev that
|
|
# tauri-build emits, recorded in the build script's output file. A dev build
|
|
# packages and installs perfectly and then shows ERR_CONNECTION_REFUSED on
|
|
# the tester's machine, which is exactly the report you cannot debug
|
|
# remotely.
|
|
local build_out
|
|
build_out=$(ls -t target/release/build/reforgermods-launcher-*/output | head -1)
|
|
if [[ -z "$build_out" ]]; then
|
|
echo "ERROR: could not find the build script output to verify the build mode." >&2
|
|
return 1
|
|
fi
|
|
if grep -q "rustc-cfg=dev" "$build_out"; then
|
|
echo "ERROR: this is a DEV build; --features custom-protocol did not take effect." >&2
|
|
return 1
|
|
fi
|
|
echo "build mode: production (frontend embedded, no dev-server dependency)"
|
|
}
|
|
|
|
check() {
|
|
cd "$srcdir/$pkgname-$pkgver"
|
|
# The launcher crate is included for the Linux-only startup workarounds in
|
|
# main.rs, which are exactly the code a Windows-first project is least likely
|
|
# to notice breaking.
|
|
cargo test --release --locked -p rfm-core -p reforgermods-launcher
|
|
}
|
|
|
|
package() {
|
|
cd "$srcdir/$pkgname-$pkgver"
|
|
|
|
install -Dm755 target/release/reforgermods-launcher \
|
|
"$pkgdir/usr/bin/reforgermods-launcher"
|
|
|
|
install -Dm644 packaging/arch/reforgermods-launcher.desktop \
|
|
"$pkgdir/usr/share/applications/reforgermods-launcher.desktop"
|
|
|
|
for size in 32 128; do
|
|
install -Dm644 "src-tauri/icons/${size}x${size}.png" \
|
|
"$pkgdir/usr/share/icons/hicolor/${size}x${size}/apps/reforgermods-launcher.png"
|
|
done
|
|
install -Dm644 src-tauri/icons/128x128@2x.png \
|
|
"$pkgdir/usr/share/icons/hicolor/256x256/apps/reforgermods-launcher.png"
|
|
install -Dm644 src-tauri/icons/icon.png \
|
|
"$pkgdir/usr/share/icons/hicolor/512x512/apps/reforgermods-launcher.png"
|
|
}
|