Создатель brew развивает новый пакетный менеджер tea

Макс Хауэлл (Max Howell), автор популярной на платформе macOS системы управления пакетами brew (Homebrew), развивает новый пакетный менеджер Tea, позиционируемый как продолжение развития brew, выходящее за рамки пакетного менеджера и предлагающее унифицированную инфраструктуру управления пакетами, работающую с децентрализованными репозиториями. Проект изначально развивается как многоплатформенный (в настоящее время поддерживаются macOS и Linux, в разработке поддержка Windows). Код проекта написан на языке TypeScript и распространяется под лицензией Apache 2.0 (brew был написан на Ruby и поставлялся под лицензией BSD).

Tea концептуально не походит на традиционные пакетные менеджеры и вместо парадигмы “я хочу установить пакет” использует принцип “я хочу использовать пакет”. В частности, в Tea нет как таковой команды для установки пакета, вместо которой применяется формирование окружения для выполнения содержимого пакета, не пересекающегося с текущей системой. Пакеты размещаются в отдельном каталоге ~/.tea и не привязываются к абсолютным путям (могут быть перемещены).

Предоставляется два основных режима работы: переход в командную оболочку с доступом к окружению с установленными пакетами и прямой вызов связанных с пакетом команд. Например, при выполнении “tea +gnu.org/wget” пакетный менеджер загрузит утилиту wget и все необходимые зависимости, после чего предоставит shell-доступ в окружении, в котором доступна установленная утилита wget. Второй вариант подразумевает прямой запуск – “tea +gnu.org/wget wget https://some_webpage”, при котором будет установлена утилита wget и сразу запущена в отдельном окружении. Возможна компоновка сложных цепочек, например, для загрузки файла white-paper.pdf и его обработки утилитой glow можно использовать следующую конструкцию (если wget и glow отсутствуют, они будут установлены):

tea +gnu.org/wget wget -qO- https://tea.xyz/white-paper.pdf | tea +charm.sh/glow glow –
или можно использовать более простой синтаксис: tea -X wget -qO- tea.xyz/white-paper | tea -X glow –

Похожим образом можно напрямую запускать скрипты, примеры кода и однострочники, автоматически подгружая необходимый для их работы инструментарий. Например, выполнение “tea https://gist.githubusercontent.com/i0bj/…/raw/colors.go –yellow” приведёт к установке инструментария языка Go и выполнению скрипта colors.go с аргументом “–yellow”.

Чтобы не вызывать команду tea каждый раз предоставляется возможность её подключения как универсального менеджера виртуальных окружений и обработчика отсутствующих программ. В этом случае если запущенная программа недоступна, она будет установлена, а если устанавливалась ранее – запущена в своём окружении.

$ deno zsh: command not found: deno $ cd my-project $ deno tea: installing deno.land^1.22 deno 1.27.0 > ^D

В текущем виде доступные для Tea пакеты собраны в двух коллекциях – pantry.core и pantry.extra, которые включают метаданные, описывающие источники загрузки пакетов, сценарии сборки и зависимости. Коллекция pantry.core включает основные библиотеки и утилиты, поддерживаемые в актуальном виде и протестированные разработчиками Tea. В pantry.extra помещаются пакеты, предлагаемые представителями сообщества. Для навигации по пакетам предоставлен web-интерфейс.

Процесс создания пакетов для Tea сильно упрощён и сводится к созданию одного универсального файла package.yml (пример), не требующего адаптации пакета для каждой новой версии. Для обнаружения новых версий и для загрузки их кода пакет может ссылаться на GitHub. В файле также описываются зависимости и приводятся сценарии сборки для поддерживаемых платформ. Устанавливаемые пакеты неизменяемы (фиксируется версия), что исключает повторение ситуаций, похожих на инцидент с left-pad.

В дальнейшем планируется создание децентрализованных репозиториев, не привязанных к какому-то отдельному хранилищу и использующему для метаданных распределённый блокчейн, а для хранения пакетов децентрализованное хранилище. Релизы будут заверяться напрямую сопровождающими, а не третьими лицами, не связанными с основными проектами.


Release. Ссылка here.