diff --git a/.github/workflows/build-kernel.yml b/.github/workflows/build-kernel.yml index f378a85..cf2b5f5 100644 --- a/.github/workflows/build-kernel.yml +++ b/.github/workflows/build-kernel.yml @@ -71,7 +71,6 @@ jobs: sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100 - - name: 📥 Download kernel tarball if: ${{ inputs.url != '' || (inputs.tag == '' && github.event_name == 'pull_request') }} id: download_tarball @@ -195,22 +194,6 @@ jobs: sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100 - - name: 📊 Audit Runner Resources & Toolchain - run: | - echo "=========================================" - echo "🖥️ HOST RUNNER DISK SPACE:" - df -h - echo "=========================================" - echo "🧠 MEMORY & SWAP STATUS:" - free -h 2>/dev/null || grep -E "MemTotal|MemAvailable|SwapTotal|SwapFree" /proc/meminfo - echo "=========================================" - echo "🛠️ TOOLCHAIN VERSIONS:" - echo "GCC: $(gcc --version | head -n1)" - echo "G++: $(g++ --version | head -n1)" - echo "Pahole: $(pahole --version 2>&1 || echo "Not found")" - echo "=========================================" - sync - - name: 📥 Download prepared kernel source uses: actions/download-artifact@v8 with: @@ -223,12 +206,73 @@ jobs: shell: bash run: | set -o pipefail + export DEB_BUILD_OPTIONS="parallel=$(nproc)" + chmod -R +x scripts/ find . -type f \( -name "*.sh" -o -name "*.pl" -o -name "*.py" \) -exec chmod +x {} + + KERNEL_VER=$(make kernelversion) LOCAL_VER="$KERNEL_LOCALVERSION" - make -j$(nproc) bindeb-pkg KCFLAGS="$ARCH_FLAGS" LOCALVERSION="$LOCAL_VER" KDEB_PKGVERSION="$KERNEL_VER$LOCAL_VER" 2>&1 | tee ../build.log + + echo "=========================================" + echo "🐧 Environment Build" + echo "=========================================" + echo "Kernel version : $KERNEL_VER" + echo "Local version : $LOCAL_VER" + echo "Architecture : $ARCH_FLAGS" + echo "Build jobs : $(nproc)" + echo "GCC : $(gcc --version | head -n1)" + echo "G++ : $(g++ --version | head -n1)" + echo "Pahole : $(pahole --version 2>&1 || echo 'Not found')" + echo "Make : $(make --version | head -n1)" + echo "=========================================" + + BUILD_LOG="../build.log" + ERROR_LOG="../build-error.log" + + rm -f "$BUILD_LOG" "$ERROR_LOG" + + echo "🚀 Starting kernel compilation..." + + if make -j$(nproc) bindeb-pkg \ + KCFLAGS="$ARCH_FLAGS" \ + LOCALVERSION="$LOCAL_VER" \ + KDEB_PKGVERSION="$KERNEL_VER$LOCAL_VER" 2>&1 | tee "$BUILD_LOG" + then + echo "=========================================" + echo "✅ Kernel compilation completed successfully" + echo "=========================================" + else + BUILD_EXIT=${PIPESTATUS[0]} + + echo "=========================================" + echo "❌ Kernel compilation FAILED" + echo "Exit code: $BUILD_EXIT" + echo "=========================================" + + { + echo "=========================================" + echo "POSSIBLE ROOT CAUSES" + echo "=========================================" + + grep -nEi \ + '(^|[[:space:]])(error|fatal):|undefined reference|cannot find|No such file|Killed|out of memory|oom|pahole|BTF|DWARF|segmentation fault|internal compiler error' \ + "$BUILD_LOG" || true + + echo + echo "=========================================" + echo "LAST 150 LINES" + echo "=========================================" + + tail -n 150 "$BUILD_LOG" + } > "$ERROR_LOG" + + echo + cat "$ERROR_LOG" + + exit "$BUILD_EXIT" + fi - name: 🆔 Get compiled kernel version if: ${{ github.event_name != 'pull_request' }} @@ -237,14 +281,32 @@ jobs: run: | echo "version=$(make kernelrelease)" >> $GITHUB_OUTPUT - - name: 📦 Move .deb & log artifacts (Robust Error Handling) - if: ${{ github.event_name != 'pull_request' }} + - name: 📦 Move .deb & log artifacts + if: ${{ github.event_name != 'pull_request' && always() }} run: | mkdir -p artifacts - find . -name "*.deb" -exec cp {} artifacts/ \; - find . -name "*.changes" -exec cp {} artifacts/ \; - find . -name "*.buildinfo" -exec cp {} artifacts/ \; - if [ -f build.log ]; then cp build.log artifacts/; fi + + echo "📦 Collecting build artifacts..." + + find kernel_build -name "*.deb" -exec cp {} artifacts/ \; || true + find kernel_build -name "*.changes" -exec cp {} artifacts/ \; || true + find kernel_build -name "*.buildinfo" -exec cp {} artifacts/ \; || true + + if [ -f build.log ]; then + cp build.log artifacts/build.log + echo "✅ build.log saved" + fi + + if [ -f build-error.log ]; then + cp build-error.log artifacts/build-error.log + echo "❌ build-error.log saved" + fi + + echo + echo "=========================================" + echo "📁 Collected artifacts" + echo "=========================================" + ls -lh artifacts/ - name: 📤 Upload compiled kernel artifacts if: ${{ github.event_name != 'pull_request' && always() }} @@ -387,15 +449,17 @@ jobs: BUILD_STATUS: ${{ needs.build-and-release.result }} KERNEL_VERSION: ${{ needs.build-and-release.outputs.kernel_version }} PKG_DESCRIPTION: ${{ needs.build-and-release.outputs.release_description }} + KERNEL_CONFIG: ${{ env.KERNEL_CONFIG }} + KERNEL_URL: ${{ env.KERNEL_URL }} + KERNEL_TAG: ${{ env.KERNEL_TAG }} + KERNEL_LOCALVERSION: ${{ env.KERNEL_LOCALVERSION }} + KERNEL_PATCH: ${{ env.KERNEL_PATCH }} run: | RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" - if [ -f artifacts/build.log ]; then - cp artifacts/build.log build.log - fi - if [ "$BUILD_STATUS" = "success" ]; then CLEAN_DESC=$(echo "$PKG_DESCRIPTION" | sed 's/&/\&/g; s//\>/g') + if [ -z "$CLEAN_DESC" ]; then CLEAN_DESC=" - No disponible" fi @@ -412,17 +476,32 @@ jobs: else ERROR_LOG="" - if [ -f build.log ]; then - ERROR_SNIPPET=$(tail -n 12 build.log | sed 's/&/\&/g; s//\>/g') + + if [ -f artifacts/build-error.log ]; then + ERROR_SNIPPET=$(tail -n 40 artifacts/build-error.log | sed 's/&/\&/g; s//\>/g') + + ERROR_LOG=" + 📋 Diagnóstico del error: +
${ERROR_SNIPPET}
" + + elif [ -f artifacts/build.log ]; then + ERROR_SNIPPET=$(tail -n 40 artifacts/build.log | sed 's/&/\&/g; s//\>/g') + + ERROR_LOG=" + 📋 Últimas líneas del build.log: +
${ERROR_SNIPPET}
" + + else ERROR_LOG=" - 📋 Últimas líneas del log de error: -
${ERROR_SNIPPET}
" + ⚠️ No se encontró ningún log de compilación." fi SRC_INFO="${KERNEL_TAG}" + if [ -z "$SRC_INFO" ]; then SRC_INFO="${KERNEL_URL}" fi + if [ -z "$SRC_INFO" ]; then SRC_INFO="No especificado" fi @@ -433,13 +512,16 @@ jobs: • Config: ${KERNEL_CONFIG:-N/A} • Origen: ${SRC_INFO} • Localversion: ${KERNEL_LOCALVERSION:-Ninguna} - • Parche: ${KERNEL_PATCH:-Ninguno}${ERROR_LOG} + • Parche: ${KERNEL_PATCH:-Ninguno} + ${ERROR_LOG} 🏷️ Workflow: 🔗 Ver logs completos en GitHub Actions" fi - curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ + curl -s -X POST \ + "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ --data-urlencode "chat_id=${TELEGRAM_CHATID}" \ --data-urlencode "parse_mode=HTML" \ - --data-urlencode "text=$MESSAGE" >/dev/null 2>&1 + --data-urlencode "text=$MESSAGE" \ + >/dev/null 2>&1