%global pnpm_version 11.4.0 %global sherpa_version 1.13.4 # Release builds are already optimized; Fedora's default Rust flags request # full debuginfo and one codegen unit per crate, which makes this package take # tens of gigabytes and much longer to build. Keep the binaries stripped of # debuginfo and ship no debuginfo subpackage. %global debug_package %{nil} Name: buzz Version: 0.5.28 Release: 1%{?dist} Summary: Workspace where humans and AI agents build together License: Apache-2.0 URL: https://github.com/block/buzz Source0: %{name}-%{version}.tar.xz Source1: %{name}-%{version}-vendor-root.tar.xz Source2: %{name}-%{version}-vendor-desktop.tar.xz Source3: %{name}-%{version}-pnpm-store.tar.xz Source4: pnpm-%{pnpm_version}.tgz Source5: sherpa-onnx-v%{sherpa_version}-linux-x64-static-lib.tar.bz2 Source6: sherpa-onnx-v%{sherpa_version}-linux-aarch64-static-lib.tar.bz2 Source10: buzz-relay.service Source11: buzz-relay.env Source12: buzz.sysusers Source14: buzz.desktop # The vendor trees and the prebuilt sherpa-onnx archives only cover these two # COPR target architectures. ExclusiveArch: x86_64 aarch64 # The workspace's own rust-version is 1.88, but SQLx 0.9 requires 1.94. BuildRequires: cargo >= 1.94 BuildRequires: rust >= 1.94 BuildRequires: binutils BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: make BuildRequires: cmake BuildRequires: perl BuildRequires: bzip2-devel BuildRequires: alsa-lib-devel BuildRequires: openssl-devel BuildRequires: nodejs >= 22 BuildRequires: pkgconf-pkg-config BuildRequires: git-core BuildRequires: desktop-file-utils BuildRequires: systemd-rpm-macros # Tauri 2 / WebKitGTK desktop dependencies. BuildRequires: webkit2gtk4.1-devel BuildRequires: gtk3-devel BuildRequires: libappindicator-gtk3-devel BuildRequires: librsvg2-devel BuildRequires: libsoup3-devel %ifarch x86_64 %global rust_target x86_64-unknown-linux-gnu %endif %ifarch aarch64 %global rust_target aarch64-unknown-linux-gnu %endif %description Buzz is a workspace you can host yourself, where people and AI agents share the same rooms. Every message, reaction, workflow step, review, and git event is a signed Nostr event in one searchable log. This package contains the agent-first `buzz` CLI, the device-pairing helper, and the git credential/signing helpers. %package agent Summary: Agent harness and MCP binaries for Buzz License: Apache-2.0 Requires: bash Requires: git-core %description agent The Buzz ACP harness, the minimal `buzz-agent`, the developer MCP server, the Kubernetes remote-agent backend, and the all-in-one `sprig` harness. %package relay Summary: Buzz Nostr relay server and operator tools License: Apache-2.0 Requires: bash Requires: git-core %{?systemd_requires} %description relay The Buzz WebSocket relay (NIP-29), operator administration CLI, push gateway, pairing relay, and the web/admin web clients served by the relay. A PostgreSQL database, Redis, and S3-compatible object storage are required at runtime. %package desktop Summary: Buzz desktop application License: Apache-2.0 Requires: bash Requires: desktop-file-utils Requires: git-core Requires: gtk-update-icon-cache Requires: hicolor-icon-theme Requires: xdg-utils %description desktop The Buzz desktop application (Tauri 2 + WebKitGTK), including its bundled agent harness, MCP, git helper, and CLI sidecars. %prep %setup -q -n %{name}-%{version} # Offline cargo homes. Each vendor tarball carries the source-replacement # config emitted by `cargo vendor`; rewrite its output directory for this # build tree. mkdir -p cargo-home-root cargo-home-desktop .pnpm-cli .sherpa-libs tar -xJf %{SOURCE1} -C cargo-home-root tar -xJf %{SOURCE2} -C cargo-home-desktop sed -i "s|^directory = .*|directory = \"$PWD/cargo-home-root/vendor\"|" cargo-home-root/config.toml sed -i "s|^directory = .*|directory = \"$PWD/cargo-home-desktop/vendor\"|" cargo-home-desktop/config.toml # Offline pnpm store (generated with both linux x86_64 and aarch64 optional # packages) and the pinned pnpm CLI, so the build never reaches the network. tar -xJf %{SOURCE3} tar -xzf %{SOURCE4} -C .pnpm-cli cp %{SOURCE5} %{SOURCE6} .sherpa-libs/ %build export CARGO_NET_OFFLINE=true export CMAKE_POLICY_VERSION_MINIMUM=3.5 export RUSTFLAGS="-C debuginfo=0 -C strip=debuginfo" export CARGO_INCREMENTAL=0 # Server, CLI, and agent binaries. export CARGO_HOME="$PWD/cargo-home-root" export CARGO_TARGET_DIR="$PWD/target-root" cargo build --release --locked --offline \ -p buzz-cli \ -p buzz-relay \ -p buzz-admin \ -p buzz-acp \ -p buzz-agent \ -p buzz-dev-mcp \ -p buzz-backend-kubernetes \ -p sprig \ -p buzz-push-gateway \ -p buzz-pair-relay \ -p buzz-pairing-cli \ -p git-credential-nostr \ -p git-sign-nostr # Frontends: the desktop bundle and the browser clients served by the relay. export CI=true PNPM=(node "$PWD/.pnpm-cli/package/bin/pnpm.cjs") "${PNPM[@]}" install --offline --trust-lockfile --frozen-lockfile \ --store-dir="$PWD/pnpm-store" \ --config.manage-package-manager-versions=false VITE_BUZZ_BESTIE=0 "${PNPM[@]}" -C desktop build "${PNPM[@]}" -C web build "${PNPM[@]}" -C admin-web build # Tauri embeds/copies external binaries during its build script. Stage them # with the target-triple suffix the bundler expects. install -d desktop/src-tauri/binaries for binary in buzz-acp buzz-agent buzz-backend-kubernetes buzz-dev-mcp \ git-credential-nostr buzz; do install -m 0755 "$CARGO_TARGET_DIR/release/$binary" \ "desktop/src-tauri/binaries/$binary-%{rust_target}" done # Desktop app. The mesh-llm feature matches the official release builds; the # native llama.cpp runtime is downloaded by the app at runtime, not at build. export CARGO_HOME="$PWD/cargo-home-desktop" export CARGO_TARGET_DIR="$PWD/target-desktop" export SHERPA_ONNX_ARCHIVE_DIR="$PWD/.sherpa-libs" pushd desktop/src-tauri cargo build --release --locked --offline --features mesh-llm popd %install install -d %{buildroot}%{_bindir} # buzz: CLI, pairing, git helpers. for binary in buzz buzz-pair git-credential-nostr git-sign-nostr; do install -m 0755 "target-root/release/$binary" %{buildroot}%{_bindir}/"$binary" done # buzz-agent: ACP harness, agent, dev MCP, Kubernetes backend, sprig. for binary in buzz-acp buzz-agent buzz-dev-mcp buzz-backend-kubernetes sprig; do install -m 0755 "target-root/release/$binary" %{buildroot}%{_bindir}/"$binary" done # buzz-relay: server and operator tools. for binary in buzz-relay buzz-admin buzz-push-gateway buzz-pair-relay; do install -m 0755 "target-root/release/$binary" %{buildroot}%{_bindir}/"$binary" done install -d %{buildroot}%{_datadir}/%{name} cp -a web/dist %{buildroot}%{_datadir}/%{name}/web cp -a admin-web/dist %{buildroot}%{_datadir}/%{name}/admin-web install -Dpm 0644 %{SOURCE10} %{buildroot}%{_unitdir}/buzz-relay.service install -Dpm 0644 %{SOURCE11} %{buildroot}%{_sysconfdir}/buzz/relay.env install -Dpm 0644 %{SOURCE12} %{buildroot}%{_sysusersdir}/buzz.conf # Desktop: keep the large binary and its sidecars together in libexec; the # Tauri runtime resolves sidecars relative to the real executable path. install -d %{buildroot}%{_libexecdir}/buzz-desktop install -m 0755 target-desktop/release/buzz-desktop \ %{buildroot}%{_libexecdir}/buzz-desktop/buzz-desktop for binary in buzz-acp buzz-agent buzz-backend-kubernetes buzz-dev-mcp \ git-credential-nostr buzz; do install -m 0755 "target-desktop/release/$binary" \ %{buildroot}%{_libexecdir}/buzz-desktop/"$binary" done ln -s ../libexec/buzz-desktop/buzz-desktop \ %{buildroot}%{_bindir}/buzz-desktop install -Dpm 0644 %{SOURCE14} %{buildroot}%{_datadir}/applications/buzz.desktop install -Dpm 0644 desktop/src-tauri/icons/32x32.png \ %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/buzz.png install -Dpm 0644 desktop/src-tauri/icons/64x64.png \ %{buildroot}%{_datadir}/icons/hicolor/64x64/apps/buzz.png install -Dpm 0644 desktop/src-tauri/icons/128x128.png \ %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/buzz.png install -Dpm 0644 desktop/src-tauri/icons/128x128@2x.png \ %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/buzz.png install -Dpm 0644 desktop/src-tauri/icons/icon.png \ %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/buzz.png # Strip symbols from the release binaries. Fedora's brp-strip pass is disabled # along with the debuginfo package, and keeping the Rust symbols here would # leave every binary flagged by rpmlint. for binary in %{buildroot}%{_bindir}/* \ %{buildroot}%{_libexecdir}/buzz-desktop/*; do [ -f "$binary" ] || continue strip --strip-unneeded "$binary" done %check target-root/release/buzz --help >/dev/null target-root/release/sprig --version >/dev/null desktop-file-validate %{buildroot}%{_datadir}/applications/buzz.desktop %post desktop update-desktop-database -q >/dev/null 2>&1 || : gtk-update-icon-cache -q -t -f %{_datadir}/icons/hicolor >/dev/null 2>&1 || : %postun desktop update-desktop-database -q >/dev/null 2>&1 || : gtk-update-icon-cache -q -t -f %{_datadir}/icons/hicolor >/dev/null 2>&1 || : %post relay %systemd_post buzz-relay.service %preun relay %systemd_preun buzz-relay.service %postun relay %systemd_postun_with_restart buzz-relay.service %files %license LICENSE %doc README.md %{_bindir}/buzz %{_bindir}/buzz-pair %{_bindir}/git-credential-nostr %{_bindir}/git-sign-nostr %files agent %license LICENSE %doc README.md %{_bindir}/buzz-acp %{_bindir}/buzz-agent %{_bindir}/buzz-backend-kubernetes %{_bindir}/buzz-dev-mcp %{_bindir}/sprig %files relay %license LICENSE %doc README.md %{_bindir}/buzz-admin %{_bindir}/buzz-pair-relay %{_bindir}/buzz-push-gateway %{_bindir}/buzz-relay %{_unitdir}/buzz-relay.service %dir %{_sysconfdir}/buzz %config(noreplace) %{_sysconfdir}/buzz/relay.env %{_sysusersdir}/buzz.conf %dir %{_datadir}/buzz %{_datadir}/buzz/admin-web %{_datadir}/buzz/web %files desktop %license LICENSE %doc README.md %{_bindir}/buzz-desktop %{_libexecdir}/buzz-desktop %{_datadir}/applications/buzz.desktop %{_datadir}/icons/hicolor/32x32/apps/buzz.png %{_datadir}/icons/hicolor/64x64/apps/buzz.png %{_datadir}/icons/hicolor/128x128/apps/buzz.png %{_datadir}/icons/hicolor/256x256/apps/buzz.png %{_datadir}/icons/hicolor/512x512/apps/buzz.png %changelog * Thu Oct 29 2026 Buzz contributors - 0.5.28-1 - Initial RPM packaging for Fedora COPR.