大根's ITブログ

ITとか開発ツールとかビジネスとか色々

MEND RenovateとBoltをやる(旧WhiteSourceのGitHubApp)

やります。

Renovateやる。

ドキュメント https://docs.renovatebot.com/

GitHubのMarket placeからRenovateを検索して set up a plan を選択。

画面遷移するので install it for free を選択。

アカウントを選択してインストール。

インストールするリポジトリを選択。Allにすると初期セットアップの Pull Request がすべてのリポジトリに作成されてしまう。基本はOnly selectで良いと思う。

インストールするとRenovate Dashboardなるものが現れる。Sign in with GitHubを選択してみる。

Authorizeする。

Mend Renovate Registrationをする。Companyは空にした。

Dash Board が表示される。中身はまだない。

リポジトリにはRenovate設定のためのPull Request が作成される。

中身はこんな感じ。What to Expect に書かれたPRが作成されると言っている。ひとまずマージする。

renovate.jsonが作成される。

Renovate の設定項目は大量なので、よく使う設定をまとめて共有する手段としてプリセットという仕組みが用意されているらしい。

デフォルトで書かれた「config:base」は、下記の設定を一つにまとめたプリセットらしい。

{
  "extends": [
    ":dependencyDashboard",
    ":semanticPrefixFixDepsChoreOthers",
    ":ignoreModulesAndTests",
    ":autodetectPinVersions",
    ":prHourlyLimit2",
    ":prConcurrentLimit20",
    "group:monorepos",
    "group:recommended",
    "workarounds:all"
  ]
}

設定はそうとうな量があるっぽいのでここでは省略する。はい。

で、Issueを見るとDependency Dashboardなるものがある。

Dependency Dashboard は Renovate の方で判断してくれた、「バージョンアップしたほうが良い情報」を提示してくれ、かつ Pull Request も作成してくれるインターフェースをもつお助けツールらしい。 無効化している人が多そうなのでそうする。

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base"
  ],
  "dependencyDashboard": false  //追加
}

pushするとDependency DashboardのIssueは勝手にクローズされた。

ちなみにRenovate DashboardDependencyじゃないよ)は以下のような感じ。Jobのログが出るのだね。あまり見ることはなさそう?

ひとまずマージしてみよう。

なにやらAge, Adoption とかのアイコンが気になる。これはMerge Confidence(日本語だとマージ信頼度か?)というものらしい。 https://docs.renovatebot.com/merge-confidence/

  • Age: パッケージの年齢
  • Adoption: このリリースを使用している該当パッケージのユーザー (Renovate内) の割合
  • Passing: このパッケージのテストに合格したアップデートの割合
  • Confidence: この更新の信頼度

ちなみに本データはnpm, Maven, PyPIしか(現状は)サポートされていない。

ひとまず全部プルリクをマージしておいた。

脆弱性アラート

Renovateはデフォルトで脆弱性が出た場合にプルリクを投げるらしい。GitHubVulnerability Alertsを読み込んで、Pull Requestsをカスタマイズできるっぽい。 https://docs.renovatebot.com/configuration-options/#vulnerabilityalerts

GitHubDependency graphとDependabot alertsを有効にする必要がある。こんな感じ。

ここにも書いてあったが、Dependabot alertsはWhiteSourceのデータなども基にしているよう。RenovateだけがWhiteSourceのデータを持っていてそこが差別化ポイントなのかと思っていたがそうではないらしい。情報源としてはDependabotもRenovateも変わらん。

Renovateの結論

  • Dependabotの設定をより柔軟にできるのがRenovate(多分)
  • 情報源はDependabotもRenovateも変わらない(多分)

メモ:npmの管理はこの辺りが参考になりそうだった。

https://zenn.dev/kjirou/articles/1df0795ad3bfde

Boltやる

Boltのドキュメントはこれらしい。 https://docs.mend.io/bundle/community_tools/page/mend_bolt_for_github.html

Renovateと同じようにMarket placeからインストールする。 なおサポート言語はC, C#, C++, Go, Java, JavaScript, Objective-C, PHP, Python, Rubyらしい。 あと各リポジトリで1日あたりスキャン×5回しかできないらしい。

とりまインストール。

こちらもリポジトリを選択する。

Authorizeする。

こちらもレジストレーション

サクセス。

指定したリポジトリにプルリクが来ている。

Renovateと同じくオンボーディングpullreq。とりあえずマージする。

.whitesourceファイルが追加される。

少し待つとIssueが出てきた。

