前回書いたのがもう4年前でビビったのと、最近いろいろ進展があったのでまとめてみます。
actions/setup-java の依存キャッシュを使わない
これ自分が実装した機能なのでホント申し訳ないんですけど、今なら gradle/gradle-build-action
を使ったほうが良いです。
利点は公式が説明しているので読んどいてください。
spotlessApplyして差分が出たらSuggest Changeする
reviewdogが action-suggester
という素敵なアクションを提供しています。GitHub Actionsでフォーマッタを実行して差分ができた状態でこのアクションを実行すると、GitHub Pull RequestのSuggest Change機能を使ってフォーマットを提案してくれます。
フォーマット適用箇所が多いと手元で ./gradlew spotlessApply
したほうが早いなってケースもまぁあるとは思うんですが、やって損は無さそうです。
もちろんSpotlessに限らずktlintやPrettierのような他のフォーマッタでも利用できます。
まとめ
だいたいこんな感じじゃないですかね。リリース自動化には release-please とか semantic-release とかお好きなソリューションをご利用いただければと思います。
on: pull_request: push: branches: - main jobs: build: runs-on: ubuntu-latest permissions: contents: read # actions/checkoutのために必要 pull_requests: write # reviewdog/action-suggesterのために必要 steps: - uses: actions/checkout@v3 - uses: gradle/wrapper-validation-action@v1 - uses: actions/setup-java@v3 with: distribution: microsoft java-version: 17 # toolchainで指定したバージョンと同じものを使う - uses: gradle/gradle-build-action@v2 with: arguments: spotlessApply build --scan - uses: actions/upload-artifact@v3 if: always() with: name: Gradle reports path: build/reports - uses: reviewdog/action-suggester@v1 if: github.event_name == 'pull_request' with: github_token: ${{ secrets.GITHUB_TOKEN }} tool_name: spotless
またワークフロー最適化の観点ではGradleのRemote Build Cacheが非常に効果的です。勤め先ではgradle-gcs-build-cacheを使ってGoogle Cloud Storageを活用した最適化を行っています。