This modified version can speed up builds significantly as you don't have to rely on a network cache anymore.
IMPORTANT: This will only work when you host your GitHub Runner on your own!
- No 5GB cache size limit. Your own hardware sets the boundaries.
- Use as many keys as you like (instead of max 10 keys)
- Keys can be as long till your file system has issue with your file name (instead of 512 characters max)
- Instead of zipping and uploading, we will do zipping and moving. Much faster as some network connections if you are on SSD/RAID.
- Your projects build data actually stays on your own hardware.
- We can add more feature to customize behavior. Lets chat in the issues.
- ... potentially more which I overlook at this very moment ...
See "Caching dependencies to speed up workflows".
Pretty similar to the original cache plugin. You likely can copy & paste your configuration.
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 list of files, directories, and wildcard patterns to cache and restore. See@actions/glob
for supported patterns.key
- 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
The cache is scoped to the key and branch. The default branch cache is available to other branches.
See Matching a cache key for more info.
name: Caching Primes
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Cache Primes
id: cache-primes
uses: hashbite/github-action-cache-local-fs@main
with:
path: prime-numbers
key: ${{ runner.os }}-primes
- name: Generate Prime Numbers
if: steps.cache-primes.outputs.cache-hit != 'true'
run: /generate-primes.sh -d prime-numbers
- name: Use Prime Numbers
run: /primes.sh -d prime-numbers
Every programming language and framework has its own way of caching.
A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions.
For example, using the hashFiles
function allows you to create a new cache when dependencies change.
- uses: hashbite/github-action-cache-local-fs@main
with:
path: |
path/to/dependencies
some/other/dependencies
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
Additionally, you can use arbitrary command output in a cache key, such as a date or software version:
# http://man7.org/linux/man-pages/man1/date.1.html
- name: Get Date
id: get-date
run: |
echo "::set-output name=date::$(/bin/date -u "+%Y%m%d")"
shell: bash
- uses: hashbite/github-action-cache-local-fs@main
with:
path: path/to/dependencies
key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }}
See Using contexts to create cache keys
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@v2
- uses: hashbite/github-action-cache-local-fs@main
id: cache
with:
path: path/to/dependencies
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: /install.sh
Note: The
id
defined inhashbite/github-action-cache-local-fs
must match theid
in theif
statement (i.e.steps.[ID].outputs.cache-hit
)
We would love for you to contribute to hashbite/github-action-cache-local-fs
, 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