# Tenebrous Sheets An open source character sheet service for tabletop roleplaying games. Currently under heavy development. ## The Stack This project makes use of these technologies: - Rust - Rocket Web Framework - Tonic gRPC Framework - Typescript Building is backed by: cargo, npm, and webpack. ## Build Instructions These are very basic build instructions. They assume you already have cargo set up and installed. ### Initial Setup Quick initial setup instructions that will set up a development environment. First, install dependencies by either using the command below (Void Linux), or reading the "Dependencies Required" section: ``` xbps-install sqlite sqlite-devel protobuf nodejs docker ``` Then run the required `cargo` commands to install management tools and create a development database: ``` cargo install --version=0.2.0 sqlx-cli cargo install cargo-run-script cargo run --bin tenebrous-migrate ``` ### Dependencies Required Dependencies required to build the project. The exact installation method depends on your OS. * sqlite3 and development headers (Void Linux: `xbps-install sqlite sqlite-devel`, Ubuntu: `apt install sqlite3 libsqlite3-dev`). * protoc: protocol buffers compiler. Needed to compile protobuf files for both the server and web frontends (Void Linux: `xbps-install protobuf`). * Node and npm: Needed to run webpack for compiling and injecting Typescript into various web pages (Void Linux: `xbps-install nodejs`). * Docker: Needed to run the grpc proxy (Void Linux `xbps-install docker`). ### Run Application Command line "instructions" to build and run the application: ``` cargo run-script grpc-proxy # only required if proxy not already running cargo run ``` The sqlite database is created in the directory `cargo run` was invoked from by default. You can also pass a path to a different location as a single argument to the program. ## Development Development instructions. To set up a local database, or run migrations, run: ``` cargo run --bin tenebrous-migrate ``` ### Database Queries and Migrations When adding/updating a compile-checked query or a migration, you need to update the SQLx data JSON file: ``` cargo sqlx prepare -- --bin tenebrous ``` ### gRPC-Web Proxy The frontend web application makes use of the gRPC-Web protocol to call gPRC endpoints from the browser. This requires a proxy to translate the calls from the browser to HTTP2 calls gRPC understands. For development, executing the `cargo run-script grpc-proxy` command will start the envoy proxy recommended by Google's gRPC-Web project. The envoy configuration assumes you are on Linux. If you are using Mac OS or Windows, see the note in the envoy configuration. [rustup]: https://rust-lang.github.io/rustup/index.html