Masteries

技術的なことや仕事に関することを書いていきます.

GitHub ActionsでS3にキャッシュを保存できるpapix/action-cache-s3を作りました

先日, こちらのエントリでGitHub公式のactions/cacheを使わずに, 自前でS3を使ってキャッシュする方法を紹介しました.

papix.hatenablog.com

「これ, actionに切り出して再利用できるようにしてみては?」という意見を頂いたので, 日曜日にサクッと実装してみました.

github.com

S3にキャッシュをするので, 予めS3バケットを作り, そこに読み書きが可能なAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYをリポジトリ/オーガニゼーションのSecretsで指定した上で, 次のようなワークフローを記述することで利用できます.

on: push

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: papix/action-cache-s3@master
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        AWS_DEFAULT_REGION: ap-northeast-1
      with:
        bucket: cache-s3-test-bucket
        key: node_modules-${{ hashFiles('package.json') }}
        path: node_modules

一応, actions/cacheとほぼほぼ似た使い勝手になるように作っています(実際にS3へキャッシュする部分をジョブの最後に実行するようにしたりとか). ...但しドキュメントやテストはほぼ未整備ですし, actions/cacheにあるrestore-keysのような仕組みもまだないので, これらは追々整備していこうと思います.

papix.hatenablog.com

こちらのエントリでも紹介しましたが, GitHub公式のactions/cacheは現状若干クセがある... と言えると思っています. その辺りで困っている方は是非使ってみていただければと思います(Pull Requestも歓迎です!).

あと, これを作るにあたっていろいろとGitHub Actionsのactionを実装する際の知見を得ることが出来たので, これらについて別エントリでご紹介しようと思います.