Entwicklung
cargo fmt --check && cargo clippy --all-targets -- -D warnings && cargo test| Tests decken ab | |
|---|---|
| Parser und Konvertierung | gegen examples/telegram und examples/whatsapp |
| Share-Links | Besucherisolation, PIN-Sperre, Medien-Allowlist, Räume, Namen, Blockierung, Auth-Umgehung |
| MCP-Client | Mock-Server jeder Protokoll-Ära (HTTP, Legacy-SSE, stdio) |
| Relay | Hub, Namen, Weiterleitung |
Das Desktop-Crate ist separat: cd desktop && cargo check.
Aufbau
src/ Server (axum), Parser, LLM-Agent, MCP-Client, Share-Links, Relay, Telegram
server/ die HTTP-API des Eigentümers, eine Datei pro Bereich: Assets, Uploads, Exporte, Chats,
Nachrichten, Einstellungen, Medien; mod.rs baut die Router
share_api/ Share-Links: owner.rs (Links und Besucher verwalten), visitor.rs (/s/…)
web/ die Oberfläche: index.html, app.css und js/ (als eine app.js ausgeliefert), in das Binary eingebettet
js/ eine Datei pro Bereich der Oberfläche, in Ladereihenfolge nummeriert (ein Skript, ein Gültigkeitsbereich)
desktop/ Tauri-App um denselben Server
deploy/ Caddy + Docker Compose
examples/ zwei fiktive ExporteDie Dokumentation und die Startseite von iroof.top sind nicht in diesem Repository. Sie liegen in irooftop/irooftop.github.io: docs/ (diese Seite) und landing/.
Dokumentation
Die Dokumentation liegt in irooftop/irooftop.github.io. Sie übernimmt die Bilder und die App-Version aus diesem Repository: Klone beide nebeneinander und baue dort.
cd irooftop.github.io/docs
npm ci
ROOFTOP_SRC=../../rooftop npm run dev # http://localhost:5173/
ROOFTOP_SRC=../../rooftop npm run build # docs/.vitepress/distDie Seite wird bei jedem Push auf main dieses Repositorys, der docs/ ändert, unter irooftop.github.io veröffentlicht. demo.svg wird mit python3 scripts/demo-svg.py im App-Repository erzeugt (reines SVG und CSS, damit GitHub es anzeigt).
Veröffentlichen
Cargo.toml anheben ─▶ Tag vX.Y.Z ─┬─▶ Release: crates.io + ghcr.io-Image (amd64 + arm64, native Runner)
└─▶ desktop: Installer ─▶ Release veröffentlichen (neueste) ─▶ Homebrew: Formel + Cask- Erhöhe
versioninCargo.toml(und indesktop/), committe und push einen TagvX.Y.Z. Der Tag muss numerisch sein, für das Windows-MSI. Alles Weitere läuft dann ohne weitere Klicks. - Release veröffentlicht das Crate (Secret
CARGO_REGISTRY_TOKEN, Umgebungcrates-io) und das Docker-Image: ein Job pro Architektur auf einem nativen Runner (ubuntu-latest,ubuntu-24.04-arm) pusht per Digest, und einmerge-Job erstellt die Multi-Arch-Tags. Manuell mitdry_runausführen, um die Crate-Veröffentlichung zu prüfen. - desktop baut die Installer für macOS (arm64, x64), Windows und Linux in einen Entwurfs-Release. Wenn alle angehängt sind, füllt sein Job
publishdie generierten Release-Notizen ein, veröffentlicht den Release und markiert ihn als neueste. - Dann ruft sein Job
homebrewHomebrew auf, dasFormula/rooftop.rbundCasks/irooftop.rbnachirooftop/homebrew-tappusht. Dafür braucht es das SecretHOMEBREW_TAP_TOKEN(Fine-grained-Token,irooftop/homebrew-tap, Contents: Lesen und Schreiben) oderHOMEBREW_TAP_DEPLOY_KEY; ohne eines überspringt es mit einem Hinweis. (Ein mitGITHUB_TOKENveröffentlichter Release löstrelease: publishednicht aus, deshalb ist der Aufruf explizit; wer einen Release von Hand veröffentlicht, löst Homebrew weiterhin über dieses Ereignis aus.)
Den Tap-Update für einen bestehenden Tag erneut ausführen, zum Beispiel nach dem Hinzufügen des Secrets:
gh workflow run homebrew.yml -f tag=v0.3.0scripts/homebrew-tap.sh vX.Y.Z <Tap-Checkout> erzeugt dieselben Dateien lokal. Sind die Installer eines Tags fehlgeschlagen, führe die fehlgeschlagenen desktop-Jobs erneut aus: publish und homebrew folgen, sobald sie bestehen.