Документация
Сборки и выпуски
Целевые сайдкара, подписанные ресурсы средства обновления и индекс выпуска, публикуемый после установщиков платформы.
Автоматически переведено с английского. Смотреть оригинал на английском
Модель распространения
Сборка настольного компьютера включает в себя интерфейс Vite, скомпилированную Bun вспомогательную программу и сгенерированные миграции SQLite в приложении Tauri. В репозитории определены сборки macOS Apple Silicon и Intel, Windows x64 и ARM64, а также Linux x64 и ARM64. Автоматизация выпуска настроена в .github/workflows/release.yml; проверки сборки платформы также выполняются независимо через build-platforms.yml.
Определение рабочего процесса описывает процесс публикации. Доступность и достоверность установщика должны быть установлены на основе его конкретных ресурсов запуска и выпуска. Сам по себе исходный код не является доказательством учетных данных для подписи, результатов нотариального заверения или успешной установки на целевом компьютере.
Создание конвейера
scripts/build.ts запускает шесть упорядоченных этапов и прерывается при сбое этапа:
- Установить: установка файла замороженной блокировки, включая дополнительные зависимости для всех операционных систем и архитектур ЦП.
- Проверять: проверка типа рабочей области. Модульные тесты — это отдельная команда CI.
- Скомпилировать: построить сайдкар с
scripts/compile-sidecar.tsдля тройки мишеней Rust. - Ресурсы: этап
packages/db/drizzleкак пакетные миграции. - Пучок: создайте интерфейс, затем вызовите Tauri с настройками цели, пакета, подписи и средства обновления.
- Артефакты: индексировать ресурсы установщика, записывать контрольные суммы SHA-256 и создавать примечания к выпуску из истории Git.
bun scripts/build.ts --help
bun scripts/build.ts --dry-run
bun run build:sidecar
bun scripts/build.ts --only=resources
bun scripts/build.ts --no-updater --only и --skip принимать сценические имена; --target, --bundles, и --out-dir выбрать выходы. Целью по умолчанию является хост, о котором сообщает rustc -vV. Двоичные файлы Sidecar записываются в apps/desktop/src-tauri/binaries/sidecar-<triple>, с .exe в Windows. Идентичные двоичные файлы и деревья миграции остаются неизменными, чтобы избежать ненужного перезапуска разработки.
Использовать compile-sidecar.ts через конвейер: он применяет адаптации связывания встроенного хоста. Прямая универсальная команда компиляции не представляет собой одну и ту же процедуру сборки. Каталог артефактов по умолчанию: apps/desktop/src-tauri/target/release-artifacts.
The resources пошаговые копии packages/db/drizzle/ в apps/desktop/src-tauri/resources/migrations/ и это безопасно повторить. artifacts шаг пишет SHA256SUMS и RELEASE_NOTES.md, построенный на основе коммитов с момента последнего тега. Псевдонимы шагов принимаются --only и --skip: deps, checks/test, sidecar, migrations, и notes/checksums/release. Скрипт никогда не читается .env* файлы или печатает секретные значения.
КИ и публикации
| Рабочий процесс | Настроенные обязанности |
|---|---|
ci.yml | Замороженная установка, проверка/тесты типов рабочей области, промежуточная подготовка/промежуточная обработка ресурсов, клипы/тесты Rust и сопутствующие проверки JavaScript. |
build-platforms.yml | Ручной или build/** отраслевые сборки для шести целевых архитектур. Использование пакетов --no-updater и загружать проиндексированные артефакты без публикации релиза. |
release.yml | Проверка тегов версий, подписанные сборки платформы, манифесты для каждой платформы, объединение манифестов для шести платформ, публикация установщика и окончательная публикация индекса. |
ios.yml | Сборка неподписанного симулятора и сопряжение туда и обратно; нет публикации в App Store или TestFlight. |
Рабочий процесс выпуска выполняется в течение v* теги или тег существующей версии, выбранный вручную в репозитории, не являющемся разветвлением. release-ref.ts проверяет тег и версию приложения и разрешает фиксацию. Каждая сборка создает выпуск платформы, например тег версии с суффиксом macos-arm64 или linux-x64. Только после публикации всех выпусков платформы индекс версий публикует объединенные версии. latest.json.
stage-release.ts проверяет выбранные артефакты, отношения контрольной суммы и подписи и ссылки манифеста перед публикацией. Уже опубликованные релизы не перезаписываются. Индексный выпуск может стать последним для стабильных версий; предварительные выпуски остаются помеченными как предварительные выпуски.
Для сборок средства обновления требуется секретный ключ подписи Tauri и конфигурация пароля, соответствующая открытому ключу в tauri.conf.json. подписание/нотариальное заверение выпуска macOS использует сертификат Apple и настройки учетной записи; Windows импортирует сертификат подписи и передает его отпечаток сборщику. Отсутствие необходимых входных данных для подписи выпуска приводит к сбою сборки выпуска. Настройте их через секретное хранилище CI.
Отдельное задание по выпуску публикует пакет плагина nikcli, когда доступен токен npm. Он пропускает уже опубликованную версию и может использовать настроенное имя резервного пакета, если основная область не может быть опубликована. Это задание пакета не устанавливает доступность установщика на рабочем столе.
Поведение программы обновления
Настроенная конечная точка средства обновления — это последняя загрузка выпуска GitHub из репозитория по адресу: latest.json. Средство обновления Rust выполняет проверки при запуске и каждые четыре часа, при этом ручные проверки ставятся в очередь через его службу. Для каждого запроса используется тайм-аут длительностью 30 секунды. Манифест идентифицирует активы и подписи, специфичные для платформы; открытый ключ является частью конфигурации приложения.
update://status содержит состояния проверки, актуальности, доступности, загрузки, готовности и сбоя. Примечания к выпуску, содержащие [critical] пометить доступное обновление как неотключаемое. Состояние готовности к перезапуску также нельзя отменить. Это влияет на подсказку; установка по-прежнему учитывает защиту несохраненной работы.
install_update записывает и перепроверяет объявленную версию, затем загружает пакет с проверенной подписью. Редактор сохраняет перед загрузкой и еще раз перед apply_update, защищая изменения, внесенные во время загрузки. Несохраненная работа блокирует обе операции; неудачные сохранения сохраняют проверенные байты для повторной попытки. Родной статус восстанавливается после подписки, и проверки не могут заменить активный прогресс или ожидающий перезапуск. Windows опустошает сайдкар до того, как ее установщик возьмет на себя управление; другие платформы предлагают перезагрузку после установки.
Обеспечьте стабильность ключей выпуска
Приложение проверяет подписи обновлений, используя встроенный открытый ключ. Релиз, подписанный другим закрытым ключом, не является взаимозаменяемым. Проверьте созданный ресурс установщика и средства обновления на целевой платформе, прежде чем объявить выпуск готовым для пользователей.
Совместимость с базой данных
Упакованные приложения открыты cadcamfun.db в каталоге данных своего приложения. Ожидающие миграции применяются на уровне базы данных при запуске с использованием миграций, включенных в пакет. Таким образом, обновления схемы и двоичные обновления связаны между собой, хотя они являются отдельными артефактами.
Созданные примечания к выпуску сравнивают отслеживаемые деревья миграции с тегом предыдущего выпуска. Измененное дерево считается небезопасным для понижения версии; неизмененное дерево считается совместимым с миграцией; недоступная история сообщается как неизвестная. Это автоматическое сравнение не проверяет все возможные проблемы совместимости на уровне приложения.
Прежде чем заменять двоичный файл более старой версией, сохраните текущие данные и ознакомьтесь с примечаниями о совместимости выпуска. Код прямой миграции не подразумевает обратную миграцию. Следуйте процедурам резервного копирования и восстановления базы данных для фактического каталога данных.
Проверка выпуска
bun test scripts
bun scripts/build.ts --only=artifacts --dry-run Вспомогательные тесты проверяют сопоставление целей, требования к подписи, именование артефактов, обработку манифестов и правила промежуточного хранения. Пробный прогон печатает запланированные операции без компиляции и подписи. Ни один из них не заменяет фактический собственный пакет, тестирование загрузки/установки обновления или приемку физического устройства для сопутствующего устройства.
Для рабочего выпуска сохраните точный тег/фиксацию, результат рабочего процесса, целевой установщик и актив обновления, файлы контрольной суммы/подписи и опубликованный манифест. Убедитесь, что установленное приложение запускает встроенную дополнительную версию и миграцию и что средство обновления выбирает нужный ресурс платформы.
Ссылка на цель и актив
| Платформа | Ржавая мишень | Ключ манифеста | Актив средства обновления |
|---|---|---|---|
| macOS Apple Кремний | aarch64-apple-darwin | darwin-aarch64 | .app.tar.gz |
| macOS Intel | x86_64-apple-darwin | darwin-x86_64 | .app.tar.gz |
| Windows ARM64 | aarch64-pc-windows-msvc | windows-aarch64, windows-aarch64-msi | .exe, .msi |
| Windows х64 | x86_64-pc-windows-msvc | windows-x86_64, windows-x86_64-msi | .exe, .msi |
| Linux ARM64 | aarch64-unknown-linux-gnu | linux-aarch64-deb, linux-aarch64-rpm | .deb, .rpm |
| Linux х64 | x86_64-unknown-linux-gnu | linux-x86_64-deb, linux-x86_64-rpm | .deb, .rpm |
Генератору требуется ровно один ресурс для каждого формата, указанного выше, .sig файл и примечания к выпуску. В именах активов используется <triple>-- префикс; дублирующиеся имена и бесхозные подписи не принимаются. Средство обновления Tauri 2.13.1 автоматически выбирает тип установленного пакета; Linux использует подписанные пакеты Debian/RPM без AppImage.
В объединенных манифестах должна быть согласована версия, дата публикации и примечания. Для публикации требуются все десять ключей, указанных выше. Базовые ключи Windows сохраняют совместимость с NSIS для старых клиентов; Ключи MSI сохраняют установки MSI. URL-адреса должны использовать HTTPS без учетных данных, запроса или фрагмента. При промежуточной проверке проверяется каждый целевой префикс, суффикс пакета, подпись и URL-адрес выпуска.
Локальные параметры сборки и входные данные для подписи
bun --no-env-file scripts/build.ts --only=compile,resources --target=aarch64-apple-darwin --dry-run
bun --no-env-file scripts/build.ts --skip=install,check --target=x86_64-unknown-linux-gnu --bundles=deb,rpm --no-updater --dry-run Удалять --dry-run только тогда, когда установлены выбранная целевая цепочка инструментов и собственные необходимые компоненты. Кросс-компиляция исполняемого файла Bun сама по себе не обеспечивает кросс-платформенный компоновщик и сборщик Tauri. --only и --skip являются взаимоисключающими; --skip-install это удобный псевдоним. --no-updater опускает создание архива/подписи средства обновления и его шлюз подписи.
| Вход | Используется для |
|---|---|
TAURI_SIGNING_PRIVATE_KEY, TAURI_SIGNING_PRIVATE_KEY_PASSWORD | Подписи обновлений. Ключи, предоставленные средой, имеют приоритет над локальной конфигурацией подписи. |
Игнорируется местный tauri-signing.json | Резервный вариант локального ключа средства обновления, если ключ среды не указан. Его объявленный открытый ключ должен совпадать с настроенным открытым ключом средства обновления. |
CADCAM_RELEASE=1 | Включает требования к подписанию релиза платформы при проверке сборки. |
APPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD, APPLE_ID, APPLE_PASSWORD, APPLE_TEAM_ID | сертификат выпуска macOS и конфигурация нотариального заверения. |
WINDOWS_CERTIFICATE, WINDOWS_CERTIFICATE_PASSWORD, импортированный отпечаток сертификата | Подписание релиза Windows; CI импортирует, а затем удаляет сертификат. |
Сборка загружает учетные данные локального средства обновления только для этапа объединения и передает значения подписи через среду этому дочернему процессу. Не распечатывайте локальные файлы подписи и не размещайте настоящие ключи в примере документации. Закрытый ключ, который не соответствует открытому ключу установленного приложения, не может создать принятое обновление для этого приложения.
Диагностика отказа выпуска
| Отказ | Интерпретация и следующая проверка |
|---|---|
| Версия тега/приложения не согласна | Выбранный vТег с префиксом не соответствует версии в конфигурации Tauri. Проверка выпуска прекращается до сборки платформы. |
| Неподдерживаемая цель | Используйте поддерживаемое сопоставление архитектуры/платформы и установленную цель Rust; Публикация манифеста поддерживает шесть ключей, указанных выше. |
| Отсутствует ключ подписи средства обновления | Предоставьте входные данные для подписи через секретное хранилище/локальную конфигурацию или выберите преднамеренный --no-updater развивающая сборка. |
| Ноль или несколько ресурсов средства обновления | Проверьте индексированный целевой каталог; устаревшие или несовпадающие архивы делают выбор неоднозначным. |
| Метаданные манифеста не совпадают | Все задания платформы должны использовать одну и ту же разрешенную версию/дату/примечания и фиксацию. |
| Релиз уже опубликован | Рабочий процесс отказывается его изменять. Повторный запуск не является механизмом перезаписи. |
| Сбой проверки обновления установленного приложения | Проверьте доступность конечной точки, целевой ключ манифеста, URL-адрес загрузки, подпись актива и встроенный открытый ключ. |
| В установке отказано из-за несохраненной работы | Сохраните или отмените активную работу через редактор, а затем повторите ожидающее обновление. |
Полезный отчет о выпуске записывает, какой этап не удался и какую цель он достиг. Включите несекретные имена артефактов, ошибки проверки и идентификаторы рабочих процессов. Сохраняйте предыдущую установленную версию и проверенную резервную копию данных доступными во время обновления; Совместимость миграции проверяется отдельно от достоверности подписи.
Якоря реализации: scripts/release-helpers.ts, signing-config.ts, updater-manifest.ts, stage-release.ts, и apps/desktop/src-tauri/src/updater.rs.
Шесть этапов сборки
| # | Шаг | Псевдонимы | Что он делает |
|---|---|---|---|
| 1 | install | глубины | bun install --frozen-lockfile |
| 2 | check | проверки, тест, тесты | bun run typecheck |
| 3 | compile | сайдкар | Скомпилировать apps/sidecar/src/main.ts до src-tauri/binaries/sidecar-<triple> |
| 4 | resources | ресурс, миграции | Копировать packages/db/drizzle/ до src-tauri/resources/migrations/ |
| 5 | bundle | объединение в пакеты | Приложение vite build, затем bunx tauri build |
| 6 | artifacts | артефакты, примечания, контрольные суммы, выпуск | SHA256SUMS и RELEASE_NOTES.md из коммитов с момента последнего тега |
Шаги всегда выполняются в этом порядке, и неудачный шаг останавливает выполнение. Скрипт никогда не читается .env файлы и никогда не печатает секретные значения.
| Вариант | Effect |
|---|---|
--only=a,b / --skip=a,b | Выполнить или пропустить шаги (имена или псевдонимы) |
--skip-install | То же, что --skip=install |
--target=<triple> | Ржавая мишень; по умолчанию это тройка хостов из rustc -vV |
--bundles=<list> | Перенаправлено в tauri build --bundles |
--no-updater | Инсталляторы без архивов и подписей обновлений |
--out-dir=<path> | Где шаг 6 записывает; по умолчанию apps/desktop/src-tauri/target/release-artifacts |
--dry-run | Распечатайте план; пишите и ничего не меняйте |
bun scripts/build.ts --dry-run # whole plan, no side effects
bun scripts/build.ts --only=resources # restage migrations (idempotent)
bun scripts/build.ts --only=compile,resources # rebuild the sidecar and migrations
bun scripts/build.ts --only=notes --dry-run # preview release notes
bun scripts/build.ts --target=aarch64-apple-darwin Для подписи локального средства обновления используется игнорируемый tauri-signing.json когда в среде не установлен ключ подписи. Сертификаты платформы по-прежнему необходимы, когда CADCAM_RELEASE=1.
Матрица релизов
| Цель | бегун | Пакеты | Выпустить пулю |
|---|---|---|---|
aarch64-apple-darwin | макос-14 | приложение, урон | макрос-рука64 |
x86_64-apple-darwin | макос-14 | приложение, урон | макос-х64 |
x86_64-pc-windows-msvc | windows-последние | мси, нсис | окна-х64 |
aarch64-pc-windows-msvc | окна-11-рука | мси, нсис | оконный рычаг64 |
x86_64-unknown-linux-gnu | ubuntu-22.04 | деб, об/мин | linux-x64 |
aarch64-unknown-linux-gnu | ubuntu-22.04-рука | деб, об/мин | linux-рука64 |
- Доверенное задание проверяет тег выпуска на соответствие версии приложения.
- Каждое матричное задание выполняется
bun --no-env-file scripts/build.ts --target=… --bundles=… --out-dir=release, подписывает и создает манифест для своих форматов пакетов. Windows импортирует, а затем удаляет необязательный сертификат подписи. - Задание слияния проверяет все шесть манифестов архитектуры и десять записей пакетов в одну.
latest.json. - Одно завершающее задание проверяет все артефакты, подписи, контрольные суммы и примечания установщика перед созданием или возобновлением выпуска единой версии и ее публикацией.
CI при каждой отправке запускает два задания: установку, проверку типа и тестирование (а также подготовку двоичного файла и миграции), а также задание Rust с clippy и src-tauri тесты.