| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | # Examples
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 22:43:11 +00:00
										 |  |  | - [Examples](#examples) | 
					
						
							|  |  |  |   - [C# - NuGet](#c---nuget) | 
					
						
							|  |  |  |   - [Elixir - Mix](#elixir---mix) | 
					
						
							|  |  |  |   - [Go - Modules](#go---modules) | 
					
						
							|  |  |  |   - [Haskell - Cabal](#haskell---cabal) | 
					
						
							|  |  |  |   - [Java - Gradle](#java---gradle) | 
					
						
							|  |  |  |   - [Java - Maven](#java---maven) | 
					
						
							|  |  |  |   - [Node - npm](#node---npm) | 
					
						
							|  |  |  |     - [macOS and Ubuntu](#macos-and-ubuntu) | 
					
						
							|  |  |  |     - [Windows](#windows) | 
					
						
							|  |  |  |     - [Using multiple systems and `npm config`](#using-multiple-systems-and-npm-config) | 
					
						
							|  |  |  |   - [Node - Yarn](#node---yarn) | 
					
						
							|  |  |  |   - [OCaml/Reason - esy](#ocamlreason---esy) | 
					
						
							|  |  |  |   - [PHP - Composer](#php---composer) | 
					
						
							|  |  |  |   - [Python - pip](#python---pip) | 
					
						
							|  |  |  |     - [Simple example](#simple-example) | 
					
						
							|  |  |  |     - [Multiple OS's in a workflow](#multiple-oss-in-a-workflow) | 
					
						
							|  |  |  |     - [Using a script to get cache location](#using-a-script-to-get-cache-location) | 
					
						
							|  |  |  |   - [R - renv](#r---renv) | 
					
						
							|  |  |  |     - [Simple example](#simple-example-1) | 
					
						
							|  |  |  |     - [Multiple OS's in a workflow](#multiple-oss-in-a-workflow-1) | 
					
						
							|  |  |  |   - [Ruby - Bundler](#ruby---bundler) | 
					
						
							|  |  |  |   - [Rust - Cargo](#rust---cargo) | 
					
						
							|  |  |  |   - [Scala - SBT](#scala---sbt) | 
					
						
							|  |  |  |   - [Swift, Objective-C - Carthage](#swift-objective-c---carthage) | 
					
						
							|  |  |  |   - [Swift, Objective-C - CocoaPods](#swift-objective-c---cocoapods) | 
					
						
							|  |  |  |   - [Swift - Swift Package Manager](#swift---swift-package-manager) | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-10 09:21:47 +09:00
										 |  |  | ## C# - NuGet
 | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  | Using [NuGet lock files](https://docs.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies): | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-13 10:03:43 +09:00
										 |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.nuget/packages | 
					
						
							|  |  |  |     key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-nuget- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Depending on the environment, huge packages might be pre-installed in the global cache folder. | 
					
						
							|  |  |  | If you do not want to include them, consider to move the cache folder like below. | 
					
						
							| 
									
										
										
										
											2019-12-16 09:45:29 +09:00
										 |  |  | >Note: This workflow does not work for projects that require files to be placed in user profile package folder | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-12-10 09:21:47 +09:00
										 |  |  | env: | 
					
						
							|  |  |  |   NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages | 
					
						
							|  |  |  | steps: | 
					
						
							|  |  |  |   - uses: actions/cache@v1 | 
					
						
							|  |  |  |     with: | 
					
						
							|  |  |  |       path: ${{ github.workspace }}/.nuget/packages | 
					
						
							|  |  |  |       key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} | 
					
						
							|  |  |  |       restore-keys: | | 
					
						
							|  |  |  |         ${{ runner.os }}-nuget- | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  | ## Elixir - Mix
 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  | - uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |   with: | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  |     path: deps | 
					
						
							|  |  |  |     key: ${{ runner.os }}-mix-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }} | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |     restore-keys: | | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  |       ${{ runner.os }}-mix- | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  | ## Go - Modules
 | 
					
						
							| 
									
										
										
										
											2019-11-05 17:03:56 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  | - uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |   with: | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  |     path: ~/go/pkg/mod | 
					
						
							|  |  |  |     key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |     restore-keys: | | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  |       ${{ runner.os }}-go- | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-10 23:07:52 +01:00
										 |  |  | ## Haskell - Cabal
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  |   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 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ## Java - Gradle
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  | - uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.gradle/caches | 
					
						
							|  |  |  |     key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-gradle- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Java - Maven
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  | - uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.m2/repository | 
					
						
							|  |  |  |     key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							| 
									
										
										
										
											2019-10-31 12:08:09 -07:00
										 |  |  |       ${{ runner.os }}-maven- | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  | ## Node - npm
 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-07 21:04:46 -05:00
										 |  |  | For npm, cache files are stored in `~/.npm` on Posix, or `%AppData%/npm-cache` on Windows. See https://docs.npmjs.com/cli/cache#cache | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | >Note: It is not recommended to cache `node_modules`, as it can break across Node versions and won't work with `npm ci` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### macOS and Ubuntu
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-05 17:03:56 +01:00
										 |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							| 
									
										
										
										
											2019-11-07 21:04:46 -05:00
										 |  |  |     path: ~/.npm | 
					
						
							|  |  |  |     key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-node- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Windows
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~\AppData\Roaming\npm-cache | 
					
						
							|  |  |  |     key: ${{ runner.os }}-node-${{ hashFiles('**\package-lock.json') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-node- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Using multiple systems and `npm config`
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-14 16:50:11 +02:00
										 |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-07 21:04:46 -05:00
										 |  |  | - name: Get npm cache directory | 
					
						
							|  |  |  |   id: npm-cache | 
					
						
							|  |  |  |   run: | | 
					
						
							|  |  |  |     echo "::set-output name=dir::$(npm config get cache)" | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ${{ steps.npm-cache.outputs.dir }} | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  |     key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | 
					
						
							| 
									
										
										
										
											2019-11-05 17:03:56 +01:00
										 |  |  |     restore-keys: | | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  |       ${{ runner.os }}-node- | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  | ## Node - Yarn
 | 
					
						
							| 
									
										
										
										
											2019-11-13 10:18:47 -05:00
										 |  |  | The yarn cache directory will depend on your operating system and version of `yarn`. See https://yarnpkg.com/lang/en/docs/cli/cache/ for more info. | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2020-02-14 16:50:11 +02:00
										 |  |  | - name: Get yarn cache directory path | 
					
						
							|  |  |  |   id: yarn-cache-dir-path | 
					
						
							| 
									
										
										
										
											2019-11-13 10:18:47 -05:00
										 |  |  |   run: echo "::set-output name=dir::$(yarn cache dir)" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  | - uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2020-02-14 16:50:11 +02:00
										 |  |  |   id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |   with: | 
					
						
							| 
									
										
										
										
											2020-02-14 16:50:11 +02:00
										 |  |  |     path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | 
					
						
							| 
									
										
										
										
											2019-11-13 10:18:47 -05:00
										 |  |  |     key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |     restore-keys: | | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  |       ${{ runner.os }}-yarn- | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 22:43:11 +00:00
										 |  |  | ## OCaml/Reason - esy
 | 
					
						
							|  |  |  | Esy allows you to export built dependencies and import pre-built dependencies. | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  |     - name: Restore Cache | 
					
						
							|  |  |  |       id: restore-cache | 
					
						
							|  |  |  |       uses: actions/cache@v1 | 
					
						
							|  |  |  |       with: | 
					
						
							|  |  |  |         path: _export | 
					
						
							|  |  |  |         key:  ${{ runner.os }}-esy-${{ hashFiles('esy.lock/index.json') }} | 
					
						
							|  |  |  |         restore-keys: | | 
					
						
							|  |  |  |           ${{ runner.os }}-esy- | 
					
						
							|  |  |  |     - name: Esy install | 
					
						
							|  |  |  |       run: 'esy install' | 
					
						
							|  |  |  |     - name: Import Cache | 
					
						
							|  |  |  |       run: | | 
					
						
							|  |  |  |         esy import-dependencies _export | 
					
						
							|  |  |  |         rm -rf _export | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ...(Build job)... | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Re-export dependencies if anything has changed or if it is the first time | 
					
						
							|  |  |  |     - name: Setting dependency cache  | 
					
						
							|  |  |  |       run: | | 
					
						
							|  |  |  |         esy export-dependencies | 
					
						
							|  |  |  |       if: steps.restore-cache.outputs.cache-hit != 'true' | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-14 16:50:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 22:18:49 +01:00
										 |  |  | ## PHP - Composer
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-14 16:50:11 +02:00
										 |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-05 22:18:49 +01:00
										 |  |  | - name: Get Composer Cache Directory | 
					
						
							|  |  |  |   id: composer-cache | 
					
						
							|  |  |  |   run: | | 
					
						
							|  |  |  |     echo "::set-output name=dir::$(composer config cache-files-dir)" | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ${{ steps.composer-cache.outputs.dir }} | 
					
						
							|  |  |  |     key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-composer- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-13 10:55:05 -05:00
										 |  |  | ## Python - pip
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For pip, the cache directory will vary by OS. See https://pip.pypa.io/en/stable/reference/pip_install/#caching | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Locations: | 
					
						
							|  |  |  |  - Ubuntu: `~/.cache/pip` | 
					
						
							|  |  |  |  - Windows: `~\AppData\Local\pip\Cache` | 
					
						
							|  |  |  |  - macOS: `~/Library/Caches/pip` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Simple example
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.cache/pip | 
					
						
							|  |  |  |     key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-pip- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Replace `~/.cache/pip` with the correct `path` if not using Ubuntu. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Multiple OS's in a workflow
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   if: startsWith(runner.os, 'Linux') | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.cache/pip | 
					
						
							|  |  |  |     key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-pip- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   if: startsWith(runner.os, 'macOS') | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~/Library/Caches/pip | 
					
						
							|  |  |  |     key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-pip- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   if: startsWith(runner.os, 'Windows') | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~\AppData\Local\pip\Cache | 
					
						
							|  |  |  |     key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-pip- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Using a script to get cache location
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | > Note: This uses an internal pip API and may not always work
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - name: Get pip cache | 
					
						
							|  |  |  |    id: pip-cache | 
					
						
							|  |  |  |    run: | | 
					
						
							|  |  |  |      python -c "from pip._internal.locations import USER_CACHE_DIR; print('::set-output name=dir::' + USER_CACHE_DIR)" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ${{ steps.pip-cache.outputs.dir }} | 
					
						
							|  |  |  |     key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-pip- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-22 09:22:40 +09:00
										 |  |  | ## R - renv
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For renv, the cache directory will vary by OS. Look at https://rstudio.github.io/renv/articles/renv.html#cache | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Locations: | 
					
						
							|  |  |  |  - Ubuntu: `~/.local/share/renv` | 
					
						
							|  |  |  |  - macOS: `~/Library/Application Support/renv` | 
					
						
							|  |  |  |  - Windows: `%LOCALAPPDATA%/renv` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Simple example
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.local/share/renv | 
					
						
							|  |  |  |     key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-renv- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Replace `~/.local/share/renv` with the correct `path` if not using Ubuntu. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Multiple OS's in a workflow
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   if: startsWith(runner.os, 'Linux') | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.local/share/renv | 
					
						
							|  |  |  |     key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-renv- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   if: startsWith(runner.os, 'macOS') | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~/Library/Application Support/renv | 
					
						
							|  |  |  |     key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-renv- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   if: startsWith(runner.os, 'Windows') | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~\AppData\Local\renv | 
					
						
							|  |  |  |     key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-renv- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-12 15:48:43 -08:00
										 |  |  | ## Ruby - Bundler
 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  | - uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |   with: | 
					
						
							|  |  |  |     path: vendor/bundle | 
					
						
							| 
									
										
										
										
											2020-01-12 15:48:43 -08:00
										 |  |  |     key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} | 
					
						
							| 
									
										
										
										
											2019-10-31 11:36:50 -04:00
										 |  |  |     restore-keys: | | 
					
						
							| 
									
										
										
										
											2020-01-12 15:48:43 -08:00
										 |  |  |       ${{ runner.os }}-gems- | 
					
						
							| 
									
										
										
										
											2019-11-01 20:27:43 +01:00
										 |  |  | ``` | 
					
						
							| 
									
										
										
										
											2019-11-23 14:13:50 -05:00
										 |  |  | When dependencies are installed later in the workflow, we must specify the same path for the bundler. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - name: Bundle install | 
					
						
							|  |  |  |   run: | | 
					
						
							|  |  |  |     bundle config path vendor/bundle | 
					
						
							|  |  |  |     bundle install --jobs 4 --retry 3 | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2019-11-01 20:27:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 00:15:02 +09:00
										 |  |  | ## Rust - Cargo
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 17:03:56 +01:00
										 |  |  | ```yaml | 
					
						
							| 
									
										
										
										
											2019-11-05 00:15:02 +09:00
										 |  |  | - name: Cache cargo registry | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  |   uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2019-11-05 00:15:02 +09:00
										 |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.cargo/registry | 
					
						
							|  |  |  |     key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | 
					
						
							|  |  |  | - name: Cache cargo index | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  |   uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2019-11-05 00:15:02 +09:00
										 |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.cargo/git | 
					
						
							|  |  |  |     key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} | 
					
						
							|  |  |  | - name: Cache cargo build | 
					
						
							| 
									
										
										
										
											2019-11-04 16:40:33 -05:00
										 |  |  |   uses: actions/cache@v1 | 
					
						
							| 
									
										
										
										
											2019-11-05 00:15:02 +09:00
										 |  |  |   with: | 
					
						
							|  |  |  |     path: target | 
					
						
							|  |  |  |     key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-11 06:09:06 +08:00
										 |  |  | ## 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 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: ~/.sbt | 
					
						
							|  |  |  |     key: ${{ runner.os }}-sbt-${{ hashFiles('**/build.sbt') }} | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-05 19:04:07 +02:00
										 |  |  | ## Swift, Objective-C - Carthage
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: Carthage | 
					
						
							|  |  |  |     key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-carthage- | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Swift, Objective-C - CocoaPods
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: Pods | 
					
						
							|  |  |  |     key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-pods- | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2020-01-29 17:13:59 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ## Swift - Swift Package Manager
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```yaml | 
					
						
							|  |  |  | - uses: actions/cache@v1 | 
					
						
							|  |  |  |   with: | 
					
						
							|  |  |  |     path: .build | 
					
						
							|  |  |  |     key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }} | 
					
						
							|  |  |  |     restore-keys: | | 
					
						
							|  |  |  |       ${{ runner.os }}-spm- | 
					
						
							|  |  |  | ``` |