mirror of
https://github.com/Dichgrem/GKI-build.git
synced 2025-12-16 21:52:00 -05:00
609 lines
21 KiB
YAML
609 lines
21 KiB
YAML
name: Build Android GKI Kernel
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
inputs:
|
||
enable_susfs:
|
||
description: "Enable susfs support"
|
||
required: false
|
||
default: "ture"
|
||
type: boolean
|
||
enable_bbr:
|
||
description: "Enable BBR TCP Congestion Control"
|
||
required: false
|
||
default: "true"
|
||
type: boolean
|
||
enable_zram:
|
||
description: "Enable ZRAM support"
|
||
required: false
|
||
default: "true"
|
||
type: boolean
|
||
zram_algorithm:
|
||
description: "ZRAM compression algorithm"
|
||
required: false
|
||
default: "lz4"
|
||
type: choice
|
||
options:
|
||
- lz4
|
||
- zstd
|
||
device:
|
||
description: "Target OnePlus device"
|
||
required: true
|
||
default: "corvette"
|
||
type: choice
|
||
options:
|
||
- salami # OnePlus 11
|
||
- corvette # OnePlus ACE3 Pro
|
||
config_source:
|
||
description: "Choose config source for myconfig"
|
||
required: true
|
||
default: "repo"
|
||
type: choice
|
||
options:
|
||
- repo # 使用仓库根目录下的 config
|
||
- default # 使用源码仓库的默认 defconfig(NoGKI)
|
||
root_solution:
|
||
description: "Choose root solution to integrate"
|
||
required: false
|
||
default: "sukisu"
|
||
type: choice
|
||
options:
|
||
- sukisu
|
||
- kernelsu
|
||
- kernelsu-next
|
||
- none
|
||
kernel_name:
|
||
description: "Custom kernel name (optional)"
|
||
required: false
|
||
default: "GKI"
|
||
type: string
|
||
|
||
jobs:
|
||
build-kernel:
|
||
runs-on: ubuntu-latest
|
||
env:
|
||
ARCH: arm64
|
||
SUBARCH: arm64
|
||
WORKDIR: ${{ github.workspace }}/kernel
|
||
steps:
|
||
- name: Checkout repository
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Install dependencies
|
||
run: |
|
||
sudo apt-get update
|
||
sudo apt-get install -y \
|
||
bc bison build-essential cpio curl flex \
|
||
git libncurses-dev libssl-dev \
|
||
libelf-dev lzop python3 unzip xz-utils \
|
||
zstd rsync ca-certificates wget \
|
||
pahole dwarves zip gcc g++
|
||
|
||
# 验证GCC版本
|
||
gcc --version
|
||
|
||
- name: Setup directory structure
|
||
run: |
|
||
# 创建与本地一致的目录结构
|
||
mkdir -p $GITHUB_WORKSPACE/kernel/toolchains
|
||
mkdir -p $GITHUB_WORKSPACE/kernel/source
|
||
mkdir -p $GITHUB_WORKSPACE/kernel/anykernel3
|
||
mkdir -p $GITHUB_WORKSPACE/kernel/output
|
||
|
||
echo "=== Created directory structure ==="
|
||
ls -la $GITHUB_WORKSPACE/kernel/
|
||
|
||
- name: Setup toolchains
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel
|
||
|
||
echo "=== 下载 Clang 工具链 ==="
|
||
# 创建 Clang 目录
|
||
mkdir -p ./toolchains/clang-21
|
||
|
||
# 下载 Clang 工具链
|
||
cd toolchains
|
||
wget -q https://github.com/ZyCromerZ/Clang/releases/download/21.0.0git-20250701-release/Clang-21.0.0git-20250701.tar.gz
|
||
# 检查下载是否成功
|
||
if [ ! -f "Clang-21.0.0git-20250701.tar.gz" ]; then
|
||
echo "Error: Clang 工具链下载失败"
|
||
exit 1
|
||
fi
|
||
|
||
echo "=== 解压 Clang 工具链 ==="
|
||
# 解压到 clang-21 目录
|
||
tar -xzf Clang-21.0.0git-20250701.tar.gz -C clang-21
|
||
|
||
# 检查解压后的目录结构
|
||
echo "=== 检查解压后的目录结构 ==="
|
||
ls -la clang-21/
|
||
|
||
# 清理下载的压缩包
|
||
rm -f Clang-21.0.0git-20250701.tar.gz
|
||
|
||
# 返回 kernel 目录
|
||
cd $GITHUB_WORKSPACE/kernel
|
||
|
||
echo "=== 最终目录结构 ==="
|
||
echo "kernel/"
|
||
ls -la ./
|
||
echo "kernel/toolchains/"
|
||
ls -la ./toolchains/
|
||
echo "工具链设置完成 ==="
|
||
|
||
- name: Determine kernel repo & branch
|
||
id: vars
|
||
run: |
|
||
DEV=${{ github.event.inputs.device }}
|
||
case "$DEV" in
|
||
corvette)
|
||
REPO=https://github.com/crdroidandroid/android_kernel_oneplus_sm8650.git
|
||
DEVICE_CODENAME=corvette
|
||
DEVICE_NAME="OnePlus ACE3 Pro"
|
||
SOC_PLATFORM=sm8650
|
||
KERNEL_DIR=android_kernel_oneplus_sm8650
|
||
;;
|
||
salami)
|
||
REPO=https://github.com/crdroidandroid/android_kernel_oneplus_sm8550.git
|
||
DEVICE_CODENAME=salami
|
||
DEVICE_NAME="OnePlus 11"
|
||
SOC_PLATFORM=sm8550
|
||
KERNEL_DIR=android_kernel_oneplus_sm8550
|
||
;;
|
||
*)
|
||
echo "Unsupported device: $DEV"
|
||
exit 1
|
||
;;
|
||
esac
|
||
echo "REPO=$REPO" >> $GITHUB_ENV
|
||
echo "DEVICE_CODENAME=$DEVICE_CODENAME" >> $GITHUB_ENV
|
||
echo "DEVICE_NAME=$DEVICE_NAME" >> $GITHUB_ENV
|
||
echo "SOC_PLATFORM=$SOC_PLATFORM" >> $GITHUB_ENV
|
||
echo "KERNEL_DIR=$KERNEL_DIR" >> $GITHUB_ENV
|
||
|
||
echo "=== Device Configuration ==="
|
||
echo "Device: $DEVICE_NAME ($DEVICE_CODENAME)"
|
||
echo "SoC Platform: $SOC_PLATFORM"
|
||
echo "Repository: $REPO"
|
||
echo "Kernel Directory: $KERNEL_DIR"
|
||
|
||
- name: Clone Kernel Source
|
||
run: |
|
||
mkdir -p "$WORKDIR/source"
|
||
if [ -z "$BRANCH" ]; then
|
||
echo "BRANCH 未设置,自动检测默认分支..."
|
||
BRANCH=$(git ls-remote --symref "$REPO" HEAD | awk '/^ref:/ {sub("refs/heads/", "", $2); print $2; exit}')
|
||
echo "检测到默认分支为: $BRANCH"
|
||
fi
|
||
|
||
echo "Cloning $REPO branch $BRANCH into $WORKDIR/source/$KERNEL_DIR"
|
||
git clone --depth=1 \
|
||
--branch "$BRANCH" \
|
||
"$REPO" \
|
||
"$WORKDIR/source/$KERNEL_DIR"
|
||
|
||
echo "=== 内核源码目录结构 ==="
|
||
ls -la "$WORKDIR/source/"
|
||
|
||
- name: Clone AnyKernel3
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel
|
||
git clone --depth=1 https://github.com/osm0sis/AnyKernel3.git ./anykernel3
|
||
|
||
echo "=== AnyKernel3 目录结构 ==="
|
||
ls -la ./anykernel3/
|
||
|
||
- name: Copy and configure kernel config
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel
|
||
|
||
if [ "${{ github.event.inputs.config_source }}" = "repo" ]; then
|
||
echo "👉 使用仓库 config 目录下的 config_${{ github.event.inputs.device }} 作为 myconfig"
|
||
|
||
# 检查对应设备的配置文件是否存在
|
||
CONFIG_FILE="config/config_${{ github.event.inputs.device }}"
|
||
if [ ! -f "$GITHUB_WORKSPACE/$CONFIG_FILE" ]; then
|
||
echo "❌ 错误:配置文件 $CONFIG_FILE 不存在"
|
||
echo "可用的配置文件:"
|
||
ls -la "$GITHUB_WORKSPACE/config/"
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ 找到配置文件: $CONFIG_FILE"
|
||
cp "$GITHUB_WORKSPACE/$CONFIG_FILE" "source/$KERNEL_DIR/myconfig"
|
||
|
||
else
|
||
echo "👉 使用源码仓库的默认 arm64 defconfig 生成 myconfig"
|
||
cd source/$KERNEL_DIR
|
||
|
||
# 使用默认的 arm64 defconfig
|
||
make O=out ARCH=arm64 defconfig
|
||
|
||
# 将生成的 .config 重命名为 myconfig
|
||
cp out/.config myconfig
|
||
|
||
# 回到 kernel 根目录
|
||
cd $GITHUB_WORKSPACE/kernel
|
||
fi
|
||
|
||
cd source/$KERNEL_DIR
|
||
|
||
# Configure susfs if enabled
|
||
if [ "${{ inputs.enable_susfs }}" = "true" ];then
|
||
echo "=== Enabling susfs support ==="
|
||
cat >> myconfig << EOF
|
||
CONFIG_MODULES=y
|
||
CONFIG_KPROBES=y
|
||
CONFIG_HAVE_KPROBES=y
|
||
CONFIG_KPROBE_EVENTS=y
|
||
CONFIG_OVERLAY_FS=y
|
||
CONFIG_KSU=y
|
||
CONFIG_KSU_SUSFS=y
|
||
CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=y
|
||
CONFIG_KSU_SUSFS_SUS_PATH=y
|
||
CONFIG_KSU_SUSFS_SUS_MOUNT=y
|
||
CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y
|
||
CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT=y
|
||
CONFIG_KSU_SUSFS_SUS_KSTAT=y
|
||
CONFIG_KSU_SUSFS_SUS_OVERLAYFS=y
|
||
CONFIG_KSU_SUSFS_TRY_UMOUNT=y
|
||
CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=y
|
||
CONFIG_KSU_SUSFS_SPOOF_UNAME=y
|
||
CONFIG_KSU_SUSFS_ENABLE_LOG=y
|
||
CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y
|
||
CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y
|
||
CONFIG_KSU_SUSFS_OPEN_REDIRECT=y
|
||
CONFIG_KSU_SUSFS_SUS_SU=y
|
||
CONFIG_TMPFS_XATTR=y
|
||
CONFIG_TMPFS_POSIX_ACL=y
|
||
EOF
|
||
fi
|
||
|
||
# Configure BBR if enabled
|
||
if [ "${{ inputs.enable_bbr }}" = "true" ]; then
|
||
echo "=== Enabling BBR TCP Congestion Control ==="
|
||
cat >> myconfig << EOF
|
||
|
||
# BBR TCP Congestion Control
|
||
CONFIG_TCP_CONG_ADVANCED=y
|
||
CONFIG_TCP_CONG_BBR=y
|
||
CONFIG_DEFAULT_TCP_CONG="bbr"
|
||
CONFIG_DEFAULT_BBR=y
|
||
# CONFIG_DEFAULT_CUBIC is not set
|
||
# CONFIG_DEFAULT_RENO is not set
|
||
EOF
|
||
fi
|
||
|
||
# Configure ZRAM if enabled
|
||
if [ "${{ inputs.enable_zram }}" = "true" ]; then
|
||
echo "=== Enabling ZRAM with ${{ inputs.zram_algorithm }} compression ==="
|
||
cat >> myconfig << EOF
|
||
|
||
# ZRAM Support
|
||
CONFIG_ZRAM=y
|
||
CONFIG_ZRAM_DEF_COMP_LZ4=y
|
||
CONFIG_ZRAM_WRITEBACK=y
|
||
CONFIG_ZRAM_MEMORY_TRACKING=y
|
||
CONFIG_ZSMALLOC=y
|
||
CONFIG_ZSMALLOC_STAT=y
|
||
EOF
|
||
|
||
# Configure compression algorithm
|
||
if [ "${{ inputs.zram_algorithm }}" = "zstd" ]; then
|
||
cat >> myconfig << EOF
|
||
CONFIG_CRYPTO_ZSTD=y
|
||
CONFIG_ZRAM_DEF_COMP="zstd"
|
||
CONFIG_ZRAM_DEF_COMP_ZSTD=y
|
||
# CONFIG_ZRAM_DEF_COMP_LZ4 is not set
|
||
EOF
|
||
else
|
||
cat >> myconfig << EOF
|
||
CONFIG_CRYPTO_LZ4=y
|
||
CONFIG_CRYPTO_LZ4HC=y
|
||
CONFIG_ZRAM_DEF_COMP="lz4"
|
||
CONFIG_ZRAM_DEF_COMP_LZ4=y
|
||
EOF
|
||
fi
|
||
fi
|
||
|
||
# ThinLTO Support
|
||
echo "=== Enabling ThinLTO ==="
|
||
cat >> myconfig << 'EOF'
|
||
# ThinLTO (Link Time Optimization)
|
||
CONFIG_CC_IS_CLANG=y
|
||
CONFIG_CLANG_VERSION_CHECK=y
|
||
CONFIG_LTO_CLANG=y
|
||
CONFIG_THINLTO=y
|
||
EOF
|
||
|
||
echo "=== Configuration Summary ==="
|
||
echo "Device: $DEVICE_NAME ($DEVICE_CODENAME)"
|
||
echo "SoC Platform: $SOC_PLATFORM"
|
||
echo "BBR Enabled: ${{ inputs.enable_bbr }}"
|
||
echo "ZRAM Enabled: ${{ inputs.enable_zram }}"
|
||
echo "ZRAM Algorithm: ${{ inputs.zram_algorithm }}"
|
||
echo "Susfs Enabled: ${{ inputs.enable_susfs }}"
|
||
|
||
- name: Install root solution
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel/source/$KERNEL_DIR
|
||
export KCONFIG_CONFIG=myconfig
|
||
|
||
echo "👉 选择的 Root 方案:${{ github.event.inputs.root_solution }}"
|
||
if [ "${{ github.event.inputs.root_solution }}" = "kernelsu" ]; then
|
||
echo "✅ 集成 KernelSU"
|
||
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
|
||
echo "ROOT_SUFFIX=_KernelSU" >> $GITHUB_ENV
|
||
elif [ "${{ github.event.inputs.root_solution }}" = "kernelsu-next" ]; then
|
||
echo "✅ 集成 KernelSU-Next"
|
||
curl -LSs "https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/next/kernel/setup.sh" | bash -
|
||
echo "ROOT_SUFFIX=_KernelSU-Next" >> $GITHUB_ENV
|
||
elif [ "${{ github.event.inputs.root_solution }}" = "sukisu" ]; then
|
||
echo "✅ 集成 SukiSU-Ultra"
|
||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||
echo "ROOT_SUFFIX=_SukiSU" >> $GITHUB_ENV
|
||
elif [ "${{ github.event.inputs.root_solution }}" = "none" ]; then
|
||
echo "ℹ️ 未选择任何 Root 方案,跳过"
|
||
else
|
||
echo "❌ 未知的 root_solution: ${{ github.event.inputs.root_solution }}"
|
||
exit 1
|
||
fi
|
||
|
||
- name: Susfs patch
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel/source/$KERNEL_DIR
|
||
|
||
if [ "${{ inputs.enable_susfs }}" = "true" ]; then
|
||
# 获取内核版本,例如 "6.1.130"
|
||
KERNEL_VER=$(make kernelversion)
|
||
echo "🔍 Detected kernel version: $KERNEL_VER"
|
||
|
||
# 提取主版本和次版本,生成分支名
|
||
KERNEL_MAJOR=$(echo "$KERNEL_VER" | cut -d. -f1)
|
||
KERNEL_MINOR=$(echo "$KERNEL_VER" | cut -d. -f2)
|
||
|
||
# 自动推测 Android 版本(你可以改为硬编码映射表以更严谨)
|
||
if [ "$KERNEL_MAJOR" = "6" ] && [ "$KERNEL_MINOR" = "1" ]; then
|
||
SUSFS_BRANCH="gki-android14-6.1"
|
||
SUSFS_PATCH="50_add_susfs_in_gki-android14-6.1.patch"
|
||
elif [ "$KERNEL_MAJOR" = "5" ] && [ "$KERNEL_MINOR" = "15" ]; then
|
||
SUSFS_BRANCH="gki-android14-5.15"
|
||
SUSFS_PATCH="50_add_susfs_in_gki-android14-5.15.patch"
|
||
elif [ "$KERNEL_MAJOR" = "5" ] && [ "$KERNEL_MINOR" = "10" ]; then
|
||
SUSFS_BRANCH="gki-android13-5.10"
|
||
SUSFS_PATCH="50_add_susfs_in_gki-android13-5.10.patch"
|
||
else
|
||
echo "❌ Unsupported kernel version: $KERNEL_VER"
|
||
exit 1
|
||
fi
|
||
|
||
echo "🌿 Cloning susfs4ksu branch: $SUSFS_BRANCH"
|
||
git clone https://gitlab.com/simonpunk/susfs4ksu.git
|
||
cd susfs4ksu
|
||
git switch $SUSFS_BRANCH || { echo "❌ Failed to switch to branch $SUSFS_BRANCH"; exit 1; }
|
||
cd ..
|
||
|
||
echo "📁 Copying susfs source and headers"
|
||
cp susfs4ksu/kernel_patches/fs/* fs/
|
||
cp susfs4ksu/kernel_patches/include/linux/* include/linux/
|
||
|
||
echo "📦 Applying patch: $SUSFS_PATCH"
|
||
cp susfs4ksu/kernel_patches/$SUSFS_PATCH .
|
||
patch -p1 < $SUSFS_PATCH || { echo "❌ Failed to apply patch: $SUSFS_PATCH"; exit 1; }
|
||
|
||
echo "✅ Susfs patch applied successfully"
|
||
else
|
||
echo "ℹ️ 未启用 Susfs,跳过补丁步骤"
|
||
fi
|
||
|
||
- name: Build kernel
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel/source/$KERNEL_DIR
|
||
|
||
# 记录开始时间
|
||
starttime=$(date +'%Y-%m-%d %H:%M:%S')
|
||
echo "Build started at: $starttime"
|
||
echo "Building for: $DEVICE_NAME ($DEVICE_CODENAME) - $SOC_PLATFORM"
|
||
|
||
# 设置环境变量
|
||
export ARCH=arm64
|
||
export SUBARCH=arm64
|
||
export KCONFIG_CONFIG=$PWD/myconfig
|
||
|
||
# 设置工具链路径变量
|
||
export CLANG_PATH=$GITHUB_WORKSPACE/kernel/toolchains/clang-21/bin
|
||
export PATH=$CLANG_PATH:$PATH
|
||
|
||
# 验证所有必需的工具
|
||
echo "=== 验证编译器路径 ==="
|
||
which clang
|
||
clang --version
|
||
echo "=== 验证 clang 是否支持 --target ==="
|
||
clang --target=aarch64-linux-gnu -fsyntax-only -x c /dev/null || echo "❌ clang 不支持 aarch64 目标"
|
||
echo "=== 验证 binutils 是否可用 ==="
|
||
which llvm-objcopy
|
||
which llvm-strip
|
||
|
||
# 清理构建目录
|
||
rm -rf out && mkdir -p out
|
||
|
||
# 生成默认配置
|
||
make O=out KCONFIG_CONFIG=$KCONFIG_CONFIG olddefconfig
|
||
|
||
# 编译内核
|
||
make -j$(nproc) O=out \
|
||
LLVM=1 \
|
||
LTO=thin \
|
||
WERROR=0 \
|
||
KBUILD_NO_WERROR=1 \
|
||
CC=clang \
|
||
AR=llvm-ar \
|
||
LD=ld.lld \
|
||
NM=llvm-nm \
|
||
OBJCOPY=llvm-objcopy \
|
||
OBJDUMP=llvm-objdump \
|
||
STRIP=llvm-strip \
|
||
HOSTCC=clang \
|
||
HOSTCXX=clang++ \
|
||
CROSS_COMPILE= \
|
||
CROSS_COMPILE_ARM32=arm-linux-androideabi- \
|
||
KCFLAGS="--target=aarch64-linux-gnu -O3 -pipe -Wno-error" \
|
||
KCPPFLAGS="-DCONFIG_CC_OPTIMIZE_FOR_PERFORMANCE" \
|
||
HOSTCFLAGS="-O3 -pipe -Wno-error" \
|
||
HOSTCXXFLAGS="-O3 -pipe -Wno-error" \
|
||
2>&1 | tee out/error.log
|
||
|
||
tail -n 100 out/error.log
|
||
|
||
# 记录结束时间
|
||
endtime=$(date +'%Y-%m-%d %H:%M:%S')
|
||
echo "Build started at: $starttime"
|
||
echo "Build finished at: $endtime"
|
||
|
||
- name: Check build results
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel/source/$KERNEL_DIR
|
||
echo "=== Build Results ==="
|
||
if [ -f "out/arch/arm64/boot/Image" ]; then
|
||
echo "✅ Kernel build successful!"
|
||
ls -la out/arch/arm64/boot/
|
||
ls -la out/vmlinux
|
||
echo "Image size: $(du -h out/arch/arm64/boot/Image)"
|
||
else
|
||
echo "❌ Kernel build failed!"
|
||
echo "=== Last 100 lines of error log ==="
|
||
tail -100 out/error.log
|
||
echo "=== Error summary ==="
|
||
grep -i "error\|failed\|stop" out/error.log | tail -10
|
||
exit 1
|
||
fi
|
||
|
||
- name: Prepare AnyKernel3 package
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel
|
||
|
||
# 设置内核名称
|
||
KERNEL_NAME="${{ inputs.kernel_name }}"
|
||
if [ -z "$KERNEL_NAME" ]; then
|
||
KERNEL_NAME="CustomKernel"
|
||
fi
|
||
|
||
# 获取内核版本信息
|
||
cd source/$KERNEL_DIR
|
||
KERNEL_VERSION=$(make kernelversion 2>/dev/null || echo "unknown")
|
||
BUILD_DATE=$(date +'%Y%m%d_%H%M')
|
||
|
||
cd $GITHUB_WORKSPACE/kernel
|
||
|
||
echo "=== 准备 AnyKernel3 打包 ==="
|
||
echo "内核名称: $KERNEL_NAME"
|
||
echo "内核版本: $KERNEL_VERSION"
|
||
echo "构建日期: $BUILD_DATE"
|
||
echo "目标设备: $DEVICE_NAME ($DEVICE_CODENAME)"
|
||
echo "SoC平台: $SOC_PLATFORM"
|
||
|
||
# 复制 AnyKernel3 模板到输出目录
|
||
cp -r anykernel3/* output/
|
||
|
||
# 复制内核文件
|
||
cp source/$KERNEL_DIR/out/arch/arm64/boot/Image output/
|
||
|
||
# 修改 AnyKernel3 配置
|
||
cd output && rm -rf ramdisk patch modules
|
||
|
||
# 创建更新信息文件
|
||
cat > kernel_info.txt << EOF
|
||
Kernel Name: $KERNEL_NAME
|
||
Kernel Version: $KERNEL_VERSION
|
||
Build Date: $BUILD_DATE
|
||
Target Device: $DEVICE_NAME ($DEVICE_CODENAME)
|
||
SoC Platform: $SOC_PLATFORM
|
||
BBR Enabled: ${{ inputs.enable_bbr }}
|
||
ZRAM Enabled: ${{ inputs.enable_zram }}
|
||
ZRAM Algorithm: ${{ inputs.zram_algorithm }}
|
||
Root Solution: ${{ inputs.root_solution }}
|
||
Compiler: Clang 21.0.0
|
||
Architecture: ARM64
|
||
EOF
|
||
|
||
echo "=== AnyKernel3 准备完成 ==="
|
||
ls -la ./
|
||
|
||
- name: Create AnyKernel3 ZIP package
|
||
run: |
|
||
cd $GITHUB_WORKSPACE/kernel/output
|
||
|
||
# 设置包名
|
||
KERNEL_NAME="${{ inputs.kernel_name }}"
|
||
if [ -z "$KERNEL_NAME" ]; then
|
||
KERNEL_NAME="CustomKernel"
|
||
fi
|
||
|
||
BUILD_DATE=$(date +'%Y%m%d_%H%M')
|
||
BBR_SUFFIX=""
|
||
if [ "${{ inputs.enable_bbr }}" = "true" ]; then
|
||
BBR_SUFFIX="_BBR"
|
||
fi
|
||
|
||
SUSFS_NAME=""
|
||
if [ "${{ inputs.enable_susfs }}" = "true" ]; then
|
||
BBR_SUFFIX="_Susfs"
|
||
fi
|
||
|
||
ZIP_NAME="${KERNEL_NAME}_${DEVICE_CODENAME}${BBR_SUFFIX}${ROOT_SUFFIX}${SUSFS_NAME}_${BUILD_DATE}.zip"
|
||
|
||
echo "=== 创建 ZIP 包: $ZIP_NAME ==="
|
||
|
||
# 创建 ZIP 包
|
||
zip -r9 "$ZIP_NAME" . -x "*.bak" "*.zip"
|
||
|
||
# 验证 ZIP 包
|
||
if [ -f "$ZIP_NAME" ]; then
|
||
echo "✅ ZIP 包创建成功!"
|
||
echo "包名: $ZIP_NAME"
|
||
echo "大小: $(du -h "$ZIP_NAME")"
|
||
|
||
# 显示 ZIP 包内容
|
||
echo "=== ZIP 包内容 ==="
|
||
unzip -l "$ZIP_NAME" | head -20
|
||
else
|
||
echo "❌ ZIP 包创建失败!"
|
||
exit 1
|
||
fi
|
||
|
||
# 保存包名供后续步骤使用
|
||
echo "ZIP_NAME=$ZIP_NAME" >> $GITHUB_ENV
|
||
|
||
- name: Compress vmlinux
|
||
if: always()
|
||
run: |
|
||
VMLINUX=kernel/source/${{ env.KERNEL_DIR }}/out/vmlinux
|
||
if [ -f "$VMLINUX" ]; then
|
||
echo "✅ vmlinux exists, compressing..."
|
||
gzip -c "$VMLINUX" > "${VMLINUX}.gz"
|
||
else
|
||
echo "⚠️ vmlinux not found, skipping compression"
|
||
fi
|
||
|
||
- name: Upload build artifacts
|
||
uses: actions/upload-artifact@v4
|
||
if: always()
|
||
with:
|
||
name: kernel-build-${{ env.DEVICE_CODENAME }}-${{ github.run_number }}
|
||
path: |
|
||
kernel/source/${{ env.KERNEL_DIR }}/out/arch/arm64/boot/Image*
|
||
kernel/source/${{ env.KERNEL_DIR }}/out/arch/arm64/boot/dts/*/*.dtb
|
||
kernel/source/${{ env.KERNEL_DIR }}/out/vmlinux.gz
|
||
kernel/source/${{ env.KERNEL_DIR }}/out/error.log
|
||
kernel/source/${{ env.KERNEL_DIR }}/out/.config
|
||
kernel/output/*.zip
|
||
kernel/output/kernel_info.txt
|
||
|
||
- name: Upload AnyKernel3 ZIP
|
||
uses: actions/upload-artifact@v4
|
||
if: success()
|
||
with:
|
||
name: ${{ env.ZIP_NAME }}
|
||
path: kernel/output/${{ env.ZIP_NAME }}
|
||
retention-days: 25
|