目的
- 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
参考
- GitHub Actionsでactions/setup-nodeだけでnode_modulesをキャッシュできるのか試してみた
- この記事と同じようにactions/setup-nodeでキャッシュされる内容を勘違いしていた
結論:actions/setup-nodeだけではできず、actions/cacheを使う必要がありました