Ontwikkeling
cargo fmt --check && cargo clippy --all-targets -- -D warnings && cargo test| Tests dekken | |
|---|---|
| Parser en conversie | tegen examples/telegram en examples/whatsapp |
| Sharelinks | isolatie van bezoekers, PIN-vergrendeling, mediatoegestane lijst, kamers, namen, blokkeren, omzeilen van authenticatie |
| MCP-client | mockservers van elk protocoltijdperk (HTTP, verouderde SSE, stdio) |
| Relay | hub, namen, doorsturen |
De desktop-crate is apart: cd desktop && cargo check.
Indeling
src/ server (axum), parsers, LLM-agent, MCP-client, sharelinks, relay, Telegram
server/ de HTTP-API van de eigenaar, één bestand per gebied: bestanden, uploads, exports, chats,
berichten, instellingen, media; mod.rs bouwt de routers
share_api/ sharelinks: owner.rs (links en bezoekers beheren), visitor.rs (/s/…)
web/ de interface: index.html, app.css en js/ (als één app.js geserveerd), ingebouwd in de binary
js/ één bestand per gebied van de interface, genummerd in laadvolgorde (één script, één scope)
desktop/ Tauri-app rond dezelfde server
deploy/ Caddy + Docker Compose
examples/ twee fictieve exportsDe documentatie en de startpagina van iroof.top staan niet in deze repository. Ze staan in irooftop/irooftop.github.io: docs/ (deze site) en landing/.
Documentatie
De documentatie staat in irooftop/irooftop.github.io. Ze neemt de afbeeldingen en de appversie uit deze repository: kloon beide naast elkaar en bouw daar.
cd irooftop.github.io/docs
npm ci
ROOFTOP_SRC=../../rooftop npm run dev # http://localhost:5173/
ROOFTOP_SRC=../../rooftop npm run build # docs/.vitepress/distDe site wordt gepubliceerd op irooftop.github.io bij elke push naar main van die repository die docs/ raakt. demo.svg wordt gemaakt met python3 scripts/demo-svg.py in de apprepository (zuivere SVG en CSS, zodat GitHub hem weergeeft).
Uitgeven
Cargo.toml ophogen ─▶ tag vX.Y.Z ─┬─▶ Release: crates.io + ghcr.io-image (amd64 + arm64, native runners)
└─▶ desktop: installers ─▶ release publiceren (nieuwste) ─▶ Homebrew: formule + cask- Verhoog
versioninCargo.toml(en indesktop/), commit en push een tagvX.Y.Z. De tag moet numeriek zijn voor de Windows-MSI. Al het andere draait daarna zonder verdere klikken. - Release publiceert de crate (secret
CARGO_REGISTRY_TOKEN, omgevingcrates-io) en de Docker-image: één job per architectuur op een native runner (ubuntu-latest,ubuntu-24.04-arm) pusht per digest, en eenmerge-job maakt de multi-architectuur-tags. Draai het met de hand metdry_runom de crate-publicatie te controleren. - desktop bouwt de installers voor macOS (arm64, x64), Windows en Linux in een concept-release. Wanneer ze allemaal zijn toegevoegd, vult de
publish-job de gegenereerde releasenotities in, publiceert de release en markeert hem als nieuwste. - Zijn
homebrew-job roept daarna Homebrew aan, datFormula/rooftop.rbenCasks/irooftop.rbpusht naarirooftop/homebrew-tap. Daarvoor is het secretHOMEBREW_TAP_TOKENnodig (fine-grained token,irooftop/homebrew-tap, Contents: lezen en schrijven) ofHOMEBREW_TAP_DEPLOY_KEY; zonder één van beide slaat het over met een melding. (Een release die metGITHUB_TOKENis gepubliceerd, activeertrelease: publishedniet, daarom is de aanroep expliciet; een release met de hand publiceren activeert Homebrew nog steeds via die gebeurtenis.)
De tap-update voor een bestaande tag opnieuw draaien, bijvoorbeeld nadat je het secret hebt toegevoegd:
gh workflow run homebrew.yml -f tag=v0.3.0scripts/homebrew-tap.sh vX.Y.Z <tap-checkout> maakt dezelfde bestanden lokaal. Als de installers van een tag zijn mislukt, draai dan de mislukte desktop-jobs opnieuw: publish en homebrew volgen zodra ze slagen.