mirror of
				https://github.com/Xahau/xahaud.git
				synced 2025-11-04 02:35:48 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			131 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
name: build
 | 
						|
description: 'Builds the project with ccache integration'
 | 
						|
 | 
						|
inputs:
 | 
						|
  generator:
 | 
						|
    description: 'CMake generator to use'
 | 
						|
    required: true
 | 
						|
  configuration:
 | 
						|
    description: 'Build configuration (Debug, Release, etc.)'
 | 
						|
    required: true
 | 
						|
  build_dir:
 | 
						|
    description: 'Directory to build in'
 | 
						|
    required: false
 | 
						|
    default: '.build'
 | 
						|
  cc:
 | 
						|
    description: 'C compiler to use'
 | 
						|
    required: false
 | 
						|
    default: ''
 | 
						|
  cxx:
 | 
						|
    description: 'C++ compiler to use'
 | 
						|
    required: false
 | 
						|
    default: ''
 | 
						|
  compiler-id:
 | 
						|
    description: 'Unique identifier for compiler/version combination used for cache keys'
 | 
						|
    required: false
 | 
						|
    default: ''
 | 
						|
  cache_version:
 | 
						|
    description: 'Cache version for invalidation'
 | 
						|
    required: false
 | 
						|
    default: '1'
 | 
						|
  ccache_enabled:
 | 
						|
    description: 'Whether to use ccache'
 | 
						|
    required: false
 | 
						|
    default: 'true'
 | 
						|
  main_branch:
 | 
						|
    description: 'Main branch name for restore keys'
 | 
						|
    required: false
 | 
						|
    default: 'dev'
 | 
						|
 | 
						|
runs:
 | 
						|
  using: 'composite'
 | 
						|
  steps:
 | 
						|
    - name: Generate safe branch name
 | 
						|
      if: inputs.ccache_enabled == 'true'
 | 
						|
      id: safe-branch
 | 
						|
      shell: bash
 | 
						|
      run: |
 | 
						|
        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
 | 
						|
      if: inputs.ccache_enabled == 'true'
 | 
						|
      id: ccache-restore
 | 
						|
      uses: actions/cache/restore@v4
 | 
						|
      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 }}-
 | 
						|
 | 
						|
    - 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: actions/cache/restore@v4
 | 
						|
      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 }}-
 | 
						|
 | 
						|
    - name: Configure project
 | 
						|
      shell: bash
 | 
						|
      run: |
 | 
						|
        mkdir -p ${{ inputs.build_dir }}
 | 
						|
        cd ${{ inputs.build_dir }}
 | 
						|
        
 | 
						|
        # Set compiler environment variables if provided
 | 
						|
        if [ -n "${{ inputs.cc }}" ]; then
 | 
						|
          export CC="${{ inputs.cc }}"
 | 
						|
        fi
 | 
						|
        
 | 
						|
        if [ -n "${{ inputs.cxx }}" ]; then
 | 
						|
          export CXX="${{ inputs.cxx }}"
 | 
						|
        fi
 | 
						|
        
 | 
						|
        
 | 
						|
        # Configure ccache launcher args
 | 
						|
        CCACHE_ARGS=""
 | 
						|
        if [ "${{ inputs.ccache_enabled }}" = "true" ]; then
 | 
						|
          CCACHE_ARGS="-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
 | 
						|
        fi
 | 
						|
        
 | 
						|
        # Run CMake configure
 | 
						|
        # Note: conanfile.py hardcodes 'build/generators' as the output path.
 | 
						|
        # If we're in a 'build' folder, Conan detects this and uses just 'generators/'
 | 
						|
        # If we're in '.build' (non-standard), Conan adds the full 'build/generators/'
 | 
						|
        # So we get: .build/build/generators/ with our non-standard folder name
 | 
						|
        cmake .. \
 | 
						|
          -G "${{ inputs.generator }}" \
 | 
						|
          $CCACHE_ARGS \
 | 
						|
          -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
 | 
						|
          -DCMAKE_BUILD_TYPE=${{ inputs.configuration }}
 | 
						|
 | 
						|
    - name: Build project
 | 
						|
      shell: bash
 | 
						|
      run: |
 | 
						|
        cd ${{ inputs.build_dir }}
 | 
						|
        cmake --build . --config ${{ inputs.configuration }} --parallel $(nproc)
 | 
						|
 | 
						|
    - name: Show ccache statistics
 | 
						|
      if: inputs.ccache_enabled == 'true'
 | 
						|
      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
 | 
						|
      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: always() && 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 }}
 |