Add initial project configuration and setup for Reference Board Viewer application. Include EditorConfig for consistent coding styles, pre-commit hooks for linting and formatting, Docker Compose for local development with PostgreSQL and MinIO, and a Nix flake for development environment management. Establish CI/CD pipeline for automated testing and deployment.
This commit is contained in:
135
flake.nix
Normal file
135
flake.nix
Normal file
@@ -0,0 +1,135 @@
|
||||
{
|
||||
description = "Reference Board Viewer - Web-based visual reference management";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
|
||||
pythonEnv = pkgs.python3.withPackages (ps: with ps; [
|
||||
# Core backend dependencies
|
||||
fastapi
|
||||
uvicorn
|
||||
sqlalchemy
|
||||
alembic
|
||||
pydantic
|
||||
# Auth & Security
|
||||
python-jose
|
||||
passlib
|
||||
# Image processing
|
||||
pillow
|
||||
# Storage
|
||||
boto3
|
||||
# HTTP & uploads
|
||||
httpx
|
||||
python-multipart
|
||||
# Testing
|
||||
pytest
|
||||
pytest-cov
|
||||
pytest-asyncio
|
||||
]);
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
# Python environment
|
||||
pythonEnv
|
||||
uv
|
||||
ruff
|
||||
|
||||
# Database
|
||||
postgresql
|
||||
|
||||
# Frontend
|
||||
nodejs
|
||||
nodePackages.npm
|
||||
|
||||
# Image processing
|
||||
imagemagick
|
||||
|
||||
# Storage
|
||||
minio
|
||||
minio-client
|
||||
|
||||
# Development tools
|
||||
git
|
||||
direnv
|
||||
|
||||
# Optional: monitoring/debugging
|
||||
# redis
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo "🚀 Reference Board Viewer Development Environment"
|
||||
echo ""
|
||||
echo "📦 Versions:"
|
||||
echo " Python: $(python --version)"
|
||||
echo " Node.js: $(node --version)"
|
||||
echo " PostgreSQL: $(psql --version | head -n1)"
|
||||
echo " MinIO: $(minio --version | head -n1)"
|
||||
echo ""
|
||||
echo "📚 Quick Commands:"
|
||||
echo " Backend: cd backend && uvicorn app.main:app --reload"
|
||||
echo " Frontend: cd frontend && npm run dev"
|
||||
echo " Database: psql webref"
|
||||
echo " Tests: cd backend && pytest --cov"
|
||||
echo " MinIO: minio server ~/minio-data --console-address :9001"
|
||||
echo ""
|
||||
echo "📖 Documentation:"
|
||||
echo " API Docs: http://localhost:8000/docs"
|
||||
echo " App: http://localhost:5173"
|
||||
echo " MinIO UI: http://localhost:9001"
|
||||
echo ""
|
||||
|
||||
# Set up environment variables
|
||||
export DATABASE_URL="postgresql://localhost/webref"
|
||||
export PYTHONPATH="$PWD/backend:$PYTHONPATH"
|
||||
'';
|
||||
};
|
||||
|
||||
# Package definitions (for production deployment)
|
||||
packages = {
|
||||
# Backend package
|
||||
backend = pkgs.python3Packages.buildPythonApplication {
|
||||
pname = "webref-backend";
|
||||
version = "1.0.0";
|
||||
src = ./backend;
|
||||
propagatedBuildInputs = with pkgs.python3Packages; [
|
||||
fastapi
|
||||
uvicorn
|
||||
sqlalchemy
|
||||
alembic
|
||||
pydantic
|
||||
python-jose
|
||||
passlib
|
||||
pillow
|
||||
boto3
|
||||
httpx
|
||||
python-multipart
|
||||
];
|
||||
};
|
||||
|
||||
# Frontend package
|
||||
frontend = pkgs.buildNpmPackage {
|
||||
pname = "webref-frontend";
|
||||
version = "1.0.0";
|
||||
src = ./frontend;
|
||||
npmDepsHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; # Update after first build
|
||||
buildPhase = ''
|
||||
npm run build
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp -r build/* $out/
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user