Day10 TUI Results Tool
Mark Elvers
4 min read

Categories

  • day10

Tags

  • tunbury.org

A while back, I wrote mtelvers/day10-tui, which displayed custom mtelvers/day10 log files held in Apache Parquet format.

Following my earlier post, it occurred to me that I had already written a TUI tool for viewing day10 logs, but the scripts that generated the build information were stopped ages ago. Now with build artefacts in GitHub in virtually the same format, I have refreshed the project to display and diff these logs instead.

The opening menu lists the logs, which can be viewed by pressing Enter on any line.

Workflow runs:

* [ ] + [push]   47fe588e 2026-04-02 main - Merge pull request #5 from tunbury/add-npy
. [ ] X [merge]  4a06403e 2026-04-02 gh-readonly-queue/main/pr-5-381c4371342e236225d63687e3b1235
* [ ] X [merge]  45d2dfb1 2026-04-02 gh-readonly-queue/main/pr-5-381c4371342e236225d63687e3b1235
* [ ] + [PR]     d45fe674 2026-04-02 add-npy - Add npy package
* [ ] + [push]   381c4371 2026-04-02 main - Merge pull request #4 from tunbury/debian-13
. [ ] X [merge]  21e141d0 2026-04-02 gh-readonly-queue/main/pr-4-69fc8e49dd88d184c882e1c844b8ce2
. [ ] X [merge]  43c8b47d 2026-04-02 gh-readonly-queue/main/pr-4-69fc8e49dd88d184c882e1c844b8ce2
* [ ] + [PR]     53ce3db4 2026-04-02 debian-13 - Switch build target to Debian 13
* [ ] + [push]   69fc8e49 2026-04-02 main - Merge pull request #3 from tunbury/optimise-summar
. [ ] + [merge]  69fc8e49 2026-04-02 gh-readonly-queue/main/pr-3-26f728282563d98836e6766160ec0fe
. [ ] + [PR]     b88ea1b0 2026-04-02 optimise-summary - Optimise summary and filter solvable pac
. [ ] X [PR]     96bcb9b7 2026-04-02 optimise-summary - Optimise summary and filter solvable pac
. [ ] X [PR]     88983034 2026-04-02 optimise-summary - Optimise summary and filter solvable pac
. [ ] + [push]   26f72828 2026-04-02 main - Merge pull request #2 from tunbury/add-pr-trigger
. [ ] + [merge]  26f72828 2026-04-02 gh-readonly-queue/main/pr-2-af8a4f74601b9f6bb95ff3d5945de98
. [ ] + [PR]     f54fc42f 2026-04-02 add-pr-trigger - Add pull_request trigger for merge queue g
. [ ] + [push]   af8a4f74 2026-04-02 main - Merge pull request #1 from tunbury/test-merge-queu
. [ ] + [push]   038047a9 2026-04-02 main - Add merge queue support with regression gating
. [ ] + [push]   0614f2a1 2026-04-02 main - Add apt install step for gh, jq, unzip and simplif
. [ ] + [push]   e9e44c48 2026-04-01 main - Replace gh CLI with curl for downloading previous 
. [ ] + [push]   9a41dd79 2026-04-01 main - Add diff against previous run results in job summa
. [ ] + [push]   76320290 2026-04-01 main - Add job summary with build results table and failu
. [ ] + [push]   d9386a76 2026-03-31 main - Add safe.directory for git and increase dry-run pa
. [ ] + [push]   34f1e37b 2026-03-31 main - Download day10 from GitHub release instead of buil
. [ ] X [push]   8fed8146 2026-03-31 main - Use sudo for writing to /usr/local/bin
. [ ] X [push]   e4af845c 2026-03-31 main - Install opam from GitHub releases and build day10 
. [ ] X [push]   5b2360ad 2026-03-31 main - Add day10 build step to CI workflow
. [ ] X [push]   0fccfae0 2026-03-31 main - Add CI workflow using day10 on self-hosted runner

↑/↓: navigate, PgUp/PgDn: page, Home/End: first/last, Space: select for diff, Enter: open, q: quit

Each commit shows a list of packages that can be searched or filtered.

Packages for run 23902555958 (debian-13, Switch build target to Debian 13):

