Перейти к содержанию
CADCAMFUN
Документы

Документация

Сборки и выпуски

Целевые сайдкара, подписанные ресурсы средства обновления и индекс выпуска, публикуемый после установщиков платформы.

Автоматически переведено с английского. Смотреть оригинал на английском

Модель распространения

Сборка настольного компьютера включает в себя интерфейс Vite, скомпилированную Bun вспомогательную программу и сгенерированные миграции SQLite в приложении Tauri. В репозитории определены сборки macOS Apple Silicon и Intel, Windows x64 и ARM64, а также Linux x64 и ARM64. Автоматизация выпуска настроена в .github/workflows/release.yml; проверки сборки платформы также выполняются независимо через build-platforms.yml.

Определение рабочего процесса описывает процесс публикации. Доступность и достоверность установщика должны быть установлены на основе его конкретных ресурсов запуска и выпуска. Сам по себе исходный код не является доказательством учетных данных для подписи, результатов нотариального заверения или успешной установки на целевом компьютере.

Создание конвейера

scripts/build.ts запускает шесть упорядоченных этапов и прерывается при сбое этапа:

  1. Установить: установка файла замороженной блокировки, включая дополнительные зависимости для всех операционных систем и архитектур ЦП.
  2. Проверять: проверка типа рабочей области. Модульные тесты — это отдельная команда CI.
  3. Скомпилировать: построить сайдкар с scripts/compile-sidecar.ts для тройки мишеней Rust.
  4. Ресурсы: этап packages/db/drizzle как пакетные миграции.
  5. Пучок: создайте интерфейс, затем вызовите Tauri с настройками цели, пакета, подписи и средства обновления.
  6. Артефакты: индексировать ресурсы установщика, записывать контрольные суммы 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-darwindarwin-aarch64.app.tar.gz
macOS Intelx86_64-apple-darwindarwin-x86_64.app.tar.gz
Windows ARM64aarch64-pc-windows-msvcwindows-aarch64, windows-aarch64-msi.exe, .msi
Windows х64x86_64-pc-windows-msvcwindows-x86_64, windows-x86_64-msi.exe, .msi
Linux ARM64aarch64-unknown-linux-gnulinux-aarch64-deb, linux-aarch64-rpm.deb, .rpm
Linux х64x86_64-unknown-linux-gnulinux-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.

Шесть этапов сборки

#ШагПсевдонимыЧто он делает
1installглубиныbun install --frozen-lockfile
2checkпроверки, тест, тестыbun run typecheck
3compileсайдкарСкомпилировать apps/sidecar/src/main.ts до src-tauri/binaries/sidecar-<triple>
4resourcesресурс, миграцииКопировать packages/db/drizzle/ до src-tauri/resources/migrations/
5bundleобъединение в пакетыПриложение vite build, затем bunx tauri build
6artifactsартефакты, примечания, контрольные суммы, выпуск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-msvcwindows-последниемси, нсисокна-х64
aarch64-pc-windows-msvcокна-11-рукамси, нсисоконный рычаг64
x86_64-unknown-linux-gnuubuntu-22.04деб, об/минlinux-x64
aarch64-unknown-linux-gnuubuntu-22.04-рукадеб, об/минlinux-рука64
  1. Доверенное задание проверяет тег выпуска на соответствие версии приложения.
  2. Каждое матричное задание выполняется bun --no-env-file scripts/build.ts --target=… --bundles=… --out-dir=release, подписывает и создает манифест для своих форматов пакетов. Windows импортирует, а затем удаляет необязательный сертификат подписи.
  3. Задание слияния проверяет все шесть манифестов архитектуры и десять записей пакетов в одну. latest.json.
  4. Одно завершающее задание проверяет все артефакты, подписи, контрольные суммы и примечания установщика перед созданием или возобновлением выпуска единой версии и ее публикацией.

CI при каждой отправке запускает два задания: установку, проверку типа и тестирование (а также подготовку двоичного файла и миграции), а также задание Rust с clippy и src-tauri тесты.

Через 3Д

Матрица релизов Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
Шесть из них включают записи задания сборки выпуска: бегун, пул и пакеты (один блок на формат пакета), считываемые из файла Release.yml.