Root repo of the nearby Rust components, folder structure:
/connections
nearby connections rust components
/crypto
shared crypto components
/presence
nearby presence rust components
If you don't already have a Rust toolchain, see rustup.rs.
Install cargo-deny
and cargo-fuzz
:
cargo install --locked cargo-deny cargo install cargo-fuzz
Our project requires specific versions of system dependencies like OpenSSL and protobuf in order to build correctly. To make the setup of this easier you can use Docker to handle setting up the environment in a container.
First install Docker then build and run the image:
sudo docker build -t nearby_rust:v1.0 . sudo docker run --rm -it nearby_rust:v1.0
Building the image creates a snapshot of the environment that has all of the system dependencies needed to start building and running all of the artifacts in the codebase.
Running the image runs check-everything.sh to verify all of the targets can successfully build and all of the tests pass in your new container environment.
To open a bash shell from the container environment:
sudo docker run -it nearby_rust:v1.0 bash
You can also setup VSCode to develop in a Docker container on a remote host that way you can make code changes and test them in the same environment without having to re-build the image.
This tool helps lint the project for the correct header files being present and is run in check_everything.sh
install go:
brew install go
Then install the addlicense tool to $HOME/go/bin
:
go install github.com/google/addlicense@latest
Optionally, if you prefer to avoid Go's default bin
dir that holds build output for all go projects, specify the GOPATH
env var to be the directory to install to, e.g. ~/local/addlicense
:
GOPATH=~/local/addlicense go install github.com/google/addlicense@latest
This will put the binary at ~/local/addlicense/bin/addlicense
instead of ~/go/bin/addlicense
.
Verify that it works:
$HOME/go/bin/addlicense -h
Then to auto generate the headers run:
$HOME/go/bin/addlicense -c "Google LLC" -l apache .
For more detailed commands see: https://github.com/google/addlicense
Check everything:
./scripts/check-everything.sh
Build everything:
cargo build --workspace --all-targets
Run tests:
cargo test --workspace
Generate Docs:
cargo doc --no-deps --workspace --open
Run linter on dependencies as configured in deny.toml
This will make sure all of our dependencies are using valid licenses and check for known existing security vulnerabilities, bugs and deprecated versions
cargo deny --workspace check
Update dependencies in Cargo.lock
to their latest in the currently specified version ranges (i.e. transitive deps):
cargo update
Check for outdated dependencies with cargo-outdated:
cargo outdated
Benchmarks are in benches
, and use Criterion .
cargo bench --workspace