name: Kmod on: push: paths: - 'kmod/**' - '.github/workflows/kmod.yml' - '.github/docker/ci/Dockerfile' pull_request: paths: - 'kmod/**' - '.github/workflows/kmod.yml' workflow_dispatch: permissions: contents: write packages: read jobs: build: runs-on: ubuntu-latest container: image: ghcr.io/${{ github.repository }}/ci:latest credentials: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} strategy: matrix: gki: - branch: android14-6.1 symvers: kmod/symvers/android14-6.1.symvers env: CLANG_DIR: /opt/aosp-clang/bin steps: - uses: actions/checkout@v4 - name: Mark workspace safe run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Cache kernel source uses: actions/cache@v4 id: kernel-cache with: path: kernel-source key: kernel-${{ matrix.gki.branch }}-v2 - name: Clone kernel source (shallow) if: steps.kernel-cache.outputs.cache-hit != 'true' run: | git clone --depth=1 -b ${{ matrix.gki.branch }} \ https://android.googlesource.com/kernel/common \ kernel-source - name: Prepare kernel source run: | cd kernel-source make ARCH=arm64 LLVM=1 LLVM_IAS=1 \ CC=$CLANG_DIR/clang LD=$CLANG_DIR/ld.lld \ AR=$CLANG_DIR/llvm-ar NM=$CLANG_DIR/llvm-nm \ OBJCOPY=$CLANG_DIR/llvm-objcopy \ OBJDUMP=$CLANG_DIR/llvm-objdump \ STRIP=$CLANG_DIR/llvm-strip \ CROSS_COMPILE=aarch64-linux-gnu- \ gki_defconfig touch abi_symbollist.raw make ARCH=arm64 LLVM=1 LLVM_IAS=1 \ CC=$CLANG_DIR/clang LD=$CLANG_DIR/ld.lld \ AR=$CLANG_DIR/llvm-ar NM=$CLANG_DIR/llvm-nm \ OBJCOPY=$CLANG_DIR/llvm-objcopy \ OBJDUMP=$CLANG_DIR/llvm-objdump \ STRIP=$CLANG_DIR/llvm-strip \ CROSS_COMPILE=aarch64-linux-gnu- \ olddefconfig prepare || true # Generate module.lds (make prepare sometimes skips this) if [ ! -f scripts/module.lds ]; then $CLANG_DIR/clang -E -Wp,-MD,scripts/.module.lds.d -nostdinc \ -I arch/arm64/include -I arch/arm64/include/generated \ -I include -I include/generated \ -include include/linux/kconfig.h \ -D__KERNEL__ -DCC_USING_PATCHABLE_FUNCTION_ENTRY \ --target=aarch64-linux-gnu -x c scripts/module.lds.S \ 2>/dev/null | grep -v '^#' > scripts/module.lds sed -i 's/((1UL) << 12)/4096/g' scripts/module.lds fi cp "$GITHUB_WORKSPACE/${{ matrix.gki.symvers }}" Module.symvers echo '#define UTS_RELEASE "6.1.0-vpnhide-ci"' \ > include/generated/utsrelease.h echo -n "6.1.0-vpnhide-ci" > include/config/kernel.release - name: Build kernel module run: | export KERNEL_SRC=$GITHUB_WORKSPACE/kernel-source make -C $KERNEL_SRC M=$GITHUB_WORKSPACE/kmod \ ARCH=arm64 LLVM=1 LLVM_IAS=1 \ CC=$CLANG_DIR/clang LD=$CLANG_DIR/ld.lld \ AR=$CLANG_DIR/llvm-ar NM=$CLANG_DIR/llvm-nm \ OBJCOPY=$CLANG_DIR/llvm-objcopy \ OBJDUMP=$CLANG_DIR/llvm-objdump \ STRIP=$CLANG_DIR/llvm-strip \ CROSS_COMPILE=aarch64-linux-gnu- \ modules ls -lh kmod/vpnhide_kmod.ko - name: Package KSU module zip id: package run: | cp kmod/vpnhide_kmod.ko kmod/module/ ZIPNAME="vpnhide-kmod-${{ matrix.gki.branch }}.zip" (cd kmod/module && zip -qr "../../$ZIPNAME" .) ls -lh "$ZIPNAME" echo "zipname=$ZIPNAME" >> "$GITHUB_OUTPUT" - name: Upload artifact uses: actions/upload-artifact@v4 with: name: vpnhide-kmod-${{ matrix.gki.branch }} path: vpnhide-kmod-${{ matrix.gki.branch }}.zip if-no-files-found: error release: needs: build if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest steps: - name: Download all artifacts uses: actions/download-artifact@v4 with: path: dist/ merge-multiple: true - name: Generate checksums run: | cd dist for f in *.zip; do sha256sum "$f" > "${f}.sha256"; done - name: Upload release assets uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.ref_name }} files: | dist/*.zip dist/*.sha256 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}