Files
rbox/Makefile
T
retoor 91f3b5c688 chore: rebrand all RBox references to MyWebdav across codebase and docs
Replace every occurrence of "RBox" with "MyWebdav" in source files, configuration,
legal documents, UI components, and test fixtures. This includes renaming the
`RBoxApp` class to `MyWebdavApp` in the JavaScript component, updating the
TOTP issuer from "RBox" to "MyWebdav" in the auth router, changing the
application description in the argument parser, and updating all user-facing
strings in HTML templates, legal policies, and the manifest file. The
`.env.example` default for `TOTP_ISSUER` is also updated accordingly.
2025-11-13 19:50:03 +00:00

156 lines
6.2 KiB
Makefile

.PHONY: help install dev test test-billing test-e2e test-coverage e2e-setup lint format clean run migrate init-db reset-db all
PYTHON := .venv/bin/python3
PIP := .venv/bin/pip
PYTEST := .venv/bin/pytest
BLACK := .venv/bin/black
RUFF := .venv/bin/ruff
MYWEBDAV := .venv/bin/mywebdav
all:
$(MYWEBDAV) --port 9004
help:
@echo "MyWebdav Development Makefile"
@echo ""
@echo "Available commands:"
@echo " make all Run the application on port 9004"
@echo " make install Install all dependencies"
@echo " make dev Install development dependencies"
@echo " make run Run the application locally"
@echo " make test Run all tests"
@echo " make test-billing Run billing tests only"
@echo " make test-e2e Run end-to-end tests (visible browser)"
@echo " make test-coverage Run tests with coverage report"
@echo " make e2e-setup Install Playwright and browsers"
@echo " make lint Run linting checks"
@echo " make format Format code with black"
@echo " make migrate Run database migrations"
@echo " make init-db Initialize database with default data"
@echo " make reset-db Reset database (WARNING: deletes all data)"
@echo " make clean Clean up temporary files"
@echo " make setup Complete setup (env + install + init-db)"
install:
@echo "Installing dependencies..."
python -m venv .venv
$(PIP) install -e .
$(PIP) install -r requirements.txt
@echo "Dependencies installed successfully"
dev:
@echo "Installing development dependencies..."
$(PIP) install pytest pytest-asyncio pytest-cov httpx black ruff stripe apscheduler dataset
@echo "Development dependencies installed successfully"
run:
@echo "Starting MyWebdav application..."
@echo "Access the application at http://localhost:8000"
$(PYTHON) -m mywebdav.main
test:
@echo "Running all tests..."
$(PYTEST) tests/ -v
test-billing:
@echo "Running billing tests..."
$(PYTEST) tests/billing/ -v
test-e2e:
@echo "Running end-to-end tests with visible browser..."
@echo "Make sure the application is running (make run in another terminal)"
$(PYTEST) tests/e2e/ -v -s --tb=short
e2e-setup:
@echo "Installing Playwright and browsers..."
$(PIP) install playwright
.venv/bin/playwright install chromium
@echo "Playwright setup complete"
test-coverage:
@echo "Running tests with coverage..."
$(PYTEST) tests/ -v --cov=mywebdav --cov-report=html --cov-report=term
@echo "Coverage report generated in htmlcov/index.html"
lint:
@echo "Running linting checks..."
$(RUFF) check mywebdav/
@echo "Linting complete"
format:
@echo "Formatting code..."
$(BLACK) mywebdav/ tests/
@echo "Code formatting complete"
migrate:
@echo "Running database migrations..."
@echo "Tortoise ORM auto-generates schemas on startup"
$(PYTHON) -c "from mywebdav.main import app; print('Database schema will be created on first run')"
init-db:
@echo "Initializing database with default data..."
$(PYTHON) -c "import asyncio; \
from tortoise import Tortoise; \
from mywebdav.settings import settings; \
from mywebdav.billing.models import PricingConfig; \
from decimal import Decimal; \
async def init(): \
await Tortoise.init(db_url=settings.DATABASE_URL, modules={'models': ['mywebdav.models', 'mywebdav.billing.models']}); \
await Tortoise.generate_schemas(); \
count = await PricingConfig.all().count(); \
if count == 0: \
await PricingConfig.create(config_key='storage_per_gb_month', config_value=Decimal('0.0045'), description='Storage cost per GB per month', unit='per_gb_month'); \
await PricingConfig.create(config_key='bandwidth_egress_per_gb', config_value=Decimal('0.009'), description='Bandwidth egress cost per GB', unit='per_gb'); \
await PricingConfig.create(config_key='bandwidth_ingress_per_gb', config_value=Decimal('0.0'), description='Bandwidth ingress cost per GB (free)', unit='per_gb'); \
await PricingConfig.create(config_key='free_tier_storage_gb', config_value=Decimal('15'), description='Free tier storage in GB', unit='gb'); \
await PricingConfig.create(config_key='free_tier_bandwidth_gb', config_value=Decimal('15'), description='Free tier bandwidth in GB per month', unit='gb'); \
await PricingConfig.create(config_key='tax_rate_default', config_value=Decimal('0.0'), description='Default tax rate (0 = no tax)', unit='percentage'); \
print('Default pricing configuration created'); \
else: \
print('Pricing configuration already exists'); \
await Tortoise.close_connections(); \
asyncio.run(init())"
@echo "Database initialized successfully"
reset-db:
@echo "WARNING: This will delete all data!"
@read -p "Are you sure? (yes/no): " confirm && [ "$$confirm" = "yes" ] || exit 1
@rm -f mywebdav.db app/mywebdav.db storage/mywebdav.db
@echo "Database reset complete. Run 'make init-db' to reinitialize"
clean:
@echo "Cleaning up temporary files..."
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete
find . -type f -name "*.pyo" -delete
find . -type f -name "*.pyd" -delete
find . -type d -name "*.egg-info" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".ruff_cache" -exec rm -rf {} + 2>/dev/null || true
rm -rf htmlcov/
rm -rf .coverage
@echo "Cleanup complete"
setup-env:
@echo "Setting up environment file..."
@if [ ! -f .env ]; then \
cp .env.example .env 2>/dev/null || \
echo "DATABASE_URL=sqlite:///app/mywebdav.db\nSECRET_KEY=$$(openssl rand -hex 32)\nSTRIPE_SECRET_KEY=\nSTRIPE_PUBLISHABLE_KEY=\nSTRIPE_WEBHOOK_SECRET=" > .env; \
echo ".env file created. Please update with your configuration."; \
else \
echo ".env file already exists"; \
fi
setup: setup-env install dev init-db
@echo ""
@echo "Setup complete!"
@echo "Next steps:"
@echo " 1. Update .env with your configuration (especially Stripe keys)"
@echo " 2. Run 'make run' or 'make all' to start the application"
@echo " 3. Access the application at http://localhost:8000"
docs:
@echo "Generating API documentation..."
@echo "API documentation available at http://localhost:8000/docs when running"
@echo "ReDoc available at http://localhost:8000/redoc when running"