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

Артефакты и развёртывание

Проверьте точные деревья продуктов Топаза, запустите их без исходного пакета Топаза и восстановитесь после изменения вывода.

emit выводит сгенерированный исходный код для инспекции или интеграции. build формирует готовый продукт поставки. Развёртывайте каталог build, а не временную директорию компилятора и не отдельные сгенерированные файлы вне контекста.

Сборка продуктов

BASH
topaz build main.tpz --release --out-dir native-product
topaz build --target python --root my-app --locked --out-dir python-product
topaz build main.tpz --target web --out-dir web-product
topaz build main.tpz --target web-worker --out-dir worker-product
topaz build --root my-app --locked --release --out-dir package-product

Последняя команда использует параметр [build].target из topaz.toml. Цели web-app и http-service доступны только в пакетном режиме. Файл topaz.lock применяется при разработке и проверке. Готовый управляемый продукт записывает сведения об идентификации в topaz-artifact.json.

Общие файлы каждого продукта

Каждая успешная сборка добавляет:

Вывод
LICENSE
NOTICE
GENERATED-OUTPUT-NOTICE.txt
topaz-artifact.json

Манифест артефакта содержит целевую платформу, идентификацию инструментария и языка, требования к среде выполнения, способ запуска, а также путь, размер, хэш-сумму и признак исполняемости для каждого управляемого файла. Этот файл записывается последним.

Деревья отдельных целей

Платформенный продукт добавляет один исполняемый файл:

Вывод
target/debug/program[.exe]
target/release/program[.exe]

Существует только выбранный профиль. В Windows имя файла завершается расширением .exe.

Python добавляет:

Вывод
program.py
topaz_py_rt.py

Raw Web добавляет:

Вывод
topaz-web.js
topaz-web.d.ts
topaz-web.wasm

Web Worker добавляет к файлам Raw Web:

Вывод
topaz-web-worker.js
topaz-web-worker-client.js

Управляемое Web Application добавляет к файлам Raw Web:

Вывод
index.html
topaz-app.js
topaz-web-capabilities.json
styles/app.css

Объявленные стили и ресурсы сохраняют нормализованные относительные пути, поэтому содержание последней строки зависит от пакета.

HTTP-сервис добавляет:

Вывод
target/release/program[.exe]
topaz-service-config.json
THIRD-PARTY-NOTICES.txt

В примере приведена релизная сборка. В отладочной сборке используется каталог target/debug, а в Windows добавляется расширение [.exe].

Запуск без исходного пакета Топаза

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

BASH
./target/release/program
python3 program.py

Используйте команду, соответствующую выбранному платформенному, HTTP- или Python-продукту. Для Python требуется версия 3.11 или новее. Платформенный исполняемый файл и файл HTTP-сервиса предназначены для системы сборки.

Разворачивайте каталог управляемого Web Application через HTTP и открывайте index.html. Raw Web и Worker требуют среду модулей ES, импортирующую сгенерированный API JavaScript. Ни один браузерный продукт не должен полагаться на загрузку модулей по протоколу file://.

Платформенные и Python-приложения из пакета сопоставляют объявленные корневые пути доступа к файлам относительно рабочего каталога процесса. Если этого требует манифест, скопируйте данные приложения и создайте доступные для записи каталоги рядом с управляемым продуктом. Данные пакета не добавляются автоматически. Стили и ресурсы веб-приложения обрабатываются иначе: объявленные входные точки [web] копируются в управляемый браузерный продукт.

Безопасность каталога вывода и восстановление

Повторная сборка той же цели сначала проверяет существующие управляемые байты. Топаз отклоняет смену цели, некорректный манифест, изменённый управляемый файл, символические ссылки и конфликты с пользовательскими путями. Файлы, не указанные в манифесте артефакта, сохраняются.

Не удаляйте каталог с неопределённым состоянием для принудительного запуска сборки. Сохраните его для анализа и выберите новый пустой каталог --out-dir. Если требуется восстановить прежний продукт, восстановите целиком заведомо исправную копию, а не редактируйте хэш-суммы и не удаляйте отдельные управляемые файлы.

Связанная документация