github action to speedup building using ccache
Find a file
Hendrik Muhs 5ebbd400ef update code
2025-11-18 19:57:35 +01:00
.github restore.ts - update-package-index option (#386) 2025-11-18 19:46:04 +01:00
__tests__ Evict old files from the cache prior to saving (#270) 2024-12-31 13:07:11 +01:00
dist update code 2025-11-18 19:57:35 +01:00
src restore.ts - update-package-index option (#386) 2025-11-18 19:46:04 +01:00
.gitignore implement ccache as github action 2020-12-06 20:22:10 +01:00
action.yml restore.ts - update-package-index option (#386) 2025-11-18 19:46:04 +01:00
jest.config.js Add option to add stats to Job Summary page (#263) 2024-12-06 11:37:33 +01:00
LICENSE Initial commit 2020-12-06 14:05:49 +01:00
package-lock.json Bump @actions/io from 1.1.3 to 2.0.0 (#391) 2025-11-18 19:55:37 +01:00
package.json Bump @actions/io from 1.1.3 to 2.0.0 (#391) 2025-11-18 19:55:37 +01:00
README.md Change Bash to Shell everywhere (#223) 2024-09-05 06:23:00 +02:00
tsconfig.json implement ccache as github action 2020-12-06 20:22:10 +01:00

Ccache for gh actions

A Github action to speedup building using ccache/sccache for C/C++ projects.

Works on Linux, macOS, and Windows.

Usage

- run: apt update  # Only for Docker jobs
- name: ccache
  uses: hendrikmuhs/ccache-action@v1.2

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/ccache-action@v1.2
  with:
    create-symlink: true

Ccache/sccache gets installed by this action if it is not installed yet.

Example workflow

Notes on Windows support

Note that using Ccache on Windows probably works, but Sccache is recommended for stable Windows support.

If you have multiple jobs

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/ccache-action@v1.2
        with:
          key: ${{ github.job }}-${{ matrix.os }}  # Eg. "some_build-ubuntu-latest"
  some_other_build:
    ...

Other options

See action.yml for a full list of options.

Ccache statistics

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.

How it works

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.