cli のチュートリアル
このチュートリアルでは mare-mark コマンドを使って、JSONL イベントファイルを HTML レポートに変換し、記録された検証失敗を調べてからリプレイします。コマンドはリポジトリをチェックアウトした場所から実行します。例では testdata/ にあるフィクスチャを使います。
クイックスタート
git clone https://github.com/Luna-Flow/mare_mark
cd mare_mark
moon run src/cli --target native -- report testdata/report/sample.jsonl report.html
出力:
report written: /path/to/mare_mark/report.html
events: 5
elapsed: 1333.542ms
report.html をブラウザで開きます。経過時間の値は変動します。ラベルは ms ですが、単位はマイクロ秒です。
日常的な作業
パイプを使う
cat testdata/report/sample.jsonl \
| moon run src/cli --target native -- report - - > report.html
出力に - を指定すると他には何も表示されないため、HTML を直接ファイルや別のツールに渡せます。
リプレイする前に失敗を調べる
moon run src/cli --target native -- replay testdata/replay/sample.jsonl --dry-run
command: printf
arguments: [replayed]
timeout: 1000ms
コマンドを読んでください。信頼できるなら実行します:
moon run src/cli --target native -- replay testdata/replay/sample.jsonl --yes
コマンドは記録されたタイムアウトで実行されます。その stdout が表示され、非ゼロの終了やタイムアウトがあると mare-mark は 1 で終了します。
リプレイ可能なアーティファクトを生成する
ランナーは、ケースの replay 関数が返す ReplaySpec を伴う validation_failure イベントを書き出します。そのコマンドが単独で失敗を再現するようにしてください。例えば、実装 ID と最小入力を受け取る小さなワーカーです。"Luna-Flow/mare_mark/model" をインポートした状態で:
test "a replayable failure description" {
let replay = (input : Int, implementation : String) => {
@model.ReplaySpec::new("my-worker", [implementation, input.to_string()], timeout_ms=2000)
}
let spec = replay(0, "off-by-one")
debug_inspect(spec.arguments, content="[\"off-by-one\", \"0\"]")
}
runner のチュートリアルに、そのようなイベントを生成する実行を示しています。
さらに先へ
- CI にレポートの手順を追加します。ベンチマークを実行して JSONL を書き出し、
mare-mark report run.jsonl report.htmlを実行して、両方のファイルをアップロードします。 - その他のターゲットでは、このコマンドはファイルパスを使う
reportだけをサポートします。
よくある落とし穴
- stdin からのリプレイ。 サポートされていません。アーティファクトをファイルに保存してください。
--yesを忘れる。 これ(および--dry-run)がないと、replayは2で終了し、何も実行しません。- 余分な引数。 3 つ目の位置引数は使い方の誤りです。
次のステップ
- cli API、cli の設計。
- レポート自体については report のチュートリアル。