defmodule Mix.Tasks.LiveInteractionContracts.Ledger do @shortdoc "Regenerate the delegation ledger from the latest harness results" @moduledoc """ Regenerates `delegation-ledger.{json,md}` (at the package root, or `--out`) from the harness's stable full-matrix results (`priv/harness/results-1.2.7.json` by default). Pass `--results results.json` to use freshly generated local results. mix live_interaction_contracts.ledger mix live_interaction_contracts.ledger --results results.json mix live_interaction_contracts.ledger --out ./docs """ use Mix.Task @impl true def run(argv) do {opts, _, _} = OptionParser.parse(argv, strict: [out: :string, results: :string]) priv = LiveInteractionContracts.priv_dir() harness = Path.join(priv, "harness") out = Path.expand(opts[:out] || File.cwd!()) results = opts[:results] || "results-1.2.7.json" unless File.exists?(Path.join(harness, results)) do Mix.raise("no #{results} in #{harness}") end {out_io, code} = System.cmd("node", ["ledger.mjs"], cd: harness, env: [{"LEDGER_DIR", out}, {"RESULTS_FILE", results}], stderr_to_stdout: true ) Mix.shell().info(out_io) if code != 0, do: Mix.raise("ledger generation failed (exit #{code})") Mix.shell().info("== ledger written to #{out}/delegation-ledger.{json,md}") end end