For android13 gki kernels, Google puts lots of unused file to kernel source tree, while the Github Action only has 14G disk size and the ci may fail because of "No space left on device". The `repo` tool will try pull all the refs and tags with depth=INT_MAX if it found the SHA1 hash doesn't exist on remote server even if you force it to fetch with `depth=1` and `--no-tags`. So we use the version `v2.16` which doesn't check it. And also, using a fixed repo version can avoid randomly failure of building.
185 lines
6.4 KiB
YAML
185 lines
6.4 KiB
YAML
name: GKI Kernel Build
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
version:
|
|
required: true
|
|
type: string
|
|
description: >
|
|
Output directory of gki,
|
|
for example: android12-5.10
|
|
version_name:
|
|
required: true
|
|
type: string
|
|
description: >
|
|
With SUBLEVEL of kernel,
|
|
for example: android12-5.10.66
|
|
tag:
|
|
required: true
|
|
type: string
|
|
description: >
|
|
Part of branch name of common kernel manifest,
|
|
for example: android12-5.10-2021-11
|
|
os_patch_level:
|
|
required: false
|
|
type: string
|
|
description: >
|
|
Patch level of common kernel manifest,
|
|
for example: 2021-11
|
|
default: 2022-05
|
|
patch_path:
|
|
required: true
|
|
type: string
|
|
description: >
|
|
Directory name of .github/patches/<patch_path>
|
|
for example: 5.10
|
|
use_cache:
|
|
required: false
|
|
type: boolean
|
|
default: true
|
|
embed_ksud:
|
|
required: false
|
|
type: string
|
|
default: ksud-aarch64-linux-android
|
|
description: >
|
|
Artifact name of prebuilt ksud to be embedded
|
|
for example: ksud-aarch64-linux-android
|
|
debug:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
secrets:
|
|
BOOT_SIGN_KEY:
|
|
required: false
|
|
CHAT_ID:
|
|
required: false
|
|
CACHE_CHAT_ID:
|
|
required: false
|
|
BOT_TOKEN:
|
|
required: false
|
|
MESSAGE_THREAD_ID:
|
|
required: false
|
|
|
|
jobs:
|
|
build:
|
|
name: Build ${{ inputs.version_name }}
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
|
|
CCACHE_NOHASHDIR: "true"
|
|
CCACHE_HARDLINK: "true"
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
path: KernelSU
|
|
fetch-depth: 0
|
|
|
|
- name: Setup need_upload
|
|
id: need_upload
|
|
run: |
|
|
if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
|
|
echo "UPLOAD=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "UPLOAD=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Setup kernel source
|
|
run: |
|
|
echo "Free space:"
|
|
df -h
|
|
cd $GITHUB_WORKSPACE
|
|
sudo apt-get install repo -y
|
|
mkdir android-kernel && cd android-kernel
|
|
repo init --depth=1 --u https://android.googlesource.com/kernel/manifest -b common-${{ inputs.tag }} --repo-rev=v2.16
|
|
REMOTE_BRANCH=$(git ls-remote https://android.googlesource.com/kernel/common ${{ inputs.tag }})
|
|
DEFAULT_MANIFEST_PATH=.repo/manifests/default.xml
|
|
if grep -q deprecated <<< $REMOTE_BRANCH; then
|
|
echo "Found deprecated branch: ${{ inputs.tag }}"
|
|
sed -i 's/"${{ inputs.tag }}"/"deprecated\/${{ inputs.tag }}"/g' $DEFAULT_MANIFEST_PATH
|
|
cat $DEFAULT_MANIFEST_PATH
|
|
fi
|
|
repo --version
|
|
repo --trace sync -q -c -j$(nproc --all) --no-tags
|
|
if [ -d prebuilts/clang/host/linux-x86 ] && [ -f common/build.config.constants ]; then
|
|
ls -d prebuilts/clang/host/linux-x86/clang-r* | grep -v $(sed -n 's/^CLANG_VERSION=//p' common/build.config.constants)
|
|
fi
|
|
rm -rf .repo
|
|
df -h
|
|
|
|
- name: Setup KernelSU
|
|
env:
|
|
PATCH_PATH: ${{ inputs.patch_path }}
|
|
IS_DEBUG_KERNEL: ${{ inputs.debug }}
|
|
run: |
|
|
cd $GITHUB_WORKSPACE/android-kernel
|
|
echo "[+] KernelSU setup"
|
|
GKI_ROOT=$(pwd)
|
|
echo "[+] GKI_ROOT: $GKI_ROOT"
|
|
echo "[+] Copy KernelSU driver to $GKI_ROOT/common/drivers"
|
|
ln -sf $GITHUB_WORKSPACE/KernelSU/kernel $GKI_ROOT/common/drivers/kernelsu
|
|
echo "[+] Add KernelSU driver to Makefile"
|
|
DRIVER_MAKEFILE=$GKI_ROOT/common/drivers/Makefile
|
|
grep -q "kernelsu" $DRIVER_MAKEFILE || echo "obj-y += kernelsu/" >> $DRIVER_MAKEFILE
|
|
echo "[+] Apply KernelSU patches"
|
|
cd $GKI_ROOT/common/ && git apply $GITHUB_WORKSPACE/KernelSU/.github/patches/$PATCH_PATH/*.patch
|
|
echo "[+] Patch script/setlocalversion"
|
|
sed -i 's/-dirty//g' $GKI_ROOT/common/scripts/setlocalversion
|
|
|
|
if [ "$IS_DEBUG_KERNEL" = "true" ]; then
|
|
echo "[+] Enable debug features for kernel"
|
|
echo "ccflags-y += -DCONFIG_KSU_DEBUG" >> $GITHUB_WORKSPACE/KernelSU/kernel/Makefile
|
|
fi
|
|
echo "[+] KernelSU setup done."
|
|
|
|
- name: Symbol magic
|
|
run: |
|
|
echo "[+] Export all symbol from abi_gki_aarch64.xml"
|
|
COMMON_ROOT=$GITHUB_WORKSPACE/android-kernel/common
|
|
KSU_ROOT=$GITHUB_WORKSPACE/KernelSU
|
|
ABI_XML=$COMMON_ROOT/android/abi_gki_aarch64.xml
|
|
SYMBOL_LIST=$COMMON_ROOT/android/abi_gki_aarch64
|
|
# python3 $KSU_ROOT/scripts/abi_gki_all.py $ABI_XML > $SYMBOL_LIST
|
|
echo "[+] Add KernelSU symbols"
|
|
cat $KSU_ROOT/kernel/export_symbol.txt | awk '{sub("[ \t]+","");print " "$0}' >> $SYMBOL_LIST
|
|
|
|
- name: Setup ccache
|
|
if: inputs.use_cache == true
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
with:
|
|
key: gki-kernel-aarch64-${{ inputs.version_name }}
|
|
max-size: 2G
|
|
save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
|
|
|
- name: Build boot.img
|
|
working-directory: android-kernel
|
|
run: |
|
|
if [ ! -z ${{ vars.EXPECTED_SIZE }} ] && [ ! -z ${{ vars.EXPECTED_HASH }} ]; then
|
|
export KSU_EXPECTED_SIZE=${{ vars.EXPECTED_SIZE }}
|
|
export KSU_EXPECTED_HASH=${{ vars.EXPECTED_HASH }}
|
|
fi
|
|
CCACHE="/usr/bin/ccache" LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
|
|
|
|
- name: Prepare artifacts
|
|
id: prepareArtifacts
|
|
run: |
|
|
OUTDIR=android-kernel/out/${{ inputs.version }}/dist
|
|
mkdir output
|
|
cp $OUTDIR/Image ./output/
|
|
cp $OUTDIR/Image.lz4 ./output/
|
|
git clone https://github.com/Kernel-SU/AnyKernel3
|
|
rm -rf ./AnyKernel3/.git
|
|
cp $OUTDIR/Image ./AnyKernel3/
|
|
|
|
- name: Upload Image and Image.gz
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: Image-${{ inputs.version_name }}_${{ inputs.os_patch_level }}
|
|
path: ./output/*
|
|
|
|
- name: Upload AnyKernel3
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: AnyKernel3-${{ inputs.version_name }}_${{ inputs.os_patch_level }}
|
|
path: ./AnyKernel3/*
|