chore: монорепо, dev-окружение и деплой
Nix flake на два шелла (backend и + Flutter), justfile как единая точка входа, локальный Postgres в ./.pgdata на порту 54329, docker-compose из пяти сервисов (db, api, worker, caddy, pg-backup) и CI на ruff/pyright/pytest + дрейф OpenAPI. Российские корневые сертификаты лежат в репозитории: они публичные, но нужны и Caddy, и gRPC-каналу T-Invest, а глобальный gitignore отбрасывает *.pem.
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
{
|
||||
description = "fin-tracker — personal finance + investment analytics";
|
||||
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
outputs = { self, nixpkgs }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
python = pkgs.python312;
|
||||
|
||||
# manylinux wheels pulled by uv (grpcio for T-Invest, asyncpg, polars, …)
|
||||
# dlopen these at runtime. nix-ld is enabled system-wide; we only extend
|
||||
# its search path (never overwrite — keeps direnv diffs sane).
|
||||
runtimeLibs = pkgs.lib.makeLibraryPath [
|
||||
pkgs.stdenv.cc.cc.lib # libstdc++.so.6
|
||||
pkgs.zlib
|
||||
pkgs.openssl
|
||||
];
|
||||
|
||||
backendTools = [
|
||||
python
|
||||
pkgs.uv
|
||||
pkgs.just
|
||||
pkgs.postgresql_17 # local dev cluster (`just db-start`) and psql
|
||||
pkgs.openapi-generator-cli # `just gen-client`
|
||||
];
|
||||
|
||||
commonHook = ''
|
||||
export UV_PYTHON="${python}/bin/python3"
|
||||
export UV_PYTHON_DOWNLOADS=never
|
||||
export NIX_LD_LIBRARY_PATH="${runtimeLibs}''${NIX_LD_LIBRARY_PATH:+:$NIX_LD_LIBRARY_PATH}"
|
||||
export LD_LIBRARY_PATH="${runtimeLibs}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||
# T-Invest gRPC must not go through a local SOCKS/HTTP proxy
|
||||
export no_proxy="invest-public-api.tbank.ru,.tbank.ru,invest-public-api.tinkoff.ru,.tinkoff.ru,localhost,127.0.0.1''${no_proxy:+,$no_proxy}"
|
||||
export NO_PROXY="$no_proxy"
|
||||
export PGDATA="$PWD/.pgdata"
|
||||
export PGHOST="$PWD/.pgdata"
|
||||
export PGPORT=54329
|
||||
'';
|
||||
in {
|
||||
devShells.${system} = {
|
||||
# backend only — fast to enter
|
||||
default = pkgs.mkShell {
|
||||
packages = backendTools;
|
||||
shellHook = commonHook + ''
|
||||
echo "fin-tracker: 'just --list' for recipes; 'nix develop .#app' adds Flutter"
|
||||
'';
|
||||
};
|
||||
# backend + Flutter toolchain (large download on first use)
|
||||
app = pkgs.mkShell {
|
||||
packages = backendTools ++ [ pkgs.flutter ];
|
||||
shellHook = commonHook;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user