diff --git a/.github/actions/xahau-ga-build/action.yml b/.github/actions/xahau-ga-build/action.yml index a7bd7ace4..247d3af85 100644 --- a/.github/actions/xahau-ga-build/action.yml +++ b/.github/actions/xahau-ga-build/action.yml @@ -75,37 +75,17 @@ runs: SAFE_BRANCH=$(echo "${{ github.ref_name }}" | tr -c 'a-zA-Z0-9_.-' '-') echo "name=${SAFE_BRANCH}" >> $GITHUB_OUTPUT - - name: Restore ccache directory for main branch - if: inputs.gha_cache_enabled == 'true' && inputs.ccache_enabled == 'true' - id: ccache-restore - uses: ./.github/actions/xahau-ga-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 }}- - cache-type: ccache-main - - - name: Restore ccache directory for current branch - if: inputs.gha_cache_enabled == 'true' && inputs.ccache_enabled == 'true' && steps.safe-branch.outputs.name != inputs.main_branch - id: ccache-restore-current-branch - uses: ./.github/actions/xahau-ga-cache-restore - with: - path: ~/.ccache-current - 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 }} - ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ inputs.configuration }}- - ${{ runner.os }}-ccache-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}- - cache-type: ccache-current - - name: Configure ccache if: inputs.ccache_enabled == 'true' shell: bash run: | # Create cache directories - mkdir -p ~/.ccache-main ~/.ccache-current + mkdir -p ~/.ccache-cache + + # Keep config separate from cache_dir so configs aren't swapped when CCACHE_DIR changes between steps + mkdir -p ~/.config/ccache + export CCACHE_CONFIGPATH="$HOME/.config/ccache/ccache.conf" + echo "CCACHE_CONFIGPATH=$CCACHE_CONFIGPATH" >> $GITHUB_ENV # Keep config separate from cache_dir so configs aren't swapped when CCACHE_DIR changes between steps mkdir -p ~/.config/ccache @@ -116,20 +96,9 @@ runs: ccache --set-config=max_size=${{ inputs.ccache_max_size }} ccache --set-config=hash_dir=${{ inputs.ccache_hash_dir }} ccache --set-config=compiler_check=${{ inputs.ccache_compiler_check }} - - # Determine if we're on the main branch - if [ "${{ steps.safe-branch.outputs.name }}" = "${{ inputs.main_branch }}" ]; then - # Main branch: use main branch cache only - ccache --set-config=cache_dir="$HOME/.ccache-main" - echo "CCACHE_DIR=$HOME/.ccache-main" >> $GITHUB_ENV - echo "📦 Main branch: using ~/.ccache-main" - else - # Feature branch: use current branch cache with main as secondary (read-only fallback) - ccache --set-config=cache_dir="$HOME/.ccache-current" - ccache --set-config=secondary_storage="file:$HOME/.ccache-main" - echo "CCACHE_DIR=$HOME/.ccache-current" >> $GITHUB_ENV - echo "📦 Feature branch: using ~/.ccache-current with ~/.ccache-main as secondary" - fi + ccache --set-config=cache_dir="$HOME/.ccache-cache" + echo "CCACHE_DIR=$HOME/.ccache-cache" >> $GITHUB_ENV + echo "📦 using ~/.ccache-cache as ccache cache directory" # Print config for verification echo "=== ccache configuration ===" @@ -244,17 +213,3 @@ runs: if: inputs.ccache_enabled == 'true' shell: bash run: ccache -s - - - name: Save ccache directory for main branch - if: success() && inputs.gha_cache_enabled == 'true' && inputs.ccache_enabled == 'true' && steps.safe-branch.outputs.name == inputs.main_branch - uses: actions/cache/save@v4 - with: - path: ~/.ccache-main - key: ${{ steps.ccache-restore.outputs.cache-primary-key }} - - - name: Save ccache directory for current branch - if: success() && inputs.gha_cache_enabled == 'true' && inputs.ccache_enabled == 'true' && steps.safe-branch.outputs.name != inputs.main_branch - uses: actions/cache/save@v4 - with: - path: ~/.ccache-current - key: ${{ steps.ccache-restore-current-branch.outputs.cache-primary-key }} diff --git a/.github/actions/xahau-ga-dependencies/action.yml b/.github/actions/xahau-ga-dependencies/action.yml index 6a491f9f2..376448ff6 100644 --- a/.github/actions/xahau-ga-dependencies/action.yml +++ b/.github/actions/xahau-ga-dependencies/action.yml @@ -17,10 +17,6 @@ inputs: description: 'Cache version for invalidation' required: false default: '1' - gha_cache_enabled: - description: 'Whether to use actions/cache (disable for self-hosted with volume mounts)' - required: false - default: 'true' main_branch: description: 'Main branch name for restore keys' required: false @@ -63,18 +59,14 @@ outputs: runs: using: 'composite' steps: - - name: Restore Conan cache - if: inputs.gha_cache_enabled == 'true' - id: cache-restore-conan - uses: ./.github/actions/xahau-ga-cache-restore - with: - path: ~/.conan2 - # Note: compiler-id format is compiler-version-stdlib[-gccversion] - key: ${{ runner.os }}-conan-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ hashFiles('**/conanfile.py') }}-${{ inputs.configuration }} - restore-keys: | - ${{ runner.os }}-conan-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ hashFiles('**/conanfile.py') }}- - ${{ runner.os }}-conan-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}- - cache-type: Conan + - name: Configure Conan cache paths + if: inputs.os == 'Linux' + shell: bash + run: | + mkdir -p /.conan-cache/conan2 /.conan-cache/conan2_download /.conan-cache/conan2_sources + echo 'core.cache:storage_path=/.conan-cache/conan2' > ~/.conan2/global.conf + echo 'core.download:download_cache=/.conan-cache/conan2_download' >> ~/.conan2/global.conf + echo 'core.sources:download_cache=/.conan-cache/conan2_sources' >> ~/.conan2/global.conf - name: Configure Conan cache paths if: inputs.gha_cache_enabled == 'false' @@ -161,10 +153,3 @@ runs: --build missing \ --settings build_type=${{ inputs.configuration }} \ .. - - - name: Save Conan cache - if: success() && inputs.gha_cache_enabled == 'true' && steps.cache-restore-conan.outputs.cache-hit != 'true' - uses: actions/cache/save@v4 - with: - path: ~/.conan2 - key: ${{ steps.cache-restore-conan.outputs.cache-primary-key }} diff --git a/.github/workflows/xahau-ga-macos.yml b/.github/workflows/xahau-ga-macos.yml index 4ade81978..8615a773a 100644 --- a/.github/workflows/xahau-ga-macos.yml +++ b/.github/workflows/xahau-ga-macos.yml @@ -20,7 +20,7 @@ jobs: - Ninja configuration: - Debug - runs-on: macos-15 + runs-on: [self-hosted, macOS] env: build_dir: .build # Bump this number to invalidate all caches globally. @@ -30,61 +30,29 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Get commit message - id: get-commit-message - uses: ./.github/actions/xahau-ga-get-commit-message - with: - event-name: ${{ github.event_name }} - head-commit-message: ${{ github.event.head_commit.message }} - pr-head-sha: ${{ github.event.pull_request.head.sha }} - - - name: Install Conan + - name: Add Homebrew to PATH run: | - brew install conan - # Verify Conan 2 is installed - conan --version + echo "/opt/homebrew/bin" >> "$GITHUB_PATH" + echo "/opt/homebrew/sbin" >> "$GITHUB_PATH" - name: Install Coreutils run: | brew install coreutils echo "Num proc: $(nproc)" - - name: Install Ninja - if: matrix.generator == 'Ninja' - run: brew install ninja + # To isolate environments for each Runner, instead of installing globally with brew, + # use mise to isolate environments for each Runner directory. + - name: Setup toolchain (mise) + uses: jdx/mise-action@v2 + with: + install: true - - name: Install Python + - name: Install tools via mise run: | - if which python3 > /dev/null 2>&1; then - echo "Python 3 executable exists" - python3 --version - else - brew install python@3.12 - fi - # Create 'python' symlink if it doesn't exist (for tools expecting 'python') - if ! which python > /dev/null 2>&1; then - sudo ln -sf $(which python3) /usr/local/bin/python - fi - - - name: Install CMake - run: | - # Install CMake 3.x to match local dev environments - # With Conan 2 and the policy args passed to CMake, newer versions - # can have issues with dependencies that require cmake_minimum_required < 3.5 - brew uninstall cmake --ignore-dependencies 2>/dev/null || true - - # Download and install CMake 3.31.7 directly - curl -L https://github.com/Kitware/CMake/releases/download/v3.31.7/cmake-3.31.7-macos-universal.tar.gz -o cmake.tar.gz - tar -xzf cmake.tar.gz - - # Move the entire CMake.app to /Applications - sudo mv cmake-3.31.7-macos-universal/CMake.app /Applications/ - - echo "/Applications/CMake.app/Contents/bin" >> $GITHUB_PATH - /Applications/CMake.app/Contents/bin/cmake --version - - - name: Install ccache - run: brew install ccache + mise install + mise use cmake@3.23.1 python@3.12 pipx@latest conan@2 ninja@latest ccache@latest + mise reshim + echo "$HOME/.local/share/mise/shims" >> "$GITHUB_PATH" - name: Check environment run: | @@ -98,6 +66,14 @@ jobs: echo "---- Full Environment ----" env + - name: Get commit message + id: get-commit-message + uses: ./.github/actions/xahau-ga-get-commit-message + with: + event-name: ${{ github.event_name }} + head-commit-message: ${{ github.event.head_commit.message }} + pr-head-sha: ${{ github.event.pull_request.head.sha }} + - name: Detect compiler version id: detect-compiler run: | @@ -129,6 +105,7 @@ jobs: cache_version: ${{ env.CACHE_VERSION }} main_branch: ${{ env.MAIN_BRANCH_NAME }} stdlib: libcxx + ccache_max_size: '100G' - name: Test run: | diff --git a/.github/workflows/xahau-ga-nix.yml b/.github/workflows/xahau-ga-nix.yml index c63cbe1fe..6477d2cbe 100644 --- a/.github/workflows/xahau-ga-nix.yml +++ b/.github/workflows/xahau-ga-nix.yml @@ -181,8 +181,7 @@ jobs: image: ubuntu:24.04 volumes: - /home/runner/.conan-cache:/.conan-cache - - /home/runner/.ccache-main:/github/home/.ccache-main - - /home/runner/.ccache-current:/github/home/.ccache-current + - /home/runner/.ccache-cache:/github/home/.ccache-cache defaults: run: shell: bash @@ -325,7 +324,6 @@ jobs: main_branch: ${{ env.MAIN_BRANCH_NAME }} stdlib: ${{ matrix.stdlib }} clang_gcc_toolchain: ${{ matrix.clang_gcc_toolchain || '' }} - gha_cache_enabled: 'false' # Disable caching for self hosted runner ccache_max_size: '100G' - name: Set artifact name