This GitHub Action allows caching dependencies and build outputs to improve workflow execution time.
Create a workflow .yml file in your repositories .github/workflows directory. An example workflow is available below. For more information, reference the GitHub Help Documentation for Creating a workflow file.
path- A directory to store and save the cachekey- An explicit key for restoring and saving the cacherestore-keys- An ordered list of keys to use for restoring the cache if no cache hit occurred for key
cache-hit- A boolean value to indicate an exact match was found for the key
See Skipping steps based on cache-hit for info on using this output
name: Example Caching with npm
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Cache node_modules
uses: actions/cache@preview
with:
path: node_modules
key: ${{ runner.os }}-node
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
- name: Test
run: npm run test- uses: actions/cache@preview
with:
path: node_modules
key: ${{ runner.os }}-node- uses: actions/cache@preview
with:
path: ~/.cache/yarn
key: ${{ runner.os }}-yarn-${{ hashFiles(format('{0}{1}', github.workspace, '/yarn.lock')) }}
restore-keys: |
${{ runner.os }}-yarn-- uses: actions/cache@preview
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-- uses: actions/cache@preview
with:
path: ~/.gradle/caches
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle') }}
restore-keys: |
gradle-${{ runner.os }}-- uses: actions/cache@preview
with:
path: ~/.m2/repository
key: ${{ runner.os }}-mavenuses: actions/cache@preview
with:
path: Carthage
key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }}
restore-keys: |
${{ runner.os }}-carthage-- uses: actions/cache@preview
with:
path: Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-- uses: actions/cache@preview
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gem-Individual caches are limited to 200MB and a repository can have up to 2GB of caches. Once the 2GB limit is reached, older caches will be evicted based on when the cache was last accessed.
Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key.
Example:
steps:
- uses: actions/checkout@v1
- uses: actions/cache@preview
id: cache
with:
path: path/to/dependencies
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles')}}
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: /install.shNote: The
iddefined inactions/cachemust match theidin theifstatement (i.e.steps.[ID].outupts.cache-hit)
We would love for you to contribute to @actions/cache, pull requests are welcome! Please see the CONTRIBUTING.md for more information.
The scripts and documentation in this project are released under the MIT License