Vex パッケージマネージャー

manifestベースWaveプロジェクト、Git・パス依存性、lockfile、オフラインビルドとwavec境界を説明します。

Wave Foundation

役割

VexはWaveのパッケージマネージャーでありビルドツールです。 Vexはwavecの上で動作します。プロジェクト構造と依存性の解釈はVexが担当し、コンパイラフラグとコンパイルパイプラインはwavecが担当します。

Vexコマンドはmanifestベースです。 vex build、vex check、vex runはrawwavecフラグを意図的に受け取りません。

パッケージの作成

vex init
vex init --lib

アプリケーションはsrc/main.wave、ライブラリはsrc/lib.waveを使用します。パッケージのルート構造は次のとおりです。

my_project/
├── src/
│   └── main.wave
├── vex.ws
├── vex.lock
└── .vex/
    └── deps/

vex.wsがmanifestです。 Vexは.wson拡張子のmanifestを使用しません。

{
    name = "my_project",
    version = 0.1.0,
    lib = false,
    description = "my_project Project",
    author = "unknown",
    license = "Unknown",
    dependencies = []
}

ビルドコマンド

vex build [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex check [--target <triple>] [--release] [--dry-run] [--locked] [--offline]
vex run   [--target <triple>] [--release] [--dry-run] [--locked] [--offline] [-- <args...>]

Vexのオプションは小さく保たれます。 emit、linker、CPU、ABIまたはdebugのようにコンパイラに依存する制御が必要な場合は、wavecを直接使用してください。特定のコンパイラを使用する場合は、VEX_WAVEC=/path/to/wavecを設定してください。

Resolving、Fetching、Compiling、Checking、Running、Finishedのような進行段階はstderr stdoutに保持されます。

Git中心依存性

Vex依存性は、ローカルpathまたはGitURLで指定します。 1つの依存関係には、2つの方法のうち1つのみを使用できます。

{
    name = "app",
    version = 0.1.0,
    dependencies = [
        { name = "local_math", path = "../local_math" },
        { name = "remote_math", git = "https://github.com/example/math.git", tag = "v0.1.0" }
    ]
}

Git依存性には、branch、tag、revのうち最大1つのみ指定できます。すべての依存ルートには独自のvex.wsが必要です。 Vexは依存性manifestを再帰的に解釈し、競合するパッケージのアイデンティティを拒否し、管理するGitcheckoutを.vex/deps/<name>に保存します。

lockfile契約

スキーマ v2 vex.lockは、全遷移依存性グラフと正確なGitcommitを記録します。 manifestでコミットしてください。同じmanifestと有効なlockfileを使用すると、branchやtagに戻りません。同じ依存グラフを選択します。

依存性が必要なコマンドは自動的に解釈され、次のコマンドで事前に準備することもできます。

vex fetch
vex update
vex update math shared_core

vex updateはすべてのGitパッケージを更新するか、指定されたパッケージと影響を受ける遷移グラフのみを更新します。関連のないロックされたパッケージは、選択されたcommitを維持します。

lockedとofflineワークフロー

--lockedはvex.lockの作成と変更を禁止します。ファイルが存在しないか、サポートされていないスキーマであるか、manifestグラフと一致しないと失敗します。 lockfileにすでに固定されているcommitは必要に応じてインポートできます。

--offlineはすべてのGitネットワーク操作を禁止します。必要なcheckoutとcommitはローカルにすでに存在している必要があります。

vex fetch --locked
vex build --locked --offline

これら2つのコマンドは厳密なCIワークフローです。ネットワークを書くことができるときに正確にロックされたcommitを準備し、次にネットワークやlockfile変更なしでコンパイルします。 dry-runは依存関係を取得したり、lockfileを書き換えたりしません。

コンパイラの設定と情報

vex info
vex setup wavec
vex setup wavec --version <version>
vex --version

Vexは、実際のビルド前にwavecdry-runJSONスキーマを検証します。必要なスキーマを実装していないコンパイラは、不明な計画で実行せず、互換性エラーで拒否します。