ここで説明するファイルは、Docker App Store のビルド完了後に ZimaOS ホームサーバーまたは Homelab のクライアントが利用するものです。
プロトコルは dist/ 配下に生成されたファイルから利用されます。
出力ファイル
ビルドスクリプトは次のファイルを生成できます。
dist/store.jsondist/store.{locale}.jsondist/index.jsondist/index.{locale}.jsondist/apps/<app-id>/docker-compose.ymldist/apps/<app-id>/docker-compose.{architecture}.ymldist/apps/<app-id>/meta.jsondist/apps/<app-id>/meta.{locale}.jsondist/apps/<app-id>/assets/*
index.json
index.json はストア全体のアプリ一覧です。
各アプリ項目には次のようなデータが含まれます。
idtitletaglinecategoryversionauthordeveloperarchitecturesiconthumbnailcompose_urlmeta_urlcontent_hash
一覧フィールドの意味
id
- ソースのトップレベル
x-casaos.idを正規化したアプリ識別子です dist/apps/配下に生成するアプリ出力フォルダー名にも使用します
title
- 対象 locale 向けに解決されたアプリ表示名です
tagline
- 対象 locale 向けに解決された短い概要です
category
- 表示とグループ化に使用する標準カテゴリ値です
version
x-casaos.versionで指定されたアプリバージョンです- ユーザーにアップグレード内容を伝え、バージョンを追跡するために重要です
author
- パッケージ担当者またはストア側の帰属情報です
developer
- 上流プロジェクトの帰属情報です
architectures
- 対応 CPU アーキテクチャの一覧です
- 可能な場合、ビルドはこの値を使ってアーキテクチャ別の Compose を生成します
icon
--base-urlからの相対パスまたは URL で表されるビルド済みリソースです
thumbnail
--base-urlからの相対パスまたは URL で表されるビルド済みサムネイルです
compose_url
- アプリごとのビルド済み Compose ファイルへのパスです
meta_url
- アプリごとのビルド済みメタデータファイルへのパスです
content_hash
- アプリに関連するすべての生成ファイルを表すハッシュです
- クライアント側の差分更新検出に使用します
次の形式で生成されます。
dist/index.json- 一覧向けフィールドで 1 つ以上のアプリがその locale を明示的に定義している場合の
dist/index.{locale}.json
ビルド済み docker-compose.yml
ビルド済み Compose ファイルには、実行向けの x-casaos フィールドだけが残ります。
idmainindexport_mapschemeicontitle
その他のメタデータはビルド済み Compose から削除され、meta.json に移動します。
ビルド済み Compose の動作
ビルド済み Compose は、ソース Compose の単純なコピーではありません。
ビルド中に次の処理を行います。
- 実行に不要な
x-casaosメタデータを削除します iconを書き換えます- locale をキーとする
titleを、生成対象 locale の単純な文字列に解決します
ビルド済み meta.json
ビルド済み meta.json には、アップグレードや表示に関連する次のようなアプリメタデータが含まれます。
versionupdate_atrelease_notewebsitereposupportdocs
version は単なる表示用の追加項目ではありません。新しいストアでアプリのアップグレードを伝えるための重要なフィールドです。
title と icon は、ビルド済み Compose の実行および表示情報として残るため、意図的に meta.json へは書き込まれません。
ビルド済みメタデータのグループ
実際には、ビルド済み meta.json は次の項目をまとめます。
taglineやdescriptionなどの説明コンテンツthumbnailやscreenshot_linkなどの表示リソースauthorやdeveloperなどの帰属情報architecturesなどの互換性データversion、update_at、release_noteなどの任意の拡張フィールド
パスの動作
生成されるアプリ相対パスは通常、次のようになります。
apps/com.example.myapp/docker-compose.ymlapps/com.example.myapp/meta.jsonapps/com.example.myapp/assets/icon.svg
これらの例で、com.example.myapp はソースの x-casaos.id を正規化した値です。
パスは、設定された --base-url を基準に解決されます。
したがって、--base-url を変更すれば、同じ論理ビルドを別の公開ホストへ配信できます。
コンテンツハッシュ
content_hash は、生成された各アプリディレクトリ内の次のようなファイルから計算されます。
- ビルド済み Compose
- アーキテクチャ別 Compose
- メタデータの各バリアント
- リソース
これにより、クライアント側で効率的な差分更新が可能になります。
更新の動作
クライアントの更新確認は、index.json と各アプリの content_hash に基づきます。
つまり、次のように動作します。
- 変更されていないアプリはスキップされます
- 変更されたアプリは、その Compose とメタデータファイルだけを取得します
- 更新のたびにストア全体のパッケージを再ダウンロードする必要はありません
よくある間違い
dist/のファイルを手動で作成するものだと考えるmeta.jsonにtitleが含まれると考えるcontent_hashを手動のバージョンフィールドとして扱う- locale 固有のインデックスとメタデータは、明示的に定義された locale にだけ生成されることを忘れる