Nest: Структурный таск-раннер на Rust. Почему Makefile — это не всегда ок
Привет! Меня зовут Даниил, я Full-stack разработчик. Я написал Nest — инструмент для управления задачами в проектах, где обычного Makefile или Justfile уже не хватает для удобной работы.
Зачем это нужно?
Если ваш список команд разрастается, вы неизбежно сталкиваетесь с тремя проблемами:
Отсутствие структуры. Все задачи свалены в плоский список.
Передача аргументов. В
makeэто всегда больно, а валидацию приходится писать руками на bash.Обработка ошибок. Цепочки
&&и||быстро превращаются в кашу.
Nest решает это через иерархию и типизацию:
# Переменные и окружение var PROJECT = "MyBackend" server: desc: Управление сервером приложения env: PORT = "8080" # Типизированные аргументы (bool, str, num, arr) test(coverage: bool = false): desc: Запуск тестов depends.parallel: lint, build script: | if [ "{{coverage}}" = "true" ]; then cargo tarpaulin else cargo test fi # Обязательные аргументы (!) и валидация deploy(!version: str, env: str = "staging"): desc: Деплой на конкретный контур validate: version matches /^[0-9]+\.[0-9]+\.[0-9]+$/ before: echo "Деплоим {{PROJECT}} v{{version}}..." # Модификатор .hide скрывает вывод шумных команд script.hide: ./scripts/deploy.sh --v={{version}} # Fallback сработает автоматически при ошибке fallback: echo "Ошибка! Откатываемся..."
Как это запускать:
# Запустить тесты с флагом nest server test --coverage # Запустить деплой с аргументами nest server deploy --version 1.2.3 --env prod # Или запустить интерактивный UI и выбрать команду там nestui
Главные фишки
📦 Группировка (Namespaces): Вызывайте команды как
nest server testилиnest db migrate up. Структура команд в терминале повторяет структуру вашего файла.🛠️ Типизация и Валидация: Аргументы проверяются до запуска скриптов. Можно проверять даже переменные окружения (
$VAR matches /.../).🖥️ Интерактивный UI: Запустите
nestui, чтобы видеть дерево всех команд, их описание и запускать их стрелками — удобно для визуального контроля за сложными воркфлоу.🔌 VS Code Extension: Есть официальное расширение с подсветкой синтаксиса, навигацией и автодополнением. DX должен быть приятным.
⏳ Жизненный цикл: Нативные блоки
before,after,fallbackиfinallyдля управления потоком выполнения.🦀 Без зависимостей: Написано на Rust, статический бинарник, работает везде.
Это MVP, проект полностью открытый (MIT). Буду рад фидбеку, критике и вашим историям о том, как вы воюете со своими скриптами автоматизации.
👉 GitHub: https://github.com/quonaro/Nest
📦 Docs: https://quonaro.github.io/Nest
🔌 VS Code Extension: Marketplace | Open VSX
