online-judge-tools / verification-helper

a testing framework for snippet libraries used in competitive programming
MIT License
207 stars 53 forks source link

TODO #1

Closed kmyk closed 4 years ago

kmyk commented 4 years ago
kmyk commented 4 years ago

とりあえず名前を固定しましょう。覚えやすさや分かりやすさは使いやすさや普及しやすさに繋がるので重要です

online-judge-verify-helper が一番ましそうか?

kmyk commented 4 years ago

rename した

kmyk commented 4 years ago

GitHub Actions

kmyk commented 4 years ago

workflow template みたいなのが作れない悲しみにつつまれながら、Web 上だけで導入が終了するやつを作りました http://kimiyuki.net/online-judge-verify-helper/

kmyk commented 4 years ago

test.sh 直埋め込みだったのを分離した

kmyk commented 4 years ago

verify.yml を整理した。$GITHUB_TOKEN を仕込んだのでしばらくは「更新があるから verify.yml を書き換えてください」になることはないはず (まあそれでもそのうち書き換えてくださいになるのは見えてるけど)

kmyk commented 4 years ago

何も指定されなかったら g++clang++ を両方試すようにした (test.sh 側で対応)

kmyk commented 4 years ago

とりあえず自分で使うのに耐えるぐらいにはなったしそろそろ公開かな

kmyk commented 4 years ago

そこそこ導入が楽である程度の機能はあるものを作るのはいいけど、もしみんながそれを使っちゃうと全部同じになってつまらなくないか 少なくとも HTML 出力に関しては https://tsutajiro.github.io/cpp_library/ とか https://beet-aizu.github.io/library/test/status.html とか https://tjkendev.github.io/procon-library/python/index.html とか https://asi1024.github.io/competitive-library/cpp/ とか https://ei1333.github.io/luzhiled/ とか、いろんなのがたくさんあった方が見てて楽しい (まあやるけど)

kmyk commented 4 years ago

version 固定してないの破壊的変更で死ぬのが見えてるのでしておいた 安心

kmyk commented 4 years ago

きれいな HTML 出力のやつを @Tsutajiro がプルリクしてくれる感じになった。@beet-aizu 版スクリプトがベースぽいので cache commit の作成とかも同時に達成できそう

HTML 出力されることの利点として:

仕様について:

yosupo06 commented 4 years ago
  • oj にそれ用の機能が入ってから
  • 内部的には実はすべて special judge 扱いになってて常に checker.cpp が実行されてるぽい? あとで @yosupo06 に確認

はい その通りです

kmyk commented 4 years ago

@yosupo06 ありがとう

beet-aizu commented 4 years ago

今キャッシュしてないんですね(そこをまずやろうと思います) yosupoジャッジみたいにテストケースが強化される場合があるので、timestampを剥がす機能も実装します。

kmyk commented 4 years ago

とりあえず https://github.com/beet-aizu/library/blob/master/test/test.sh をコピペしてくるのがよさそう?

kmyk commented 4 years ago

examples/ を生やして segment tree と union-find tree を置いた。「include ができる」「g++ でだけテストする設定にできる」とかが察せるようになったはず

kmyk commented 4 years ago

examples として抽象化セグ木を置くの、いいのか?

beet-aizu commented 4 years ago

今キャッシュしてないんですね(そこをまずやろうと思います)

GitHub Actions限定でいいならユーザーに情報を入れさせずにCIからpushできそうなので書いてみます

kmyk commented 4 years ago

お願いします :pray: 動作範囲は GitHub Actions 限定で十分です

beet-aizu commented 4 years ago

https://github.com/kmyk/online-judge-verify-helper/blob/f13c8ce33b022301318fa70b43cd98c8d6961010/data/test.sh#L100 $CI ってどっかで設定されてますか?これtravis用に書いた記憶があるんですけど(実際 https://github.com/beet-aizu/library/blob/411c6fe9eb0ac874909e318d34abf90328c3651e/test/test.sh#L101 では弾かれてます

