Compare commits

..

3 Commits

Author SHA1 Message Date
tequ
10cf8d8a01 Merge branch 'dev' into ccache-100G 2025-12-01 20:18:07 +09:00
tequ
693b42a530 Merge branch 'dev' into ccache-100G 2025-11-27 10:39:21 +09:00
tequ
6e78104e3d Increase ccache size from 10G to 100G in release-builder.sh for improved build performance 2025-11-26 15:52:02 +09:00
6 changed files with 144 additions and 78 deletions

View File

@@ -71,25 +71,56 @@ runs:
SAFE_BRANCH=$(echo "${{ github.ref_name }}" | tr -c 'a-zA-Z0-9_.-' '-') SAFE_BRANCH=$(echo "${{ github.ref_name }}" | tr -c 'a-zA-Z0-9_.-' '-')
echo "name=${SAFE_BRANCH}" >> $GITHUB_OUTPUT echo "name=${SAFE_BRANCH}" >> $GITHUB_OUTPUT
- name: Restore ccache directory for main branch
if: 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.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 - name: Configure ccache
if: inputs.ccache_enabled == 'true' if: inputs.ccache_enabled == 'true'
shell: bash shell: bash
run: | run: |
# Create cache directories # Create cache directories
mkdir -p ~/.ccache-cache mkdir -p ~/.ccache-main ~/.ccache-current
# 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
# Configure ccache settings AFTER cache restore (prevents stale cached config) # Configure ccache settings AFTER cache restore (prevents stale cached config)
ccache --set-config=max_size=${{ inputs.ccache_max_size }} ccache --set-config=max_size=${{ inputs.ccache_max_size }}
ccache --set-config=hash_dir=${{ inputs.ccache_hash_dir }} ccache --set-config=hash_dir=${{ inputs.ccache_hash_dir }}
ccache --set-config=compiler_check=${{ inputs.ccache_compiler_check }} ccache --set-config=compiler_check=${{ inputs.ccache_compiler_check }}
ccache --set-config=cache_dir="$HOME/.ccache-cache"
echo "CCACHE_DIR=$HOME/.ccache-cache" >> $GITHUB_ENV # Determine if we're on the main branch
echo "📦 using ~/.ccache-cache as ccache cache directory" 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
# Print config for verification # Print config for verification
echo "=== ccache configuration ===" echo "=== ccache configuration ==="
@@ -204,3 +235,17 @@ runs:
if: inputs.ccache_enabled == 'true' if: inputs.ccache_enabled == 'true'
shell: bash shell: bash
run: ccache -s run: ccache -s
- name: Save ccache directory for main branch
if: success() && 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.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 }}

View File

@@ -17,6 +17,10 @@ inputs:
description: 'Cache version for invalidation' description: 'Cache version for invalidation'
required: false required: false
default: '1' default: '1'
cache_enabled:
description: 'Whether to use caching'
required: false
default: 'true'
main_branch: main_branch:
description: 'Main branch name for restore keys' description: 'Main branch name for restore keys'
required: false required: false
@@ -59,14 +63,18 @@ outputs:
runs: runs:
using: 'composite' using: 'composite'
steps: steps:
- name: Configure Conan cache paths - name: Restore Conan cache
if: inputs.os == 'Linux' if: inputs.cache_enabled == 'true'
shell: bash id: cache-restore-conan
run: | uses: ./.github/actions/xahau-ga-cache-restore
mkdir -p /.conan-cache/conan2 /.conan-cache/conan2_download /.conan-cache/conan2_sources with:
echo 'core.cache:storage_path=/.conan-cache/conan2' > ~/.conan2/global.conf path: ~/.conan2
echo 'core.download:download_cache=/.conan-cache/conan2_download' >> ~/.conan2/global.conf # Note: compiler-id format is compiler-version-stdlib[-gccversion]
echo 'core.sources:download_cache=/.conan-cache/conan2_sources' >> ~/.conan2/global.conf 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 - name: Configure Conan
shell: bash shell: bash
@@ -142,3 +150,10 @@ runs:
--build missing \ --build missing \
--settings build_type=${{ inputs.configuration }} \ --settings build_type=${{ inputs.configuration }} \
.. ..
- name: Save Conan cache
if: success() && inputs.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 }}

View File

