目的

  • Github Actions上の、bundle installやyarn installの高速化

bundler

ruby/setup-ruby@v1でbundle installとキャッシュの両方を行える。モノレポなので、全体的にディレクトリ(backend)を指定している。

name: Cache Backend Bundle

on:
  push:
    branches:
      - main
    paths:
      - backend/**
  workflow_dispatch:

jobs:
  cache:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./backend
    steps:
      - uses: actions/checkout@v4
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          working-directory: ./backend
          ruby-version: 3.2.2
          bundler-cache: true

yarn

actions/cacheを利用する。actions/cacheを利用する場合、baseブランチや親ブランチのキャッシュにはアクセスできるが、兄弟ブランチのキャッシュにはアクセスできない。そのためbaseブランチであるmainブランチに変更があった場合、mainブランチ上でキャッシュを残すようにした。

キャッシュを残すGithub Action

name: Cache Frontend node_modules

on:
  push:
    branches:
      - main
    paths:
      - frontend/**
  workflow_dispatch:

jobs:
  cache:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./frontend
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - uses: actions/cache@v4
        with:
          path: './frontend/node_modules'
          key: ${{ runner.os }}-frontend-node_modules-${{ hashFiles('./frontend/yarn.lock') }}
      - name: yarn install
        run: yarn install

キャッシュを利用するGithub Action

name: Lint Frontend

on:
  push:
    paths:
      - frontend/**

jobs:
  build:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./frontend
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - uses: actions/cache@v4
        with:
          path: './frontend/node_modules'
          key: ${{ runner.os }}-frontend-node_modules-${{ hashFiles('./frontend/yarn.lock') }}
      - name: yarn install
        run: yarn install
      - name: lint
        run: yarn lint

参考