Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
56 lines
3.0 KiB
Markdown
56 lines
3.0 KiB
Markdown
# Contributing to Sabiá
|
|
|
|
**English** · [Português](CONTRIBUTING.pt-BR.md)
|
|
|
|
Thanks for helping! Golden rules:
|
|
|
|
1. **Authorized auditing only.** Every new feature is for testing your own networks or networks you're authorized to test. Sensitive operations (deauthentication) require explicit confirmation and are recorded in the audit trail. PRs that hide activity from the trail or remove the confirmations are rejected.
|
|
2. **Test the parsers with real data.** New readers (radiotap, 802.11, EAPOL, pcap) need tests against known frames — see `crates/sabia-core/tests/` and the helpers in `crates/sabia-core/src/testutil.rs`. No parser without a test.
|
|
3. **Be honest about what works.** If a feature is Linux-only, or only covers WPA2-PSK, say so in `--help`, in the README and in the test.
|
|
|
|
## Workflow
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
cargo clippy --workspace --all-targets # as in CI (RUSTFLAGS=-D warnings)
|
|
cargo test --workspace
|
|
node scripts/check-ui-i18n.mjs # UI translation coverage
|
|
```
|
|
|
|
CI runs on Linux only (Gitea has one runner); run these before pushing — almost everything that fails CI shows up here in seconds. Documentation-only changes (`*.md`, `docs/`) are light on CI.
|
|
|
|
Live capture exists only on Linux (`AF_PACKET` + netlink); the code behind Windows and macOS paths still compiles and is covered by `cargo check`, but neither runs in CI nor is built for release.
|
|
|
|
## Releases
|
|
|
|
Pushing a `v*` tag makes the Gitea CI create the release (notes come from `CHANGELOG.md`, so update it first) and attach the Linux CLI (x86_64 and aarch64) and the desktop app for Linux **aarch64** and Windows. The runner is arm64, so the Linux **x86_64** desktop app comes from an x86_64 Linux machine:
|
|
|
|
```bash
|
|
scripts/build-gui.sh linux # AppImage + .deb in dist-gui/
|
|
API=https://git.lucasrguerra.dev.br/api/v1/repos/lucasrguerra/sabia TOKEN=... \
|
|
scripts/release-upload.sh vX.Y.Z dist-gui/*
|
|
```
|
|
|
|
There is no macOS build: it needs Apple's SDK and code signing, which a Linux runner cannot provide.
|
|
|
|
## Where to work
|
|
|
|
Module map in [docs/architecture.md](docs/architecture.md). What's missing and welcome is in the [ROADMAP](ROADMAP.md).
|
|
|
|
- **Frame parsing:** `radiotap.rs`, `dot11.rs`, `eapol.rs`.
|
|
- **Radio and system:** `iface.rs`, `netlink.rs`, `scan.rs`, `capture.rs`, `inject.rs`.
|
|
- **Handshake and cracking:** `handshake.rs`, `crack.rs`.
|
|
- **App and API:** `crates/sabia-cli/src/` and `apps/gui/`.
|
|
|
|
## Interface and translation
|
|
|
|
The source text of the interface is **Portuguese**; English comes from `apps/gui/ui/i18n-en.js`, applied at runtime by `i18n.js`. When adding or changing visible text, run `node scripts/check-ui-i18n.mjs` and include the translation — CI rejects Portuguese without an English pair. Don't translate user data (SSID, BSSID, values) or technical terms (WPA, EAPOL, pcap…).
|
|
|
|
## Documentation
|
|
|
|
Keep the pt/en pair: every `*.md` and `docs/*` file has a Portuguese version (`*.pt-BR.md`, `docs/pt-BR/`) and an English one.
|
|
|
|
## License
|
|
|
|
By contributing, you agree to license under [MIT](LICENSE-MIT) **or** [Apache-2.0](LICENSE-APACHE), like the rest of the project.
|