ドキュメント
ビルドとリリース
ターゲット固有のサイドカー、署名されたアップデーター アセット、およびプラットフォーム インストーラーの後に公開されるリリース インデックス。
英語から自動翻訳されています。 英語の原文を見る
流通モデル
デスクトップ ビルドは、Vite フロントエンド、Bun でコンパイルされたサイドカー、生成された SQLite 移行を Tauri アプリケーションにパッケージ化します。このリポジトリは、macOS Apple Silicon と Intel、Windows x64 と ARM64、Linux x64 と ARM64 のビルドを定義します。リリースの自動化は次のように構成されます .github/workflows/release.yml;プラットフォームのビルド チェックも、 build-platforms.yml.
ワークフロー定義は公開プロセスを記述します。インストーラーの可用性と有効性は、その特定の実行およびリリース資産から確立する必要があります。ソース コードだけでは、署名資格情報、公証結果、ターゲット マシンへのインストールの成功を証明することはできません。
パイプラインの構築
scripts/build.ts 6 つの順序付けされたステージを実行し、ステージが失敗すると中止します。
- インストール: すべてのオペレーティング システムと CPU アーキテクチャのオプションの依存関係を含む、凍結されたロックファイルのインストール。
- チェック: ワークスペースのタイプチェック。単体テストは別の CI コマンドです。
- コンパイル: でサイドカーを構築します
scripts/compile-sidecar.tsrust ターゲット トリプルの場合。 - リソース: ステージ
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。サイドカーバイナリは次のように書き込まれます。 apps/desktop/src-tauri/binaries/sidecar-<triple>、 と .exe windows 上で。不必要な開発の再開を避けるために、同一のバイナリと移行ツリーは変更されずに維持されます。
使用 compile-sidecar.ts パイプラインを通じて、組み込みホストのバンドル調整を適用します。直接の汎用コンパイル コマンドは、同じビルド手順を表しません。デフォルトのアーティファクト ディレクトリは次のとおりです。 apps/desktop/src-tauri/target/release-artifacts.
の 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と出版物
| ワークフロー | 設定された責任 |
|---|---|
ci.yml | 凍結インストール、ワークスペースのタイプチェック/テスト、サイドカー/リソースのステージング、Rust のクリッピー/テスト、およびコンパニオン JavaScript チェック。 |
build-platforms.yml | マニュアルまたは build/** 6 つのターゲット アーキテクチャ用のブランチ ビルド。バンドルの使用 --no-updater リリースを公開せずにインデックス付きアーティファクトをアップロードします。 |
release.yml | バージョンタグの検証、署名されたプラットフォームのビルド、プラットフォームごとのマニフェスト、6 つのプラットフォームのマニフェストのマージ、インストーラーの公開、および最終的なインデックスの公開。 |
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 シークレット ストアを通じて構成します。
npm トークンが利用可能な場合、別のリリース ジョブによって nikcli プラグイン パッケージが公開されます。プライマリ スコープを公開できない場合は、すでに公開されているバージョンをスキップし、構成されたフォールバック パッケージ名を使用できます。このパッケージ ジョブは、デスクトップ インストーラーの可用性を確立しません。
アップデーターの動作
構成されたアップデータ エンドポイントは、リポジトリの最新の GitHub リリースのダウンロードです。 latest.json。 Rust アップデーターは、起動時と 4 時間ごとにチェックを行い、サービスを通じて手動チェックがキューに入れられます。各リクエストでは、30 秒のタイムアウトが使用されます。マニフェストはプラットフォーム固有の資産と署名を識別します。公開キーはアプリケーション構成の一部です。
update://status チェック、最新、利用可能、ダウンロード、準備完了、および失敗した状態を保持します。リリースノートの内容 [critical] 利用可能なアップデートを非表示としてマークします。再起動準備完了状態も解除できません。これはプロンプトに影響します。インストールでは、保存されていない作業ガードが引き続き考慮されます。
install_update 発表されたバージョンを記録して再チェックし、署名が検証されたパッケージをダウンロードします。エディターはダウンロード前とダウンロード前に再度保存します。 apply_update、ダウンロード中に行われた編集を保護します。保存されていない作業は両方の操作をブロックします。失敗した保存では、再試行のために検証されたバイトが保持されます。ネイティブ ステータスはサブスクライブ後に回復され、チェックはアクティブな進行状況または保留中の再起動を置き換えることはできません。 Windows は、インストーラーが制御を取得する前にサイドカーを排出します。他のプラットフォームでは、インストール後に再起動が行われます。
リリースキーを安定させておく
アプリケーションは、埋め込まれた公開キーを使用して更新署名を検証します。異なる秘密鍵で署名されたリリースは交換できません。ユーザー向けのリリースの準備が整っていることを宣言する前に、ターゲット プラットフォーム上で生成されたインストーラーとアップデーター アセットを確認してください。
データベースの互換性
パッケージ化されたアプリケーションが開く cadcamfun.db アプリケーション データ ディレクトリの下にあります。保留中の移行は、バンドルに含まれる移行を使用して起動時にデータベース層によって適用されます。したがって、スキーマのアップグレードとバイナリの更新は、別個の成果物であっても関連しています。
生成されたリリース ノートでは、追跡された移行ツリーと以前のリリース タグが比較されます。変更されたツリーは、ダウングレードするには安全ではないと報告されます。変更されていないツリーは移行互換として報告されます。利用できない履歴は不明として報告されます。この自動比較では、アプリケーション レベルの互換性の問題の可能性がすべて検証されるわけではありません。
バイナリを古いバージョンに置き換える前に、現在のデータを保存し、リリースの互換性に関するメモを調べてください。順方向移行コードは逆方向移行を意味するものではありません。実際のデータ ディレクトリのデータベースのバックアップとリカバリの手順に従ってください。
リリースの検証
bun test scripts
bun scripts/build.ts --only=artifacts --dry-run ヘルパー テストは、ターゲット マッピング、署名要件、アーティファクトの名前付け、マニフェストの処理、およびステージング ルールを検証します。ドライランでは、コンパイルや署名を行わずに、計画された操作が出力されます。どちらも、実際のネイティブ バンドル、アップデータのダウンロード/インストール テスト、またはコンパニオンの物理デバイスの受け入れに代わるものではありません。
運用リリースの場合は、正確なタグ/コミット、ワークフロー結果、ターゲット固有のインストーラーと更新アセット、チェックサム/署名ファイル、および公開されたマニフェストを保持します。インストールされたアプリがバンドルされたサイドカーと移行を開始し、アップデーターが目的のプラットフォーム アセットを選択することを検証します。
ターゲットとアセットのリファレンス
| プラットフォーム | 錆びターゲット | マニフェストキー | アップデーター アセット |
|---|---|---|---|
| macOS アップルシリコン | aarch64-apple-darwin | darwin-aarch64 | .app.tar.gz |
| macOS インテル | x86_64-apple-darwin | darwin-x86_64 | .app.tar.gz |
| Windows ARM64 | aarch64-pc-windows-msvc | windows-aarch64, windows-aarch64-msi | .exe, .msi |
| Windows x64 | 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 |
| Linuxx64 | x86_64-unknown-linux-gnu | linux-x86_64-deb, linux-x86_64-rpm | .deb, .rpm |
ジェネレーターには、上記のフォーマットごとに 1 つのアセットが必要です。そのアセットに隣接する .sig ファイルとリリースノート。アセット名には <triple>-- 接頭語;重複した名前と孤立した署名は拒否されます。 Tauri アップデータ 2.13.1 は、インストールされるパッケージの種類を自動的に選択します。 Linux では、AppImage のない署名付き Debian/RPM パッケージを使用します。
マージされたマニフェストは、バージョン、発行日、および注記について合意する必要があります。公開するには、上記の 10 個のキーがすべて必要です。 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 リンカーおよびBunドラーは提供されません。 --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-prefixed タグが Tauri 構成のバージョンと一致しません。リリースの検証はプラットフォームが構築される前に停止します。 |
| サポートされていないターゲット | サポートされているアーキテクチャ/プラットフォーム マッピングとインストールされた Rust ターゲットを使用します。マニフェストの発行では、上記の 6 つのキーがサポートされています。 |
| アップデータ署名キーがありません | シークレット ストア/ローカル構成を通じて署名入力を提供するか、意図的な署名を選択します。 --no-updater 開発ビルド。 |
| ゼロまたは複数のアップデーター アセット | インデックス付けされたターゲット ディレクトリを検査します。アーカイブが古いか不一致であると、選択が曖昧になります。 |
| マニフェストメタデータの不一致 | すべてのプラットフォーム ジョブは、同じ解決されたバージョン/日付/メモを使用してコミットする必要があります。 |
| リリースはすでに公開されています | ワークフローはそれを変更することを拒否します。再実行は上書きメカニズムではありません。 |
| インストールされているアプリのアップデーターチェックが失敗する | エンドポイントの到達可能性、マニフェスト ターゲット キー、ダウンロード URL、アセットの署名、および埋め込まれた公開キーを検査します。 |
| 作業内容が保存されていないためインストールが拒否されました | エディターを使用してアクティブな作業を保存または破棄してから、保留中の更新を再試行します。 |
有用なリリース レポートには、失敗したステージと構築中のターゲットが記録されます。非機密アーティファクト名、検証エラー、ワークフロー識別子を含めます。アップデーターの実行中に、以前にインストールされたバージョンと検証済みのデータのバックアップを利用できるようにしておいてください。移行の互換性は、署名の有効性とは別にチェックされます。
実装アンカー: scripts/release-helpers.ts, signing-config.ts, updater-manifest.ts, stage-release.ts、 そして apps/desktop/src-tauri/src/updater.rs.
6 つの構築ステップ
| # | ステップ | 別名 | 何をするのか |
|---|---|---|---|
| 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 | アプリ、dmg | マコスアーム64 |
x86_64-apple-darwin | マコス-14 | アプリ、dmg | マコス-X64 |
x86_64-pc-windows-msvc | windows-最新 | msi、nsis | ウィンドウズ-x64 |
aarch64-pc-windows-msvc | 窓-11-アーム | msi、nsis | ウィンドウアーム64 |
x86_64-unknown-linux-gnu | ubuntu-22.04 | デブ、rpm | linux-X64 |
aarch64-unknown-linux-gnu | ubuntu-22.04-arm | デブ、rpm | linux アーム64 |
- 信頼できるジョブは、アプリケーションのバージョンに対してリリース タグを検証します。
- 各マトリックス ジョブが実行される
bun --no-env-file scripts/build.ts --target=… --bundles=… --out-dir=release、パッケージ形式のマニフェストに署名し、構築します。 Windows は、オプションの署名証明書をインポートした後、削除します。 - マージ ジョブは、6 つのアーキテクチャ マニフェストすべてとその 10 個のパッケージ エントリを 1 つにまとめて検証します。
latest.json. - 1 つの完了ジョブでは、単一バージョンのリリースを作成または再開して公開する前に、すべてのインストーラー アーティファクト、署名、チェックサム、メモが検証されます。
プッシュごとに CI は 2 つのジョブを実行します。インストール、タイプチェック、テスト (およびサイドカー バイナリと移行のステージング)、および Clippy と src-tauri テスト。