name: dependencies description: 'Installs build dependencies with caching' inputs: configuration: description: 'Build configuration (Debug, Release, etc.)' required: true build_dir: description: 'Directory to build dependencies in' required: false default: '.build' 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' cache_enabled: description: 'Whether to use caching' required: false default: 'true' main_branch: description: 'Main branch name for restore keys' required: false default: 'dev' outputs: cache-hit: description: 'Whether there was a cache hit' value: ${{ steps.cache-restore-conan.outputs.cache-hit }} runs: using: 'composite' steps: - name: Generate safe branch name if: inputs.cache_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 Conan cache if: inputs.cache_enabled == 'true' id: cache-restore-conan uses: actions/cache/restore@v4 with: path: | ~/.conan ~/.conan2 key: ${{ runner.os }}-conan-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ hashFiles('**/conanfile.txt', '**/conanfile.py') }}-${{ inputs.configuration }} restore-keys: | ${{ runner.os }}-conan-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}-${{ hashFiles('**/conanfile.txt', '**/conanfile.py') }}- ${{ runner.os }}-conan-v${{ inputs.cache_version }}-${{ inputs.compiler-id }}- - name: Export custom recipes shell: bash run: | conan export external/snappy snappy/1.1.10@xahaud/stable conan export external/soci soci/4.0.3@xahaud/stable - name: Install dependencies shell: bash run: | # Create build directory mkdir -p ${{ inputs.build_dir }} cd ${{ inputs.build_dir }} # Install dependencies using conan conan install \ --output-folder . \ --build missing \ --settings build_type=${{ inputs.configuration }} \ .. - name: Save Conan cache if: inputs.cache_enabled == 'true' && steps.cache-restore-conan.outputs.cache-hit != 'true' uses: actions/cache/save@v4 with: path: | ~/.conan ~/.conan2 key: ${{ steps.cache-restore-conan.outputs.cache-primary-key }}