2.7 KiB
2.7 KiB
Development Process — Test-Develop-Debug
Local Environment
- Python 3.12 via NixOS, virtualenv at
.venv/ - Always use
.venv/bin/pythonor activate withsource .venv/bin/activatebefore running Python commands - When running
pytest,ruff, or any Python tool, use the.venv— e.g.python -m pytest(not barepytestwhich may resolve to system Python) - Node.js 24 available for frontend work;
frontend/has its ownnode_modules/
Workflow
- Write or update tests for the target behavior
- Implement the minimal code to pass
- Debug failures, fix, re-run
- Commit and push after each phase completes
- GitHub Actions CI automatically builds container images and pushes to GHCR
- Deploy to cluster via Helm or
kubectl apply
Testing
- Use
pytestwithpytest-asynciofor async code - Tests live in the top-level
tests/directory - Run tests with
python -m pytest tests/ -x --tb=short -q - Focus on core logic, not mocking infrastructure
CI/CD — GitHub Actions
- Workflow file:
.github/workflows/build.yml - Triggers on push to
mainand PRs - Jobs:
lint-and-test: runs ruff lint + pytest on ubuntu with Python 3.12build-services: matrix build of all Python services viadocker/Dockerfile, pushes to GHCR with:<sha>and:latesttagsbuild-dashboard: buildsfrontend/Dockerfileseparately, pushesdashboardimage to GHCR
- CI handles image building and pushing — do NOT manually
docker pushunless CI is broken or you need to bypass it - After pushing to
main, wait for CI to complete before deploying (check GitHub Actions status) - If you need to build locally for testing:
make buildordocker builddirectly, but let CI do the GHCR push
Deploy
- Helm chart at
infra/helm/stonks-oracle/ - Deploy:
helm upgrade --install stonks-oracle infra/helm/stonks-oracle -n stonks-oracle - Alternative raw manifests:
kubectl apply -f infra/k8s/ - To restart a deployment after CI pushes new images:
kubectl rollout restart deployment/<name> -n stonks-oracle
Git Conventions
- Commit after each completed phase task
- Commit message format:
phase N: short description - Push to
mainbranch triggers CI
Code Style
- Python 3.12, type hints everywhere
- Pydantic for data validation
- FastAPI for HTTP services
- asyncio + asyncpg/aioredis for async I/O
- Minimal dependencies, prefer stdlib where possible
- Frontend: React 19, TypeScript strict mode, Tailwind CSS, TanStack Router/Query
Documentation
- Do NOT create large summary/success markdown files after each step
- Keep notes short, concise, and organized under
docs/notes/ - Name note files to match the task they relate to (e.g.
docs/notes/phase0-k8s-manifests.md) - If a note isn't useful for future reference, don't write it