Nest: Структурный таск-раннер на Rust. Почему Makefile — это не всегда ок

Привет! Меня зовут Даниил, я Full-stack разработчик. Я написал Nest — инструмент для управления задачами в проектах, где обычного Makefile или Justfile уже не хватает для удобной работы.

Зачем это нужно?

Если ваш список команд разрастается, вы неизбежно сталкиваетесь с тремя проблемами:

  1. Отсутствие структуры. Все задачи свалены в плоский список.

  2. Передача аргументов. В make это всегда больно, а валидацию приходится писать руками на bash.

  3. Обработка ошибок. Цепочки && и || быстро превращаются в кашу.

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