Переглянути джерело

feat(action): enhance build process with ccache support and remove disk cleanup action

Co-authored-by: Copilot <copilot@github.com>
TheWildJames 4 місяців тому
батько
коміт
aa93bb1dc5

+ 7 - 2
.github/actions/build-kernel/action.yml

@@ -8,9 +8,14 @@ runs:
       working-directory: ${{ github.workspace }}/kernel
       run: |
         set -euo pipefail
+        export CCACHE_DIR="$GITHUB_WORKSPACE/.ccache"
+        export PATH="/usr/lib/ccache:$PATH"
+        # For build.sh, force CC/CXX to use ccache
+        export CC="ccache gcc"
+        export CXX="ccache g++"
         if [ -f "build/build.sh" ]; then
-          SKIP_MRPROPER=1 GKI_DEFCONFIG_FRAGMENT="$GITHUB_WORKSPACE/wild_gki.fragment" BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
+          SKIP_MRPROPER=1 GKI_DEFCONFIG_FRAGMENT="$GITHUB_WORKSPACE/wild_gki.fragment" BUILD_CONFIG=common/build.config.gki.aarch64 CC="$CC" CXX="$CXX" build/build.sh
         else
           cp "$GITHUB_WORKSPACE/wild_gki.fragment" common/arch/arm64/configs/wild_gki.fragment
-          tools/bazel build --config=release --stamp --notrim --defconfig_fragment=//common:arch/arm64/configs/wild_gki.fragment //common:kernel_aarch64_dist
+          tools/bazel build --config=release --stamp --notrim --use_ccache --defconfig_fragment=//common:arch/arm64/configs/wild_gki.fragment //common:kernel_aarch64_dist
         fi

+ 0 - 59
.github/actions/disk-cleanup/action.yml

@@ -1,59 +0,0 @@
-name: 'Disk Cleanup'
-description: 'Free up disk space by removing unnecessary software and files.'
-runs:
-  using: 'composite'
-  steps:
-    - name: Disk Cleanup by Deleting files
-      shell: bash
-      run: |
-        # Disk Cleanup by Deleting files
-        echo "::group::Disk Cleanup by Deleting files"
-        
-        echo "Instant relocation of unnecessary software..."
-        mkdir -p .background_trash/{1..18}
-        
-        safe_mv() {
-          if [ -e "$1" ]; then
-            sudo mv "$1" "$2"
-          fi
-        }
-        export -f safe_mv
-        
-        safe_mv /usr/share/dotnet ./.background_trash/1 &
-        safe_mv /usr/local/lib/android ./.background_trash/2 &
-        safe_mv /opt/ghc ./.background_trash/3 &
-        safe_mv /opt/hostedtoolcache/CodeQL ./.background_trash/4 &
-        safe_mv /usr/local/aws-sam-cli ./.background_trash/5 &
-        safe_mv /usr/local/share/chromium ./.background_trash/6 &
-        safe_mv /usr/local/share/powershell ./.background_trash/7 &
-        safe_mv /usr/local/lib/heroku ./.background_trash/8 &
-        safe_mv /usr/local/lib/node_modules ./.background_trash/9 &
-        safe_mv /opt/az ./.background_trash/10 &
-        safe_mv /opt/microsoft/powershell ./.background_trash/11 &
-        safe_mv /opt/hostedtoolcache/go ./.background_trash/12 &
-        safe_mv /opt/hostedtoolcache/PyPy ./.background_trash/13 &
-        safe_mv /opt/hostedtoolcache/node ./.background_trash/14 &
-        
-        sudo bash -c 'mv /usr/local/bin/aliyun /usr/local/bin/azcopy /usr/local/bin/bicep /usr/local/bin/cmake-gui /usr/local/bin/cpack /usr/local/bin/helm \
-        /usr/local/bin/hub /usr/local/bin/kubectl /usr/local/bin/minikube /usr/local/bin/node /usr/local/bin/packer /usr/local/bin/sam \
-        /usr/local/bin/stack /usr/local/bin/terraform /usr/local/bin/oc ./.background_trash/15 2>/dev/null || true' &
-        
-        sudo bash -c 'mv /usr/local/julia* ./.background_trash/16 2>/dev/null || true' &
-        sudo bash -c 'mv /usr/local/bin/pulumi* ./.background_trash/17 2>/dev/null || true' &
-        wait
-        
-        echo "Relocation complete."
-        echo "Launching background purge..."
-        (
-          sudo nice -n 19 ionice -c 3 rm -rf ./.background_trash
-          sudo apt-get purge -y firefox google-chrome-stable microsoft-edge-stable > /dev/null 2>&1 || true
-          sudo apt-get autoremove -y > /dev/null 2>&1 || true
-          sudo apt-get clean > /dev/null 2>&1 || true
-          if command -v docker >/dev/null 2>&1; then
-            docker rmi $(docker images -q) 2>/dev/null || true
-          fi
-        ) > /dev/null 2>&1 &
-        
-        disown
-        
-        echo "::endgroup::"

