Carat
Constants
Канонический репозиторий carat — источник для carat self ....
Подкоманды для автокомплита; "__complete" скрытая — не показывается.
Прямой git URL: схема https://host/... | ssh://user@host/... | git:// | file:// — либо scp-подобный синтаксис git (user@host:path, до двоеточия нет '/': git@github.com:owner/repo.git). Таким URL carat доверяет как есть — любой git-хост (GitLab, Gitea, sr.ht, ...).
Class methods
release=true → --release (= -O3 --single-module); release=false —
dev-режим: обычный crystal build без оптимизаций (быстрый кодоген).
warn_overwrite=false для проектной установки: перезапись ./.carat/bin —
нормальный цикл пересборки, WARNING только для глобальных каталогов,
где он защищает PATH от тихой подмены.
Общий prebuild секции — all: prebuild: в binaries:/examples:
(см. ShardMeta::Section): один раз, а не по разу на каждый бинарник.
The optional examples: section — same build pipeline as binaries:, but
only built with --with-examples (never on a plain carat install).
Проверка записываемости каталога ДО клонирования и release-сборки: probe-файл создаётся и удаляется. На Unix прикладная ошибка — EACCES от mkdir или File.write; обе проходят как File::Error/Errno.
Рекурсивный сбор флагов сборки из зависимостей: библиотека (например, C-привязка) может объявить top-level flags:/link_flags: в своём shard.yml — carat подхватывает их при сборке бинарников любого шарда, который от неё зависит. Источник — lib/**/shard.yml (после shards install; у глобальной установки lib/ появляется через prebuild). Glob не следует симлинкам — циклов в раскладке shards не будет.
Цвета только для интерактивного вывода: NO_COLOR и редирект в пайп отключают escape-коды (иначе они засоряют логи и вывод в файлах).
Рекурсивное копирование дерева без следования симлинкам: симлинки пересоздаются (FileUtils.cp_r следует за симлинками на каталоги — layout lib/<shard>/lib -> .., который делает shards для flat-резолва зависимостей, уводит его в бесконечную рекурсию).
Захваченный stdout git-команды (в отличие от Shell#run, который всё наследует) — для резолва тегов/коммитов. stderr наследуется, чтобы причину ошибки (auth, сеть) пользователь видел сразу.
A globally installed shard builds with crystal build directly, and
the compiler resolves bare requires from the project's lib/ — so the
dependency resolution the project mode delegates to shards install
must run here too: once, in the stored copy, before the first binary
is built. Dep-free shards skip it (nothing to resolve).
A flags:/link_flags: value: a plain list applies to every OS; a mapping selects by OS family — exact match, then alias (macos for darwin), then "*"; first hit wins.
carat self install / carat self update — install-or-update самого carat
из канонического репозитория. Если указатель версии уже есть
(~/.carat/shards/carat/current) — путь update, иначе — полная установка.
Репозиторий carat не тегируется под каждый релиз — self всегда идёт по
HEAD master'а (head-режим): identity version+git.commit.<sha> меняется с
каждым пушем, update видит движение и без bump'а version.