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