まずexpress。19の脆弱性が見つかっている。この中にexpressの脆弱性はない。なぜならバージョンアップしたことでexpress自体の脆弱性はすでになくなっているから。ここで出た19件はexpressに依存しているパッケージの脆弱性になる。

注目点としては、「WS」から始まっている脆弱性があること。WhiteSourceが発行した(CVEではない)ものである。

あと気になった点は、Dependabot alertが18件なのに対し、こちらは19件出ていること。

差分を調べると以下のような具合だった。

  • 両者とも17件はまったく同じ脆弱性(CVE)
  • 1件はbase64-urlの脆弱性で、これは名称違いで両方とも検出された。どうもCVEで採番されていないものらしい。
    • Dependabot:GHSA-j4mr-9xw3-c9jx base64-url
    • Bolt:WS-2018-0111 detected in multiple dependencies
  • 最後の1件がqsの脆弱性。Boltでのみ検出された。

リンクの中身を見てもちょっと分からない。 そしてqsは同じバージョンで脆弱性が出ていたので、そちらとの重複かもしれない。よって検出内容としてはDependabot alertもBoltも変わらない気がする。

で、面白そうなのはRemediation Available。これが現状はすべて×になっている。これを有効化すると自動でpullreqを作ってくれるのではないだろうか。どうやるのか分からんけど。

ふと、ドキュメントを見てみると以下の文言が。 https://docs.mend.io/bundle/community_tools/page/mend_bolt_for_github.html#Initiating-a-Scan

Mend のスキャンは、有効な GitHub のプッシュコマンドによって開始されます。有効なプッシュコマンドは、以下の要件のうち少なくとも一つを満たしています。
- プッシュコマンドのいずれかのコミットが、mendがサポートする拡張子を持つソースファイルを追加/削除している。特定の言語とその拡張子がサポートされているかどうかを調べるには、Mend Languages ページを参照してください。  
- push コマンドのコミットのひとつに、パッケージマネージャの依存ファイルの追加/変更が含まれています。サポートされている依存ファイルのリストを参照し、あなたの依存ファイルがサポートされているかどうかを調べてください。  

パッケージマネージャしか見ないと思ってたが…。試しにjquery-2.2.2のファイルを追加してpushしてみよう。

一瞬でIssue出てきたw

すごい。ということはBoltは依存関係だけではなくてソースもスキャンしてOSSを検出しているということになる。ほう。 誤検知があり得ると思うので一長一短あると思うが。これ無効化することってできないのかな。

.whitesourceの設定は以下のような感じ。

{
  "scanSettings": {
    "baseBranches": []
  },
  "checkRunSettings": {
    "vulnerableCheckRunConclusionLevel": "failure",
    "displayMode": "diff",
    "useMendCheckNames": true
  },
  "issueSettings": {
    "minSeverityLevel": "LOW",
    "issueType": "DEPENDENCY"
  }
}

パラメータの説明はここに書かれているが、オプション×2つのことしか書かれていない。他はどこに書かれてるんだこれ。 https://docs.mend.io/bundle/community_tools/page/mend_bolt_for_github.html#Parameters

  • vulnerableCheckRunConclusionLevel (success or failure):Boltが脆弱性を検出したときのステータスをsuccessにするかfailureにするか。failureにするとGitHub Checksで死んでくれる。
  • minSeverityLevel (NONE or LOW or MEDIUM or HIGH):Issueを作成する最低ライン。デフォルトはLOW。NONEにするとIssueが作られない。

GitHub Checks API統合ができるのでやってみよう。プライベートリポジトリではダメなのでパブリックリポジトリで試す必要がある。

まずは Settings > Branches > Add branch protection rule

  • 対象ブランチに「*」を入力
  • Require status checks to pass before merging を選択
  • Select で Mend Security Check をチェック

CodeタブにChecks API Indicators(×印だと思う)が表示される。これを選択するとポップアップが表示される。checksの結果が表示される。

ポップアップのDetailsを選択すると詳細が表示される。

それではプルリクを作ってみる。作ってみたが、なかなか進まない。

Checksタブも。

本来はプルリクのページがこんな感じになるっぽい。

でChecksがこんな?

うむ。ドキュメントに書いてあるのはこんなものですね。

はい

とりあえず動作確認をおこなった。機能的にBoltは最低限という感じだろうか。

有償版?には結構いろいろ設定があるので、色々できそう。ライセンスチェックとかRenovate連携とかができそうな感じだった。 https://docs.mend.io/bundle/integrations/page/mend_for_github_com.html

以上