Current section
Files
Jump to
Current section
Files
lib/mix/tasks/live_interaction_contracts.ledger.ex
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