GitHub Action
Ccache for gh actions
A Github action to speedup building using ccache/sccache for C/C++ projects.
Works on Linux, macOS, and Windows.
- run: apt update # Only for Docker jobs
- name: ccache
uses: hendrikmuhs/[email protected]
NB! This should always come after the actions/checkout
step.
In order to use ccache in your other steps, point the compiler to it, e.g. with run-cmake
:
- name: build with cmake
uses: lukka/run-cmake@v3
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeAppendedArgs: '-DCMAKE_BUILD_TYPE=${{ matrix.type }} -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache'
...
or by manipulating PATH
(ccache only):
- name: build
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
(works for both ubuntu
and macos
)
or by setting create-symlink to true
:
- name: ccache
uses: hendrikmuhs/[email protected]
with:
create-symlink: true
Ccache/sccache gets installed by this action if it is not installed yet.
Note that using Ccache on Windows probably works, but Sccache is recommended for stable Windows support.
If you have multiple jobs or targets (eg. Debug
, Release
) or multiple OS's, it makes sense to cache them
separately. An additional cache key can be specified.
jobs:
some_build:
steps:
...
- name: ccache
uses: hendrikmuhs/[email protected]
with:
key: ${{ github.job }}-${{ matrix.os }} # Eg. "some_build-ubuntu-latest"
some_other_build:
...
See action.yml for a full list of options.
Stats are provided as part of the post action, check the output to see if cache is effective.
You may also set verbose
input to 1 to enable verbose output from this action or even to 2
to make it even more verbose.
This action is based on https://cristianadam.eu/20200113/speeding-up-c-plus-plus-github-actions-using-ccache/
In a nutshell, the .ccache
folder is configured in the runner path and the folder is persisted and reloaded using cache
.
For more details see: https://docs.github.com/en/free-pro-team@latest/actions/guides/caching-dependencies-to-speed-up-workflows.