How to cache node_modules on Github Actions
tl;dr
- Github will charge you by execution time, so apply this feature will reduce your invoice.
- This post shows a way to cache the
node_modulesduring a Github Action execution. - The benefits of ovoid the
npm cistep can speed up the action execution.
Most of the Github Actions I've created are Node.js apps, so the npm install is always part of the requirements. I found this way to reduce the execution time by using the actions/cache@v2 cache action.
Just ovoid the npm ci entire action when the package-lock.json doesn't change.
- name: Cache dependencies
id: cache
uses: actions/cache@v2
with:
path: ./node_modules
key: modules-${{ hashFiles('package-lock.json') }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
So this is the example of the Github Actions using cache.
name: CI
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Cache dependencies
id: cache
uses: actions/cache@v2
with:
path: ./node_modules
key: modules-${{ hashFiles('package-lock.json') }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
# ... here all the things related to the job, like test script, lint or deploy
Wrap up
This solution is could work or not for your project, keep in mind is just a way to do it.
The cache will last 7 days in Github, just keep that in mind.
So, let's reduce your Github invoice right now :D.
Happy coding!