+ 14 - 0
.github/actions/setup-build-environment/action.yml

@@ -13,6 +13,20 @@ runs:
       run: |
         set -euo pipefail
 
+        # Setup ccache for both build.sh and Bazel
+        sudo apt-get update && sudo apt-get install -y ccache
+        export CCACHE_DIR="$GITHUB_WORKSPACE/.ccache"
+        export CC="ccache gcc"
+        export CXX="ccache g++"
+        echo "CCACHE_DIR=$GITHUB_WORKSPACE/.ccache" >> "$GITHUB_ENV"
+        echo "CC='ccache gcc'" >> "$GITHUB_ENV"
+        echo "CXX='ccache g++'" >> "$GITHUB_ENV"
+        echo "$GITHUB_WORKSPACE/.ccache" > "$GITHUB_PATH"
+
+        # For Bazel (kleaf), set up remote and disk cache if needed
+        echo "BAZEL_CACHE_DIR=$GITHUB_WORKSPACE/.cache/bazel" >> "$GITHUB_ENV"
+        mkdir -p "$GITHUB_WORKSPACE/.cache/bazel"
+
         mkdir -p "$GITHUB_WORKSPACE/kernel"
         mkdir -p "$GITHUB_WORKSPACE/git-repo"
         curl -L https://storage.googleapis.com/git-repo-downloads/repo -o "$GITHUB_WORKSPACE/git-repo/repo"

+ 60 - 4
.github/workflows/build.yml

@@ -62,10 +62,6 @@ jobs:
         rmz_version: "3.1.1"  # Required when rm_cmd is 'rmz'
         testing: false
 
-    - name: Disk Cleanup by Deleting files
-      if: false
-      uses: ./.github/actions/disk-cleanup
-
     - name: Setup more Swap (for LTO)
       uses: thejerrybao/setup-swap-space@v1   # or pierotofy/set-swap-space
       with:
@@ -202,12 +198,72 @@ jobs:
       run: |
         grep -n 'vm_flags_clear' ${{ github.workspace }}/kernel/common/mm/mmap.c || echo 'Not found'
 
+
+    - name: Restore build caches (ccache, Bazel)
+      uses: actions/cache@v4
+      with:
+        path: |
+          .ccache
+          bazel-*
+          .cache/bazel
+        key: buildcache-${{ inputs.kernel_version }}
+        restore-keys: |
+          buildcache-
+
+    - name: ♻️ Configure ccache (bounded)
+      run: |
+        echo "::group::Configure ccache environment"
+        set -euo pipefail
+        if command -v ccache >/dev/null 2>&1; then
+          CACHE_DIR="${{ github.workspace }}/.ccache"
+          mkdir -p "$CACHE_DIR"
+          SETTINGS=(
+            "CCACHE_DIR=$CACHE_DIR"
+            "CCACHE_MAXSIZE=1G"
+            "CCACHE_COMPILERCHECK=content"
+            "CCACHE_BASEDIR=${GITHUB_WORKSPACE}"
+            "CCACHE_NOHASHDIR=true"
+            "CCACHE_IGNOREOPTIONS=--sysroot*"
+            "CCACHE_COMPRESSION=true"
+            "CCACHE_COMPRESSION_LEVEL=3"
+            "CCACHE_DIRECT=true"
+            "CCACHE_FILE_CLONE=true"
+            "CCACHE_INODE_CACHE=true"
+            "CCACHE_UMASK=002"
+            "CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,pch_defines,system_headers,locale"
+          )
+          for setting in "${SETTINGS[@]}"; do
+            export "$setting"
+            echo "$setting" >> "$GITHUB_ENV"
+          done
+          if ccache --help 2>&1 | grep -q 'depend_mode'; then
+            export CCACHE_DEPEND=true
+            echo "CCACHE_DEPEND=true" >> "$GITHUB_ENV"
+          fi
+          echo "✅ ccache configured successfully"
+          echo "Current ccache configuration:"
+          ccache -p
+        else
+          echo "ccache not found, skipping configuration."
+        fi
+        echo "::endgroup::"
+
     - name: Build Kernel
       env:
         SOURCE_DATE_EPOCH: ${{ env.SOURCE_DATE_EPOCH }}
         KBUILD_BUILD_TIMESTAMP: ${{ env.KBUILD_BUILD_TIMESTAMP }}
       uses: ./.github/actions/build-kernel
 
+    - name: Save build caches (ccache, Bazel)
+      if: always()
+      uses: actions/cache@v4
+      with:
+        path: |
+          .ccache
+          bazel-*
+          .cache/bazel
+        key: buildcache-${{ inputs.kernel_version }}
+
     - name: Create Bootimgs Folder and Build Boot Images
       uses: ./.github/actions/build-boot-images