From 609d63254cb3634d5ae898a9fde51fa1ac644b60 Mon Sep 17 00:00:00 2001 From: supechicken Date: Fri, 16 Jun 2023 14:34:20 +0800 Subject: [PATCH] Add CI workflow for ChromeOS --- .github/workflows/build-kernel-arcvm.yml | 127 +++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 .github/workflows/build-kernel-arcvm.yml diff --git a/.github/workflows/build-kernel-arcvm.yml b/.github/workflows/build-kernel-arcvm.yml new file mode 100644 index 00000000..1df7e83a --- /dev/null +++ b/.github/workflows/build-kernel-arcvm.yml @@ -0,0 +1,127 @@ +name: Build Kernel - ChromeOS ARCVM +on: + push: + branches: ["main"] + paths: + - ".github/workflows/build-kernel-arcvm.yml" + - "kernel/**" + pull_request: + branches: ["main"] + paths: + - ".github/workflows/build-kernel-arcvm.yml" + - "kernel/**" + workflow_call: + workflow_dispatch: + +jobs: + build: + name: Build ChromeOS ARCVM kernel + runs-on: ubuntu-20.04 + env: + BRANCH: chromeos-5.10-arcvm + LTO: thin + DEFCONFIG: x86_64_arcvm_defconfig + + steps: + - name: Install Build Tools + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends bc bison build-essential ca-certificates flex git gnupg \ + libelf-dev libssl-dev lsb-release software-properties-common wget \ + libncurses-dev binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu nuget gzip rsync + + export LLVM_VERSION=12 + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh $LLVM_VERSION + rm ./llvm.sh + sudo ln -s --force /usr/bin/clang-$LLVM_VERSION /usr/bin/clang + sudo ln -s --force /usr/bin/ld.lld-$LLVM_VERSION /usr/bin/ld.lld + sudo ln -s --force /usr/bin/llvm-objdump-$LLVM_VERSION /usr/bin/llvm-objdump + sudo ln -s --force /usr/bin/llvm-ar-$LLVM_VERSION /usr/bin/llvm-ar + sudo ln -s --force /usr/bin/llvm-nm-$LLVM_VERSION /usr/bin/llvm-nm + sudo ln -s --force /usr/bin/llvm-strip-$LLVM_VERSION /usr/bin/llvm-strip + sudo ln -s --force /usr/bin/llvm-objcopy-$LLVM_VERSION /usr/bin/llvm-objcopy + sudo ln -s --force /usr/bin/llvm-readelf-$LLVM_VERSION /usr/bin/llvm-readelf + sudo ln -s --force /usr/bin/clang++-$LLVM_VERSION /usr/bin/clang++ + + - name: Checkout KernelSU + uses: actions/checkout@v3 + with: + path: KernelSU + ref: main + fetch-depth: 0 + + - name: Setup kernel source + run: git clone https://chromium.googlesource.com/chromiumos/third_party/kernel.git -b ${BRANCH} --depth=1 + + - name: Setup KernelSU + working-directory: kernel + run: | + echo "[+] KernelSU setup" + KERNEL_ROOT=$GITHUB_WORKSPACE/kernel + echo "[+] KERNEL_ROOT: $KERNEL_ROOT" + echo "[+] Copy KernelSU driver to $KERNEL_ROOT/drivers" + ln -sf $GITHUB_WORKSPACE/KernelSU/kernel $KERNEL_ROOT/drivers/kernelsu + echo "[+] Add KernelSU driver to Makefile" + DRIVER_MAKEFILE=$KERNEL_ROOT/drivers/Makefile + grep -q "kernelsu" $DRIVER_MAKEFILE || echo "obj-y += kernelsu/" >> $DRIVER_MAKEFILE + echo "[+] Apply KernelSU patches" + cd $KERNEL_ROOT && git apply $GITHUB_WORKSPACE/KernelSU/.github/patches/5.10/*.patch + echo "[+] KernelSU setup done." + cd $GITHUB_WORKSPACE/KernelSU + VERSION=$(($(git rev-list --count HEAD) + 10200)) + echo "VERSION: $VERSION" + echo "kernelsu_version=$VERSION" >> $GITHUB_ENV + + - name: Build Kernel + working-directory: kernel + run: | + set -a + . build.config.gki.x86_64 + OUT_DIR=${PWD}/output + set +a + + mkdir -p ${OUT_DIR}/staging + + echo "kernel_version=$(make kernelversion)" >> $GITHUB_ENV + + make LLVM=1 LLVM_IAS=1 DEPMOD=depmod DTC=dtc O=${PWD} mrproper + make LLVM=1 LLVM_IAS=1 DEPMOD=depmod DTC=dtc O=${PWD} ${DEFCONFIG} + scripts/config --file .config -e LTO_CLANG -d LTO_NONE -e LTO_CLANG_THIN -d LTO_CLANG_FULL -e THINLTO + make LLVM=1 LLVM_IAS=1 DEPMOD=depmod DTC=dtc O=${PWD} bzImage modules prepare-objtool + + make O=${OUT_DIR} -j$(nproc) + make O=${OUT_DIR} INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=${OUT_DIR}/staging modules_install + + echo "file_path=kernel/arch/x86/boot/bzImage" >> $GITHUB_ENV + + - name: Upload kernel-ARCVM-x86_64-${{ env.kernel_version }} + uses: actions/upload-artifact@v3 + with: + name: kernel-ARCVM-x86_64-${{ env.kernel_version }} + path: "${{ env.file_path }}" + + #- name: Post to Telegram + # if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/main' ) || github.ref_type == 'tag' }} + # env: + # CHAT_ID: ${{ secrets.CHAT_ID }} + # CACHE_CHAT_ID: ${{ secrets.CACHE_CHAT_ID }} + # BOT_TOKEN: ${{ secrets.BOT_TOKEN }} + # MESSAGE_THREAD_ID: ${{ secrets.MESSAGE_THREAD_ID }} + # COMMIT_MESSAGE: ${{ github.event.head_commit.message }} + # COMMIT_URL: ${{ github.event.head_commit.url }} + # RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + # run: | + # TITLE=kernel-x86_64-ARCVM-${{ env.kernel_version }} + # echo "[+] title: $TITLE" + # export TITLE + # export VERSION="${{ env.kernelsu_version }}" + # echo "[+] Compress images" + # gzip -n -f -9 "${{ env.file_path }}" + # echo "[+] Image to upload" + # ls -l "${{ env.file_path }}.gz" + # if [ -n "${{ secrets.BOT_TOKEN }}" ]; then + # pip3 install python-telegram-bot + # python3 "$GITHUB_WORKSPACE/KernelSU/scripts/ksubot.py" "${{ env.file_path }}.gz" + # fi