Compare commits
2 Commits
0c36aaeb76
...
69621c22c7
| Author | SHA1 | Date | |
|---|---|---|---|
|
69621c22c7
|
|||
|
f3b8190e68
|
5
.copr/Makefile
Normal file
5
.copr/Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
srpm:
|
||||
./dist.sh
|
||||
rpmbuild -bs monsoon.spec \
|
||||
--define "_sourcedir $(CURDIR)" \
|
||||
--define "_srcrpmdir $(outdir)"
|
||||
95
.gitea/workflows/ci.yml
Normal file
95
.gitea/workflows/ci.yml
Normal file
@@ -0,0 +1,95 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags: ['v*']
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
check:
|
||||
name: Format, lint, build, test
|
||||
runs-on: fedora
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Check formatting
|
||||
run: cargo fmt --check --all
|
||||
|
||||
- name: Clippy
|
||||
run: cargo clippy --workspace -- -D warnings
|
||||
|
||||
- name: Build (Rust)
|
||||
run: cargo build --workspace
|
||||
|
||||
- name: Test (Rust)
|
||||
run: cargo test --workspace
|
||||
|
||||
- name: Install frontend deps
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Build desktop frontend
|
||||
run: pnpm build
|
||||
|
||||
- name: Install web frontend deps
|
||||
run: cd monsoon-web && pnpm install --frozen-lockfile
|
||||
|
||||
- name: Build web frontend
|
||||
run: cd monsoon-web && pnpm build
|
||||
|
||||
- name: Validate desktop file
|
||||
run: desktop-file-validate data/cafe.lair.monsoon.desktop
|
||||
|
||||
- name: Validate AppStream metadata
|
||||
run: appstreamcli validate data/cafe.lair.monsoon.metainfo.xml
|
||||
|
||||
rpm:
|
||||
name: Build SRPM
|
||||
runs-on: fedora
|
||||
needs: check
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Generate source tarball
|
||||
run: |
|
||||
VERSION=$(grep '^version' monsoon-server/Cargo.toml | head -1 | cut -d'"' -f2)
|
||||
git archive --prefix=monsoon-${VERSION}/ HEAD | gzip > monsoon-${VERSION}.tar.gz
|
||||
|
||||
- name: Vendor Rust dependencies
|
||||
run: |
|
||||
VERSION=$(grep '^version' monsoon-server/Cargo.toml | head -1 | cut -d'"' -f2)
|
||||
cargo vendor vendor/
|
||||
tar czf monsoon-${VERSION}-vendor.tar.gz vendor/
|
||||
rm -rf vendor/
|
||||
|
||||
- name: Build SRPM
|
||||
run: |
|
||||
rpmbuild -bs monsoon.spec \
|
||||
--define "_sourcedir $(pwd)" \
|
||||
--define "_srcrpmdir $(pwd)"
|
||||
|
||||
- name: Upload SRPM artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: srpm
|
||||
path: '*.src.rpm'
|
||||
|
||||
copr:
|
||||
name: Publish to COPR
|
||||
runs-on: fedora
|
||||
needs: rpm
|
||||
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
|
||||
steps:
|
||||
- name: Download SRPM
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: srpm
|
||||
|
||||
- name: Configure copr-cli
|
||||
run: |
|
||||
mkdir -p ~/.config
|
||||
echo "${{ secrets.COPR_CONFIG }}" > ~/.config/copr
|
||||
|
||||
- name: Submit build to COPR
|
||||
run: copr-cli build monsoon *.src.rpm
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,5 +1,8 @@
|
||||
/target
|
||||
/dist
|
||||
/node_modules
|
||||
/vendor
|
||||
*.tar.gz
|
||||
*.src.rpm
|
||||
*.log
|
||||
.env
|
||||
|
||||
17
data/monsoon-server.service
Normal file
17
data/monsoon-server.service
Normal file
@@ -0,0 +1,17 @@
|
||||
[Unit]
|
||||
Description=Monsoon BitTorrent Server
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/monsoon-server
|
||||
User=monsoon
|
||||
Group=monsoon
|
||||
Environment=MONSOON_WEB_DIR=/usr/share/monsoon/web
|
||||
StateDirectory=monsoon
|
||||
ConfigurationDirectory=monsoon
|
||||
CacheDirectory=monsoon
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
23
dist.sh
Executable file
23
dist.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
VERSION=$(grep '^version' monsoon-server/Cargo.toml | head -1 | cut -d'"' -f2)
|
||||
NAME=monsoon
|
||||
|
||||
echo "Packaging ${NAME}-${VERSION}..."
|
||||
|
||||
# Source tarball from git
|
||||
git archive --prefix=${NAME}-${VERSION}/ HEAD | gzip > ${NAME}-${VERSION}.tar.gz
|
||||
echo " Created ${NAME}-${VERSION}.tar.gz"
|
||||
|
||||
# Vendored Rust dependencies (includes git deps like vortex)
|
||||
cargo vendor vendor/
|
||||
tar czf ${NAME}-${VERSION}-vendor.tar.gz vendor/
|
||||
rm -rf vendor/
|
||||
echo " Created ${NAME}-${VERSION}-vendor.tar.gz"
|
||||
|
||||
echo ""
|
||||
echo "To build SRPM:"
|
||||
echo " rpmbuild -bs ${NAME}.spec \\"
|
||||
echo " --define \"_sourcedir \$(pwd)\" \\"
|
||||
echo " --define \"_srcrpmdir \$(pwd)\""
|
||||
125
monsoon.spec
Normal file
125
monsoon.spec
Normal file
@@ -0,0 +1,125 @@
|
||||
Name: monsoon
|
||||
Version: 0.1.0
|
||||
Release: 1%{?dist}
|
||||
Summary: A fast BitTorrent client powered by io-uring
|
||||
|
||||
License: GPL-3.0-or-later
|
||||
URL: https://git.lair.cafe/monsoon/monsoon
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
Source1: %{name}-%{version}-vendor.tar.gz
|
||||
|
||||
ExclusiveArch: x86_64
|
||||
|
||||
BuildRequires: rust >= 1.85
|
||||
BuildRequires: cargo
|
||||
BuildRequires: gcc
|
||||
BuildRequires: webkit2gtk4.1-devel
|
||||
BuildRequires: gtk3-devel
|
||||
BuildRequires: libsoup3-devel
|
||||
BuildRequires: pango-devel
|
||||
BuildRequires: gdk-pixbuf2-devel
|
||||
BuildRequires: glib2-devel
|
||||
BuildRequires: libappindicator-gtk3-devel
|
||||
BuildRequires: nodejs
|
||||
BuildRequires: pnpm
|
||||
BuildRequires: desktop-file-utils
|
||||
BuildRequires: libappstream-glib
|
||||
BuildRequires: systemd-rpm-macros
|
||||
|
||||
%description
|
||||
Monsoon is a modern BitTorrent client for the GNOME desktop,
|
||||
built on the high-performance Vortex bittorrent engine which uses
|
||||
Linux io-uring for efficient I/O. It supports magnet links,
|
||||
DHT peer discovery, and simultaneous multi-torrent management.
|
||||
|
||||
%package server
|
||||
Summary: Monsoon headless BitTorrent server with REST API
|
||||
Requires(pre): shadow-utils
|
||||
|
||||
%description server
|
||||
Headless BitTorrent daemon with REST API, WebSocket event streaming,
|
||||
and web GUI for remote torrent management. Designed for deployment
|
||||
on LAN servers to offload torrent downloading with completion
|
||||
notifications for post-download automation.
|
||||
|
||||
%prep
|
||||
%autosetup
|
||||
tar xf %{SOURCE1}
|
||||
mkdir -p .cargo
|
||||
cat > .cargo/config.toml << 'EOF'
|
||||
[source.crates-io]
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/grenade/vortex.git?branch=fix-double-panic"]
|
||||
git = "https://github.com/grenade/vortex.git"
|
||||
branch = "fix-double-panic"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source.vendored-sources]
|
||||
directory = "vendor"
|
||||
EOF
|
||||
|
||||
%build
|
||||
# Build web GUI for server
|
||||
cd monsoon-web && pnpm install --offline && pnpm build && cd ..
|
||||
|
||||
# Build server binary
|
||||
cargo build --release -p monsoon-server
|
||||
|
||||
# Build desktop frontend
|
||||
pnpm install --offline
|
||||
pnpm build
|
||||
|
||||
# Build desktop binary (reads frontend from dist/)
|
||||
cargo build --release -p monsoon
|
||||
|
||||
%install
|
||||
# Desktop app
|
||||
install -Dm755 target/release/monsoon %{buildroot}%{_bindir}/monsoon
|
||||
install -Dm644 data/cafe.lair.monsoon.desktop %{buildroot}%{_datadir}/applications/cafe.lair.monsoon.desktop
|
||||
install -Dm644 data/cafe.lair.monsoon.metainfo.xml %{buildroot}%{_metainfodir}/cafe.lair.monsoon.metainfo.xml
|
||||
install -Dm644 src-tauri/icons/icon.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/cafe.lair.monsoon.png
|
||||
install -Dm644 src-tauri/icons/128x128.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/cafe.lair.monsoon.png
|
||||
install -Dm644 src-tauri/icons/32x32.png %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/cafe.lair.monsoon.png
|
||||
|
||||
# Server
|
||||
install -Dm755 target/release/monsoon-server %{buildroot}%{_bindir}/monsoon-server
|
||||
install -Dm644 data/monsoon-server.service %{buildroot}%{_unitdir}/monsoon-server.service
|
||||
install -dm755 %{buildroot}%{_datadir}/monsoon/web
|
||||
cp -r monsoon-web/dist/* %{buildroot}%{_datadir}/monsoon/web/
|
||||
|
||||
%check
|
||||
desktop-file-validate %{buildroot}%{_datadir}/applications/cafe.lair.monsoon.desktop
|
||||
appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/cafe.lair.monsoon.metainfo.xml
|
||||
|
||||
%pre server
|
||||
getent group monsoon >/dev/null || groupadd -r monsoon
|
||||
getent passwd monsoon >/dev/null || useradd -r -g monsoon -d /var/lib/monsoon -s /sbin/nologin monsoon
|
||||
|
||||
%post server
|
||||
%systemd_post monsoon-server.service
|
||||
|
||||
%preun server
|
||||
%systemd_preun monsoon-server.service
|
||||
|
||||
%postun server
|
||||
%systemd_postun_with_restart monsoon-server.service
|
||||
|
||||
%files
|
||||
%license LICENSE
|
||||
%doc README.md
|
||||
%{_bindir}/monsoon
|
||||
%{_datadir}/applications/cafe.lair.monsoon.desktop
|
||||
%{_metainfodir}/cafe.lair.monsoon.metainfo.xml
|
||||
%{_datadir}/icons/hicolor/*/apps/cafe.lair.monsoon.png
|
||||
|
||||
%files server
|
||||
%license LICENSE
|
||||
%doc README.md
|
||||
%{_bindir}/monsoon-server
|
||||
%{_unitdir}/monsoon-server.service
|
||||
%{_datadir}/monsoon/
|
||||
|
||||
%changelog
|
||||
* Sun Apr 05 2026 Rob Thijssen <grenade@rob.tn> - 0.1.0-1
|
||||
- Initial package
|
||||
Reference in New Issue
Block a user