@ -35,7 +35,7 @@
 
		
	
		
			
				Using [NuGet lock files ](https://docs.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies ):
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.nuget/packages
 
		
	
		
			
				    key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -50,7 +50,7 @@ If you do not want to include them, consider to move the cache folder like below
 
		
	
		
			
				env:
 
		
	
		
			
				  NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
 
		
	
		
			
				steps:
 
		
	
		
			
				  - uses: actions/cache@v1 
 
		
	
		
			
				  - uses: actions/cache@v2 
 
		
	
		
			
				    with:
 
		
	
		
			
				      path: ${{ github.workspace }}/.nuget/packages
 
		
	
		
			
				      key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -58,12 +58,24 @@ steps:
 
		
	
		
			
				        ${{ runner.os }}-nuget-
 
		
	
		
			
				```
 
		
	
		
			
				
 
		
	
		
			
				With `actions/cache@v2`  you can now exclude unwanted packages with [exclude pattern ](https://github.com/actions/toolkit/tree/master/packages/glob#exclude-patterns )
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v2
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: | 
 
		
	
		
			
				      ~/.nuget/packages
 
		
	
		
			
				      !~/.nuget/packages/unwanted
 
		
	
		
			
				    key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
 
		
	
		
			
				    restore-keys: |
 
		
	
		
			
				      ${{ runner.os }}-nuget-
 
		
	
		
			
				```
 
		
	
		
			
				
 
		
	
		
			
				## D - DUB
 
		
	
		
			
				
 
		
	
		
			
				### POSIX
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.dub
 
		
	
		
			
				    key: ${{ runner.os }}-dub-${{ hashFiles('**/dub.json') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -74,7 +86,7 @@ steps:
 
		
	
		
			
				### Windows
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~\AppData\Local\dub
 
		
	
		
			
				    key: ${{ runner.os }}-dub-${{ hashFiles('**/dub.json') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -84,7 +96,7 @@ steps:
 
		
	
		
			
				
 
		
	
		
			
				## Elixir - Mix
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: deps
 
		
	
		
			
				    key: ${{ runner.os }}-mix-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -95,7 +107,7 @@ steps:
 
		
	
		
			
				## Go - Modules
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/go/pkg/mod
 
		
	
		
			
				    key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -108,27 +120,20 @@ steps:
 
		
	
		
			
				We cache the elements of the Cabal store separately, as the entirety of `~/.cabal`  can grow very large for projects with many dependencies.
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				  name: Cache ~/.cabal/packages
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  name: Cache ~/.cabal/packages, ~/.cabal/store and dist-newstyle 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.cabal/packages
 
		
	
		
			
				    key: ${{ runner.os }}-${{ matrix.ghc }}-cabal-packages
 
		
	
		
			
				- uses: actions/cache@v1
 
		
	
		
			
				  name: Cache ~/.cabal/store
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.cabal/store
 
		
	
		
			
				    key: ${{ runner.os }}-${{ matrix.ghc }}-cabal-store
 
		
	
		
			
				- uses: actions/cache@v1
 
		
	
		
			
				  name: Cache dist-newstyle
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: dist-newstyle
 
		
	
		
			
				    key: ${{ runner.os }}-${{ matrix.ghc }}-dist-newstyle
 
		
	
		
			
				    path: |
 
		
	
		
			
				      ~/.cabal/packages
 
		
	
		
			
				      ~/.cabal/store
 
		
	
		
			
				      dist-newstyle
 
		
	
		
			
				    key: ${{ runner.os }}-${{ matrix.ghc }}
 
		
	
		
			
				```
 
		
	
		
			
				
 
		
	
		
			
				## Java - Gradle
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.gradle/caches
 
		
	
		
			
				    key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -139,7 +144,7 @@ We cache the elements of the Cabal store separately, as the entirety of `~/.caba
 
		
	
		
			
				## Java - Maven
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.m2/repository
 
		
	
		
			
				    key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -156,7 +161,7 @@ For npm, cache files are stored in `~/.npm` on Posix, or `%AppData%/npm-cache` o
 
		
	
		
			
				### macOS and Ubuntu
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.npm
 
		
	
		
			
				    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -171,7 +176,7 @@ For npm, cache files are stored in `~/.npm` on Posix, or `%AppData%/npm-cache` o
 
		
	
		
			
				  id: npm-cache
 
		
	
		
			
				  run: |
 
		
	
		
			
				    echo "::set-output name=dir::$(npm config get cache)"
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ${{ steps.npm-cache.outputs.dir }}
 
		
	
		
			
				    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -186,7 +191,7 @@ For npm, cache files are stored in `~/.npm` on Posix, or `%AppData%/npm-cache` o
 
		
	
		
			
				  id: npm-cache
 
		
	
		
			
				  run: |
 
		
	
		
			
				    echo "::set-output name=dir::$(npm config get cache)"
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ${{ steps.npm-cache.outputs.dir }}
 
		
	
		
			
				    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -196,10 +201,9 @@ For npm, cache files are stored in `~/.npm` on Posix, or `%AppData%/npm-cache` o
 
		
	
		
			
				
 
		
	
		
			
				## Node - Lerna
 
		
	
		
			
				
 
		
	
		
			
				>Note this example uses the new multi-paths feature and is only available at `master` 
 
		
	
		
			
				```yaml
 
		
	
		
			
				- name: restore lerna
 
		
	
		
			
				  uses: actions/cache@master 
 
		
	
		
			
				  uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: |
 
		
	
		
			
				      node_modules
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -215,7 +219,7 @@ The yarn cache directory will depend on your operating system and version of `ya
 
		
	
		
			
				  id: yarn-cache-dir-path
 
		
	
		
			
				  run: echo "::set-output name=dir::$(yarn cache dir)"
 
		
	
		
			
				
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  id: yarn-cache # use this to check for `cache-hit`  (`steps.yarn-cache.outputs.cache-hit != 'true'`)
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -229,7 +233,7 @@ Esy allows you to export built dependencies and import pre-built dependencies.
 
		
	
		
			
				```yaml
 
		
	
		
			
				    - name: Restore Cache
 
		
	
		
			
				      id: restore-cache
 
		
	
		
			
				      uses: actions/cache@v1 
 
		
	
		
			
				      uses: actions/cache@v2 
 
		
	
		
			
				      with:
 
		
	
		
			
				        path: _export
 
		
	
		
			
				        key:  ${{ runner.os }}-esy-${{ hashFiles('esy.lock/index.json') }}
 
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -259,7 +263,7 @@ Esy allows you to export built dependencies and import pre-built dependencies.
 
		
	
		
			
				  id: composer-cache
 
		
	
		
			
				  run: |
 
		
	
		
			
				    echo "::set-output name=dir::$(composer config cache-files-dir)"
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ${{ steps.composer-cache.outputs.dir }}
 
		
	
		
			
				    key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -278,7 +282,7 @@ Locations:
 
		
	
		
			
				
 
		
	
		
			
				### Simple example
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.cache/pip
 
		
	
		
			
				    key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -291,7 +295,7 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				### Multiple OS's in a workflow
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  if: startsWith(runner.os, 'Linux')
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.cache/pip
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -299,7 +303,7 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				    restore-keys: |
 
		
	
		
			
				      ${{ runner.os }}-pip-
 
		
	
		
			
				
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  if: startsWith(runner.os, 'macOS')
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/Library/Caches/pip
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -307,7 +311,7 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				    restore-keys: |
 
		
	
		
			
				      ${{ runner.os }}-pip-
 
		
	
		
			
				
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  if: startsWith(runner.os, 'Windows')
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~\AppData\Local\pip\Cache
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -326,7 +330,7 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				    echo "::set-output name=dir::$(pip cache dir)"
 
		
	
		
			
				
 
		
	
		
			
				- name: pip cache
 
		
	
		
			
				  uses: actions/cache@v1 
 
		
	
		
			
				  uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ${{ steps.pip-cache.outputs.dir }}
 
		
	
		
			
				    key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -343,7 +347,7 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				 run: |
 
		
	
		
			
				   python -c "from pip._internal.locations import USER_CACHE_DIR; print('::set-output name=dir::' + USER_CACHE_DIR)"
 
		
	
		
			
				
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ${{ steps.pip-cache.outputs.dir }}
 
		
	
		
			
				    key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -362,7 +366,7 @@ Locations:
 
		
	
		
			
				
 
		
	
		
			
				### Simple example
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.local/share/renv
 
		
	
		
			
				    key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -375,7 +379,7 @@ Replace `~/.local/share/renv` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				### Multiple OS's in a workflow
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  if: startsWith(runner.os, 'Linux')
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.local/share/renv
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -383,7 +387,7 @@ Replace `~/.local/share/renv` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				    restore-keys: |
 
		
	
		
			
				      ${{ runner.os }}-renv-
 
		
	
		
			
				
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  if: startsWith(runner.os, 'macOS')
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/Library/Application Support/renv
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -391,7 +395,7 @@ Replace `~/.local/share/renv` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				    restore-keys: |
 
		
	
		
			
				      ${{ runner.os }}-renv-
 
		
	
		
			
				
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  if: startsWith(runner.os, 'Windows')
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~\AppData\Local\renv
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -403,7 +407,7 @@ Replace `~/.local/share/renv` with the correct `path` if not using Ubuntu.
 
		
	
		
			
				## Ruby - Bundler
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: vendor/bundle
 
		
	
		
			
				    key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -422,42 +426,32 @@ When dependencies are installed later in the workflow, we must specify the same
 
		
	
		
			
				## Rust - Cargo
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- name: Cache cargo registry
 
		
	
		
			
				  uses: actions/cache@v1
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.cargo/registry
 
		
	
		
			
				    key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
 
		
	
		
			
				- name: Cache cargo index
 
		
	
		
			
				  uses: actions/cache@v1
 
		
	
		
			
				- name: Cache cargo
 
		
	
		
			
				  uses: actions/cache@v2
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.cargo/git
 
		
	
		
			
				    key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
 
		
	
		
			
				- name: Cache cargo build
 
		
	
		
			
				  uses: actions/cache@v1
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: target
 
		
	
		
			
				    key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
 
		
	
		
			
				    path: |
 
		
	
		
			
				      ~/.cargo/registry
 
		
	
		
			
				      ~/.cargo/git
 
		
	
		
			
				      target
 
		
	
		
			
				    key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
 
		
	
		
			
				```
 
		
	
		
			
				
 
		
	
		
			
				## Scala - SBT
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- name: Cache SBT ivy cache
 
		
	
		
			
				  uses: actions/cache@v1
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.ivy2/cache
 
		
	
		
			
				    key: ${{ runner.os }}-sbt-ivy-cache-${{ hashFiles('**/build.sbt') }}
 
		
	
		
			
				- name: Cache SBT
 
		
	
		
			
				  uses: actions/cache@v1 
 
		
	
		
			
				  uses: actions/cache@v2
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: ~/.sbt
 
		
	
		
			
				    path: | 
 
		
	
		
			
				      ~/.ivy2/cache
 
		
	
		
			
				      ~/.sbt
 
		
	
		
			
				    key: ${{ runner.os }}-sbt-${{ hashFiles('**/build.sbt') }}
 
		
	
		
			
				```
 
		
	
		
			
				
 
		
	
		
			
				## Swift, Objective-C - Carthage
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: Carthage
 
		
	
		
			
				    key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -468,7 +462,7 @@ When dependencies are installed later in the workflow, we must specify the same
 
		
	
		
			
				## Swift, Objective-C - CocoaPods
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: Pods
 
		
	
		
			
				    key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
 
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -479,7 +473,7 @@ When dependencies are installed later in the workflow, we must specify the same
 
		
	
		
			
				## Swift - Swift Package Manager
 
		
	
		
			
				
 
		
	
		
			
				```yaml
 
		
	
		
			
				- uses: actions/cache@v1 
 
		
	
		
			
				- uses: actions/cache@v2 
 
		
	
		
			
				  with:
 
		
	
		
			
				    path: .build
 
		
	
		
			
				    key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}