Visão geral
Como o monorepo é organizado e as regras que valem para qualquer contribuição.
O Acerola é um monorepo: cada plataforma vive isolada em acerola/, com sua própria stack, seu próprio README e seu próprio guia de contribuição completo. Nenhuma plataforma depende diretamente de outra — todas consomem as bibliotecas compartilhadas em lib/ via dependência path local (não git), então uma mudança em lib/p2p/ já reflete direto nos consumidores sem precisar publicar ou atualizar nada em outro lugar.
acerola/android/ e acerola/desktop/ nunca se enxergam diretamente — cada um implementa sua própria FFI/binding para consumir lib/p2p/. Toda comunicação entre dispositivos é P2P direta (LAN via mDNS) ou via o relay (acerola/relay/, construído sobre lib/relay/) quando fora da mesma rede.
Ferramentas necessárias
cargo-make (cargo install cargo-make) é usado pelos crates Rust individualmente — veja o guia de cada plataforma — e pelas tarefas de manutenção do monorepo inteiro, definidas no Makefile.toml da raiz. Com ele instalado, cargo make clean remove o target/ de todos os crates Rust do repo (lib/p2p, lib/relay, acerola/desktop/src-tauri, acerola/android/native/rust) de uma vez, sem precisar entrar em cada pasta.
Regras que valem para o monorepo inteiro
- Escopo por PR: um PR deve tocar uma única plataforma (
acerola/android/,acerola/desktop/,acerola/relay/,lib/p2p/oulib/relay/), salvo mudanças de fato compartilhadas (docs raiz,LICENSE,PRIVACY_POLICY.md). - Convenção de commit:
[tag](plataforma): descrição, por exemplo[fix](desktop): corrige leak de conexão no reader. Otagsegue os prefixosfeat,fix,docs,refactor,test,chore,ci,merge; aplataformaéandroid,desktop,p2p,relay(paraacerola/relay/),relay-lib(paralib/relay/) oumonorepopara mudanças na raiz. - Testes: cada plataforma tem seu próprio runner e sua própria automação via
cargo-make/Gradle/Vitest — veja o guia específico antes de rodar testes manualmente. lib/p2pé dependênciapathlocal:acerola/androideacerola/desktopconsomemlib/p2ppor caminho relativo noCargo.toml, não porgit. Uma mudança emlib/p2p/já vale pros dois consumidores no mesmo PR.
As próximas páginas desta seção cobrem como rodar e testar cada plataforma localmente. Para o resto (padrões de código detalhados, setup completo do ambiente), o guia específico de cada plataforma é a fonte de verdade.