-
Notifications
You must be signed in to change notification settings - Fork 169
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
SonarCloudをGitHub Actionsに組み込んで活用したい #1494
SonarCloudをGitHub Actionsに組み込んで活用したい #1494
Conversation
✅ Build sakura 1.0.3320 completed (commit 21e0dbf80a by @berryzplus) |
Re-run jobsでは設定が反映されませんでした。 |
✅ Build sakura 1.0.3321 completed (commit b525064208 by @berryzplus) |
.github/workflows/build-sakura.yml
Outdated
~\.sonar\cache | ||
${{ runner.temp }}\sonar-scanner-cli-4.4.0.2170-windows | ||
${{ runner.temp }}\sonar-scanner-cache | ||
key: ${{ runner.os }}-sonar-scanner-cache-${{ hashfiles('.github\workflows\build-sakura.yml') }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
restore-keys
を指定してあげれば key
に完全一致するキャッシュがなくても restore 成功する仕様と理解しました。
https://docs.github.com/en/free-pro-team@latest/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key
- SonarCloud解析を GitHub Actions に組み込むことにより、PR作成から10分ほどで「解析結果」を見られるイようになります。(ただし、キャッシュが効いてないと約30分くらいかかります。)
ここを対応したら、PR本文に書かれているキャッシュミス時の問題を回避できると思います。
また、まとめてキャッシュしているパスの更新タイミングがバラバラなので、パスごとにキャッシュを分けたほうがよさそうに思いました。
SonarCloudの結果が異なる理由ってこれじゃないですか? cppcheckの実行結果をSonarScannerに食べさせることで、cppcheckが検出した警告をSonarCloudにも表示することができるようです。 |
0dcddfb
to
65c1975
Compare
GitHub Actionsって、 on: pull request だと secrets.SONAR_TOKEN 見られんじゃんね、という話。 |
secrets が PR から見えてしまうと、悪意のある人による攻撃が可能になってしまいますから仕方ないですね。 |
仕方ないですね。 GitHub Appsに関する情報を調べてみたところ、 「個人に紐付くセキュリティ情報」をCIに組み込んでしまうと、 代替はAzure Pipelines 連携のアプリを使う方法になります。 |
う~む、そうでもない・・・ぽい。 SONAR_TOKEN生成の流れ
つまり、GitHub の User に紐付いているわけではなく、 さて、どうしよう
分析結果から、pull request では静的解析のためのビルドを完全に実行しないように変えておいたほうが良い気がしてきました。 |
65c1975
to
c574b6a
Compare
❌ Build sakura 1.0.3323 failed (commit 5fa040effa by @berryzplus) |
テストリポジトリを作って色々試してみました。 PR元と同じHEADコミットを持つブランチをPR先リポジトリに作成してやれば、SonarCloud解析が実行された結果がPRに反映されるようになっているみたいです。 ここのリポジトリは、メンバーであれば結構自由にpushできる設定になっています。 ということで、PRのレビューで「とりあえず問題なさそう」と判断したら sakura-editor/sakura にブランチを push する運用にしてやれば、当初の目的を達成できそうです。(当初想定よりもやや時間がかかりますけど。) ただ、PRをわざわざ fetch して push するのは何気にめんどくさいです。 なんかいい方法ないかな・・・とググって見たら「これだ!」という技術情報を見つけました。 かなり尖ったハナシなので説明するのがめんどいのがネックです。。。 |
ed4aa36
to
7c00a8a
Compare
現状と合うようにPR本文の修正を試みましたが無理でした。 いったん閉じて、暫定で入れようとしている変更(≒最後にforce pushしたコミット群)だけを説明する感じで新規PRを起こしたいと思います。メンバーのコメント投稿をトリガーとしてプレビューブランチを作る(≒SonarCloud解析を実行させる)機構を入れるかどうかはもう少し考えてみます。 |
すぐに着手しないのは Appveyor が年末から障害中っぽいからです・・・。 |
7c00a8a
to
3b431f6
Compare
色々ためしてみたところ、プレビューブランチを作る必要はないことがわかりました。 分かりやすくするために、当初含めていた変更の8割くらいを削除したんですが、 新規にPRを立て直しても、すんなり提案内容を理解できる可能性は低いと思うので、 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
問題なさそうに見えるんですけど気になることがいくつかあります。
気になったこと
- Appveyorのビルドが走っていない。
- Azure Pipelinesのビルドが走っている。
- sonarscan.ymlに除外パスが指定されていない。
わたしの解釈
- appveyorのビルドが走っていない原因は、appveyorの除外パスに該当する変更しかないので正しそうです。
- azure pipelinesのビルドが走っている原因は、azure-pipelines.ymlの除外パス指定部分にミスがあるためと考えられます。push(=マージ)のときだけGitHub Actionsワークフローのパスを除外するよう指定が入っていて、pull request時に除外指定がありません。
- appveyorとazure pipelinesの除外指定が正しいとすると、sonarscan.ymlにも除外指定を入れるのが正しいように思います。
なんとなく、appveyorとazure pipelinesの除外指定も正しくない雰囲気なので微妙ですが、appveyorやazure pipelinesの設定だけを変えたときに静的解析を実行しても意味がないのは明らかなので、除外パス指定は入れたほうが良いように思います。
w 分かりました。rebase前提で進めます。 |
3b431f6
to
9acf9d1
Compare
動いてますね、azure pipelines。 |
ということは、元々動いてなかったんですね。AzurePipelinesの除外パス。 |
9acf9d1
to
a61ccca
Compare
良さそうなのでDraft外します。 |
れびゅーありがとうございます。 |
Azure Pipelinesのスケジュールが見つからなかったので、設定削除の件は放置します。 |
マージの静的解析が出たので報告。 バグ件数3875件(+3545件) クオリティゲートがFailedになっている理由は、 |
このPRで閉じられるissueって、 #1486 「GHAの構成がおかしい」で合っていますか? |
PR の目的
現在Azure Pipelinesの定時バッチで利用中のSonarQube解析を、
GitHub Actions のイベント駆動(=オンデマンド方式)に変更することにより、
静的解析の結果を効果的に活用できるようにします。
具体的には、静的解析SonarCloudの結果をレビュー時の判断材料に利用できるようになります。
表示サンプル: sakura-editor/SakuraSonarTest#19
カテゴリ
PR の背景
#1476 「SonarCloudをもっと便利に使えないかなぁ」を実現するPRです。
当初、GitHub Actionsの問題(#1486 「GitHub Actionsの構成がおかしいぜ?」)を「同時に対応する」と言っていたのですが、SonarCloud対応だけでも先行して検討すべきだと判断したので分離しました。
PR のメリット
PR のデメリット (トレードオフとかあれば)
旧来の静的解析は.NET専用のSonarScannerを使っていて、互換性がありません。
👉 マージ時にAzure Pipelinesのスケジュール起動を止めて移行させます。
OpenCppCoverageのプラグインDLLを自作して使っています。
本来的には、自作モジュールはorganization管理とすべきなんですが、めんどうなので勝手に入れてます。
現在の330件が3.6kまで爆増することが分かっています。
これは、従来のSonarQube解析が HTML/CSS や Python を対象としていなかったためです。
警告のうち3100件くらいはHTML4より前のgdgd規約で書かれたHTMLに対するものなので、比較的簡単に対応できると考えています。(実際、ほとんど直せました。)発生する問題を潰してからPRすることも考えましたが、コミュニティとして検討したほうが良さそうな変更もあるので、あえて「対応ナシ」で提案することにしました。
仕様・動作説明
アプリ(=サクラエディタ)の仕様・機能には影響しない変更です。
細かいことを書いても「何それ?」になること請け合いなので、見える変更を列挙します。
cron記法で 毎週金曜日16:45JST に実行されるように設定しています。
「決戦は金曜日」なのと「定時後の愉しみとできるよう配慮」が設定理由です。(≒「根拠はない」ってことです。)
PR の影響範囲
「PR更新時」とは、追加pushとforce pushの両方で走るsynchronizedイベントのことです。
従来は、00:00JSTの定時実行を待つ必要がありました。
テスト内容
今回プルリクエストの解析で使っているpull_request_target(webhookイベント)はPRされた側(Baseブランチ)に存在するワークフローが実行される仕様らしいので、PRをマージせずに検証することはできません。
テストリポジトリ sakura-editor/SakuraSonarTest にて運用想定のテストを行いました。
関連 issue, PR
resolve #1476 ;
SonarQube関連のissue検索 👈 SonarQube の導入経緯を確認できます。
※ SonarCloud はクラウドサービスの名前です。静的解析ツール SonarQube をクラウドで利用できるようにしたものが SonarCloud です。「静的解析そのもの」を指す文脈では SonarQube と呼称するのが正しいのかも知れません。
参考資料
https://docs.github.com/ja/free-pro-team@latest/actions/reference/events-that-trigger-workflows
https://sonarcloud.io/dashboard?id=sakura-editor_sakura
https://sonarcloud.io/dashboard?id=sakura-editor_SakuraSonarTest
https://sonarcloud.io/dashboard?id=berryzplus_sakura
https://github.com/OpenCppCoverage/OpenCppCoverage
https://github.com/berryzplus/XmlExporter