Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gemspec(Gemfileも?) に git ls-files 的なコード とか validation ロジックを含めた結果、dependabot が parse 出来ないとか言い出したときの対策 #73

Closed
kachick opened this issue May 20, 2021 · 0 comments

Comments

@kachick
Copy link
Owner

kachick commented May 20, 2021

TL;DR

https://github.com/kachick/ruby-ulid/blob/6cf828199774dac022c7689fa4d849a4db973eae/ruby-ulid.gemspec#L49-L60

これが最強だ・・・!

  git_managed_files = `git ls-files`.lines.map(&:chomp)
  might_be_parsing_by_tool_as_dependabot = git_managed_files.empty?
  base_files = Dir['README*', '*LICENSE*',  'lib/**/*', 'sig/**/*'].uniq
  files = might_be_parsing_by_tool_as_dependabot ? base_files : (base_files & git_managed_files)

  unless might_be_parsing_by_tool_as_dependabot
    if files.grep(%r!\A(?:lib|sig)/!).size < 5
      raise "obvious mistaken in packaging files, looks shortage: #{files.inspect}"
    end
  end
  • Dir.[]基本的に含めたいパス を指定し、 git ls-files想定外のファイルが含まれない事を担保する という方策
  • might_be_parsing_by_tool_as_dependabot が苦肉の策も良いところで、 dependabot のためにそこまでやんの?という感はあるが、 git ls-files 使いたい & その中身もチェックしたいとなるとこんな感じの事をする以外に思い浮かばなかった。まぁどうせ gemspec は gem package の中に含まれないしどうでもいいっしょ。
  • files.grep(%r!\A(?:lib|sig)/!).size < 55 は適当である。プロジェクトによって適当に振って欲しい。雑に担保したいだけである。
  • 本当にローカル環境で git ls-files が空を返したらどうなるのか?もうね、それはね、流石に気にしない。

何についてか / About

git ls-files をベースにして、最終的にその中身を validate する gemspec を書いてたんだけど、

どうやら dependabot 上での git ls-filess の結果が空になってしまうようで、 kachick/ruby-ulid#154 みたいにエラーを吐いて dependabot が動かないという羽目になってしまっていた。

Dependabot can't evaluate your Ruby dependency files
Dependabot failed to update your dependencies because there was an error evaluating your Ruby dependency files.

Dependabot encountered the following error:

Bundler::Dsl::DSLError with message: [!] There was an error parsing `Gemfile`: 
[!] There was an error while loading `ruby-ulid.gemspec`: obvious mistaken in packaging files: []. Bundler cannot continue.

 #  from /home/dependabot/dependabot-updater/dependabot_tmp_dir/ruby-ulid.gemspec:49
 #  -------------------------------------------
 #    minimum_filepaths = git_ls_filepaths.grep(%r!\A(?:lib|sig)/!)
 >    raise "obvious mistaken in packaging files: #{minimum_filepaths.inspect}" if minimum_filepaths.size < 2
 #    extra_filepaths = %w[README.md LICENSE]
 #  -------------------------------------------
. Bundler cannot continue.

 #  from /home/dependabot/dependabot-updater/dependabot_tmp_dir/Gemfile:3
 #  -------------------------------------------
 #  
 >  gemspec
 #  
 #  -------------------------------------------
Learn more

https://www.codinginthecrease.com/news_article/show/350843-using-git-in-your-gemspec みたいに gemspec で git に頼らない方が良いよみたいな記事もあるし、実際例としてあげられている rails とかは使ってない様子では有る。 https://github.com/rails/rails/blob/c453a5fa88e89bc0bc8efde3b397f2464712bb49/activesupport/activesupport.gemspec#L20-L21

でも、そもそも 最新の bundle gem でも git ls-files 使ってるし #75 、外部コマンドに頼る事自体の気持ち悪さみたいなのはわかるものの、実際問題変なファイル含まれないかを一番シンプルに担保
出来るのは git ベースだと思う。
しかも、 Dir.[] の結果すら dependabot だとどうやら一部しか含まれてないようだった。どういう挙動をしているんだ・・・?ログ見てもそこまではわからなそうだった。

ということで、 Dir を使い git ls-files を使い validate もする を両立させるのに苦心した。という話だが、そもそも files の中身を validate している OSSプロジェクト自体別に見たこと無い気がするので、多分問題になっているのは自分一人だったんだろう。まぁいいや、これで行く。

@kachick kachick added help wanted Extra attention is needed question Further information is requested wontfix This will not be worked on ruby labels May 20, 2021
kachick added a commit to kachick/irb-power_assert that referenced this issue May 24, 2021
* Clarify version of rubocop families
* Don't include rubocop families in test environments

refs:
  * kachick/ruby-ulid#154
  * kachick/times_kachick#73
  * kachick/ruby-ulid#42 (comment)
kachick added a commit to kachick/rspec-matchers-power_assert_matchers that referenced this issue May 24, 2021
* Clarify version of rubocop families
* Don't include rubocop families in test environments

refs:
  * kachick/ruby-ulid#154
  * kachick/times_kachick#73
  * kachick/ruby-ulid#42 (comment)
  * kachick/irb-power_assert@21d5f89
kachick added a commit to kachick/ruby-ulid that referenced this issue May 26, 2021
kachick added a commit to kachick/ruby-ulid that referenced this issue May 26, 2021
@kachick kachick changed the title gemspec に ロジックコード?的なのを含めると、Ruby としては valid でも dependabot が読めないとか言い出して困る gemspec/Gemfile に git ls-files 的なコードを含めると、dependabot が parse 出来ないとか言い出すが、 やっぱり git ls-files 使いたいやろ! って時の対策 May 26, 2021
@kachick kachick changed the title gemspec/Gemfile に git ls-files 的なコードを含めると、dependabot が parse 出来ないとか言い出すが、 やっぱり git ls-files 使いたいやろ! って時の対策 gemspec(Gemfileも?) に git ls-files 的なコード とか validation ロジックを含めた結果、dependabot が parse 出来ないとか言い出したときの対策 May 26, 2021
@kachick kachick added tips and removed help wanted Extra attention is needed question Further information is requested wontfix This will not be worked on labels May 26, 2021
@kachick kachick closed this as completed May 26, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant