mix temper.push (temper v0.4.0)

Copy Markdown View Source

Pushes recorded history to a system that collects it across CI runs, such as Sinter.

$ mix temper.push

Reads every .temper/history-*.jsonl file (all partitions) and sends the runs the destination has not acknowledged yet. The destination answers with the runs it now holds; they are kept in a pushed-runs-* file next to the history files (one per destination), so the next push leaves them out. Keep it in the same CI cache as the history. A push that fails records nothing, and a fresh cache simply resends everything.

A history file that cannot be read, or a run larger than the batch limit, is not sent and makes the push count as failed (a warning, or exit 1 with --strict); everything else still goes.

The destination comes from config :temper, :push (or --preset):

# Sinter: history goes to sinterlab.dev, token from SINTER_TOKEN
config :temper, :push, preset: :sinter

# any server speaking the open push protocol (see the Push
# Protocol guide)
config :temper, :push,
  adapter: Temper.Push.Adapters.HTTP,
  url: "https://ci-history.example.com/ingest",
  token_env: "CI_HISTORY_TOKEN"

# anything else: your own Temper.Push.Adapter
config :temper, :push, adapter: MyApp.TemperToS3, bucket: "ci-history"

Nothing is configured by default: Temper never sends history anywhere on its own. Tokens are read from the environment only. Set the push config in config/config.exs: mix tasks do not read runtime.exs. max_batch_bytes (default 32 MB, uncompressed) lowers the batch size for a destination that accepts less per request.

A failed push warns and exits 0, so it never turns a green build red; pass --strict to exit 1 instead. Large histories go out in several batches of whole runs; each batch's runs are recorded as soon as the destination accepts them.

Options

  • --preset NAME - use a preset destination (sinter), over the config
  • --url URL - the endpoint, over the config (for adapters that take a url)
  • --history GLOB - read this path or glob instead of the default (also configurable with config :temper, history_path: "..."). A literal {partition} widens to *
  • --scrub-messages - remove failure messages before sending; the failure kind and hash still go, so failure modes still group
  • --all - send every run, accepted before or not
  • --strict - exit 1 when the push fails or cannot start
  • --dry-run - print what would be sent and send nothing