@@ -33,7 +33,7 @@ jobs:
fetch-depth: 2 # Only get the last 2 commits, to avoid fetching all history fetch-depth: 2 # Only get the last 2 commits, to avoid fetching all history
build: build:
runs-on: [self-hosted, xahaud-build] runs-on: [self-hosted, vanity]
needs: [checkout] needs: [checkout]
defaults: defaults:
run: run:
@@ -74,7 +74,7 @@ jobs:
fi fi
tests: tests:
runs-on: [self-hosted, xahaud-build] runs-on: [self-hosted, vanity]
needs: [build, checkout] needs: [build, checkout]
defaults: defaults:
run: run:
@@ -84,7 +84,7 @@ jobs:
run: /bin/bash docker-unit-tests.sh run: /bin/bash docker-unit-tests.sh
cleanup: cleanup:
runs-on: [self-hosted, xahaud-build] runs-on: [self-hosted, vanity]
needs: [tests, checkout] needs: [tests, checkout]
if: always() if: always()
steps: steps:

View File

@@ -20,7 +20,7 @@ jobs:
- Ninja - Ninja
configuration: configuration:
- Debug - Debug
runs-on: [self-hosted, macOS] runs-on: macos-15
env: env:
build_dir: .build build_dir: .build
# Bump this number to invalidate all caches globally. # Bump this number to invalidate all caches globally.
@@ -30,29 +30,61 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Add Homebrew to PATH - 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
run: | run: |
echo "/opt/homebrew/bin" >> "$GITHUB_PATH" brew install conan
echo "/opt/homebrew/sbin" >> "$GITHUB_PATH" # Verify Conan 2 is installed
conan --version
- name: Install Coreutils - name: Install Coreutils
run: | run: |
brew install coreutils brew install coreutils
echo "Num proc: $(nproc)" echo "Num proc: $(nproc)"
# To isolate environments for each Runner, instead of installing globally with brew, - name: Install Ninja
# use mise to isolate environments for each Runner directory. if: matrix.generator == 'Ninja'
- name: Setup toolchain (mise) run: brew install ninja
uses: jdx/mise-action@v2
with:
install: true
- name: Install tools via mise - name: Install Python
run: | run: |
mise install if which python3 > /dev/null 2>&1; then
mise use cmake@3.23.1 python@3.12 pipx@latest conan@2 ninja@latest ccache@latest echo "Python 3 executable exists"
mise reshim python3 --version
echo "$HOME/.local/share/mise/shims" >> "$GITHUB_PATH" 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
- name: Check environment - name: Check environment
run: | run: |
@@ -66,14 +98,6 @@ jobs:
echo "---- Full Environment ----" echo "---- Full Environment ----"
env 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 - name: Detect compiler version
id: detect-compiler id: detect-compiler
run: | run: |
@@ -105,7 +129,6 @@ jobs:
cache_version: ${{ env.CACHE_VERSION }} cache_version: ${{ env.CACHE_VERSION }}
main_branch: ${{ env.MAIN_BRANCH_NAME }} main_branch: ${{ env.MAIN_BRANCH_NAME }}
stdlib: libcxx stdlib: libcxx
ccache_max_size: '100G'
- name: Test - name: Test
run: | run: |

View File

