Skip to content

Build SukiSU Ultra

Build SukiSU Ultra #3

name: Build OnePlus SukiSU Ultra
on:
workflow_dispatch:
inputs:
CPU:
description: "CPU分支"
required: true
type: choice
options:
- 'sm8650'
- 'mt6989'
- 'sm8635'
- 'sm8550'
- 'sm8450'
- 'sm8475'
- 'sm7675'
- 'sm7550'
- 'sm6375'
default: 'sm8650'
FEIL:
description: "手机型号"
required: true
type: choice
options:
- 'oneplus_12'
- 'oneplus_ace3_pro'
- 'oneplus_ace5'
- 'oneplus_13r'
- 'oneplus_pad2'
- 'oneplus_pad_pro'
- 'oneplus_ace5_race'
- 'oneplus_nord_5'
- 'oneplus_11'
- 'oneplus_12r'
- 'oneplus_ace2_pro'
- 'oneplus_ace3'
- 'oneplus_open'
- 'oneplus_10t'
- 'oneplus_11r'
- 'oneplus_ace2'
- 'oneplus_ace_pro'
- 'oneplus_10_pro'
- 'oneplus_ace_3v'
- 'onrplus_nord_4'
- 'oneplus_nord_ce4_lite_5g'
- 'oneplus_nord_ce4'
default: 'oneplus_12'
ANDROID_VERSION:
description: "KMI安卓版本"
required: true
type: choice
options:
- 'android14'
- 'android13'
- 'android12'
default: 'android14'
KERNEL_VERSION:
description: "内核版本"
required: true
type: choice
options:
- '6.1'
- '5.15'
- '5.10'
default: '6.1'
KPM:
description: "是否启用KPM"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
lz4kd:
description: "是否启用lz4kd(关闭则6.1系启用lz4 + zstd)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
bbr:
description: "是否启用bbr算法(优化上行数据, 对手机日用无太大意义甚至可能负优化)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'Off'
bbg:
description: "是否添加BBG防格机模块"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
proxy:
description: "是否添加代理性能优化(MTK系列跑的时候请关闭否则出现恶性bug)"
required: true
type: choice
options:
- 'On'
- 'Off'
default: 'On'
jobs:
build:
name: For ${{ github.event.inputs.FEIL }} KPM ${{ github.event.inputs.KPM }} lz4kd ${{ github.event.inputs.lz4kd }}
runs-on: ubuntu-latest
env:
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
CCACHE_NOHASHDIR: "true"
CCACHE_HARDLINK: "true"
CCACHE_MAXSIZE: 8G
steps:
# ====================== 系统初始化阶段 ======================
- name: "🚀 Maximize Build Space | 最大化构建空间"
if: ${{ github.event.inputs.KERNEL_VERSION != '6.1' }}
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 8192
temp-reserve-mb: 4096
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
- name: "⚙️ Setup Cache Env | 设置缓存环境"
run: |
echo "🔧 正在设置机型隔离缓存目录..."
echo "CCACHE_DIR=$HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU" >> $GITHUB_ENV
mkdir -p "$HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU"
echo "✅ 缓存目录已设置: $HOME/.ccache_${{ github.event.inputs.FEIL }}_SukiSU"
- name: "🔐 Configure Git | 配置Git账户"
run: |
echo "🔧 正在配置Git用户信息..."
git config --global user.name "build"
git config --global user.email "2210077278@qq.com"
echo "✅ Git配置完成"
# ====================== 依赖管理阶段 ======================
- name: "📦 Configure APT Cache | 配置APT缓存"
run: |
echo "🔧 正在设置APT缓存目录..."
APT_CACHE_DIR="$HOME/apt-cache"
mkdir -p "$APT_CACHE_DIR"/{archives,lists/partial}
# 创建APT配置文件
echo "Dir::Cache \"$APT_CACHE_DIR\";" | sudo tee /etc/apt/apt.conf.d/90user-cache
echo "Dir::Cache::archives \"$APT_CACHE_DIR/archives\";" | sudo tee -a /etc/apt/apt.conf.d/90user-cache
echo "Dir::State::lists \"$APT_CACHE_DIR/lists\";" | sudo tee -a /etc/apt/apt.conf.d/90user-cache
echo "Acquire::Check-Valid-Until \"false\";" | sudo tee -a /etc/apt/apt.conf.d/90user-cache
echo "Acquire::Languages \"none\";" | sudo tee -a /etc/apt/apt.conf.d/90user-cache
sudo chown -R $USER:$USER "$APT_CACHE_DIR"
echo "✅ APT缓存配置完成"
- name: "📦 Restore APT Cache | 恢复APT缓存"
uses: actions/cache@v3
with:
path: ${{ env.HOME }}/apt-cache
key: ${{ runner.os }}-apt-${{ hashFiles('.github/workflows/Build SukiSU Ultra.yml') }}
restore-keys: |
${{ runner.os }}-apt-
- name: "📦 Install Dependencies | 安装构建依赖"
run: |
echo "🔧 正在安装编译依赖项..."
sudo rm -f /var/lib/apt/lists/lock /var/lib/dpkg/lock
APT_CACHE_DIR="$HOME/apt-cache"
mkdir -p "$APT_CACHE_DIR/lists/partial"
# 更新包列表并安装必要工具
sudo apt -o Dir::Cache="$APT_CACHE_DIR" update -qq
sudo DEBIAN_FRONTEND=noninteractive apt -o Dir::Cache="$APT_CACHE_DIR" install -yq --no-install-recommends \
python3 git curl ccache libelf-dev \
build-essential flex bison libssl-dev \
libncurses-dev liblz4-tool zlib1g-dev \
libxml2-utils rsync unzip gawk
echo "✅ 所有依赖项已成功安装"
# ====================== 缓存管理阶段 ======================
- name: "💾 Restore ccache | 恢复ccache缓存"
uses: actions/cache@v3
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ runner.os }}-${{ github.ref }}-${{ github.event.inputs.FEIL }}-SukiSU
restore-keys: |
ccache-${{ runner.os }}-${{ github.event.inputs.FEIL }}-SukiSU
ccache-${{ runner.os }}-SukiSU
- name: "⚙️ Initialize ccache | 初始化ccache"
run: |
echo "🔧 正在初始化ccache..."
INIT_FLAG="${{ env.CCACHE_DIR }}/.ccache_initialized"
if command -v ccache >/dev/null 2>&1; then
if [ ! -f "$INIT_FLAG" ]; then
mkdir -p "${{ env.CCACHE_DIR }}"
ccache -M ${{ env.CCACHE_MAXSIZE }}
touch "$INIT_FLAG"
echo "🆕 ccache初始化完成"
else
echo "ℹ️ ccache已存在,跳过初始化"
fi
else
echo "⚠️ 未找到ccache命令,跳过初始化"
fi
# 显示缓存统计
ccache -s
echo "✅ ccache初始化流程完成"
# ====================== 源码准备阶段 ======================
- name: "📥 Install Repo Tool | 安装Repo工具"
run: |
echo "⬇️ 正在下载repo工具..."
curl -fsSL https://storage.googleapis.com/git-repo-downloads/repo > ~/repo
chmod a+x ~/repo
sudo mv ~/repo /usr/local/bin/repo
echo "✅ repo工具安装完成"
- name: "⬇️ Clone Kernel Source | 克隆内核源码"
run: |
echo "🌐 正在初始化内核仓库..."
mkdir kernel_workspace && cd kernel_workspace
repo init -u https://github.com/Xiaomichael/kernel_manifest.git -b refs/heads/oneplus/${{ github.event.inputs.CPU }} -m ${{ github.event.inputs.FEIL }}.xml --depth=1
echo "🔄 同步代码库(使用$(nproc --all)线程)..."
repo sync -c -j$(nproc --all) --no-tags --no-clone-bundle --force-sync
echo "Kernel version:-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"
rm kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
rm kernel_platform/msm-kernel/android/abi_gki_protected_exports_* || echo "No protected exports!"
sed -i 's/ -dirty//g' kernel_platform/common/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i 's/ -dirty//g' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/common/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$i res=$(echo "$res" | sed '\''s/-dirty//g'\'')' kernel_platform/external/dtc/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/common/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/msm-kernel/scripts/setlocalversion
sed -i '$s|echo "\$res"|echo "-${{ github.event.inputs.ANDROID_VERSION }}-oki-xiaoxiaow"|' kernel_platform/external/dtc/scripts/setlocalversion
echo "✅ 内核配置完成"
# ====================== 内核定制阶段 ======================
- name: "⚡ Setup Baseband-guard | 配置 Baseband-guard"
if: ${{ github.event.inputs.bbg == 'On' }}
run: |
set -e
cd kernel_workspace/kernel_platform/common
curl -sSL https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh -o setup.sh
bash setup.sh
- name: "⚡ Setup SukiSU Ultra | 配置 SukiSU Ultra"
run: |
echo "🛠️ 正在设置SukiSU Ultra..."
mkdir -p kernel_workspace/kernel_platform
cd kernel_workspace/kernel_platform
# 下载并执行设置脚本
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/susfs-main/kernel/setup.sh" | bash -s susfs-main
cd KernelSU
echo "⬇️ 下载KernelSU设置工具..."
curl -L -o sukisu_setup.bin https://github.com/Xiaomichael/OnePlus-Actions/raw/Build/script/sukisu_setup.bin
chmod +x sukisu_setup.bin
# 验证Makefile存在
if [ ! -f "kernel/Makefile" ]; then
echo "❌ 错误:缺少kernel/Makefile"
ls -la
exit 1
fi
./sukisu_setup.bin
rm -rf ./sukisu_setup.bin
echo "✅ SukiSU Ultra配置完成"
- name: "🔧 Setup SUSFS | 配置 SUSFS"
run: |
cd kernel_workspace
echo "⬇️ 下载SUSFS补丁..."
git clone https://gitlab.com/simonpunk/susfs4ksu.git -b gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}
git clone https://github.com/Xiaomichael/kernel_patches.git
git clone https://github.com/ShirkNeko/SukiSU_patch.git
cd kernel_platform
echo "📝 复制补丁文件..."
cp ../susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch ./common/
cp ../kernel_patches/sukisu/scope_min_manual_hooks_v1.5.patch ./common/
cp ../susfs4ksu/kernel_patches/fs/* ./common/fs/
cp ../susfs4ksu/kernel_patches/include/linux/* ./common/include/linux/
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
cp ../kernel_patches/zram/001-lz4.patch ./common/
cp ../kernel_patches/zram/lz4armv8.S ./common/lib
cp ../kernel_patches/zram/002-zstd.patch ./common/
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
# Copy lz4k from ShirkNeko
cp -r ../SukiSU_patch/other/zram/lz4k/include/linux/* ./common/include/linux
cp -r ../SukiSU_patch/other/zram/lz4k/lib/* ./common/lib
cp -r ../SukiSU_patch/other/zram/lz4k/crypto/* ./common/crypto
cp -r ../SukiSU_patch/other/zram/lz4k_oplus ./common/lib/
fi
echo "🔧 应用补丁..."
cd ./common
patch -p1 < 50_add_susfs_in_gki-${{ github.event.inputs.ANDROID_VERSION }}-${{ github.event.inputs.KERNEL_VERSION }}.patch || true
cp ../../kernel_patches/69_hide_stuff.patch ./
patch -p1 -F 3 < 69_hide_stuff.patch
patch -p1 -F 3 < scope_min_manual_hooks_v1.5.patch
if [ "${{ github.event.inputs.lz4kd }}" = "Off" ] && [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
echo "📦 应用lz4+zstd补丁..."
git apply -p1 < 001-lz4.patch || true
patch -p1 < 002-zstd.patch || true
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "🚀 应用lz4kd补丁..."
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4kd.patch ./
patch -p1 -F 3 < lz4kd.patch || true
cp ../../SukiSU_patch/other/zram/zram_patch/${{ github.event.inputs.KERNEL_VERSION }}/lz4k_oplus.patch ./
patch -p1 -F 3 < lz4k_oplus.patch || true
fi
echo "✅ 所有补丁应用完成"
- name: "⚙️ Configure Kernel Options | 配置内核选项"
run: |
echo "⚙️ 正在配置内核编译选项..."
cd kernel_workspace/kernel_platform
# Add KSU configuration settings
echo "📦 启用 Manual Hook..."
echo "CONFIG_KSU=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.KPM }}" == "On" ]; then
echo "📦 启用 KPM..."
echo "CONFIG_KPM=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
# Add VFS configuration settings
echo "CONFIG_KSU_SUSFS_SUS_SU=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_MANUAL_HOOK=y" >> ./common/arch/arm64/configs/gki_defconfig
# Add SUSFS configuration settings
echo "CONFIG_KSU_SUSFS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_PATH=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_KSTAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SUS_OVERLAYFS=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_TRY_UMOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_UNAME=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_ENABLE_LOG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_KSU_SUSFS_OPEN_REDIRECT=y" >> ./common/arch/arm64/configs/gki_defconfig
if [ "${{ github.event.inputs.bbg }}" == "On" ]; then
echo "⚡ 启用BBG防格机..."
echo 'CONFIG_BBG=y' >> ./common/arch/arm64/configs/gki_defconfig
echo 'CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,selinux,smack,tomoyo,apparmor,bpf,baseband_guard"' >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.bbr }}" == "On" ]; then
echo "🌐 启用BBR网络算法..."
echo "CONFIG_TCP_CONG_ADVANCED=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BBR=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NET_SCH_FQ=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_BIC=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_WESTWOOD=n" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_TCP_CONG_HTCP=n" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.lz4kd }}" == "On" ]; then
echo "📦 启用lz4kd压缩..."
echo "CONFIG_CRYPTO_LZ4KD=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_CRYPTO_LZ4K_OPLUS=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_ZRAM_WRITEBACK=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
# Add O2 config
echo "📦 为6.1加入O2优化..."
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.proxy }}" == "On" ]; then
# Add proxy config
echo "📦 加入代理优化..."
echo "CONFIG_BPF_STREAM_PARSER=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_NETFILTER_XT_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_MAX=65534" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_BITMAP_PORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMARK=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTIP=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_IPMAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_MAC=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORTNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETNET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETPORT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_HASH_NETIFACE=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP_SET_LIST_SET=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_NAT=y" >> ./common/arch/arm64/configs/gki_defconfig
echo "CONFIG_IP6_NF_TARGET_MASQUERADE=y" >> ./common/arch/arm64/configs/gki_defconfig
fi
if [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.10" ] || [ "${{ github.event.inputs.KERNEL_VERSION }}" = "5.15" ]; then
echo "📦 正在为5.10系与5.15系配置lto中..."
DEFCONFIG=./common/arch/arm64/configs/gki_defconfig
sed -i 's/^CONFIG_LTO=n/CONFIG_LTO=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
sed -i 's/^CONFIG_LTO_CLANG_NONE=y/CONFIG_LTO_CLANG_THIN=y/' "$DEFCONFIG"
grep -q '^CONFIG_LTO_CLANG_THIN=y' "$DEFCONFIG" || echo 'CONFIG_LTO_CLANG_THIN=y' >> "$DEFCONFIG"
fi
# Remove check_defconfig
sed -i 's/check_defconfig//' ./common/build.config.gki
echo "✅ 内核配置更新完成"
- name: "🔨 Build Kernel | 编译内核"
run: |
echo "🏗️ 开始内核编译..."
if [ "${{ github.event.inputs.KERNEL_VERSION }}" == "6.1" ]; then
export KBUILD_BUILD_TIMESTAMP="Wed Aug 6 13:29:27 UTC 2025"
export KBUILD_BUILD_VERSION=1
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r487747c/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out KCFLAGS+=-O2 gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.15" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts/clang/host/linux-x86/clang-r450784e/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" == "5.10" ]; then
export PATH="$GITHUB_WORKSPACE/kernel_workspace/kernel_platform/prebuilts-master/clang/host/linux-x86/clang-r416183b/bin:$PATH"
export PATH="/usr/lib/ccache:$PATH"
sudo apt install libelf-dev
cd kernel_workspace/kernel_platform/common
make -j$(nproc --all) LLVM_IAS=1 LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC="ccache clang" RUSTC=../../prebuilts/rust/linux-x86/1.73.0b/bin/rustc PAHOLE=../../prebuilts/kernel-build-tools/linux-x86/bin/pahole LD=ld.lld HOSTLD=ld.lld O=out gki_defconfig all
fi
# 显示ccache统计信息
ccache -s
echo "✅ 内核编译完成"
- name: "📦 Package Kernel | 打包内核"
run: |
echo "📦 准备AnyKernel3打包环境..."
git clone https://github.com/Xiaomichael/AnyKernel3 --depth=1
rm -rf ./AnyKernel3/.git
mkdir -p kernel_workspace/kernel_platform/out/Final-Image-Find/
dir1=""
dir2=""
image_path=$(find "./kernel_workspace/kernel_platform/common/out/" -name "Image" | head -n 1)
if [ -n "$image_path" ]; then
dir1=$(dirname "$image_path")/
echo "✅ 成功找到 Image 文件"
fi
if [ -n "$image_path" ] && [ -f "$image_path" ]; then
echo "Image file finally located at: $image_path"
cp "$image_path" ./AnyKernel3/Image
cp "$image_path" kernel_workspace/kernel_platform/out/Final-Image-Find/Image
fi
- name: "🧩 Patch Kernel Image (KPM) | KPM修补镜像"
if: ${{ github.event.inputs.KPM == 'On' }}
run: |
echo "🔧 正在应用KPM补丁..."
cd kernel_workspace/kernel_platform/out/Final-Image-Find
curl -LO https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/download/0.12.0/patch_linux
chmod +x patch_linux
./patch_linux
rm -f Image
mv oImage Image
cp Image $GITHUB_WORKSPACE/AnyKernel3/Image
echo "✅ KPM补丁应用完成"
# ====================== 上传阶段 ======================
- name: "🧠 Set Artifact Name | 设置产物名称"
id: set_name
run: |
if [ "${{ github.event.inputs.lz4kd }}" = "On" ]; then
echo "ARTIFACT_NAME=${{ github.event.inputs.FEIL }}_SukiSU_Ultra_lz4kd_${{ env.KSUVER }}" >> $GITHUB_OUTPUT
elif [ "${{ github.event.inputs.KERNEL_VERSION }}" = "6.1" ]; then
echo "ARTIFACT_NAME=${{ github.event.inputs.FEIL }}_SukiSU_Ultra_lz4_zstd_${{ env.KSUVER }}" >> $GITHUB_OUTPUT
else
echo "ARTIFACT_NAME=${{ github.event.inputs.FEIL }}_SukiSU_Ultra_${{ env.KSUVER }}" >> $GITHUB_OUTPUT
fi
- name: "📤 Upload AnyKernel3 | 上传 AnyKernel3"
uses: actions/upload-artifact@v4
with:
name: ${{ steps.set_name.outputs.ARTIFACT_NAME }}
path: ./AnyKernel3/*
- name: "📝 Find zram.ko & crypto_zstdn.ko | 查找 zram.ko & crypto_zstdn.ko"
# if: ${{ github.event.inputs.lz4kd == 'On' }}
run: |
find -name zram.ko
find -name crypto_zstdn.ko
- name: "📤 Upload zram.ko | 上传 zram.ko"
# if: ${{ github.event.inputs.lz4kd == 'On' }}
uses: actions/upload-artifact@v4
with:
name: zram.ko
path: ./kernel_workspace/kernel_platform/common/out/drivers/block/zram/zram.ko
# - name: "📦 Package files | 打包文件"
# run: |
# echo "📦📤 正在打包文件..."
# cd AnyKernel3
# zip -q -r "../${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip" ./*
# cd ..
# cat > release.txt << 'EOF'
# \# ${{ github.event.inputs.FEIL }}
# ```
# 构建时间:$(TZ=Asia/Shanghai date)
# 内核版本:${{ github.event.inputs.ANDROID_VERSION}}-${{ github.event.inputs.KERNEL_VERSION }}
# KSU 版本:${{env.KSUVER_STR}}(${{env.KSUVER}})
# KPM 状态:${{ github.event.inputs.KPM }}
# LZ4KD 状态: ${{ github.event.inputs.lz4kd }}
# ```
# EOF
# - name: "📤 Upload to telegram | 上传至Telegram群组"
# uses: puernya/tg-bot-upload@v1
# with:
# bot-id: ${{ secrets.BOT_TOKEN }}
# chat-id: ${{ secrets.CHATID }}
# topic-id: ${{ secrets.MESSAGE_THREAD_ID }}
# file-path: "${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip"
# caption-path: release.txt
- name: "🤖 Get bot script | 获取 bot 脚本"
uses: actions/checkout@v4
with:
path: bot
- name: "📤 Upload to telegram | 上传至Telegram群组"
run: |
if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
echo "📤 正在上传到Telegram..."
cd AnyKernel3
zip -q -r "../${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip" ./*
cd ..
pip3 install telethon
python3 ./bot/script/buildbot.py "./${{ steps.set_name.outputs.ARTIFACT_NAME }}.zip"
echo "✅ 文件已上传到Telegram"
fi
env:
CHATID: ${{secrets.CHATID}}
BOT_TOKEN: ${{secrets.BOT_TOKEN}}
MESSAGE_THREAD_ID: ${{secrets.MESSAGE_THREAD_ID}}
KernelVer: ${{ github.event.inputs.ANDROID_VERSION}}-${{ github.event.inputs.KERNEL_VERSION }}
DEVICE: ${{ github.event.inputs.FEIL }}
KPM: ${{ github.event.inputs.KPM }}
LZ4KD: ${{ github.event.inputs.lz4kd }}
BBR: ${{ github.event.inputs.bbr }}
KSU_VAR: "SukiSU"
- name: 📊 Post-build disk check (构建后空间检查)
run: df -h