@@ -133,15 +133,35 @@ jobs:
133133 - name : Install NSIS
134134 run : choco install nsis --x86 --force -y
135135
136- - name : Setup ccache
137- uses : hendrikmuhs/ccache-action@v1.2
136+ - name : Cache ccache
137+ uses : actions/cache@v4
138138 with :
139- key : ${{ runner.os }}-mingw64-ccache
140- restore-keys : ${{ runner.os }}-mingw64-ccache
141- max-size : 2G
142- verbose : 2
143- create-symlink : true
144- job-summary : " 🔧 ccache Statistics"
139+ path : D:/a/_temp/ccache
140+ key : ${{ runner.os }}-mingw64-ccache-${{ hashFiles('src/**/*.cpp', 'src/**/*.c', 'src/**/*.h') }}
141+ restore-keys : |
142+ ${{ runner.os }}-mingw64-ccache-
143+
144+ - name : Setup ccache
145+ shell : msys2 {0}
146+ run : |
147+ echo "=== ccache Setup ==="
148+ ccache --version
149+
150+ # Ensure cache directory exists and use Windows-compatible path
151+ export CCACHE_DIR="/d/a/_temp/ccache"
152+ mkdir -p "$CCACHE_DIR"
153+
154+ ccache --zero-stats
155+ ccache --set-config=max_size=2G
156+ ccache --set-config=cache_dir="$CCACHE_DIR"
157+ ccache --set-config=compression=true
158+
159+ echo "CCACHE_DIR=$CCACHE_DIR" >> $GITHUB_ENV
160+
161+ echo "=== ccache Configuration ==="
162+ ccache --show-config
163+ echo "Cache directory: $CCACHE_DIR"
164+ ls -la "$CCACHE_DIR" || echo "Cache directory not accessible"
145165
146166
147167 - name : Cache FetchContent dependencies
@@ -191,7 +211,7 @@ jobs:
191211 echo "QT_ROOT_DIR_MSYS: '$QT_ROOT_DIR_MSYS'"
192212 echo "Qt6_DIR: '$Qt6_DIR'"
193213
194- # ccache is automatically configured by the hendrikmuhs/ccache-action
214+ # ccache is configured manually for MSYS2 compatibility
195215 echo "=== ccache Setup Debug ==="
196216 echo "ccache available: $(which ccache || echo 'not found')"
197217 if command -v ccache >/dev/null 2>&1; then
@@ -276,7 +296,55 @@ jobs:
276296 cmake --build . --parallel $(nproc) -- VERBOSE=1
277297
278298 echo "=== Build Complete ==="
279- echo "ccache statistics will be shown in job summary by ccache-action"
299+ if command -v ccache >/dev/null 2>&1; then
300+ echo "=== Final ccache Statistics ==="
301+ ccache --show-stats
302+ fi
303+
304+ - name : Generate ccache Statistics Summary
305+ shell : msys2 {0}
306+ run : |
307+ echo "## 🔧 ccache Build Statistics" >> $GITHUB_STEP_SUMMARY
308+ echo "" >> $GITHUB_STEP_SUMMARY
309+ if command -v ccache >/dev/null 2>&1; then
310+ # Get ccache statistics
311+ STATS=$(ccache --show-stats)
312+
313+ # Extract key metrics
314+ CACHE_HITS=$(echo "$STATS" | grep -E "cache hit" | head -1 | awk '{print $1}')
315+ CACHE_MISSES=$(echo "$STATS" | grep -E "cache miss" | head -1 | awk '{print $1}')
316+ TOTAL_CALLS=$((CACHE_HITS + CACHE_MISSES))
317+
318+ if [ $TOTAL_CALLS -gt 0 ]; then
319+ HIT_RATE=$(awk "BEGIN {printf \"%.1f\", ($CACHE_HITS/$TOTAL_CALLS)*100}")
320+ else
321+ HIT_RATE="0.0"
322+ fi
323+
324+ # Get cache size info
325+ CACHE_SIZE=$(echo "$STATS" | grep -E "cache size" | awk '{print $3 " " $4}')
326+ MAX_CACHE_SIZE=$(ccache --show-config | grep max_size | cut -d'=' -f2 | tr -d ' ')
327+
328+ echo "| Metric | Value |" >> $GITHUB_STEP_SUMMARY
329+ echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
330+ echo "| Cache Hits | $CACHE_HITS |" >> $GITHUB_STEP_SUMMARY
331+ echo "| Cache Misses | $CACHE_MISSES |" >> $GITHUB_STEP_SUMMARY
332+ echo "| Hit Rate | $HIT_RATE% |" >> $GITHUB_STEP_SUMMARY
333+ echo "| Cache Size | $CACHE_SIZE |" >> $GITHUB_STEP_SUMMARY
334+ echo "| Max Cache Size | $MAX_CACHE_SIZE |" >> $GITHUB_STEP_SUMMARY
335+ echo "" >> $GITHUB_STEP_SUMMARY
336+
337+ # Add performance indicator
338+ if (( $(echo "$HIT_RATE > 50" | bc -l) )); then
339+ echo "🚀 **Excellent cache performance!**" >> $GITHUB_STEP_SUMMARY
340+ elif (( $(echo "$HIT_RATE > 20" | bc -l) )); then
341+ echo "✅ **Good cache performance**" >> $GITHUB_STEP_SUMMARY
342+ else
343+ echo "🔄 **Building cache for future runs**" >> $GITHUB_STEP_SUMMARY
344+ fi
345+ else
346+ echo "❌ ccache not available" >> $GITHUB_STEP_SUMMARY
347+ fi
280348
281349 - name : Create Standalone Deployment
282350 shell : msys2 {0}
0 commit comments