semgrepperの試用と改善をして、差分を適切に求めてくれない問題を修正できた。
環境変数を元に適切な差分を求めているようで、更にその環境変数にはパスが入っていて実際には内部でパスの参照するファイルを読んでいて……ということだったので、composite custom actionの中でdocker run --rm ... semgrep ci ... とやるのは大変そう。結果的に、docker custom actionとして提供することにした。
semgrepにPRを出すために、pyenvを入れてpython 3.10.5を入れて……ということをしていた。
この辺を読んでいくと、どうやらsemgrep-cliをいじればいいらしい。
- https://semgrep.dev/docs/contributing/how-to-contribute/
- https://semgrep.dev/docs/contributing/contributing-code/
WSL2でPythonを入れてpipenv installしようとしたらハマってググった。
# NG
SEMGREP_SKIP_BIN=true python -m pipenv install --dev
# OK
SEMGREP_SKIP_BIN=true python -m pipenv install --dev --python=/home/r7kamura/.pyenv/shims/python
pypa/pipenv#3488 helped me a lot, thanks.
手元でsemgrep-cliを動かすことに成功したが、ドキュメントに書いてある通り、semgrep-coreって実行ファイルがねえよと怒られているので、prebuiltなやつを持ってくるか自分で20分かけてビルドするかして持ってこないといけない。面倒だ……
manual shortcutの項目にある通り、releasesの最新版のtar.gzからsemgrep-coreバイナリを持ってきてPATHの通るところに配置した上で、pipenv shellやら何やらを組み合わせた結果、ようやく手元でインストールしたsemgrepが動いた
一度ローカルでのsemgrepインストール手順を踏むと、コードを変更したときに反映される、つまりコピーしてるのではなく実体を参照するようになるらしい。
$ python -m semgrep scan --github-actions
Scanning 2 files with 3 ruby rules.
100%|██████████████████████████████████████████████████████████████████████████████████████████████████|2/2 tasks
::warning file=semgrep_another_example.rb,line=1,col=1,endLine=1,endCol=6::foo is deprecated. Use baz instead.
::warning file=semgrep_example.rb,line=1,col=1,endLine=1,endCol=6::foo is deprecated. Use baz instead.
::error file=semgrep_example.rb,line=2,col=1,endLine=2,endCol=6::bar is removed. Use baz instead.
::notice file=semgrep_example.rb,line=3,col=1,endLine=3,endCol=6::baz is great.
Some files were skipped or only partially analyzed.
Scan was limited to files tracked by git.
Ran 3 rules on 2 files: 4 findings.
動くようになった。
semgrepにPull Requestを出した。
懸垂、ディップス、腕立て、腹筋ローラーをやった。 ディップスは身体を壊しそうな気配があるので、トレーナーに見てもらわない限りは今後やらないことにした。 腹筋ローラーの様子を動画に撮ることにして、今回試しにiPhoneで動画を撮った。とりあえず100回やった。