🐺

gradleをaction上でcacheする

に公開

はじめに

GitHub Actionsjarファイルをキャッシュする話

結論

gradle/actions/setup-gradleでキャッシュする

https://github.com/gradle/actions

gradle 依存関係キャッシング

gradle/actions/setup-gradle を使用することで Gradle ユーザー ホーム ディレクトリの重要な部分がキャッシュされます。
以降のジョブでは、キャッシュが復元されるので、ビルド スクリプトを再コンパイルする必要がなく、依存関係をリモート パッケージ リポジトリからダウンロードする必要がなくなります。
GitHub公式より

https://github.com/gradle/actions/blob/main/setup-gradle/README.md#caching-build-state-between-jobs

実装

  - name: Setup Gradle
    uses: gradle/actions/setup-gradle@v4

  - name: Build
    run: |
        ./gradlew customTask --build-cache
        ....

--build-cacheを使用することで、2回目以降は更新されていないTaskはキャッシュされます。

Tips

OS間による実行差異

OS環境が異なる場合に、適切なキャッシングがされず実行できないケースもある
また、{{ github.workspace }}~ (home) のようなディレクトリポインタの使用も避けるよう記載があります。

https://github.com/actions/cache/blob/5a3ec84e/tips-and-workarounds.md#cross-os-cache

制限について

リポジトリあたり10GBのキャッシュ制限があり
制限に達すると古いキャッシュが自動削除されるため、重要なキャッシュが予期せず消失する可能性もあります。

https://github.com/actions/cache/blob/5a3ec84e/README.md#cache-limits

その他一般的に起こるエラーについて

https://drdroid.io/stack-diagnosis/github-actions-job-failed-due-to-incorrect-file-permissions

Discussion