TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 995 subscribers
Post #282 691
💭Всем привет, меня зовут Роза, Flutter Dev Friflex

Продолжаю серию постов про создание CLI-инструментов на Dart. В прошлый раз мы разобрались, что Dart позволяет упаковать CLI в нативный бинарный файл, и пользователю не нужно устанавливать Dart SDK, чтобы пользоваться утилитой — достаточно скачать файл и запустить его.

Но этот процесс можно улучшить!🚀

Мы можем добавить установку CLI через Homebrew, чтобы пользователи могли установить ваш инструмент одной командой:

brew install mytool


Давайте разберемся, как это сделать.

Если вы хотя бы раз набирали brew install, значит, вы уже пользовались Homebrew. Это менеджер пакетов для macOS и Linux. Но мало кто знает, что для распространения своего CLI не обязательно попадать в официальный Homebrew-core.

Достаточно создать Homebrew Tap — обычный GitHub-репозиторий с формулой Homebrew. Это своего рода ваш собственный mini-магазин пакетов для brew, доступных по команде:

brew tap yourname/yourtap
brew install mytool


Tap удобен, когда:
✔️ вы делаете внутренний CLI в компании
✔️ часто обновляете инструмент
✔️ хотите распространять бинарники сразу после релиза
✔️ не хотите проходить ревью в Homebrew-core

А теперь давайте разберемся на практике. На самом деле все сводится к созданию двух репозиториев на GitHub и одной формуле на Ruby.

Шаг 1. Создайте репозиторий с вашим инструментом.
Если это Bash-скрипт — убедитесь, что он исполняемый:

#!/usr/bin/env bash
chmod +x mytool.sh


Если вы делаете CLI на Dart, собираем бинарники:

mkdir -p dist
dart compile exe bin/my_cli_tool.dart -o dist/mytool-macos
dart compile exe bin/my_cli_tool.dart -o dist/mytool-linux


Затем создайте GitHub Release и загрузите бинарники (mytool-macos, mytool-linux) как assets. Homebrew будет скачивать их оттуда.

Шаг 2. Создаем Homebrew Tap. Для этого необходимо создать отдельный репозиторий:

myusername/homebrew-mytool


Внутри создайте папку Formula/ и файл Formula/mytool.rb:

class Mytool < Formula
  desc "CLI tool for automation"
  homepage "https://github.com/myusername/my_cli_tool"
  version "1.0.0"

  if OS.mac?
    url "https://github.com/myusername/my_cli_tool/releases/download/v1.0.0/mytool-macos"
    sha256 "SHA256_OF_MACOS_FILE"
  elsif OS.linux?
    url "https://github.com/myusername/my_cli_tool/releases/download/v1.0.0/mytool-linux"
    sha256 "SHA256_OF_LINUX_FILE"
  end

  def install
    bin.install Dir["mytool-*"].first => "mytool"
  end
end


SHA256 можно получить командой:

shasum -a 256 dist/mytool-macos


Этот хеш гарантирует, что Homebrew загружает именно тот файл, который вы опубликовали, и что он не был поврежден или подменен.

И на этом все! Теперь можно подключить tap и установить CLI:

brew tap myusername/mytool
brew install mytool


Важные моменты:
▪️SHA256 должен совпадать: Homebrew проверяет целостность файлов, поэтому после каждого релиза обязательно пересчитывайте SHA
▪️Выпуск обновлений: для новой версии создайте тег, пересоберите бинарники, обновите SHA и отредактируйте формулу в tap
▪️ Проверяйте локально: перед публикацией убедитесь, что установка работает:

brew install --build-from-source ./Formula/mytool.rb


▪️ Репозиторий должен начинаться с homebrew-, а имя формулы совпадать с названием CLI
▪️ Tap должен быть публичным. Homebrew не умеет устанавливать пакеты из приватных репозиториев

На этом все — ваш CLI готов к установке через brew🌟
  • 🔥 10
  • ❤ 2
  • 👍 1
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →