From 0e2bc365ea43aaa24d042b82b0a49bd5c70dae9a Mon Sep 17 00:00:00 2001 From: Nicholas Dudfield Date: Thu, 30 Oct 2025 11:24:14 +0700 Subject: [PATCH] refactor: simplify ccache to single directory with restore-keys fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed split ccache configuration (~/.ccache-main + ~/.ccache-current). The split had an edge case: building a feature branch before main branch cache is primed results in double ccache disk usage: - Feature branch builds first → populates ~/.ccache-current (2G max_size) - Main branch builds later → populates ~/.ccache-main (2G max_size) - Next feature branch build → restores both caches (4G total) This doubles ccache disk usage unnecessarily on GitHub-hosted runners. New single-directory approach: - Single ~/.ccache directory for all branches - Branch-specific keys with restore-keys fallback to main branch - Cache actions handle cross-branch sharing via partial-match mode - Simpler and prevents double disk usage edge case Changes: - xahau-configure-ccache: Single cache_dir input, removed branch logic - xahau-ga-build: Single restore/save step, uses restore-keys for fallback - xahau-ga-nix: Removed is_main_branch parameter Disk usage: 2G max (vs 4G worst case with split) --- .../actions/xahau-configure-ccache/action.yml | 61 +++++++------------ .github/actions/xahau-ga-build/action.yml | 32 ++-------- .github/workflows/xahau-ga-nix.yml | 1 - 3 files changed, 26 insertions(+), 68 deletions(-) diff --git a/.github/actions/xahau-configure-ccache/action.yml b/.github/actions/xahau-configure-ccache/action.yml index 44414b98a..2a52729c4 100644 --- a/.github/actions/xahau-configure-ccache/action.yml +++ b/.github/actions/xahau-configure-ccache/action.yml @@ -2,6 +2,10 @@ name: 'Configure ccache' description: 'Sets up ccache with consistent configuration' inputs: + cache_dir: + description: 'Path to ccache directory' + required: false + default: '~/.ccache' max_size: description: 'Maximum cache size' required: false @@ -14,18 +18,6 @@ inputs: description: 'How to check compiler for changes' required: false default: 'content' - is_main_branch: - description: 'Whether the current branch is the main branch' - required: false - default: 'false' - main_cache_dir: - description: 'Path to the main branch cache directory' - required: false - default: '~/.ccache-main' - current_cache_dir: - description: 'Path to the current branch cache directory' - required: false - default: '~/.ccache-current' runs: using: 'composite' @@ -33,31 +25,20 @@ runs: - name: Configure ccache shell: bash run: | - # Create cache directories - mkdir -p ${{ inputs.main_cache_dir }} ${{ inputs.current_cache_dir }} - - # Set compiler check globally - ccache -o compiler_check=${{ inputs.compiler_check }} - - # Use a single config file location - mkdir -p ~/.ccache - export CONF_PATH="$HOME/.ccache/ccache.conf" - - # Apply common settings - echo "max_size = ${{ inputs.max_size }}" > "$CONF_PATH" - echo "hash_dir = ${{ inputs.hash_dir }}" >> "$CONF_PATH" - echo "compiler_check = ${{ inputs.compiler_check }}" >> "$CONF_PATH" - - if [ "${{ inputs.is_main_branch }}" == "true" ]; then - # Main branch: use main branch cache - ccache --set-config=cache_dir="${{ inputs.main_cache_dir }}" - echo "CCACHE_DIR=${{ inputs.main_cache_dir }}" >> $GITHUB_ENV - else - # Feature branch: use current branch cache with main as secondary - ccache --set-config=cache_dir="${{ inputs.current_cache_dir }}" - ccache --set-config=secondary_storage="file:${{ inputs.main_cache_dir }}" - echo "CCACHE_DIR=${{ inputs.current_cache_dir }}" >> $GITHUB_ENV - fi - - ccache -p # Print config for verification - ccache -z # Zero statistics before the build \ No newline at end of file + # Create cache directory + mkdir -p ${{ inputs.cache_dir }} + + # Configure ccache settings + ccache --set-config=cache_dir="${{ inputs.cache_dir }}" + ccache --set-config=max_size=${{ inputs.max_size }} + ccache --set-config=hash_dir=${{ inputs.hash_dir }} + ccache --set-config=compiler_check=${{ inputs.compiler_check }} + + # Export for use by build tools + echo "CCACHE_DIR=${{ inputs.cache_dir }}" >> $GITHUB_ENV + + # Print config for verification + ccache -p + + # Zero statistics before the build + ccache -z \ No newline at end of file diff --git a/.github/actions/xahau-ga-build/action.yml b/.github/actions/xahau-ga-build/action.yml index cfbd8d0a7..6ea725fb5 100644 --- a/.github/actions/xahau-ga-build/action.yml +++ b/.github/actions/xahau-ga-build/action.yml @@ -65,25 +65,12 @@ runs: SAFE_BRANCH=$(echo "${{ github.ref_name }}" | tr -c 'a-zA-Z0-9_.-' '-') echo "name=${SAFE_BRANCH}" >> $GITHUB_OUTPUT - - name: Restore ccache directory for default branch + - name: Restore ccache directory if: inputs.ccache_enabled == 'true' id: ccache-restore uses: ./.github/actions/xahau-actions-cache-restore with: - path: ~/.ccache-main - key: ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ inputs.configuration }}-${{ inputs.main_branch }} - restore-keys: | - ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ inputs.configuration }}- - ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}- - aws-access-key-id: ${{ inputs.aws-access-key-id }} - aws-secret-access-key: ${{ inputs.aws-secret-access-key }} - - - name: Restore ccache directory for current branch - if: inputs.ccache_enabled == 'true' && steps.safe-branch.outputs.name != inputs.main_branch - id: ccache-restore-current-branch - uses: ./.github/actions/xahau-actions-cache-restore - with: - path: ~/.ccache-current + path: ~/.ccache key: ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ inputs.configuration }}-${{ steps.safe-branch.outputs.name }} restore-keys: | ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ inputs.configuration }}-${{ inputs.main_branch }} @@ -169,20 +156,11 @@ runs: shell: bash run: ccache -s - - name: Save ccache directory for default branch - if: always() && inputs.ccache_enabled == 'true' && steps.safe-branch.outputs.name == inputs.main_branch + - name: Save ccache directory + if: always() && inputs.ccache_enabled == 'true' uses: ./.github/actions/xahau-actions-cache-save with: - path: ~/.ccache-main - key: ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ inputs.configuration }}-${{ inputs.main_branch }} - aws-access-key-id: ${{ inputs.aws-access-key-id }} - aws-secret-access-key: ${{ inputs.aws-secret-access-key }} - - - name: Save ccache directory for current branch - if: always() && inputs.ccache_enabled == 'true' && steps.safe-branch.outputs.name != inputs.main_branch - uses: ./.github/actions/xahau-actions-cache-save - with: - path: ~/.ccache-current + path: ~/.ccache key: ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ inputs.configuration }}-${{ steps.safe-branch.outputs.name }} aws-access-key-id: ${{ inputs.aws-access-key-id }} aws-secret-access-key: ${{ inputs.aws-secret-access-key }} diff --git a/.github/workflows/xahau-ga-nix.yml b/.github/workflows/xahau-ga-nix.yml index c2c21b791..b875f9f88 100644 --- a/.github/workflows/xahau-ga-nix.yml +++ b/.github/workflows/xahau-ga-nix.yml @@ -237,7 +237,6 @@ jobs: max_size: 2G hash_dir: true compiler_check: content - is_main_branch: ${{ github.ref_name == env.MAIN_BRANCH_NAME }} - name: Configure Conan run: |