# Development environment

[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/babybuddy/babybuddy)

Click the Gitpod badge to open a new development environment in Gitpod or use the
information and steps below to set up a local development environment for Baby Buddy.

## Requirements

- Python 3.10+, pip, pipenv
- NodeJS 18.x and NPM 8.x (NVM recommended)
- Gulp
- Possibly `libpq-dev`
  - This is necessary if `psycopg2` can't find an appropriate prebuilt binary.

## Installation

1. Install pipenv per [Installing pipenv](https://pipenv.pypa.io/en/latest/installation/)

1. Install required Python packages, including dev packages

    ```shell
    pipenv install --three --dev
    ```

    If this fails, install `libpq-dev` (e.g. `sudo apt install libpq-dev`) and try again.

1. Installed Node 18.x (if necessary)

    ```shell
    nvm install 18
    ```

1. Activate Node 18.x

    ```shell
    nvm use
    ```

1. Install Gulp CLI

    ```shell
    npm install -g gulp-cli
    ```

1. Install required Node packages

    ```shell
    npm install
    ```

1. Set, at least, the `DJANGO_SETTINGS_MODULE` environment variable

    ```shell
    export DJANGO_SETTINGS_MODULE=babybuddy.settings.development
    ```

    This process will differ based on the host OS. The above example is for
    Linux-based systems. See [Configuration](../configuration/intro.md) for other
    settings and methods for defining them.

1. Migrate the database

    ```shell
    gulp migrate
    ```

1. Build assets and run the server

    ```shell
    gulp
    ```

    This command will also watch for file system changes to rebuild assets and
    restart the server as needed.

Open [http://127.0.0.1:8000](http://127.0.0.1:8000) and log in with the default
username and password (`admin`/`admin`).

## Alternative: https://devenv.sh/

1. Install devenv (linux/mac/windows subsystem for linux/docker) via https://devenv.sh/getting-started/
1. git clone the repo
1. here you have two options
    1. run `devenv shell` and then run `gulp`
    1. _OR_ run `devenv up` which automatically runs gulp/nodejs/python as well
1. Open [http://127.0.0.1:8000](http://127.0.0.1:8000) and log in with the default
username and password (`admin`/`admin`).

Devenv also generates the **.devcontainer for vscode**, and sets up **github codespaces support**. To run babybuddy in the devcontainer or codespaces, open a terminal after opening this repo in the devcontainer, which causes the dependencies to be installed via `devenv shell`. Then, run `gulp` to start the baby buddy server.

### Debugging in devenv + vscode
To debug in devenv + vscode/codespaces:

1. add a `.vscode/launch.json` file like this: 
```json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "env": {
                "DEBUG": "False"
            },
            "args": [
                "runserver"
            ],
            "django": true,
            "justMyCode": true
        }
    ]
}
```
2. Consider running `gulp fake --children 5 --days 7` as explained in the [gulp command reference](./gulp-command-reference.md) to add some fake data to the database
3. Click Run -> Start Debugging (F5) and set your breakpoints in the python as desired
