# Development Setup ## To quickly make changes: We have a docker-compose config that you can use to quickly spin up dev environment. From the root of the repo, run: ```bash $ docker-compose -d up ``` ### Logs from docker: - Logs from database and web server as they are generated: ```bash $ docker-compose logs -f ``` - from just webserver: ```bash $ docker-compose logs -f mcaptcha ``` ## Setting up elaborate development environment ### Toolchain You'll have to install before you can start writing code. 1. Install Rust: Install Cargo(Rust toolchain) using [rustup](https://rustup.rs/) with: ``` $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` 2. Install Node `v14.16.0`: Please refer to [official instructions](https://nodejs.org/en/download/) 3. Install yarn: `npm install -g yarn` For more details, refer to [official instructions](https://yarnpkg.com/getting-started/install) 4. GNU Make: If you are on Linux, it's probably already installed on your machine. You can check it's existence by running: ```bash $ make --version ``` If it's not available, you download it with your package manager or refer to [official instructions](https://www.gnu.org/software/make/) ### External Dependencies: mCaptcha currently implements support for the following database: 1. Postgres 2. mariadb(MySQL) For development purposes, currently it is recommended to setup both databases as tests will break without it. In future, mechanisms will be implemented for working with select databases. ### Postgres database: I use Postgres in Docker. 1. To install Docker, please refer to [official instructions](https://docs.docker.com/engine/install/]. 2. Create create database user: ```bash $ docker create --name mcaptcha-postgres \ -e POSTGRES_PASSWORD=password \ -p 5432:5432 postgres ``` 3. Start database container: ```bash $ docker start mcaptcha-postgres ``` 4. Set configurations: ```bash cd mcaptcha # your copy of https://github.com/mCaptcha/mcaptcha echo 'export POSTGRES_DATABASE_URL="postgres://postgres:password@localhost:5432/postgres"' >> .env ``` ### mariadb database I use mariadb also in Docker 1. To install Docker, please refer to [official instructions](https://docs.docker.com/engine/install/]. 2. Create create database user: ```bash docker create \ -p 3306:3306 \ --name some-mariadb \ --env MARIADB_USER=maria \ --env MARIADB_PASSWORD=password \ --env MARIADB_ROOT_PASSWORD=password \ --env MARIADB_DATABASE=maria \ mariadb:latest ``` 3. Start database container: ```bash docker start mcaptcha-mariadb ``` 4. Set configurations: ```bash cd mcaptcha # your copy of https://github.com/mCaptcha/mcaptcha echo 'export MARIA_DATABASE_URL="mysql://maria:password@localhost/maria"' >> .env ``` ### Database migrations This step is only required when migrations are updated. The server binary has inbuilt migrations manager but that can only be used after the server is compiled. Since we are trying to compile the server here, we can't use that. However, this project ships with a utility to run migrations! ```bash $ cd mcaptcha # your copy of https://github.com/mCaptcha/mcaptcha make migrate ``` That's it, you are all set! ## Build commands: ### Compile: ```bash $ cd mcaptcha # your copy of https://github.com/mCaptcha/mcaptcha $ make ``` ### Additional commands: ```bash ➜ mcaptcha git:(master) ✗ make help default Run app in debug mode clean Delete build artifacts coverage Generate code coverage report in HTML format dev-env Setup development environment doc Generate documentation docker Build Docker image docker-publish Build and publish Docker image frontend Build frontend frontend-test Run frontend tests lint Lint codebase migrate Run database migrations release Build app with release optimizations test Run all available tests xml-test-coverage Generate code coverage report in XML format help Prints help for targets with comments ```