+ MlFront_Config.2.4.2.30
+ MlFront_Core.2.4.2.30
+ MlFront_Errors.2.4.2.30
+ MlFront_Exec.2.4.2.30
+ MlFront_Logs.2.4.2.30
+ MlFront_Manip.2.4.2.30
+ MlFront_Signify.2.4.2.30
+ MlFront_Thunk.2.4.2.30
+ MlFront_Tools.2.4.2.30
+ MlFront_ZipFile.2.4.2.30
+ OCADml.0.6.0
o OCanren-ppx.0.3.0
o OCanren.0.3.0
+ OSCADml.0.2.3
+ SZXX.4.2.0
+ Snowflake.0.02.03
o TCSLib.0.3
X aacplus.0.2.2
o aarch64-esperanto.0.0.6
+ abella.2.0.8
+ absolute.0.3
+ abstract_algebra.v0.17.0
+ accessor.v0.17.0
+ accessor_async.v0.17.0
+ accessor_base.v0.17.0
+ accessor_core.v0.17.0
+ acgtk.2.2.0
+ aches-lwt.1.1.0
+ aches.1.1.0

↑/↓: navigate | Enter: details | /: search | f/n/d/s: filter | c: clear | q: back | Run 23902555958

Opening a package displays the log and the solver solution. For example:

Package: aacplus.0.2.2 | Status: failure | SHA: 47fb6e59 | Layer: c0d083bb1446

- checking for camlp4boot... no
- checking for camlp4o... no
- checking for camlp4of... no
- checking for camlp4oof... no
- checking for camlp4orf... no
- checking for camlp4prof... no
- checking for camlp4r... no
- checking for camlp4rf... no
- checking for ocamlfind... ocamlfind
- checking for ocaml standard library path... /home/opam/.opam/default/lib/ocaml
- checking for caml/threads.h... no
- checking for gcc option to produce PIC... -fPIC
- checking whether to build shared modules... yes
- checking for pkg-config... /usr/bin/pkg-config
- checking pkg-config is at least version 0.9.0... yes
- checking whether pkg-config knows about aacplus >= 2.0.1... configure: error: aacplus.pc not found
[ERROR] The compilation of aacplus.0.2.2 failed at "./configure --prefix /home/opam/.opam/default".
build failed... 


Solution:
digraph opam {
  "aacplus.0.2.2" -> {"conf-pkg-config.4" "ocaml.5.4.1" "ocamlfind.1.9.8"}
  "ocaml.5.4.1" -> {"ocaml-base-compiler.5.4.1" "ocaml-config.3"}
  "ocaml-base-compiler.5.4.1" -> "ocaml-compiler.5.4.1";
  "ocaml-config.3" -> "ocaml-base-compiler.5.4.1";
  "ocamlfind.1.9.8" -> "ocaml.5.4.1";
}


↑/↓: scroll, PgUp/PgDn: page, Home/End: top/bottom, Esc/q: back

More interestingly, you can also select multiple runs and compare them. Shown below, I have force merged a custom mtelvers/ocaml-npy. This has masked the actual published npy package. The diff shows this is a bad move as owl.1.2 has now failed and had knock-on failures for the rest of the owl-* suite. lunar and passage have been updated upstream, which didn’t affect anything.

=== RUN COMPARISON ===

Comparing 2 runs:
  Run 23902555958 - [PR] 53ce3db4 (Switch build target to Debian 13)
  Run 23912271382 - [PR] d45fe674 (Add npy package)

NEW PACKAGES:
  + lunar.1.0.0 (success)
  + npy.dev (success)
  + passage.0.3.5 (success)
  + restricted.2.0.0 (success)

REMOVED PACKAGES:
  - npy.0.0.9 (success)
  - passage.0.3.4 (success)
  - restricted.1.1 (success)

CHANGES TO FAILURE:
  ~ owl.1.2 (was success)

CHANGES TO DEPENDENCY_FAILED:
  ~ owl-jupyter.1.0 (was success)
  ~ owl-ode-odepack.0.5.0 (was success)
  ~ owl-ode.0.5.0 (was success)
  ~ owl-opt-lbfgs.0.0.1 (was success)
  ~ owl-opt.0.0.1 (was success)
  ~ owl-plplot.1.1 (was success)
  ~ owl-top.1.2 (was success)

Press Q/Escape to return to run list