kmyk commented 4 years ago

$CI はどこでも設定されてなさそうです。 Travis CI では自動で $CI が定義されてたはずですが、GitHub Actions ではそうでないっぽい。 困るなあ。 if [[ $GITHUB_ACTION ]] ; then CI=1 ; fi とかして、$GITHUB_ACTION が定義されてたら $CI を定義するとかするしかなさそう。 https://help.github.com/en/actions/automating-your-workflow-with-github-actions/using-environment-variables#default-environment-variables

beet-aizu commented 4 years ago

$GITHUB_ACTIONS 以外からpushすることはないと思っているのでむしろ別れていた方がありがたい気がします(そう実装しました)

yosupo06 commented 4 years ago

https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows#using-the-cache-action こういうのをうまく使うとわざわざpushとかしなくてもよくなったりしないでしょうか?(偶然見つけただけなので、全然違うものかもしれないです)

yosupo06 commented 4 years ago

cacheの話です

kmyk commented 4 years ago

ところで、いま master branch の他に v1 branch というのが作ってあって、verify.ymlv1 branch を使うように設定されています。

https://github.com/kmyk/online-judge-verify-helper/blob/feb8ab7cb69f07f6a0a9cc29a58ee9db8e54342a/.github/workflows/verify.yml#L16

なぜかというと (1) master をうっかり壊したときに全ユーザの CI が壊れるとつらいのでそうならないようにしたく、かつ (2) 破壊的変更を入れたときに (ユーザが v2 に書き換えない限り) CI が壊れないようにしたいためです

beet-aizu commented 4 years ago

理解しました

kmyk commented 4 years ago

好き放題破壊しながらいろいろ試すための develop branch を用意しました。ご利用ください

https://github.com/kmyk/online-judge-verify-helper/commit/d08716df0447543a25ddb9bde39ccedf42502295

kmyk commented 4 years ago

https://github.com/kmyk/online-judge-verify-helper/pull/5 の push 式 cache 機能はちゃんと動いてました :tada: master 以外でも動く (https://github.com/kmyk/online-judge-verify-helper/commit/621be33b8ab775c48ad00575aa7061c1ffd9e9d9) ようにして develop に投げたら push してくれた (https://github.com/kmyk/online-judge-verify-helper/commits/develop)

kmyk commented 4 years ago

えー、develop 微妙に面倒だな。master で好き勝手にテスト破壊しちゃだめか?

beet-aizu commented 4 years ago

cacheの話です

ローカルに持ってくること考えるとpushしたい気持ちになりますが、そもそもキャッシュがよくわからないためどっちがいいのかすらよくわからない

beet-aizu commented 4 years ago

https://judge.yosupo.jp から testlib.h 形式のジャッジプログラムを拾ってきて自動で利用してほしい

これは結局こっち側で対応するのかoj側で対応するのかどっちですか(URLからyosupo judgeのだと判断できるんだしoj側で対応していた方が嬉しそう)

@yosupo06 ヨスポジャッジにchecker以外の形式の問題の導入予定はありますか(リアクティブとか)

kmyk commented 4 years ago

https://judge.yosupo.jp から testlib.h 形式のジャッジプログラムを拾ってきて自動で利用してほしい

とりあえずは oj のライブラリ部分の機能として対応し (コマンドとしては足すかどうかは後回しにしたいので)、その呼び出しはこっちでやるのがいいかなと思っています

yosupo06 commented 4 years ago

https://judge.yosupo.jp から testlib.h 形式のジャッジプログラムを拾ってきて自動で利用してほしい

これは結局こっち側で対応するのかoj側で対応するのかどっちですか(URLからyosupo judgeのだと判断できるんだしoj側で対応していた方が嬉しそう)

@yosupo06 ヨスポジャッジにchecker以外の形式の問題の導入予定はありますか(リアクティブとか)

