name: 'CCache Setup' description: 'Run a Bazel-based docker image for Protobuf CI testing' inputs: cache-prefix: required: true description: A unique prefix to prevent cache pollution type: string support-modules: required: false description: Whether or not we need to support modules. This can result in extra cache misses. runs: using: 'composite' steps: - name: Setup ccache on Windows if: ${{ runner.os == 'Windows' }} uses: ./.github/actions/internal/ccache-setup-windows - name: Setup ccache on Mac if: ${{ runner.os == 'macOS' }} shell: bash run: brew install ccache - name: Setup fixed path ccache caching uses: actions/cache@627f0f41f6904a5b1efbaed9f96d9eb58e92e920 # v3.2.4 with: path: .ccache # Always push to a cache key unique to this commit. key: ${{ format('ccache-{0}-{1}-{2}', inputs.cache-prefix, github.ref, github.sha) }} # Select a cache to restore from with the follow order of preference: # 1) The exact same commit we're running over # 2) The latest cache from the current ref branch # 3) The latest push to the base ref of a pull request restore-keys: | ${{ format('ccache-{0}-{1}-{2}', inputs.cache-prefix, github.ref, github.sha) }} ${{ format('ccache-{0}-{1}', inputs.cache-prefix, github.ref) }} ${{ format('ccache-{0}-{1}', inputs.cache-prefix, github.base_ref) }} ${{ format('ccache-{0}-refs/heads/{1}', inputs.cache-prefix, github.ref) }} ${{ format('ccache-{0}-refs/heads/{1}', inputs.cache-prefix, github.base_ref) }} - name: Configure ccache environment variables shell: bash run: | echo "CCACHE_BASEDIR=${{ github.workspace }}" >> $GITHUB_ENV echo "CCACHE_DIR=${{ github.workspace }}/.ccache" >> $GITHUB_ENV echo "CCACHE_COMPRESS=true" >> $GITHUB_ENV echo "CCACHE_COMPRESSLEVEL=6" >> $GITHUB_ENV echo "CCACHE_MAXSIZE=600M" >> $GITHUB_ENV echo "CCACHE_SLOPPINESS=clang_index_store,include_file_ctime,include_file_mtime,file_macro,time_macros" >> $GITHUB_ENV echo "CCACHE_DIRECT=true" >> $GITHUB_ENV echo "CCACHE_CMAKE_FLAGS=-Dprotobuf_ALLOW_CCACHE=ON -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache $CCACHE_CMAKE_FLAGS" >> $GITHUB_ENV - name: Enable module support if: ${{ inputs.support-modules }} shell: bash run: | echo "CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS,modules" >> $GITHUB_ENV echo "CCACHE_DEPEND=true" >> $GITHUB_ENV - name: Zero out ccache if: ${{ runner.os == 'macOS' }} shell: bash run: ccache -z - name: Zero out ccache if: ${{ runner.os == 'Windows' }} shell: pwsh run: ${{ github.workspace }}\ccache.exe -z