yggdrasil-go/contrib/docker/devcontainer/README.md

2.9 KiB

Development Environment Setup

This document describes how to set up a development environment for Yggdrasil using Docker and VS Code Dev Containers.

Prerequisites

  • Docker installed and running
  • VS Code with the "Dev Containers" extension installed
  • Git configured with your user information
  1. Open this project in VS Code
  2. When prompted, click "Reopen in Container" or:
    • Press Ctrl+Shift+P (or Cmd+Shift+P on macOS)
    • Type "Dev Containers: Reopen in Container"
    • Select the option

VS Code will automatically build the development container and set up the environment with:

  • Go 1.23 with all necessary tools
  • Language server (gopls)
  • Linting (golangci-lint)
  • Debugging support (delve)
  • Git integration
  • Zsh shell with Oh My Zsh

Option 2: Manual Docker Container

If you prefer to use Docker directly:

Using Makefile commands:

# Build and run the development container
make -f Makefile dev

# Or build and run separately
make -f Makefile dev-build
make -f Makefile dev-run

# Get shell access to running container
make -f Makefile dev-shell

# Stop the container
make -f Makefile dev-stop

# Clean up
make -f Makefile dev-clean

Using Docker directly:

# Build the development image
docker build -f Dockerfile -t yggdrasil-dev .

# Run the container
docker run -it --rm \
  --name yggdrasil-dev \
  -v $(pwd):/workspace \
  -v ~/.gitconfig:/home/vscode/.gitconfig:ro \
  -p 9000:9000 \
  -p 9001:9001 \
  -p 9002:9002 \
  -p 9003:9003 \
  --privileged \
  --cap-add=NET_ADMIN \
  --device=/dev/net/tun \
  yggdrasil-dev

Development Features

The development environment includes:

  • Go Tools: gopls, delve debugger, goimports, golangci-lint, staticcheck
  • Editor Support: Syntax highlighting, auto-completion, debugging
  • Testing: Go test runner and coverage tools
  • Networking: Privileged access for network interface testing
  • Port Forwarding: Ports 9000-9003 exposed for Yggdrasil services

Building and Testing

Inside the container:

# Build the project
./build

# Run tests
go test ./...

# Generate configuration
./yggdrasil -genconf > yggdrasil.conf

# Run with configuration
./yggdrasil -useconf yggdrasil.conf

Tips

  1. Your local Git configuration is mounted into the container
  2. The workspace directory (/workspace) is mapped to your local project directory
  3. All changes made to source files are persistent on your host machine
  4. The container runs as a non-root user (vscode) for security
  5. Network capabilities are enabled for testing network-related features

Troubleshooting

  • If the container fails to start, ensure Docker has enough resources allocated
  • For network-related issues, verify that the container has the necessary privileges
  • If Go tools are missing, rebuild the container: make -f Makefile dev-clean dev-build