You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Раньше razd был умной оберткой, которая требовала наличия установленного task (Taskfile) в системе. Это создавало лишний барьер для входа: "скачай razd, а, ой, еще task установи".
Я решил это изменить.
Мы избавляемся от exec.Command("task", ...) и жесткой зависимости от бинарника. Теперь движок Go-Task (v3) импортируется как библиотека прямо в код razd.
Что это дает?
✅ Zero Dependency: Пользователю нужен только один бинарник razd. Всё работает из коробки.
✅ Контроль: Прямой доступ к API раннера (stdout/stderr стриминг, контексты, хуки) вместо парсинга текста из консоли.
✅ Скорость: Нет накладных расходов на спаун новых процессов ОС.
Теперь razd - это не просто CLI-враппер, а самодостаточный инструмент для инициализации и управления проектами, с мощью Taskfile под капотом.
План миграции и технический дизайн уже готовы. Ссылка на PR/Issue внизу 👇
#golang #opensource #devops #razd #taskfile
2. Технический дизайн (RFC / Design Doc)
Этот документ можно прикрепить к Issue на GitHub или положить в документацию для контрибьюторов.
RFC: Native Taskfile Runner Integration
1. Context & Problem
В текущей реализации razd полагается на внешний бинарный файл task, вызывая его через os/exec. Проблемы:
Зависимость среды: У пользователя должен быть установлен task в $PATH.
Хрупкость: Парсинг вывода ошибок и статусов выполнения через stdout/stderr ненадежен.
Ограниченный контроль: Невозможно гибко управлять контекстом выполнения или перехватывать внутренние события раннера.
2. Solution
Интегрировать пакет github.com/go-task/task/v3 непосредственно в кодовую базу razd. Использовать task.Executor для программного запуска задач вместо spawning subprocesses.
3. Architecture Changes
Current Flow (Legacy)
flowchart LR
A[Razd CLI] --> B(fork/exec)
B --> C[Task Binary]
C --> D[Taskfile.yml]
Loading
Target Flow (Native)
flowchart LR
A[Razd CLI] --> B[Task Library Embedded]
B --> C[Taskfile.yml]
Loading
4. Implementation Details
Dependency
Добавление зависимости в go.mod:
go get github.com/go-task/task/v3
Code Reference
Вместо вызова командной строки, мы инициализируем Executor.
Internal Packages: Go-Task скрывает логику парсинга YAML в пакете internal/taskfile. Мы не можем модифицировать структуру Taskfile программно до запуска, только исполнять существующие файлы. Это приемлемо для razd, так как мы генерируем файлы на этапе init.
Binary Size: Размер бинарника razd увеличится (~ +2-3MB), так как код Taskfile теперь включен в сборку. Решается через go build -ldflags="-s -w".
6. Benefit
Превращает razd в standalone tool. Пользователь скачивает один бинарник и получает полностью настроенное окружение для работы с проектом.
Раньше
razdбыл умной оберткой, которая требовала наличия установленногоtask(Taskfile) в системе. Это создавало лишний барьер для входа: "скачай razd, а, ой, еще task установи".Я решил это изменить.
Мы избавляемся от
exec.Command("task", ...)и жесткой зависимости от бинарника. Теперь движок Go-Task (v3) импортируется как библиотека прямо в кодrazd.Что это дает?
✅ Zero Dependency: Пользователю нужен только один бинарник
razd. Всё работает из коробки.✅ Контроль: Прямой доступ к API раннера (stdout/stderr стриминг, контексты, хуки) вместо парсинга текста из консоли.
✅ Скорость: Нет накладных расходов на спаун новых процессов ОС.
Теперь
razd- это не просто CLI-враппер, а самодостаточный инструмент для инициализации и управления проектами, с мощью Taskfile под капотом.План миграции и технический дизайн уже готовы. Ссылка на PR/Issue внизу 👇
#golang #opensource #devops #razd #taskfile
2. Технический дизайн (RFC / Design Doc)
Этот документ можно прикрепить к Issue на GitHub или положить в документацию для контрибьюторов.
RFC: Native Taskfile Runner Integration
1. Context & Problem
В текущей реализации
razdполагается на внешний бинарный файлtask, вызывая его черезos/exec.Проблемы:
taskв$PATH.2. Solution
Интегрировать пакет
github.com/go-task/task/v3непосредственно в кодовую базуrazd. Использоватьtask.Executorдля программного запуска задач вместо spawning subprocesses.3. Architecture Changes
Current Flow (Legacy)
flowchart LR A[Razd CLI] --> B(fork/exec) B --> C[Task Binary] C --> D[Taskfile.yml]Target Flow (Native)
flowchart LR A[Razd CLI] --> B[Task Library Embedded] B --> C[Taskfile.yml]4. Implementation Details
Dependency
Добавление зависимости в
go.mod:Code Reference
Вместо вызова командной строки, мы инициализируем
Executor.5. Constraints & Risks
internal/taskfile. Мы не можем модифицировать структуру Taskfile программно до запуска, только исполнять существующие файлы. Это приемлемо дляrazd, так как мы генерируем файлы на этапе init.razdувеличится (~ +2-3MB), так как код Taskfile теперь включен в сборку. Решается черезgo build -ldflags="-s -w".6. Benefit
Превращает
razdв standalone tool. Пользователь скачивает один бинарник и получает полностью настроенное окружение для работы с проектом.