Refactor Dockerfile, entrypoint script, and README for streamlined uv integration
- Added `UV_NO_CACHE` environment variable to Dockerfile for improved dependency handling. - Updated entrypoint commands to use `uv run` for Python scripts and migrations. - Enhanced README with detailed `uv` usage instructions, including installation, dependency management, and troubleshooting. - Removed outdated `PATH` modifications for `uv` binaries in Dockerfile.
This commit is contained in:
@@ -9,18 +9,17 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
|
|||||||
PYTHONUNBUFFERED=1 \
|
PYTHONUNBUFFERED=1 \
|
||||||
PYTHONPATH=/app \
|
PYTHONPATH=/app \
|
||||||
UV_COMPILE_BYTECODE=1 \
|
UV_COMPILE_BYTECODE=1 \
|
||||||
UV_LINK_MODE=copy
|
UV_LINK_MODE=copy \
|
||||||
|
UV_NO_CACHE=1
|
||||||
|
|
||||||
# Install system dependencies and uv
|
# Install system dependencies and uv
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y --no-install-recommends gcc postgresql-client curl ca-certificates && \
|
apt-get install -y --no-install-recommends gcc postgresql-client curl ca-certificates && \
|
||||||
curl -LsSf https://astral.sh/uv/install.sh | sh && \
|
curl -LsSf https://astral.sh/uv/install.sh | sh && \
|
||||||
|
mv /root/.local/bin/uv* /usr/local/bin/ && \
|
||||||
apt-get clean && \
|
apt-get clean && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Add uv to PATH
|
|
||||||
ENV PATH="/root/.cargo/bin:$PATH"
|
|
||||||
|
|
||||||
# Copy dependency files
|
# Copy dependency files
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
|
|
||||||
@@ -51,18 +50,17 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
|
|||||||
PYTHONUNBUFFERED=1 \
|
PYTHONUNBUFFERED=1 \
|
||||||
PYTHONPATH=/app \
|
PYTHONPATH=/app \
|
||||||
UV_COMPILE_BYTECODE=1 \
|
UV_COMPILE_BYTECODE=1 \
|
||||||
UV_LINK_MODE=copy
|
UV_LINK_MODE=copy \
|
||||||
|
UV_NO_CACHE=1
|
||||||
|
|
||||||
# Install system dependencies and uv
|
# Install system dependencies and uv
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y --no-install-recommends postgresql-client curl ca-certificates && \
|
apt-get install -y --no-install-recommends postgresql-client curl ca-certificates && \
|
||||||
curl -LsSf https://astral.sh/uv/install.sh | sh && \
|
curl -LsSf https://astral.sh/uv/install.sh | sh && \
|
||||||
|
mv /root/.local/bin/uv* /usr/local/bin/ && \
|
||||||
apt-get clean && \
|
apt-get clean && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Add uv to PATH
|
|
||||||
ENV PATH="/root/.cargo/bin:$PATH"
|
|
||||||
|
|
||||||
# Copy dependency files
|
# Copy dependency files
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
|
|
||||||
|
|||||||
@@ -12,30 +12,40 @@ Production-ready FastAPI backend featuring:
|
|||||||
- **Multi-tenancy**: Organization-based access control with roles (Owner/Admin/Member)
|
- **Multi-tenancy**: Organization-based access control with roles (Owner/Admin/Member)
|
||||||
- **Testing**: 97%+ coverage with security-focused test suite
|
- **Testing**: 97%+ coverage with security-focused test suite
|
||||||
- **Performance**: Async throughout, connection pooling, optimized queries
|
- **Performance**: Async throughout, connection pooling, optimized queries
|
||||||
|
- **Modern Tooling**: uv for dependencies, Ruff for linting/formatting, mypy for type checking
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
- Python 3.11+
|
- Python 3.12+
|
||||||
- PostgreSQL 14+ (or SQLite for development)
|
- PostgreSQL 14+ (or SQLite for development)
|
||||||
- pip and virtualenv
|
- **[uv](https://docs.astral.sh/uv/)** - Modern Python package manager (replaces pip)
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create virtual environment
|
# Install uv (if not already installed)
|
||||||
python -m venv .venv
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
||||||
|
|
||||||
# Install dependencies
|
# Install all dependencies (production + dev)
|
||||||
pip install -r requirements.txt
|
cd backend
|
||||||
|
uv sync --extra dev
|
||||||
|
|
||||||
|
# Or use the Makefile
|
||||||
|
make install-dev
|
||||||
|
|
||||||
# Copy environment template
|
# Copy environment template
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# Edit .env with your configuration
|
# Edit .env with your configuration
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Why uv?**
|
||||||
|
- 🚀 10-100x faster than pip
|
||||||
|
- 🔒 Reproducible builds via `uv.lock` lockfile
|
||||||
|
- 📦 Better dependency resolution
|
||||||
|
- ⚡ Built by Astral (creators of Ruff)
|
||||||
|
|
||||||
### Database Setup
|
### Database Setup
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -49,6 +59,11 @@ alembic upgrade head
|
|||||||
### Run Development Server
|
### Run Development Server
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Using uv
|
||||||
|
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||||||
|
|
||||||
|
# Or activate environment first
|
||||||
|
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
||||||
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -57,6 +72,170 @@ API will be available at:
|
|||||||
- **Swagger Docs**: http://localhost:8000/docs
|
- **Swagger Docs**: http://localhost:8000/docs
|
||||||
- **ReDoc**: http://localhost:8000/redoc
|
- **ReDoc**: http://localhost:8000/redoc
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dependency Management with uv
|
||||||
|
|
||||||
|
### Understanding uv
|
||||||
|
|
||||||
|
**uv** is the modern standard for Python dependency management, built in Rust for speed and reliability.
|
||||||
|
|
||||||
|
**Key files:**
|
||||||
|
- `pyproject.toml` - Declares dependencies and tool configurations
|
||||||
|
- `uv.lock` - Locks exact versions for reproducible builds (commit to git)
|
||||||
|
|
||||||
|
### Common Commands
|
||||||
|
|
||||||
|
#### Installing Dependencies
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install all dependencies from lockfile
|
||||||
|
uv sync --extra dev
|
||||||
|
|
||||||
|
# Install only production dependencies (no dev tools)
|
||||||
|
uv sync
|
||||||
|
|
||||||
|
# Or use the Makefile
|
||||||
|
make install-dev # Install with dev dependencies
|
||||||
|
make sync # Sync from lockfile
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Adding Dependencies
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add a production dependency
|
||||||
|
uv add httpx
|
||||||
|
|
||||||
|
# Add a development dependency
|
||||||
|
uv add --dev pytest-mock
|
||||||
|
|
||||||
|
# Add with version constraint
|
||||||
|
uv add "fastapi>=0.115.0,<0.116.0"
|
||||||
|
|
||||||
|
# Add exact version
|
||||||
|
uv add "pydantic==2.10.6"
|
||||||
|
```
|
||||||
|
|
||||||
|
After adding dependencies, **commit both `pyproject.toml` and `uv.lock`** to git.
|
||||||
|
|
||||||
|
#### Removing Dependencies
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Remove a package
|
||||||
|
uv remove httpx
|
||||||
|
|
||||||
|
# Remove a dev dependency
|
||||||
|
uv remove --dev pytest-mock
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Updating Dependencies
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Update all packages to latest compatible versions
|
||||||
|
uv sync --upgrade
|
||||||
|
|
||||||
|
# Update a specific package
|
||||||
|
uv add --upgrade fastapi
|
||||||
|
|
||||||
|
# Check for outdated packages
|
||||||
|
uv pip list --outdated
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Running Commands in uv Environment
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run any Python command via uv (no activation needed)
|
||||||
|
uv run python script.py
|
||||||
|
uv run pytest
|
||||||
|
uv run mypy app/
|
||||||
|
|
||||||
|
# Or activate the virtual environment
|
||||||
|
source .venv/bin/activate
|
||||||
|
python script.py
|
||||||
|
pytest
|
||||||
|
```
|
||||||
|
|
||||||
|
### Makefile Commands
|
||||||
|
|
||||||
|
We provide convenient Makefile commands that use uv:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Setup
|
||||||
|
make install-dev # Install all dependencies (prod + dev)
|
||||||
|
make sync # Sync from lockfile
|
||||||
|
|
||||||
|
# Code Quality
|
||||||
|
make lint # Run Ruff linter (check only)
|
||||||
|
make lint-fix # Run Ruff with auto-fix
|
||||||
|
make format # Format code with Ruff
|
||||||
|
make format-check # Check if code is formatted
|
||||||
|
make type-check # Run mypy type checking
|
||||||
|
make validate # Run all checks (lint + format + types)
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
make test # Run all tests
|
||||||
|
make test-cov # Run tests with coverage report
|
||||||
|
|
||||||
|
# Utilities
|
||||||
|
make clean # Remove cache and build artifacts
|
||||||
|
make help # Show all commands
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dependency Workflow Example
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Clone repository
|
||||||
|
git clone <repo-url>
|
||||||
|
cd backend
|
||||||
|
|
||||||
|
# 2. Install dependencies
|
||||||
|
make install-dev
|
||||||
|
|
||||||
|
# 3. Make changes, add a new dependency
|
||||||
|
uv add httpx
|
||||||
|
|
||||||
|
# 4. Test your changes
|
||||||
|
make test
|
||||||
|
|
||||||
|
# 5. Commit (includes uv.lock)
|
||||||
|
git add pyproject.toml uv.lock
|
||||||
|
git commit -m "Add httpx dependency"
|
||||||
|
|
||||||
|
# 6. Other developers pull and sync
|
||||||
|
git pull
|
||||||
|
make sync # Uses the committed uv.lock
|
||||||
|
```
|
||||||
|
|
||||||
|
### Troubleshooting uv
|
||||||
|
|
||||||
|
**Dependencies not found after install:**
|
||||||
|
```bash
|
||||||
|
# Make sure you're using uv run or activated environment
|
||||||
|
uv run pytest # Option 1: Run via uv
|
||||||
|
source .venv/bin/activate # Option 2: Activate first
|
||||||
|
pytest
|
||||||
|
```
|
||||||
|
|
||||||
|
**Lockfile out of sync:**
|
||||||
|
```bash
|
||||||
|
# Regenerate lockfile
|
||||||
|
uv lock
|
||||||
|
|
||||||
|
# Force reinstall from lockfile
|
||||||
|
uv sync --reinstall
|
||||||
|
```
|
||||||
|
|
||||||
|
**uv not found:**
|
||||||
|
```bash
|
||||||
|
# Install uv globally
|
||||||
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
|
|
||||||
|
# Add to PATH if needed
|
||||||
|
export PATH="$HOME/.cargo/bin:$PATH"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
### Project Structure
|
### Project Structure
|
||||||
@@ -144,20 +323,22 @@ alembic downgrade -1
|
|||||||
### Testing
|
### Testing
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Run all tests
|
# Using Makefile (recommended)
|
||||||
IS_TEST=True pytest
|
make test # Run all tests
|
||||||
|
make test-cov # Run with coverage report
|
||||||
|
|
||||||
# Run with coverage
|
# Using uv directly
|
||||||
IS_TEST=True pytest --cov=app --cov-report=term-missing -n 0
|
IS_TEST=True uv run pytest
|
||||||
|
IS_TEST=True uv run pytest --cov=app --cov-report=term-missing -n 0
|
||||||
|
|
||||||
# Run specific test file
|
# Run specific test file
|
||||||
IS_TEST=True pytest tests/api/test_auth.py -v
|
IS_TEST=True uv run pytest tests/api/test_auth.py -v
|
||||||
|
|
||||||
# Run single test
|
# Run single test
|
||||||
IS_TEST=True pytest tests/api/test_auth.py::TestLogin::test_login_success -v
|
IS_TEST=True uv run pytest tests/api/test_auth.py::TestLogin::test_login_success -v
|
||||||
|
|
||||||
# Generate HTML coverage report
|
# Generate HTML coverage report
|
||||||
IS_TEST=True pytest --cov=app --cov-report=html -n 0
|
IS_TEST=True uv run pytest --cov=app --cov-report=html -n 0
|
||||||
open htmlcov/index.html
|
open htmlcov/index.html
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -166,17 +347,26 @@ open htmlcov/index.html
|
|||||||
### Code Quality
|
### Code Quality
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Type checking
|
# Using Makefile (recommended)
|
||||||
mypy app
|
make lint # Ruff linting
|
||||||
|
make format # Ruff formatting
|
||||||
|
make type-check # mypy type checking
|
||||||
|
make validate # All checks at once
|
||||||
|
|
||||||
# Linting
|
# Using uv directly
|
||||||
ruff check app
|
uv run ruff check app/ tests/
|
||||||
|
uv run ruff format app/ tests/
|
||||||
# Format code
|
uv run mypy app/
|
||||||
black app
|
|
||||||
isort app
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Tools:**
|
||||||
|
- **Ruff**: All-in-one linting, formatting, and import sorting (replaces Black, Flake8, isort)
|
||||||
|
- **mypy**: Static type checking with Pydantic plugin
|
||||||
|
|
||||||
|
All configurations are in `pyproject.toml`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## API Documentation
|
## API Documentation
|
||||||
|
|
||||||
Once the server is running, interactive API documentation is available:
|
Once the server is running, interactive API documentation is available:
|
||||||
@@ -194,6 +384,8 @@ Once the server is running, interactive API documentation is available:
|
|||||||
- Raw OpenAPI 3.0 specification
|
- Raw OpenAPI 3.0 specification
|
||||||
- Use for client generation
|
- Use for client generation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
||||||
### Token-Based Authentication
|
### Token-Based Authentication
|
||||||
@@ -229,6 +421,8 @@ curl -H "Authorization: Bearer <access_token>" \
|
|||||||
- `Admin`: Can manage members (except owners)
|
- `Admin`: Can manage members (except owners)
|
||||||
- `Member`: Read-only access
|
- `Member`: Read-only access
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Common Tasks
|
## Common Tasks
|
||||||
|
|
||||||
### Create a Superuser
|
### Create a Superuser
|
||||||
@@ -258,8 +452,12 @@ python migrate.py check
|
|||||||
curl http://localhost:8000/health
|
curl http://localhost:8000/health
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Docker Support
|
## Docker Support
|
||||||
|
|
||||||
|
The Dockerfile uses **uv** for fast, reproducible builds:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Development with hot reload
|
# Development with hot reload
|
||||||
docker-compose -f docker-compose.dev.yml up
|
docker-compose -f docker-compose.dev.yml up
|
||||||
@@ -271,17 +469,38 @@ docker-compose up -d
|
|||||||
docker-compose build backend
|
docker-compose build backend
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Docker features:**
|
||||||
|
- Multi-stage builds (development + production)
|
||||||
|
- uv for fast dependency installation
|
||||||
|
- `uv.lock` ensures exact versions in containers
|
||||||
|
- Development stage includes dev dependencies
|
||||||
|
- Production stage optimized for size and security
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
### Common Issues
|
### Common Issues
|
||||||
|
|
||||||
**Module Import Errors**
|
**Module Import Errors**
|
||||||
```bash
|
```bash
|
||||||
# Ensure you're in the backend directory
|
# Ensure dependencies are installed
|
||||||
cd backend
|
make install-dev
|
||||||
|
|
||||||
# Activate virtual environment
|
# Or sync from lockfile
|
||||||
source .venv/bin/activate
|
make sync
|
||||||
|
|
||||||
|
# Verify Python environment
|
||||||
|
uv run python --version
|
||||||
|
```
|
||||||
|
|
||||||
|
**uv command not found**
|
||||||
|
```bash
|
||||||
|
# Install uv globally
|
||||||
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||||
|
|
||||||
|
# Add to PATH (add to ~/.bashrc or ~/.zshrc)
|
||||||
|
export PATH="$HOME/.cargo/bin:$PATH"
|
||||||
```
|
```
|
||||||
|
|
||||||
**Database Connection Failed**
|
**Database Connection Failed**
|
||||||
@@ -306,10 +525,19 @@ alembic upgrade head
|
|||||||
**Tests Failing**
|
**Tests Failing**
|
||||||
```bash
|
```bash
|
||||||
# Run with verbose output
|
# Run with verbose output
|
||||||
IS_TEST=True pytest -vv
|
make test
|
||||||
|
|
||||||
# Run single test to isolate issue
|
# Run single test to isolate issue
|
||||||
IS_TEST=True pytest tests/api/test_auth.py::TestLogin::test_login_success -vv
|
IS_TEST=True uv run pytest tests/api/test_auth.py::TestLogin::test_login_success -vv
|
||||||
|
```
|
||||||
|
|
||||||
|
**Dependencies out of sync**
|
||||||
|
```bash
|
||||||
|
# Regenerate lockfile from pyproject.toml
|
||||||
|
uv lock
|
||||||
|
|
||||||
|
# Reinstall everything
|
||||||
|
make install-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
### Getting Help
|
### Getting Help
|
||||||
@@ -321,6 +549,8 @@ See our detailed documentation:
|
|||||||
- [COMMON_PITFALLS.md](docs/COMMON_PITFALLS.md) - Mistakes to avoid
|
- [COMMON_PITFALLS.md](docs/COMMON_PITFALLS.md) - Mistakes to avoid
|
||||||
- [FEATURE_EXAMPLE.md](docs/FEATURE_EXAMPLE.md) - Adding new features
|
- [FEATURE_EXAMPLE.md](docs/FEATURE_EXAMPLE.md) - Adding new features
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Performance
|
## Performance
|
||||||
|
|
||||||
### Database Connection Pooling
|
### Database Connection Pooling
|
||||||
@@ -343,6 +573,8 @@ Configured in `app/core/config.py`:
|
|||||||
- Bulk operations for admin actions
|
- Bulk operations for admin actions
|
||||||
- Indexed foreign keys and common lookups
|
- Indexed foreign keys and common lookups
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Security
|
## Security
|
||||||
|
|
||||||
### Built-in Security Features
|
### Built-in Security Features
|
||||||
@@ -360,9 +592,11 @@ Configured in `app/core/config.py`:
|
|||||||
1. **Never commit secrets**: Use `.env` files (git-ignored)
|
1. **Never commit secrets**: Use `.env` files (git-ignored)
|
||||||
2. **Strong SECRET_KEY**: Min 32 chars, cryptographically random
|
2. **Strong SECRET_KEY**: Min 32 chars, cryptographically random
|
||||||
3. **HTTPS in production**: Required for token security
|
3. **HTTPS in production**: Required for token security
|
||||||
4. **Regular updates**: Keep dependencies current
|
4. **Regular updates**: Keep dependencies current (`uv sync --upgrade`)
|
||||||
5. **Audit logs**: Monitor authentication events
|
5. **Audit logs**: Monitor authentication events
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Monitoring
|
## Monitoring
|
||||||
|
|
||||||
### Health Check
|
### Health Check
|
||||||
@@ -388,13 +622,28 @@ logging.basicConfig(level=logging.INFO)
|
|||||||
# In production, use JSON logs for log aggregation
|
# In production, use JSON logs for log aggregation
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Additional Resources
|
## Additional Resources
|
||||||
|
|
||||||
- **FastAPI Documentation**: https://fastapi.tiangolo.com
|
### Official Documentation
|
||||||
|
- **uv**: https://docs.astral.sh/uv/
|
||||||
|
- **FastAPI**: https://fastapi.tiangolo.com
|
||||||
- **SQLAlchemy 2.0**: https://docs.sqlalchemy.org/en/20/
|
- **SQLAlchemy 2.0**: https://docs.sqlalchemy.org/en/20/
|
||||||
- **Pydantic**: https://docs.pydantic.dev/
|
- **Pydantic**: https://docs.pydantic.dev/
|
||||||
- **Alembic**: https://alembic.sqlalchemy.org/
|
- **Alembic**: https://alembic.sqlalchemy.org/
|
||||||
|
- **Ruff**: https://docs.astral.sh/ruff/
|
||||||
|
|
||||||
|
### Our Documentation
|
||||||
|
- [Root README](../README.md) - Project-wide information
|
||||||
|
- [CLAUDE.md](../CLAUDE.md) - Comprehensive development guide
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Note**: For project-wide information (license, contributing guidelines, deployment), see the [root README](../README.md).
|
**Built with modern Python tooling:**
|
||||||
|
- 🚀 **uv** - 10-100x faster dependency management
|
||||||
|
- ⚡ **Ruff** - 10-100x faster linting & formatting
|
||||||
|
- 🔍 **mypy** - Static type checking
|
||||||
|
- ✅ **pytest** - Comprehensive test suite
|
||||||
|
|
||||||
|
**All configured in a single `pyproject.toml` file!**
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ set -e
|
|||||||
echo "Starting Backend"
|
echo "Starting Backend"
|
||||||
|
|
||||||
# Apply database migrations
|
# Apply database migrations
|
||||||
alembic upgrade head
|
uv run alembic upgrade head
|
||||||
|
|
||||||
# Initialize database (creates first superuser if needed)
|
# Initialize database (creates first superuser if needed)
|
||||||
python app/init_db.py
|
uv run python app/init_db.py
|
||||||
|
|
||||||
# Execute the command passed to docker run
|
# Execute the command passed to docker run
|
||||||
exec "$@"
|
exec "$@"
|
||||||
Reference in New Issue
Block a user