action.yml 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. name: 'Setup Cache'
  2. description: 'Sets up ccache and Bazel remote cache configuration for the build environment'
  3. inputs:
  4. version:
  5. description: 'Kernel config version (e.g., android14-6.1)'
  6. required: true
  7. kernel_version:
  8. description: 'Kernel version (e.g., 6.1)'
  9. required: true
  10. android_version:
  11. description: 'Android version (e.g., android14)'
  12. required: true
  13. sublevel:
  14. description: 'Sublevel of kernel version (e.g., 1)'
  15. required: true
  16. runs:
  17. using: 'composite'
  18. steps:
  19. - name: Setup ccache
  20. shell: bash
  21. if: |
  22. inputs.version == 'android12-5.10' ||
  23. inputs.version == 'android13-5.10' ||
  24. inputs.version == 'android13-5.15'
  25. working-directory: ${{ github.workspace }}
  26. run: |
  27. set -euo pipefail
  28. # Install ccache from shared artifact (downloaded once by prepare-ccache job)
  29. echo "Installing ccache..."
  30. if [ -s "${{ github.workspace }}/ccache-dl/ccache" ]; then
  31. sudo cp -f "${{ github.workspace }}/ccache-dl/ccache" /usr/bin/ccache || { echo "❌ Failed to install ccache"; exit 1; }
  32. sudo chmod +x /usr/bin/ccache
  33. rm -rf "${{ github.workspace }}/ccache-dl"
  34. echo "✅ installed custom ccache from shared artifact"
  35. else
  36. # Fallback: download directly (prepare-ccache may have failed)
  37. echo "⚠️ shared ccache artifact unavailable; downloading directly..."
  38. curl -LfsS --retry 5 --retry-delay 5 --retry-all-errors --connect-timeout 30 --tcp-fastopen -H "User-Agent: Mozilla/5.0" "https://github.com/WildKernels/kernel_patches/raw/refs/heads/main/ccache/ccache-x86-64" -o ccache || { echo "❌ Failed to download ccache"; exit 1; }
  39. sudo cp -f ./ccache /usr/bin/ccache || { echo "❌ Failed to install ccache"; exit 1; }
  40. sudo chmod +x /usr/bin/ccache
  41. rm -f ./ccache
  42. fi
  43. # Verify ccache
  44. if ! /usr/bin/ccache --version > /dev/null 2>&1; then
  45. echo "❌ ccache installation failed or binary is corrupted"
  46. exit 1
  47. fi
  48. echo "✅ ccache binary verified: $(/usr/bin/ccache --version | head -1)"
  49. # Setup cache directories
  50. export CCACHE_DIR="/home/runner/.ccache"
  51. echo "CCACHE_DIR=$CCACHE_DIR" >> $GITHUB_ENV
  52. mkdir -p "$CCACHE_DIR"
  53. export CCACHE_MAXSIZE="12G"
  54. echo CCACHE_MAXSIZE="$CCACHE_MAXSIZE" >> $GITHUB_ENV
  55. export CCACHE_COMPILERCHECK="content"
  56. echo CCACHE_COMPILERCHECK="$CCACHE_COMPILERCHECK" >> $GITHUB_ENV
  57. export CCACHE_BASEDIR="${{ github.workspace }}"
  58. echo CCACHE_BASEDIR="${{ github.workspace }}" >> $GITHUB_ENV
  59. export CCACHE_NOHASHDIR="true"
  60. echo CCACHE_NOHASHDIR="true" >> $GITHUB_ENV
  61. export CCACHE_IGNOREOPTIONS="--sysroot*"
  62. echo CCACHE_IGNOREOPTIONS="--sysroot*" >> $GITHUB_ENV
  63. export CCACHE_COMPRESSION="true"
  64. echo CCACHE_COMPRESSION="true" >> $GITHUB_ENV
  65. export CCACHE_COMPRESSLEVEL="3"
  66. echo CCACHE_COMPRESSION_LEVEL="3" >> $GITHUB_ENV
  67. export CCACHE_DIRECT="true"
  68. echo CCACHE_DIRECT="true" >> "$GITHUB_ENV"
  69. export CCACHE_FILE_CLONE="true"
  70. echo CCACHE_FILE_CLONE="true" >> "$GITHUB_ENV"
  71. export CCACHE_INODE_CACHE="true"
  72. echo CCACHE_INODE_CACHE="true" >> "$GITHUB_ENV"
  73. export CCACHE_IS_KERNEL_COMPILING="true"
  74. echo CCACHE_IS_KERNEL_COMPILING="true" >> $GITHUB_ENV
  75. export CCACHE_UMASK="002"
  76. echo CCACHE_UMASK="002" >> $GITHUB_ENV
  77. export CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale"
  78. echo CCACHE_SLOPPINESS="file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale" >> $GITHUB_ENV
  79. #export CCACHE_HARDLINK="true"
  80. #echo CCACHE_HARDLINK="$CCACHE_HARDLINK" >> $GITHUB_ENV
  81. if ccache --help 2>&1 | grep -q 'depend_mode'; then
  82. export CCACHE_DEPEND=true
  83. echo "CCACHE_DEPEND=true" >> "$GITHUB_ENV"
  84. fi
  85. echo "=== ccache config ==="
  86. echo "====================="
  87. ccache -p
  88. echo "====================="
  89. echo "✅ ccache ready"
  90. echo "CCACHE_DIR: $CCACHE_DIR"
  91. - name: Setup Bazel Cache
  92. shell: bash
  93. if: |
  94. inputs.version == 'android14-5.15' ||
  95. inputs.version == 'android14-6.1' ||
  96. inputs.version == 'android15-6.6' ||
  97. inputs.version == 'android16-6.12'
  98. working-directory: ${{ github.workspace }}
  99. run: |
  100. set -euo pipefail
  101. export BAZEL_CACHE_DIR="/home/runner/.cache/bazel"
  102. mkdir -p "$BAZEL_CACHE_DIR"
  103. # Set bazel disk cache size limit to 8GB
  104. #export BAZEL_DISK_CACHE_SIZE="8589934592"
  105. #echo "BAZEL_DISK_CACHE_SIZE=$BAZEL_DISK_CACHE_SIZE" >> $GITHUB_ENV
  106. #echo "✅ Bazel Cache ready (max 8GB)"
  107. echo "BAZEL_CACHE_DIR: $BAZEL_CACHE_DIR"
  108. - name: Setup ld cache
  109. shell: bash
  110. working-directory: ${{ github.workspace }}
  111. run: |
  112. set -euo pipefail
  113. export LDCACHE_DIR="/home/runner/.ld_cache"
  114. echo "LDCACHE_DIR=$LDCACHE_DIR" >> $GITHUB_ENV
  115. mkdir -p "$LDCACHE_DIR"
  116. # Create LD wrapper for thin-LTO caching
  117. cat > "${{ github.workspace }}/kernel/common/ld-wrapper" << 'EOF'
  118. #!/bin/bash
  119. ld.lld "$@" --thinlto-cache-dir="$LDCACHE_DIR" --thinlto-jobs="$(nproc --all)"
  120. EOF
  121. chmod +x "${{ github.workspace }}/kernel/common/ld-wrapper"
  122. # Set size limit via environment (4GB)
  123. echo "LDCACHE_MAX_SIZE=4294967296" >> "$GITHUB_ENV"
  124. echo "✅ LD Cache ready (max 4GB)"
  125. echo "LDCACHE_DIR: $LDCACHE_DIR"