Skip to content

Commit

Permalink
add simple dev environment
Browse files Browse the repository at this point in the history
(cherry picked from commit 24a9698)
  • Loading branch information
jensilo committed Oct 29, 2024
1 parent b32900c commit 804446d
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 0 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,7 @@ Join us on this journey, whether you are a contributor, user or just a spectator
The project and all participants are looking forward to your feedback, as we are continuously working to improve
HARMONY and EIFFEL. The project is in active development.

---

For a simple development environment, consult [docker/dev](docker/dev/README.md).

10 changes: 10 additions & 0 deletions docker/dev/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM golang:latest

RUN curl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

WORKDIR /app

COPY ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
78 changes: 78 additions & 0 deletions docker/dev/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# HARMONY Development Environment Guide

## Getting Started

The development environment runs in Docker containers and features hot-reload capabilities for Go code, and the project's dependencies (e.g. templates, translations, ...) using Air.

### Prerequisites

- Docker and Docker Compose installed (should come with Docker Desktop for Windows pre-installed!)
- Git (for cloning the repository)

### Starting the Development Environment

1. Navigate to the development docker directory:

```bash
cd docker/dev
```

2. Start the environment:

```bash
docker compose up --build
```

The application will be available at `http://localhost:8080`. However, you'll still need DB migrations.

You'll also have to set up your authorization provider of choice, consult the `config/auth.toml` for this. Consider putting your overwrite in `config/local/auth.toml` so that it's not commited to the VCS by accident.

### Database Migrations

Migrations can be controlled via the `RUN_MIGRATIONS` environment variable in `docker-compose.yml`:

```yaml
environment:
RUN_MIGRATIONS: true # or false
```
**Important Notes:**
- This setting can only be changed in the `docker-compose.yml` file
- Setting it to `true` will run migrations on container startup
- While migrations are versioned, keeping this enabled could lead to unexpected database changes when pulling new
migrations from remote
- For controlled database updates, it's recommended to keep this `false` and run migrations manually when needed

### Useful Docker Compose Commands

```bash
# Start in detached mode (run in background)
docker compose up -d
# Force recreation of containers
docker compose up --force-recreate
# Rebuild containers and start
docker compose up --build
# Stop and remove containers
docker compose down
# View logs when running in detached mode
docker compose logs -f
# Common combinations
docker compose up -d --build # Rebuild and start in background
docker compose up --force-recreate --build # Full rebuild and restart
```

### Development Workflow

1. The entire project directory is mounted into the container
2. Changes to Go files trigger automatic rebuilds via Air
3. Application logs are visible in the Docker Compose output
4. Database data persists across container restarts via Docker volumes

Remember to rebuild the containers (`--build`) when making changes to the Docker configuration files or when new
dependencies are added to the project.
42 changes: 42 additions & 0 deletions docker/dev/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
services:
dev-pg:
image: postgres:latest
container_name: harmony-dev-pg
environment:
POSTGRES_USER: harmony
POSTGRES_PASSWORD: devpassword
POSTGRES_DB: harmony
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- harmony-dev-pg-data:/var/lib/postgresql/data
expose:
- "5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U harmony"]
interval: 1s
timeout: 1s
retries: 15

dev-app:
build:
context: .
container_name: harmony-dev-app
volumes:
- ../..:/app
environment:
DB_HOST: dev-pg
DB_PORT: 5432
DB_USER: harmony
DB_PASS: devpassword
DB_NAME: harmony
PORT: 8080
RUN_MIGRATIONS: true
ports:
- "8080:8080"
depends_on:
dev-pg:
condition: service_healthy

volumes:
harmony-dev-pg-data:
name: harmony-dev-pg-data
17 changes: 17 additions & 0 deletions docker/dev/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash
set -e

if [ "$RUN_MIGRATIONS" = "true" ]; then
# TODO simplify, to speed up
echo "Building migration tool..."
go build -o migrate src/cmd/migrate/*.go

echo "Running migrations..."
./migrate up

echo "Removing migration tool..."
rm ./migrate
fi

echo "Starting development server..."
exec air

0 comments on commit 804446d

Please sign in to comment.