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
