Refactor OnePlus 7 Kernel build workflow #10
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build OnePlus 7 Kernel (No Vendor Blobs) | ||
| on: | ||
| workflow_dispatch: | ||
| push: | ||
| branches: | ||
| - main | ||
| - lineage-21 | ||
| - android-16 | ||
| jobs: | ||
| build: | ||
| runs-on: ubuntu-22.04 | ||
| steps: | ||
| - name: Checkout source | ||
| uses: actions/checkout@v4 | ||
| - name: Setup build environment | ||
| run: | | ||
| sudo apt-get update | ||
| sudo apt-get install -y bc bison flex clang lld llvm lz4 \ | ||
| make python3 git zip curl wget ccache \ | ||
| libssl-dev rsync tar | ||
| - name: Download prebuilt Clang toolchain | ||
| run: | | ||
| mkdir -p clang | ||
| wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/master/clang-r530567.tar.gz -O clang.tar.gz | ||
| tar -xf clang.tar.gz -C clang | ||
| echo "Clang toolchain extracted." | ||
| - name: Set derived env / defaults | ||
| run: | | ||
| echo "KERNEL_DEFCONFIG=${{ github.event.inputs.kernel_defconfig || 'vendor/sm8150_defconfig' }}" >> $GITHUB_ENV | ||
| echo "KERNEL_SOURCE_URL=${{ github.event.inputs.kernel_source_url || 'https://github.com/LineageOS/android_kernel_oneplus_sm8150' }}" >> $GITHUB_ENV | ||
| echo "KERNEL_BRANCH=${{ github.event.inputs.kernel_branch || 'lineage-23.0' }}" >> $GITHUB_ENV | ||
| echo "OUTPUT_ZIP_NAME=${{ github.event.inputs.output_name || 'OP7_KSN_wifi-LOS-noVendor.zip' }}" >> $GITHUB_ENV | ||
| - name: Configure environment variables | ||
| run: | | ||
| export ARCH=arm64 | ||
| export SUBARCH=arm64 | ||
| export PATH=$PWD/clang/bin:$PATH | ||
| export CC=clang | ||
| export CROSS_COMPILE=aarch64-linux-gnu- | ||
| export CROSS_COMPILE_ARM32=arm-linux-gnueabi- | ||
| mkdir -p out | ||
| - name: Write novendor.defaults and kernel config disables | ||
| working-directory: kernel | ||
| run: | | ||
| set -euo pipefail | ||
| cat > ../novendor.defaults <<'EOF' | ||
| # Force localversion predictable | ||
| CONFIG_LOCALVERSION_AUTO=y | ||
| # Vendor / proprietary modules | ||
| CONFIG_VENDOR_EDIT=n | ||
| CONFIG_OPLUS_DEVICE_INFO=n | ||
| CONFIG_OPLUS_PROJECT_INFO=n | ||
| CONFIG_OPLUS_ARCH_EXTENDS=n | ||
| CONFIG_OPLUS_FEATURE_CHG_BASIC=n | ||
| CONFIG_OPLUS_FEATURE_SENSOR=n | ||
| CONFIG_MSM_CAMERA=n | ||
| CONFIG_QCOM_CAMERA=n | ||
| CONFIG_SPECTRA_CAMERA=n | ||
| CONFIG_SPECTRA_EEPROM=n | ||
| CONFIG_DRM_MSM_OPLUS=n | ||
| CONFIG_TOUCHSCREEN_OPLUS=n | ||
| CONFIG_SOUND_OPLUS=n | ||
| # Wireless stacks that usually need blobs | ||
| CONFIG_MAC80211=n | ||
| CONFIG_CFG80211=n | ||
| CONFIG_WLAN=n | ||
| # Netfilter / iptables / conntrack disables | ||
| CONFIG_NETFILTER=n | ||
| CONFIG_NETFILTER_XTABLES=n | ||
| CONFIG_NF_CONNTRACK=n | ||
| CONFIG_NF_CONNTRACK_IPV4=n | ||
| CONFIG_NF_CONNTRACK_IPV6=n | ||
| CONFIG_IP_NF_IPTABLES=n | ||
| CONFIG_IP_NF_FILTER=n | ||
| CONFIG_IP_NF_NAT=n | ||
| CONFIG_IP_NF_TARGET_MASQUERADE=n | ||
| CONFIG_IP6_NF_IPTABLES=n | ||
| CONFIG_IP6_NF_FILTER=n | ||
| CONFIG_BRIDGE_NETFILTER=n | ||
| CONFIG_NF_TABLES=n | ||
| CONFIG_NF_TABLES_IPV4=n | ||
| CONFIG_NF_TABLES_IPV6=n | ||
| # Reduce debug for smaller kernel (optional) | ||
| CONFIG_DEBUG_INFO=n | ||
| CONFIG_DEBUG_KERNEL=n | ||
| EOF | ||
| - name: Disable vendor directories | ||
| working-directory: kernel | ||
| run: | | ||
| echo "🔧 Disabling vendor-related directories..." | ||
| for d in \ | ||
| drivers/gpu/drm/msm/oplus \ | ||
| drivers/misc/oplus* \ | ||
| drivers/soc/oplus \ | ||
| drivers/input/oplus* \ | ||
| drivers/oneplus* \ | ||
| drivers/staging/qcacld-3.0 \ | ||
| drivers/media/platform/msm/camera \ | ||
| drivers/thermal/qcom \ | ||
| sound/soc/oplus* \ | ||
| net/netfilter \ | ||
| net/ipv6/netfilter \ | ||
| net/bridge/netfilter; do | ||
| if [ -d "$d" ]; then | ||
| echo "# disabled (no vendor blobs)" > "$d/Makefile" | ||
| echo "obj-y :=" >> "$d/Makefile" | ||
| echo "obj-m :=" >> "$d/Makefile" | ||
| fi | ||
| done | ||
| - name: Build Kernel | ||
| run: | | ||
| export ARCH=arm64 | ||
| export SUBARCH=arm64 | ||
| export PATH=$PWD/clang/bin:$PATH | ||
| make O=out ARCH=arm64 $KERNEL_DEFCONFIG | ||
| make O=out ARCH=arm64 -j$(nproc) \ | ||
| CC=clang \ | ||
| CROSS_COMPILE=aarch64-linux-gnu- \ | ||
| CROSS_COMPILE_ARM32=arm-linux-gnueabi- | ||
| - name: Package Image | ||
| run: | | ||
| mkdir -p artifacts | ||
| cp out/arch/arm64/boot/Image.gz-dtb artifacts/ || true | ||
| cp out/arch/arm64/boot/Image artifacts/ || true | ||
| cd artifacts && zip -r kernel-build.zip . | ||
| - name: Upload Kernel Artifact | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: oneplus7-kernel | ||
| path: artifacts/kernel-build.zip | ||