We appreciate your interest in contributing to Charon!
- Complete Contributing Guide - Detailed development workflow, code standards, and PR process.
- Architecture Overview - In-depth understanding of Charon's architecture.
- Code Standards - Standards for Terraform and Python code.
- Testing Guide - Guidelines for testing changes.
- Fork and clone the repository
- Set up your development environment (see below)
- Read the architecture docs to understand the system
- Make your changes following our code standards
- Test thoroughly before submitting
- Submit a pull request with clear description
Charon includes a complete conda environment with all required tools:
# Create the conda environment
conda env create -f environment.yml
# Activate the environment
conda activate charon
# Or update existing environment
conda env update --file environment.yml --pruneThe conda environment includes:
- Python 3.11 with all dependencies
- Terraform for infrastructure management
- Pre-commit hooks and code quality tools (ruff, mypy, flake8)
- Testing framework (pytest) and security scanners (checkov, safety)
Open the project in VS Code with Dev Containers extension - includes all tools pre-configured.
Use descriptive branch names following this convention:
| Branch Type | Format | Example | |-------------|--------|---------| | Feature | feat/description
or feature/description | feat/add-grafana-tempo-datasource | | Bug Fix | fix/description |
fix/grafana-dashboard-metrics | | Documentation | docs/section | docs/update-grafana-service |
| Refactoring | refactor/component | refactor/terraform-variable-names | | Testing |
test/component | test/add-prometheus-scrape-tests |
Branching Guidelines:
- Use lowercase with hyphens for readability
- Keep names descriptive but concise (< 50 characters)
- Start with category prefix (feat/, fix/, docs/, etc.)
- Create branches from
mainfor new work - Rebase frequently to stay current with main
- Multi-Container StatefulSet Pattern - Standard deployment pattern with lifecycle automation
- Dependency Tree Management - Terraform dependency best practices
- Networking - VPN mesh, DNS, ingress
- Security - TLS, RBAC, secrets
- Adding New Services - How to add services to Charon
- VPN Enrollment - Connect devices to the VPN
- DNS Management - Automated DNS with Cloudflare
- Certificate Management - Let's Encrypt with cert-manager
- Terraform Variables - Complete variable reference
- Environment Variables - .env configuration
- Scripts Reference - Automation scripts documentation
- Use
countfor optional resources:count = var.service_enabled ? 1 : 0 - Never use
[0]indexing in depends_on - Terraform handles count automatically - Follow Dependency Patterns
- Run
terraform fmt -recursivebefore committing
- PEP 8 compliance
- Type hints for all functions
- Docstrings for public APIs
- Proper error handling
See Code Standards for complete details.
- Documentation: Full Documentation Index
- Issues: Found a bug? Open an issue
- Questions: Check Troubleshooting Guide
MIT License - see LICENSE file for details.
For complete contributing guidelines, see docs/development/contributing.md