[![Clowder on crates.io](https://img.shields.io/crates/v/clowder.svg)](https://crates.io/crates/clowder) [![Clowder on travis-ci.org](https://api.travis-ci.org/musec/clowder.svg)](https://travis-ci.org/musec/clowder) ## Getting started ### GitHub Clowder uses OAuth for authentication, with the current provider being GitHub. At your local site, you need to create a [GitHub OAuth application](https://github.com/settings/developers) with your own Client ID and Client Secret. Set up environment variables containing these values, or put them in a `.env` file in your source directory: ```sh echo "CLOWDER_GH_CLIENT_ID=aaaaaaaaaa" > .env echo "CLOWDER_GH_CLIENT_SECRET=aaaaaaaaaa" >> .env ``` ### Rust For the moment, we depend on crates that depend on Rust nightly (see [SergioBenitez/Rocket#19](https://github.com/SergioBenitez/Rocket/issues/19) for our main blocker). You will likely want to use [Rustup](https://www.rustup.rs) to install the nightly version of Rust. ### Database Clowder requires a database to be created that is accessible to the user running the service. Using Postgres (at least on FreeBSD), this looks like: ```sh # service postgresql initdb # service postgresql start # su - postgres $ createuser ${username} # with a username like, e.g., clowder $ psql postgres postgres=# create database clowder; postgres=# grant all on database clowder to ${username}; ``` You should set the database URL in an environment variable, or in a `.env` file within your source directory: ```sh $ echo "export DATABASE_URL=postgres://localhost/clowder" >> .env ``` Once the database has been created, we use the [Diesel](https://crates.io/crates/diesel) ORM to initialize it: ```sh $ cargo install diesel_cli $ cd path/to/clowder/source $ diesel migration run ``` ### Clowder Once Rust and the Clowder database have been set up, you can build and run Clowder! ```sh $ cargo build $ cargo run ``` ## Development environment ### Fake user account You can set `CLOWDER_FAKE_GITHUB_USERNAME` in your environment (or `.env` file) to provide a username to be treated as if it were obtained from the normal GitHub OAuth workflow. ### Reloading For development purposes, I like to use [cargo-watch](https://crates.io/crates/cargo-watch) to rebuild whenever I change a source file: ```sh $ cargo watch --ignore '*.swp' --exec run ``` This goes quite nicely with LiveReload.