今のところないです しかし将来的に実装しないってことは約束できないです(実装も大変だし出来る限りは避けますが、ベリファイに本質的にリアクティブが必要な問題(とその需要)が出てくれば実装すると思います)

yosupo06 commented 4 years ago

ベリファイに本質的に(special checker以外の)特殊なジャッジが必要な問題は、私は現時点では知らないですが…

kmyk commented 4 years ago

リアクティブについて言えば、oj はすでにリアクティブに対応していて CI からそれを呼び出すのは比較的楽です

beet-aizu commented 4 years ago

https://judge.yosupo.jp から testlib.h 形式のジャッジプログラムを拾ってきて自動で利用してほしい

とりあえずは oj のライブラリ部分の機能として対応し (コマンドとしては足すかどうかは後回しにしたいので)、その呼び出しはこっちでやるのがいいかなと思っています

これoj t --yosupo "問題名" とかにしてしまいたいです(コード読んだ感じojの中にhttps://github.com/yosupo06/library-checker-problems をgit cloneしてきているんですよね?

beet-aizu commented 4 years ago

「ライブラリ部分の機能として実装」と「コマンドとして足す」の違いはなんですか?

kmyk commented 4 years ago

「ライブラリ部分の機能として実装」は Python のコードから import onlinejudge.service.library_checker とかして使う Python の関数として実装するという意味で、「コマンドとして足す」は shell から使える oj コマンドのオプションなどとして実装するという意味です。

kmyk commented 4 years ago

@tsutaj コミット権限付与していい? build-pages.py をこっちで保守するのかなりしんどそうなのでまかせたい

tsutaj commented 4 years ago

@kmyk おっけーです!

kmyk commented 4 years ago

@tsutaj :tada: collaborator に設定しました。メールが来るはずなので承認してください

kmyk commented 4 years ago

PyPI に登録しました。主には pip install git+https://github.com/kmyk/online-judge-verify-helper.git でなくて pip install online-judge-verify-helper でよくなるのがうれしい https://pypi.org/project/online-judge-verify-helper/

kmyk commented 4 years ago

GitHub Release を作ったら PyPI に反映されるようにしました バージョン番号は基本的に semantic versioning https://semver.org/lang/ja/ に従う感じです @beet-aizu @tsutaj バージョンを上げたくなったら勝手に上げてもらってかまいません

kmyk commented 4 years ago

ドキュメント生成も整備した きれいに表示されるようになりました: https://kmyk.github.io/online-judge-verify-helper/verify/examples/union_find_tree.yosupo.test.cpp.html

kmyk commented 4 years ago

@beet-aizu gh-pages への push は成功してるのだけど、GitHub Actions 内からの push だと GitHub Pages の build が開始されないぽい。原因を知っていたりしませんか? たすけて https://github.com/kmyk/online-judge-verify-helper/commits/gh-pages

kmyk commented 4 years ago

ミスにより発生した巨大コミット https://github.com/kmyk/online-judge-verify-helper/commit/6c9ff8a797df9dd69fb1e580cf9ff4674a8d5b1c

beet-aizu commented 4 years ago

これは多分仕様でGitHubActionsからのpushは拾えないようになっている気がします 公式サポートに聞くのがよさそう

kmyk commented 4 years ago

そうっぽい GITHUB_TOKEN だと push はできても action の kick はできないらしい https://github.com/marketplace/actions/github-pages-deploy#secrets

kmyk commented 4 years ago

設定すれば GitHub Pages も自動で更新されるようにした https://kmyk.github.io/online-judge-verify-helper/installer.html

kmyk commented 4 years ago

verify 結果のキャッシュとは別に、judge.yosupo.jp の問題の入出力の生成結果をキャッシュしておくとよさそう。2倍速になるはず。入出力を commit すると容量が大きくて面倒なので実装には cache action がよさそう AOJ の問題とかには効かないので実装する価値は小さいけれど、verify に 2 時間かかってる人が 1 時間半で済むようになればうれしいかも?