OSSのREADME.md更新について

先日publicリポジトリに移したmarkdownパーサnmarkをちまちま更新しているのだが、更新するたびに以下のような作業が発生していてだんだん面倒になってきた。

(さっき見つけたswimlane.ioを使ってみたかったのであえて作ってみた)

今思いつく解決策としては、

  • ベンチマーク出力を2つの外部プログラム(静的サイトジェネレータ、hyperfine)に頼っているので、nmark内に実装し、SCFなりでREADME.mdを生成する関数も書いて更新する。
  • ベンチマークを画像として出力し、リポジトリに含めてgit pushし、README.md内には画像リンクとして取り込む。
  • git pushをトリガーとしてベンチマークをとってくれるCIを設定し、出力を取り込んでREADME.mdを更新する(もしくは更新するところまでGitHub Actionsなどで実装する)。

という感じだが、

  • nmark内に全部取り込むのは(可能だが)間違っている気がする
  • 数字を画像で出すのは嫌だ

で、CIを勉強してみようかなぁと思っている。最終的にはジェネレータを使わないという選択になりそうな気がする。

こんなふうに、機能を追加したりバグを修正したりするたびにREADME.md内の細かい数字をアップデートしないといけない状況というのはあると思うのだけれど、何か効率的なやり方があるんだろうか。

追記

シェルスクリプトの代わりにNimscriptを書いて、パフォーマンス比較の詳細を記したmarkdownファイルをREADME.mdとは別に作り、そこにhyperfineの結果をコピーするというやり方にしてみた。

mode: ScriptMode.Verbose

const version: "0.1.6"

const text: """
# Perfomance comparison detail
...

### nmark@"""

cd "../casa"

exec("nimble install nmark")
exec("nim c -d:release casa")
exec("hyperfine './casa build' --export-markdown nmark.md")
let s: text & version & """

> > """ & readFile("nmark.md")

cd "../nmark"

writeFile("perfcmp.md", s)

echo "Done."

手動でいじるのは定数として入れているバージョン番号のみなのでだいぶ楽にはなった。この番号も、何らかのスクリプトで.nimbleファイルからとってきたいところだが、適当な関数が見つからないためとりあえずここまでにしている。tomlと見なしてパースすればいいような気もする。