freks blog

GitHub ActionsでCacheを使ってみた

GitHub Actions で RSpec を動かしてみた | freks blog で bundle install が時間かかるのでキャッシュを使ってみました

環境はもちろん同じく

Ruby 2.6.5
Rails 6.0.1
PostgreSQL 12

Cache · Actions · GitHub Marketplace

を使います

Caching dependencies to speed up workflows - GitHub Help
を参考に、用意されてる .github/workflows/ruby.yml を変更したのが

name: Ruby CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:12
        ports:
          - 5432:5432
        env:
          POSTGRES_USER: pguser
          POSTGRES_PASSWORD: password
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
    container:
      image: ruby:2.6.5
      env:
        RAILS_ENV: test
        RAILS_DATABASE_HOST: postgres # this is needed
        RAILS_DATABASE_USER: pguser
        RAILS_DATABASE_PASSWORD: password
    steps:
      - uses: actions/checkout@v1
      - name: Cache bundle directory
        uses: actions/cache@v1
        with:
          path: vendor/bundle
          key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-gem-
      - name: Prepare bundler
        run: |
          gem install bundler
          bundle config path vendor/bundle
          bundle install --jobs 4 --retry 3
        working-directory: ./src
      - name: Prepare database
        run: |
          bin/rails db:create
          bin/rails db:schema:load
        working-directory: ./src
      - name: Run test
        run: bin/rspec
        working-directory: ./src

で、足したところが

    - name: Cache bundle directory
      uses: actions/cache@v1
      with:
        path: vendor/bundle
        key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
        restore-keys: |
          ${{ runner.os }}-gem-
    - name: Prepare bundler
      run: |
        gem install bundler
        bundle config path vendor/bundle
        bundle install --jobs 4 --retry 3

name: Cache bundle directorybundle config path vendor/bundle です
bundle install されるディレクトリを指定、それをキャッシュ、次回実行時にキャッシュから戻して、bundle install が早くなります

これで今のところうまく動いています
docker image layer のキャッシュをしたかったのですが、November mid in 2019 に出てる?らしいのですが見当たらなかったので、また今度

設定したリポジトリは
Use cache in github actions flow by shoji-k · Pull Request #7 · shoji-k/rails-sandbox
なので参考にしてください