Сборка и поставка

Пакеты и распространение

Создайте локальные пакеты и зависимости, обновите блокировку и найдите файлы, вызывающие несовпадение.

Создайте пакет, добавьте зависимости из локальных папок и зафиксируйте их содержимое в topaz.lock. Если команда с проверкой блокировки завершается ошибкой, таблица восстановления поможет найти нужный файл.

Установите topaz по руководству Первая программа. Выполняйте команды ниже из рабочей папки, где ещё нет my-app, utility и registry-app.

Создайте и запустите пакет

BASH
topaz init --root my-app
topaz lock --root my-app
topaz fmt --check --root my-app
topaz check --root my-app --locked
topaz run --root my-app --locked

init создаёт my-app/topaz.toml и my-app/src/main.tpz. Команда lock создаёт my-app/topaz.lock. Проверки завершаются с кодом 0, а run печатает Hello from Topaz.

Файл topaz.toml называется манифестом и содержит настройки пакета. В нём записаны имя, версии пакета и языка, входной файл, стандартная цель сборки и зависимости. Если аргумент файла не указан, команды используют точку входа из манифеста.

topaz.lock фиксирует манифест и содержимое зависимостей. Флаг --locked останавливает команду, если входные данные перестали совпадать с записью. При различиях форматирования выполните topaz fmt --root my-app и повторите проверку формата. Для пакета с тестами укажите пути тестовых файлов, как в Первом приложении.

Добавьте локальную зависимость

Создайте второй пакет рядом с my-app и добавьте его как зависимость.

BASH
topaz init --root utility
topaz add utility --path ../utility --root my-app
topaz lock --root my-app
topaz check --root my-app --locked

add записывает в my-app/topaz.toml зависимость utility с путём и хэшем содержимого. Хэш идентифицирует содержимое файлов зависимости. Путь ../utility отсчитывается от my-app и указывает на соседнюю папку. Команда lock обновляет topaz.lock, а последняя проверка завершается с кодом 0.

Скопируйте зависимость из локального реестра

Для этого примера используйте отдельный пакет registry-app. Сначала скопируйте папку utility из предыдущего раздела в registry/utility/1.2.0 внутри рабочей папки. В файле topaz.toml этой копии сохраните [package].name = "utility" и задайте [package].version = "1.2.0". Оставьте исходные файлы и остальные созданные настройки.

BASH
topaz init --root registry-app
topaz add utility@1.2.0 --root registry-app
topaz vendor --root registry-app --from ./registry
topaz check --root registry-app --locked

Команда vendor проверяет пакет, копирует его в registry-app/vendor/utility/1.2.0 и записывает registry-app/topaz.lock. Последняя проверка завершается с кодом 0. Такое копирование зависимостей внутрь проекта называется вендорингом.

Путь --from отсчитывается от рабочей папки. Команда fetch принимает тот же локальный источник и также записывает копии зависимостей и файл блокировки. Обе команды работают без загрузки из сетевого реестра. Команда lock завершится ошибкой, если у зависимости реестра ещё нет записанного хэша или скопированного содержимого.

Исправьте несовпадение файла блокировки

ПроблемаГде исправить
Манифест изменилсяПросмотрите my-app/topaz.toml. Отмените случайное изменение. Для намеренного изменения выполните topaz lock --root my-app и проверьте разницу в topaz.lock.
Содержимое локальной зависимости изменилосьВосстановите записанные файлы в utility. Чтобы принять намеренное обновление, удалите её запись из my-app/topaz.toml, повторите add для записи нового хэша, затем выполните lock. Проверьте обе разницы.
Пакет реестра отсутствуетПроверьте registry/utility/1.2.0/topaz.toml, имя и версию пакета, а также исходники. Повторите vendor --from ./registry.
Скопированная зависимость измениласьВосстановите записанные файлы или заново выполните вендоринг проверенной зависимости. Если манифест фиксирует хэш, обновите его по проверенному содержимому.

После исправления снова выполните check с --locked. Пакет по-прежнему следует правилам видимости и циклов модулей.

Соберите пакет для распространения

BASH
topaz build --root my-app --locked --release --out-dir product

Команда создаёт product/ с исполняемым файлом и topaz-artifact.json. Поиск пакетов использует корень, зависимости по пути, зафиксированные копии зависимостей и встроенные данные инструментария. Нативная и Web-сборка требуют инструментарий Rust для выбранной цели и запускают Cargo в заблокированном автономном режиме.

Распространяйте весь каталог продукта и данные приложения, необходимые при его файловых разрешениях. При запуске не нужны исходники пакета, topaz.toml, topaz.lock, vendor и CLI Топаза. Условия запуска описаны в разделе Артефакты и развёртывание. Если созданный результат изменился, сохраните его и выберите новый пустой каталог вывода.