🖥

Github Actions の setup-ruby が遅いので新規PR作成時にもキャッシュを有効にする

2024/01/02に公開

問題

新規PRを作成するとRuby (setup-ruby)のキャッシュが使われず時間がかかる

name: My workflow
on: [pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: ruby/setup-ruby@v1
      with:
        ruby-version: '3.2' # Not needed with a .ruby-version file
        bundler-cache: true # runs 'bundle install' and caches installed gems automatically
    - run: bundle exec rake

結論

Github Actions ではブランチの単位でキャッシュが生成されるみたいだ。
なので新規PR作成時に新しいブランチを使うと、参照するキャッシュヒットせずRubyのセットアップで数分の時間がかかる。

ただしそのPRのベースブランチ、またはデフォルトブランチのキャッシュは利用できるようなので、
この記事の通り、ベースブランチにマージされた時 (push指定) にもCIを有効にしておけば良い。

# github/workflows/ci.yml

on:
  pull_request:
  push:
    branches:
      - main

https://zenn.dev/mallowlabs/articles/github-actions-cache-scope

公式

https://github.com/ruby/setup-ruby

補足 - キャッシュ指定

cache-versionを指定すれば良いようだ
ただ非推奨らしい

    - uses: ruby/setup-ruby@v1
      with:
        bundler-cache: true
        cache-version: 'XXXX'

生成されるキャッシュの確認

Githubレポジトリで Actions > Caches で確認できる

バージョン指定なしの場合に生成されるキャッシュ

(色々省略)/api-with--without--only---Gemfile.lock-(Gemfile.lockをハッシュ化した値)

バージョン指定ありの場合に生成されるキャッシュ

(色々省略)/api-with--without--only--v-XXXX-Gemfile.lock-(Gemfile.lockをハッシュ化した値)

上のように通常のキャッシュ名に加えて cache-version が付与される形のようなので、特に無指定のままで良さそうだ

公開日時

2023-10-31

Discussion