@@ -14,7 +14,7 @@ concurrency:
jobs: jobs:
matrix-setup: matrix-setup:
runs-on: [self-hosted, generic, 20.04] runs-on: ubuntu-latest
container: python:3-slim container: python:3-slim
outputs: outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }} matrix: ${{ steps.set-matrix.outputs.matrix }}
@@ -176,15 +176,7 @@ jobs:
build: build:
needs: matrix-setup needs: matrix-setup
runs-on: [self-hosted, generic, 20.04] runs-on: ubuntu-latest
container:
image: ubuntu:24.04
volumes:
- /home/runner/.conan-cache:/.conan-cache
- /home/runner/.ccache-cache:/github/home/.ccache-cache
defaults:
run:
shell: bash
outputs: outputs:
artifact_name: ${{ steps.set-artifact-name.outputs.artifact_name }} artifact_name: ${{ steps.set-artifact-name.outputs.artifact_name }}
strategy: strategy:
@@ -199,22 +191,23 @@ jobs:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 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 build dependencies - name: Install build dependencies
run: | run: |
apt-get update sudo apt-get update
apt-get install -y software-properties-common sudo apt-get install -y ninja-build ${{ matrix.cc }} ${{ matrix.cxx }} ccache
add-apt-repository ppa:ubuntu-toolchain-r/test -y
apt-get update
apt-get install -y python3 python-is-python3 pipx
pipx ensurepath
apt-get install -y cmake ninja-build ${{ matrix.cc }} ${{ matrix.cxx }} ccache
apt-get install -y perl # for openssl build
apt-get install -y libsqlite3-dev # for xahaud build
# Install the specific GCC version needed for Clang # Install the specific GCC version needed for Clang
if [ -n "${{ matrix.clang_gcc_toolchain }}" ]; then if [ -n "${{ matrix.clang_gcc_toolchain }}" ]; then
echo "=== Installing GCC ${{ matrix.clang_gcc_toolchain }} for Clang ===" echo "=== Installing GCC ${{ matrix.clang_gcc_toolchain }} for Clang ==="
apt-get install -y gcc-${{ matrix.clang_gcc_toolchain }} g++-${{ matrix.clang_gcc_toolchain }} libstdc++-${{ matrix.clang_gcc_toolchain }}-dev sudo apt-get install -y gcc-${{ matrix.clang_gcc_toolchain }} g++-${{ matrix.clang_gcc_toolchain }} libstdc++-${{ matrix.clang_gcc_toolchain }}-dev
echo "=== GCC versions available after installation ===" echo "=== GCC versions available after installation ==="
ls -la /usr/lib/gcc/x86_64-linux-gnu/ | grep -E "^d" ls -la /usr/lib/gcc/x86_64-linux-gnu/ | grep -E "^d"
@@ -245,7 +238,7 @@ jobs:
echo "Hiding GCC $version -> renaming to $counter (will be seen as GCC version $counter)" echo "Hiding GCC $version -> renaming to $counter (will be seen as GCC version $counter)"
# Safety check: ensure target doesn't already exist # Safety check: ensure target doesn't already exist
if [ ! -e "/usr/lib/gcc/x86_64-linux-gnu/$counter" ]; then if [ ! -e "/usr/lib/gcc/x86_64-linux-gnu/$counter" ]; then
mv "$dir" "/usr/lib/gcc/x86_64-linux-gnu/$counter" sudo mv "$dir" "/usr/lib/gcc/x86_64-linux-gnu/$counter"
else else
echo "ERROR: Cannot rename GCC $version - /usr/lib/gcc/x86_64-linux-gnu/$counter already exists" echo "ERROR: Cannot rename GCC $version - /usr/lib/gcc/x86_64-linux-gnu/$counter already exists"
exit 1 exit 1
@@ -269,12 +262,11 @@ jobs:
# Install libc++ dev packages if using libc++ (not needed for libstdc++) # Install libc++ dev packages if using libc++ (not needed for libstdc++)
if [ "${{ matrix.stdlib }}" = "libcxx" ]; then if [ "${{ matrix.stdlib }}" = "libcxx" ]; then
apt-get install -y libc++-${{ matrix.compiler_version }}-dev libc++abi-${{ matrix.compiler_version }}-dev sudo apt-get install -y libc++-${{ matrix.compiler_version }}-dev libc++abi-${{ matrix.compiler_version }}-dev
fi fi
# Install Conan 2 # Install Conan 2
pipx install "conan>=2.0,<3" pip install --upgrade "conan>=2.0,<3"
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Check environment - name: Check environment
run: | run: |
@@ -288,14 +280,6 @@ jobs:
echo "---- Full Environment ----" echo "---- Full Environment ----"
env 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: Install dependencies - name: Install dependencies
uses: ./.github/actions/xahau-ga-dependencies uses: ./.github/actions/xahau-ga-dependencies
with: with:
@@ -323,7 +307,6 @@ jobs:
main_branch: ${{ env.MAIN_BRANCH_NAME }} main_branch: ${{ env.MAIN_BRANCH_NAME }}
stdlib: ${{ matrix.stdlib }} stdlib: ${{ matrix.stdlib }}
clang_gcc_toolchain: ${{ matrix.clang_gcc_toolchain || '' }} clang_gcc_toolchain: ${{ matrix.clang_gcc_toolchain || '' }}
ccache_max_size: '100G'
- name: Set artifact name - name: Set artifact name
id: set-artifact-name id: set-artifact-name

View File

@@ -192,7 +192,7 @@ ENV PATH=/usr/local/bin:$PATH
# Configure ccache and Conan 2 # Configure ccache and Conan 2
# NOTE: Using echo commands instead of heredocs because heredocs in Docker RUN commands are finnicky # NOTE: Using echo commands instead of heredocs because heredocs in Docker RUN commands are finnicky
RUN /hbb_exe/activate-exec bash -c "ccache -M 10G && \ RUN /hbb_exe/activate-exec bash -c "ccache -M 100G && \
ccache -o cache_dir=/cache/ccache && \ ccache -o cache_dir=/cache/ccache && \
ccache -o compiler_check=content && \ ccache -o compiler_check=content && \
mkdir -p ~/.conan2 /cache/conan2 /cache/conan2_download /cache/conan2_sources && \ mkdir -p ~/.conan2 /cache/conan2 /cache/conan2_download /cache/conan2_sources && \