The Go implementation is preserved in the v1.0.0 tag. Its observable behaviour stays the API reference: responses recorded from the Go server live in tools/compatibility_expected.txt, and tools/compatibility.py now compares the Rust server against them (--update re-records after an intentional change). The Go SQLite schema is frozen in tests/fixtures/go_schema_v1.sql for the existing-database test. Move the web client from internal/httpapi/web to web/, drop the Go CI job and Go version pin, and update README, AGENTS.md and docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.7 KiB
Разработка и запуск
Требования
Сервер использует Rust 1.90+ и bundled SQLite. Python 3 нужен для tools/compatibility.py и используется без сторонних пакетов. Go больше не нужен.
Проверить локальную версию:
rustc --version
cargo --version
python3 --version
Установка зависимостей
cargo fetch --locked
Сборка
cargo build --locked
Тесты
cargo test --locked
cargo build --locked
python3 tools/compatibility.py
tools/compatibility.py запускает сервер на временных портах и базах и сравнивает
ответы API и статику с ответами исходного Go-сервера, записанными в
tools/compatibility_expected.txt. Расхождение означает изменение, видимое
клиентам. Если изменение намеренное, проверьте diff и перезапишите эталон:
python3 tools/compatibility.py --update
Static checks
cargo fmt --check
cargo clippy --locked --all-targets -- -D warnings
Если в проекте есть Makefile/CI, его команды имеют приоритет как canonical build pipeline.
Локальный запуск
Перед запуском изучите конфигурацию в коде и .env/deployment files.
Не коммитьте реальные credentials.
Собрать и запустить Rust-сервер:
cargo build --locked --release
export BALANCE_JWT_SECRET="replace-with-a-long-random-secret"
export BALANCE_DB_PATH="./data/balance.db"
./target/release/balance-server
По умолчанию сервер слушает :8080. Файл .env читает Docker Compose; при
прямом запуске переменные нужно передать процессу через окружение.
Database
SQLite встроен в executable. При первом запуске сервер создаёт каталог,
таблицы и индексы автоматически. Отдельный процесс БД не нужен. При переходе
с Go сохраните существующий файл БД и BALANCE_JWT_SECRET; подробная
процедура и откат описаны в DEPLOYMENT.md.
Production
Рекомендуемый pipeline:
source
↓
cargo fmt --check && cargo test --locked
↓
cargo clippy --locked --all-targets -- -D warnings
↓
cargo build --locked --release
↓
python3 tools/compatibility.py --binary target/release/balance-server
↓
container/package
↓
deploy
↓
health check
Для production нужны:
- TLS termination;
- persistent database;
- backups;
- monitoring;
- log rotation;
- secrets management;
- migration procedure.
Совместимость
При релизе server проверяйте минимум:
- старый iOS client + новый server;
- новый iOS client + server;
- Android client + server;
- concurrent sync с двух устройств;
- login/refresh после истечения access token;
- delete → pull на другом устройстве.
Production build: cargo build --locked --release. Прямой запуск: BALANCE_JWT_SECRET=<secret> target/release/balance-server, порт 8080. Docker Compose публикует порт 8123 и сохраняет прежний volume /data. Процедура миграции Go → Rust и rollback: DEPLOYMENT.md.