Closed kmyk closed 4 years ago
とりあえず名前を固定しましょう。覚えやすさや分かりやすさは使いやすさや普及しやすさに繋がるので重要です
online-judge-ci-script
competitive-programming-ci-script
library-verify-helper
online-judge-verify-helper
online-judge-verify-helper
が一番ましそうか?
rename した
GitHub Actions
workflow template みたいなのが作れない悲しみにつつまれながら、Web 上だけで導入が終了するやつを作りました http://kimiyuki.net/online-judge-verify-helper/
test.sh
直埋め込みだったのを分離した
verify.yml
を整理した。$GITHUB_TOKEN
を仕込んだのでしばらくは「更新があるから verify.yml
を書き換えてください」になることはないはず (まあそれでもそのうち書き換えてくださいになるのは見えてるけど)
何も指定されなかったら g++
と clang++
を両方試すようにした (test.sh
側で対応)
とりあえず自分で使うのに耐えるぐらいにはなったしそろそろ公開かな
そこそこ導入が楽である程度の機能はあるものを作るのはいいけど、もしみんながそれを使っちゃうと全部同じになってつまらなくないか 少なくとも 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/ とか、いろんなのがたくさんあった方が見てて楽しい (まあやるけど)
version 固定してないの破壊的変更で死ぬのが見えてるのでしておいた 安心
きれいな HTML 出力のやつを @Tsutajiro がプルリクしてくれる感じになった。@beet-aizu 版スクリプトがベースぽいので cache commit の作成とかも同時に達成できそう
HTML 出力されることの利点として:
仕様について:
- oj にそれ用の機能が入ってから
- 内部的には実はすべて special judge 扱いになってて常に
checker.cpp
が実行されてるぽい? あとで @yosupo06 に確認
はい その通りです
@yosupo06 ありがとう
今キャッシュしてないんですね(そこをまずやろうと思います) yosupoジャッジみたいにテストケースが強化される場合があるので、timestampを剥がす機能も実装します。
とりあえず https://github.com/beet-aizu/library/blob/master/test/test.sh をコピペしてくるのがよさそう?
examples/ を生やして segment tree と union-find tree を置いた。「include ができる」「g++ でだけテストする設定にできる」とかが察せるようになったはず
examples として抽象化セグ木を置くの、いいのか?
今キャッシュしてないんですね(そこをまずやろうと思います)
GitHub Actions限定でいいならユーザーに情報を入れさせずにCIからpushできそうなので書いてみます
お願いします :pray: 動作範囲は GitHub Actions 限定で十分です
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 では弾かれてます
$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
$GITHUB_ACTIONS 以外からpushすることはないと思っているのでむしろ別れていた方がありがたい気がします(そう実装しました)
https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows#using-the-cache-action こういうのをうまく使うとわざわざpushとかしなくてもよくなったりしないでしょうか?(偶然見つけただけなので、全然違うものかもしれないです)
cacheの話です
ところで、いま master
branch の他に v1
branch というのが作ってあって、verify.yml
は v1
branch を使うように設定されています。
なぜかというと (1) master
をうっかり壊したときに全ユーザの CI が壊れるとつらいのでそうならないようにしたく、かつ (2) 破壊的変更を入れたときに (ユーザが v2
に書き換えない限り) CI が壊れないようにしたいためです
理解しました
好き放題破壊しながらいろいろ試すための develop
branch を用意しました。ご利用ください
https://github.com/kmyk/online-judge-verify-helper/commit/d08716df0447543a25ddb9bde39ccedf42502295
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)
えー、develop
微妙に面倒だな。master
で好き勝手にテスト破壊しちゃだめか?
cacheの話です
ローカルに持ってくること考えるとpushしたい気持ちになりますが、そもそもキャッシュがよくわからないためどっちがいいのかすらよくわからない
https://judge.yosupo.jp から testlib.h 形式のジャッジプログラムを拾ってきて自動で利用してほしい
これは結局こっち側で対応するのかoj側で対応するのかどっちですか(URLからyosupo judgeのだと判断できるんだしoj側で対応していた方が嬉しそう)
@yosupo06 ヨスポジャッジにchecker以外の形式の問題の導入予定はありますか(リアクティブとか)
https://judge.yosupo.jp から testlib.h 形式のジャッジプログラムを拾ってきて自動で利用してほしい
とりあえずは oj
のライブラリ部分の機能として対応し (コマンドとしては足すかどうかは後回しにしたいので)、その呼び出しはこっちでやるのがいいかなと思っています
https://judge.yosupo.jp から testlib.h 形式のジャッジプログラムを拾ってきて自動で利用してほしい
これは結局こっち側で対応するのかoj側で対応するのかどっちですか(URLからyosupo judgeのだと判断できるんだしoj側で対応していた方が嬉しそう)
@yosupo06 ヨスポジャッジにchecker以外の形式の問題の導入予定はありますか(リアクティブとか)
今のところないです しかし将来的に実装しないってことは約束できないです(実装も大変だし出来る限りは避けますが、ベリファイに本質的にリアクティブが必要な問題(とその需要)が出てくれば実装すると思います)
ベリファイに本質的に(special checker以外の)特殊なジャッジが必要な問題は、私は現時点では知らないですが…
リアクティブについて言えば、oj はすでにリアクティブに対応していて CI からそれを呼び出すのは比較的楽です
https://judge.yosupo.jp から testlib.h 形式のジャッジプログラムを拾ってきて自動で利用してほしい
とりあえずは
oj
のライブラリ部分の機能として対応し (コマンドとしては足すかどうかは後回しにしたいので)、その呼び出しはこっちでやるのがいいかなと思っています
これoj t --yosupo "問題名" とかにしてしまいたいです(コード読んだ感じojの中にhttps://github.com/yosupo06/library-checker-problems をgit cloneしてきているんですよね?
「ライブラリ部分の機能として実装」と「コマンドとして足す」の違いはなんですか?
「ライブラリ部分の機能として実装」は Python のコードから import onlinejudge.service.library_checker
とかして使う Python の関数として実装するという意味で、「コマンドとして足す」は shell から使える oj
コマンドのオプションなどとして実装するという意味です。
@tsutaj コミット権限付与していい?
build-pages.py
をこっちで保守するのかなりしんどそうなのでまかせたい
@kmyk おっけーです!
@tsutaj :tada: collaborator に設定しました。メールが来るはずなので承認してください
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/
GitHub Release を作ったら PyPI に反映されるようにしました バージョン番号は基本的に semantic versioning https://semver.org/lang/ja/ に従う感じです @beet-aizu @tsutaj バージョンを上げたくなったら勝手に上げてもらってかまいません
ドキュメント生成も整備した きれいに表示されるようになりました: https://kmyk.github.io/online-judge-verify-helper/verify/examples/union_find_tree.yosupo.test.cpp.html
.md
と .html
が両方生成されるのでそのまま両方 push しちゃってたけど、push は .md
だけにした_config.yml
を置いて絵文字が表示されるようにした.verify-helper/docs/static/hoge/fuga
が gh-pages
の hoge/fuga
に転送されます@beet-aizu gh-pages への push は成功してるのだけど、GitHub Actions 内からの push だと GitHub Pages の build が開始されないぽい。原因を知っていたりしませんか? たすけて https://github.com/kmyk/online-judge-verify-helper/commits/gh-pages
これは多分仕様でGitHubActionsからのpushは拾えないようになっている気がします 公式サポートに聞くのがよさそう
そうっぽい
GITHUB_TOKEN
だと push はできても action の kick はできないらしい
https://github.com/marketplace/actions/github-pages-deploy#secrets
設定すれば GitHub Pages も自動で更新されるようにした https://kmyk.github.io/online-judge-verify-helper/installer.html
verify 結果のキャッシュとは別に、judge.yosupo.jp の問題の入出力の生成結果をキャッシュしておくとよさそう。2倍速になるはず。入出力を commit すると容量が大きくて面倒なので実装には cache action がよさそう AOJ の問題とかには効かないので実装する価値は小さいけれど、verify に 2 時間かかってる人が 1 時間半で済むようになればうれしいかも?
include
を展開して提出したいhoge.hpp
みたいなファイルを置いて#include "hoge.hpp"
としたいが、これをすると提出が面倒#pragma once
を見ながら#include "..."
を再帰的にすべて展開するコードを書けばよいchecker.cpp
が実行されてるぽい? あとで @yosupo06 に確認library-verify-helper
とかの方がよいかもkmyk/...
よりもbeet-aizu/...
の方がよくないか?include
+ 展開だったりしないか.travis.yml
とかを書けば動くし、必要ないのでは?https://github.com/beet-aizu/library/new/master?filename=.github%2Fworkflows%2Fpythonapp.yml&workflow_template=pythonapp みたいなのが可能なのは強い→ 一般には解放されてなさそうでしたtest.sh
を Python で再実装する