Desenvolvimento
cargo fmt --check && cargo clippy --all-targets -- -D warnings && cargo test| Os testes cobrem | |
|---|---|
| Analisador e conversão | com examples/telegram e examples/whatsapp |
| Links de compartilhamento | isolamento de visitantes, bloqueio por PIN, lista de mídia permitida, salas, nomes, bloqueios, contorno de autenticação |
| Cliente MCP | servidores simulados de cada era do protocolo (HTTP, SSE legado, stdio) |
| Relay | hub, nomes, encaminhamento |
O crate de desktop é separado: cd desktop && cargo check.
Estrutura
src/ servidor (axum), analisadores, agente LLM, cliente MCP, links de compartilhamento, relay, Telegram
server/ a API HTTP do proprietário, um arquivo por área: recursos, envios, exportações, chats,
mensagens, configurações, mídia; mod.rs monta os roteadores
share_api/ links de compartilhamento: owner.rs (gerenciar links e visitantes), visitor.rs (/s/…)
web/ a interface: index.html, app.css e js/ (servido como um único app.js), embutido no binário
js/ um arquivo por área da interface, numerado na ordem de carregamento (um script, um escopo)
desktop/ app Tauri em torno do mesmo servidor
deploy/ Caddy + Docker Compose
examples/ duas exportações fictíciasA documentação e a página inicial do iroof.top não estão neste repositório. Elas ficam em irooftop/irooftop.github.io: docs/ (este site) e landing/.
Documentação
A documentação fica em irooftop/irooftop.github.io. Ela usa as imagens e a versão do app deste repositório: clone os dois lado a lado e compile por lá.
cd irooftop.github.io/docs
npm ci
ROOFTOP_SRC=../../rooftop npm run dev # http://localhost:5173/
ROOFTOP_SRC=../../rooftop npm run build # docs/.vitepress/distO site é publicado em irooftop.github.io a cada push para main desse repositório que altere docs/. O demo.svg é gerado por python3 scripts/demo-svg.py no repositório do app (SVG e CSS puros, para o GitHub exibir).
Publicar uma versão
subir Cargo.toml ─▶ tag vX.Y.Z ─┬─▶ Release: crates.io + imagem ghcr.io (amd64 + arm64, runners nativos)
└─▶ desktop: instaladores ─▶ publicar a release (mais recente) ─▶ Homebrew: fórmula + cask- Suba o
versionemCargo.toml(e emdesktop/), faça commit e envie uma tagvX.Y.Z. A tag precisa ser numérica para o MSI do Windows. Tudo o que vem depois roda sem mais cliques. - Release publica o crate (segredo
CARGO_REGISTRY_TOKEN, ambientecrates-io) e a imagem Docker: um job por arquitetura em um runner nativo (ubuntu-latest,ubuntu-24.04-arm) envia por digest, e um jobmergecria as tags multiarquitetura. Execute manualmente comdry_runpara verificar a publicação do crate. - desktop gera os instaladores para macOS (arm64, x64), Windows e Linux em uma release rascunho. Quando todos estão anexados, o job
publishpreenche as notas de release geradas, publica a release e a marca como mais recente. - O job
homebrewentão chama o Homebrew, que enviaFormula/rooftop.rbeCasks/irooftop.rbparairooftop/homebrew-tap. Ele precisa do segredoHOMEBREW_TAP_TOKEN(token de granularidade fina,irooftop/homebrew-tap, Contents: leitura e escrita) ouHOMEBREW_TAP_DEPLOY_KEY; sem nenhum dos dois ele pula com um aviso. (Uma release publicada comGITHUB_TOKENnão dispararelease: published, por isso a chamada é explícita; publicar uma release manualmente ainda aciona o Homebrew por esse evento.)
Para repetir a atualização do tap de uma tag existente, por exemplo depois de adicionar o segredo:
gh workflow run homebrew.yml -f tag=v0.3.0scripts/homebrew-tap.sh vX.Y.Z <cópia do tap> gera os mesmos arquivos localmente. Se os instaladores de uma tag falharam, execute de novo os jobs desktop que falharam: publish e homebrew seguem assim que passarem.