Kernel Build #644
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: Kernel Build | |
| on: | |
| workflow_dispatch: | |
| workflow_call: | |
| pull_request: | |
| push: | |
| paths-ignore: | |
| - 'README.md' | |
| branches: | |
| - test | |
| schedule: | |
| - cron: "0 12 * * *" | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| kernel_config: | |
| - kernel_name: "SM6125" | |
| kernel_url: "https://github.com/LineageOS/android_kernel_xiaomi_sm6125" | |
| kernel_branch: "lineage-23.2" | |
| anykernel_branch: "sm6125" | |
| tag: "SM6125-23.2" | |
| defconfig: "vendor/trinket-perf_defconfig" | |
| config: "vendor/xiaomi-trinket.config vendor/laurel_sprout.config" | |
| patches_folder: "sm6125" | |
| IN_DTBO: "out/arch/arm64/boot/dts/xiaomi/laurel_sprout-trinket-overlay.dtbo" | |
| - kernel_name: "SM6125 - Ginkgo" | |
| device: Ginkgo | |
| kernel_url: "https://github.com/LineageOS/android_kernel_xiaomi_sm6125" | |
| kernel_branch: "lineage-23.2" | |
| anykernel_branch: "ginkgo" | |
| tag: "SM6125-23.2" | |
| defconfig: "vendor/trinket-perf_defconfig" | |
| config: "vendor/xiaomi-trinket.config vendor/ginkgo.config" | |
| patches_folder: "sm6125" | |
| IN_DTBO: "out/arch/arm64/boot/dts/xiaomi/ginkgo-trinket-overlay.dtbo" | |
| - kernel_name: "N18.1" | |
| kernel_url: "https://github.com/TheSillyOk/kernel_laurel_sprout" | |
| kernel_branch: "lineage-18.1" | |
| tag: "NoName-18.1" | |
| defconfig: "vendor/laurel_sprout-perf_defconfig" | |
| python3_patch: true | |
| - kernel_name: "N-VIC" | |
| kernel_url: "https://github.com/TheSillyOk/kernel_laurel_sprout" | |
| kernel_branch: "vic" | |
| tag: "NoName-VIC" | |
| defconfig: "vendor/laurel_sprout-perf_defconfig" | |
| python3_patch: true | |
| build: | |
| - type: Normal | |
| ksu: false | |
| exclude: susfs | |
| ak3_suffix: "" | |
| - type: KSUN | |
| ksu: true | |
| repo: "KernelSU-Next/KernelSU-Next" | |
| folder: "KernelSU-Next" | |
| branch: "legacy" | |
| susfs_ksu_patches: "KSUN/KSUN-SUSFS-2.0.0.patch" | |
| kernel_patches: "seccomp.patch scope-min-hooks-v1.6.patch" | |
| susfs_kernel_patches: "susfs-2.0.0.patch" | |
| extra_configs: "CONFIG_KSU_KPROBES_HOOK=n" | |
| ak3_suffix: "-KSUNext" | |
| - type: RKSU | |
| ksu: true | |
| exclude: susfs | |
| repo: "rsuntk/KernelSU" | |
| folder: "KernelSU" | |
| branch: "main" | |
| susfs_branch: "susfs-rksu-master" | |
| kernel_patches: "" | |
| susfsless_kernel_patches: "scope-min-hooks-v1.9.patch" | |
| susfs_kernel_patches: "susfs-2.0.0.patch susfs-inline-hooks.patch" | |
| extra_configs: "CONFIG_KSU_MANUAL_HOOK=y CONFIG_KSU_SYSCALL_HOOK=n" | |
| susfs_configs: "CONFIG_KSU_SUSFS=y" | |
| ak3_suffix: "-RKSU" | |
| - type: ReSukiSU | |
| ksu: true | |
| repo: "ReSukiSU/ReSukiSU" | |
| folder: "KernelSU" | |
| branch: "main" | |
| susfsless_kernel_patches: "scope-min-hooks-v1.9.patch" | |
| extra_configs: "CONFIG_KSU_TOOLKIT_SUPPORT=y" | |
| susfs_configs: "CONFIG_KSU_SUSFS=y" | |
| susfsless_configs: "CONFIG_KSU_MANUAL_HOOK=y" | |
| ak3_suffix: "-SukiSU" | |
| # kpm: "https://github.com/SukiSU-Ultra/SukiSU_KernelPatch_patch/releases/latest/download/patch_linux" | |
| - type: xxKSU | |
| ksu: true | |
| exclude: susfs | |
| repo: "backslashxx/KernelSU" | |
| folder: "KernelSU" | |
| branch: "master" | |
| # kernel_patches: "scope-min-hooks-v1.9.patch" | |
| extra_configs: "CONFIG_KSU_TAMPER_SYSCALL_TABLE=y" | |
| ak3_suffix: "-xxKSU" | |
| susfs: [false] | |
| exclude: | |
| - build: | |
| exclude: susfs | |
| susfs: true | |
| - build: | |
| exclude: susfsless | |
| susfs: false | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Set Environment Variables | |
| id: vars | |
| run: | | |
| echo "config=${{ matrix.kernel_config.config }}" >> $GITHUB_ENV | |
| echo "patches_url=${{ matrix.kernel_config.patches_url || 'https://github.com/TheSillyOk/kernel_ls_patches' }}" >> $GITHUB_ENV | |
| echo "patches_branch_arg=${{ matrix.kernel_config.patches_branch && format('-b {0}', matrix.kernel_config.patches_branch) || '' }}" >> $GITHUB_ENV | |
| echo "patches_folder=${{ matrix.kernel_config.patches_folder || 'noname' }}" >> $GITHUB_ENV | |
| echo "anykernel_url=${{ matrix.kernel_config.anykernel_url || 'https://github.com/TheSillyOk/anykernel' }}" >> $GITHUB_ENV | |
| echo "anykernel_branch_arg=${{ matrix.kernel_config.anykernel_branch && format('-b {0}', matrix.kernel_config.anykernel_branch) || '' }}" >> $GITHUB_ENV | |
| echo "kernel_branch_arg=${{ matrix.kernel_config.kernel_branch && format('-b {0}', matrix.kernel_config.kernel_branch) || '' }}" >> $GITHUB_ENV | |
| echo "susfs_branch=${{ matrix.kernel_config.susfs_branch || 'kernel-4.14' }}" >> $GITHUB_ENV | |
| echo "device=${{ matrix.kernel_config.device || 'MiA3' }}" >> $GITHUB_ENV | |
| echo "python3=${{ matrix.kernel_config.python3_patch || 'false' }}" >> $GITHUB_ENV | |
| echo "in_dtbo=${{ matrix.kernel_config.IN_DTBO || 'none' }}" >> $GITHUB_ENV | |
| ${{ matrix.susfs || false }} && ksu_repo="${{ matrix.build.susfs_repo || matrix.build.repo }}" || ksu_repo="${{ matrix.build.repo }}" || true | |
| echo "ksu_repo=$ksu_repo" >> $GITHUB_ENV | |
| ${{ matrix.susfs || false }} && ksu_branch="${{ matrix.build.susfs_branch || matrix.build.branch }}" || ksu_branch="${{ matrix.build.branch }}" || true | |
| echo "ksu_branch=$ksu_branch" >> $GITHUB_ENV | |
| - name: Initialize Workspace and Install Tools | |
| run: | | |
| echo "workspace_folder=${GITHUB_WORKSPACE}/workspace" >> $GITHUB_ENV | |
| mkdir -p "${GITHUB_WORKSPACE}/workspace" | |
| sudo apt-get update -qq | |
| sudo apt-get install -y --no-install-recommends python3-pip git zip unzip gcc g++ make ninja-build file bc bison flex libfl-dev libssl-dev libelf-dev wget build-essential python3-dev python3-setuptools rsync ccache llvm-dev libncurses6 libfdt-dev binwalk | |
| - name: Cache Clang | |
| uses: actions/cache@v5 | |
| id: cache-clang | |
| with: | |
| path: ${{ env.workspace_folder }}/clang | |
| key: clang-r547379-ubuntu-latest | |
| - name: Download and Extract Clang | |
| if: steps.cache-clang.outputs.cache-hit != 'true' | |
| working-directory: ${{ env.workspace_folder }} | |
| run: | | |
| wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/main/clang-r547379.tar.gz -O clang.tar.gz | |
| mkdir -p clang && tar -xf clang.tar.gz -C clang | |
| - name: Set up ccache | |
| run: | | |
| ccache --max-size=2G | |
| ccache --set-config=compression=true | |
| echo "CCACHE_DIR=$HOME/.ccache" >> $GITHUB_ENV | |
| - name: Cache Kernel Build | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.ccache | |
| key: ${{ env.device }}-${{ matrix.build.type }}-${{ matrix.kernel_config.tag }}-SUSFS_${{ matrix.susfs }}-ccache-${{ github.sha }}-${{ github.run_number }} | |
| restore-keys: | | |
| ${{ env.device }}-${{ matrix.build.type }}-${{ matrix.kernel_config.tag }}-SUSFS_${{ matrix.susfs }}-ccache- | |
| ${{ env.device }}-${{ matrix.build.type }}-${{ matrix.kernel_config.tag }}- | |
| -${{ matrix.build.type }}-${{ matrix.kernel_config.tag }}- | |
| -${{ matrix.kernel_config.tag }}- | |
| - name: Prepare Kernel Source | |
| run: | | |
| set -e | |
| echo "kernel_folder=${{ env.workspace_folder }}/kernel_tree" >> $GITHUB_ENV | |
| git clone --depth=1 "${{ matrix.kernel_config.kernel_url }}" ${{ env.kernel_branch_arg }} "${{ env.workspace_folder }}/kernel_tree" | |
| echo "patches_dir=${{ env.workspace_folder }}/kernel_patches" >> $GITHUB_ENV | |
| git clone --depth=1 "${{ env.patches_url }}" ${{ env.patches_branch_arg }} "${{ env.workspace_folder }}/kernel_patches" | |
| cd "${{ env.workspace_folder }}/kernel_tree" | |
| kernel_patches="fix_lto.patch ptrace_fix.patch kpatch_fix.patch" | |
| if [[ -n "${{ matrix.build.kernel_patches }}" ]]; then | |
| kernel_patches="$kernel_patches ${{ matrix.build.kernel_patches }}" | |
| fi | |
| for patch in $kernel_patches; do | |
| patch -p1 < "${{ env.workspace_folder }}/kernel_patches/${patch}" | |
| done | |
| if ${{ env.python3 }}; then | |
| patch -p1 < "${{ env.workspace_folder }}/kernel_patches/python3.patch" || true | |
| fi | |
| configs="CONFIG_LTO_CLANG=y CONFIG_LTO_CLANG_THIN=y CONFIG_HAVE_LTO_CLANG=y CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y CONFIG_MODVERSIONS=n CONFIG_KPROBES=n CONFIG_TMPFS_XATTR=y" | |
| if [[ -n "${{ matrix.build.extra_configs }}" ]]; then | |
| configs="$configs ${{ matrix.build.extra_configs }}" | |
| fi | |
| for config in $configs; do | |
| echo "--> Added ${config} <--" | |
| config_name=$(echo "${config}" | cut -d "=" -f 1) | |
| sed -i -E 's/.*($config_name=.*)/# \1/gi' ${{ env.workspace_folder }}/kernel_tree/arch/arm64/configs/${{ matrix.kernel_config.defconfig }} | |
| echo -e "\n${config}" >> "${{ env.workspace_folder }}/kernel_tree/arch/arm64/configs/${{ matrix.kernel_config.defconfig }}" | |
| done | |
| sed -i 's/-dirty//' ./scripts/setlocalversion | |
| - name: Apply KSU (${{ matrix.build.type }}) | |
| if: matrix.build.ksu | |
| working-directory: ${{ env.kernel_folder }} | |
| run: | | |
| set -e | |
| curl -LSs "https://raw.githubusercontent.com/${{ env.ksu_repo }}/${{ env.ksu_branch }}/kernel/setup.sh" | bash -s ${{ env.ksu_branch }} | |
| if [[ -n "${{ matrix.build.susfsless_kernel_patches }}" && "${{ matrix.susfs }}" != "true" ]]; then | |
| for patch_name in ${{ matrix.build.susfsless_kernel_patches }}; do | |
| patch -p1 -F 3 < "${{ env.patches_dir }}/${patch_name}" | |
| done | |
| fi | |
| if [[ -n "${{ matrix.build.susfsless_ksu_patches }}" && "${{ matrix.susfs }}" != "true" ]]; then | |
| cd "${{ matrix.build.folder }}" | |
| for patch_name in ${{ matrix.build.susfsless_ksu_patches }}; do | |
| patch -p1 < "${{ env.patches_dir }}/${patch_name}" | |
| done | |
| cd "${{ env.kernel_folder }}" | |
| fi | |
| if [[ -n "${{ matrix.build.ksu_patches }}" ]]; then | |
| cd "${{ matrix.build.folder }}" | |
| for patch_name in ${{ matrix.build.ksu_patches }}; do | |
| patch -p1 < "${{ env.patches_dir }}/${patch_name}" | |
| done | |
| cd "${{ env.kernel_folder }}" | |
| fi | |
| if [[ -n "${{ matrix.build.susfsless_configs }}" && "${{ matrix.susfs }}" != "true" ]]; then | |
| for config in ${{ matrix.build.susfsless_configs }}; do | |
| echo "--> Added ${config} <--" | |
| config_name=$(echo "${config}" | cut -d "=" -f 1) | |
| sed -i -E 's/.*($config_name=.*)/# \1/gi' ${{ env.kernel_folder }}/arch/arm64/configs/${{ matrix.kernel_config.defconfig }} | |
| echo -e "\n${config}" >> "${{ env.kernel_folder }}/arch/arm64/configs/${{ matrix.kernel_config.defconfig }}" | |
| done | |
| fi | |
| - name: Apply SUSFS | |
| if: matrix.susfs | |
| working-directory: ${{ env.kernel_folder }} | |
| run: | | |
| set -e | |
| if [[ -n "${{ matrix.build.susfs_ksu_patches }}" ]]; then | |
| cd "${{ env.kernel_folder }}/${{ matrix.build.folder }}" | |
| for patch_name in ${{ matrix.build.susfs_ksu_patches }}; do | |
| patch -p1 -F 3 < "${{ env.patches_dir }}/${patch_name}" | |
| done | |
| cd "${{ env.kernel_folder }}" | |
| fi | |
| if [[ -n "${{ matrix.build.susfs_kernel_patches }}" ]]; then | |
| for patch_name in ${{ matrix.build.susfs_kernel_patches }}; do | |
| patch -p1 < "${{ env.patches_dir }}/${patch_name}" || true | |
| done | |
| fi | |
| if [[ "${{ matrix.build.susfs_kernel_patches }}" == *"susfs-inline"* && "${{ matrix.kernel_config.kernel_name }}" == "N18.1" ]]; then | |
| patch -p1 < "${{ env.patches_dir }}/fix-n18.1-inline-hooks.patch" | |
| fi | |
| if [[ "${{ matrix.build.kernel_patches }}" == *"susfs-2.0.0"* && "${{ matrix.kernel_config.tag }}" == *"NoName"* ]]; then | |
| patch -p1 < "${{ env.patches_dir }}/fix-noname-susfs-2.0.0.patch" | |
| fi | |
| if [[ -n "${{ matrix.build.susfs_configs }}" ]]; then | |
| for config in ${{ matrix.build.susfs_configs }}; do | |
| echo "--> Added ${config} <--" | |
| config_name=$(echo "${config}" | cut -d "=" -f 1) | |
| sed -i -E 's/.*($config_name=.*)/# \1/gi' ${{ env.kernel_folder }}/arch/arm64/configs/${{ matrix.kernel_config.defconfig }} | |
| echo -e "\n${config}" >> "${{ env.kernel_folder }}/arch/arm64/configs/${{ matrix.kernel_config.defconfig }}" | |
| done | |
| fi | |
| - name: Build Kernel | |
| working-directory: ${{ env.kernel_folder }} | |
| run: | | |
| set -e | |
| EXTRA_FOLDER="${{ env.kernel_folder }}/extra" | |
| git clone --depth=1 https://github.com/TheSillyOk/kernel_extra -b main "$EXTRA_FOLDER" | |
| export CCACHE_EXEC=$(which ccache) | |
| export ARCH=arm64 | |
| export SUBARCH=arm64 | |
| export KBUILD_BUILD_USER="Ok" | |
| export KBUILD_BUILD_HOST="Github" | |
| export PATH="${{ env.workspace_folder }}/clang/bin:$PATH" | |
| mkdir -p "out/arch/arm64/boot/dts/xiaomi/.ginkgo-trinket-overlay.dtbo.qcom-base" | |
| make O=out ARCH=arm64 ${{ matrix.kernel_config.defconfig }} ${{ env.config }} | |
| make O=out DTC_PREBUILT=true DTC=$EXTRA_FOLDER/dtc DTC_OVERLAY_TEST_EXT=$EXTRA_FOLDER/ufdt_apply_overlay MKDTIMG=$EXTRA_FOLDER/mkdtimg CC="ccache clang" LD=ld.lld LLVM=1 LLVM_IAS=1 -j"$(nproc --all)" CROSS_COMPILE=aarch64-linux-gnu- | |
| - name: Create AnyKernel3 Zip | |
| id: anykernel | |
| run: | | |
| set -e | |
| BOOT_FOLDER="${{ env.kernel_folder }}/out/arch/arm64/boot" | |
| AK3_FOLDER="$BOOT_FOLDER/ak_folder" | |
| echo "ak_folder=$AK3_FOLDER" >> $GITHUB_ENV | |
| git clone --recursive --depth=1 "${{ env.anykernel_url }}" ${{ env.anykernel_branch_arg }} "$AK3_FOLDER" | |
| cp -f "$BOOT_FOLDER/Image.gz-dtb" "$AK3_FOLDER" 2>/dev/null || cp -f "$BOOT_FOLDER/Image.gz" "$AK3_FOLDER" | |
| if [ -e "$BOOT_FOLDER/dtbo.img" ]; then | |
| cp -f "$BOOT_FOLDER/dtbo.img" "$AK3_FOLDER" | |
| elif [ "${{ env.in_dtbo }}" != "none" ]; then | |
| python3 "${{ env.kernel_folder }}/extra/mkdtboimg.py" create "$AK3_FOLDER/dtbo.img" --custom0=0x00000000 --custom1=0x00000000 --page_size=4096 "${{ env.kernel_folder }}/${{ env.in_dtbo }}" | |
| fi | |
| if [[ -n "${{ matrix.build.kpm }}" ]]; then | |
| cd "$AK3_FOLDER" | |
| curl -LSs "${{ matrix.build.kpm }}" -o patch && chmod 777 patch | |
| img_file=$(find . -type f -name "Image"* -maxdepth 1) | |
| echo "$img_file" | |
| # Decompress the kernel image if it's compressed | |
| if [[ "$img_file" == "./Image.gz"* ]]; then | |
| dd if="$img_file" bs=1 | gunzip > Image || true | |
| echo "-> Convert to: Image" | |
| elif [[ "$img_file" == "./Image.lz4" ]]; then | |
| lz4 -d "$img_file" Image | |
| echo "-> Decompress to: Image" | |
| fi | |
| ./patch && mv oImage Image | |
| # Re-compress the kernel image to its original format | |
| if [[ "$img_file" == "./Image.gz"* ]]; then | |
| gzip -c Image > Image.gz | |
| rm Image | |
| echo "-> Compress: Image.gz" | |
| # Special handling for images with appended DTB | |
| if [[ "$img_file" == "./Image.gz-dtb" ]]; then | |
| compressed_length=$(dd if=Image.gz-dtb bs=1 $skip | gzip -c | wc -c) | |
| dd if=Image.gz-dtb bs=1 skip=$compressed_length > dtb | |
| cat Image.gz dtb > Image.gz-dtb | |
| rm Image.gz && rm dtb | |
| echo "-- Image.gz -> Image.gz-dtb" | |
| fi | |
| elif [[ "$img_file" == "./Image.lz4" ]]; then | |
| lz4 -f Image Image.lz4 | |
| rm Image | |
| echo "-> Compress: Image.lz4" | |
| fi | |
| rm patch | |
| cd - | |
| fi | |
| BUILD_SUFFIX="${{ matrix.build.ak3_suffix }}" | |
| if [ "${{ matrix.susfs }}" == "true" ]; then | |
| BUILD_SUFFIX="$BUILD_SUFFIX.SUSFS" | |
| fi | |
| ZIP_NAME="$(date +"%Y.%m.%d")-${{ env.device }}${BUILD_SUFFIX}-${{ matrix.kernel_config.tag }}-${{ github.run_number }}" | |
| echo "anykernel_zipname=$ZIP_NAME" >> $GITHUB_ENV | |
| - name: Upload AnyKernel Artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: ${{ env.anykernel_zipname }} | |
| path: ${{ env.ak_folder }}/* | |
| release: | |
| needs: build | |
| if: github.event_name != 'pull_request' | |
| permissions: | |
| contents: write | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download Artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| path: ./downloaded-artifacts | |
| - name: Set Release Variables | |
| id: release_vars | |
| run: | | |
| echo "date=$(date +"%d/%m/%Y")" >> $GITHUB_ENV | |
| echo "run_url=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV | |
| echo "nightly_url=https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV | |
| git clone --depth=1 "https://github.com/TheSillyOk/sh" "sh" | |
| echo "sh_dir=$PWD/sh" >> $GITHUB_ENV | |
| echo "artifacts_dir=$PWD/downloaded-artifacts" >> $GITHUB_ENV | |
| if [ '${{ github.event_name }}' == 'schedule' ]; then | |
| title="A new scheduled build has been made. (SCHEDULED BUILD)" | |
| elif [ '${{ github.ref_name }}' == 'master' ]; then | |
| title="A new tag release has been made. (STABLE BUILD)" | |
| else | |
| title="A new test build has been made. (TEST BUILD)" | |
| fi | |
| echo "tg_title=$title" >> $GITHUB_ENV | |
| KSUN_URL=$(git ls-remote https://github.com/KernelSU-Next/KernelSU-Next.git legacy | awk '{print "https://github.com/KernelSU-Next/KernelSU-Next/commit/"$1}') | |
| echo "KSUN_URL=$KSUN_URL" >> $GITHUB_ENV | |
| echo "KSUN_V=$(./sh/get_ksuver.sh "KernelSU-Next" "KernelSU-Next" "legacy")" >> $GITHUB_ENV | |
| RKSU_URL=$(git ls-remote https://github.com/rsuntk/KernelSU HEAD | awk '{print "https://github.com/rsuntk/KernelSU/commit/"$1}') | |
| echo "RKSU_URL=$RKSU_URL" >> $GITHUB_ENV | |
| echo "RKSU_V=$(./sh/get_ksuver.sh "rsuntk" "KernelSU" "main")" >> $GITHUB_ENV | |
| ReSUKI_URL=$(git ls-remote https://github.com/ReSukiSU/ReSukiSU main | awk '{print "https://github.com/ReSukiSU/ReSukiSU/commit/"$1}') | |
| echo "ReSUKI_URL=$ReSUKI_URL" >> $GITHUB_ENV | |
| echo "ReSUKI_V=$(./sh/get_ksuver.sh "ReSukiSu" "ReSukiSU" "main")" >> $GITHUB_ENV | |
| xxKSU_URL=$(git ls-remote https://github.com/backslashxx/KernelSU HEAD | awk '{print "https://github.com/backslashxx/KernelSU/commit/"$1}') | |
| echo "xxKSU_URL=$xxKSU_URL" >> $GITHUB_ENV | |
| echo "xxKSU_V=$(./sh/get_ksuver.sh "backslashxx" "KernelSU" "master")" >> $GITHUB_ENV | |
| - name: Generate Release Body | |
| id: release_body | |
| run: | | |
| cat << EOF > release_body.md | |
| Kernels w/ KSU forks by @TheSillyOk | |
| Updated: ${{ env.date }} | |
| [Updates](https://t.me/ok_kernel) • [Support](https://t.me/ok_kernel_chat) • [Credits](https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}?tab=readme-ov-file#credits) | |
| [Github run](${{ env.run_url }}) • [Nightly run](${{ env.nightly_url }}) • CI run n°${{ github.run_number }} | |
| KSU Managers: | |
| -> Rissu's KernelSU (\`RKSU\`): [Manager](https://github.com/rsuntk/KernelSU/releases) / [CI* channel](https://t.me/rsukrnlsu) | |
| -> ReSukiSU (\`ReSUKI\`) [Manager](https://nightly.link/ReSukiSU/ReSukiSU/workflows/build-manager/main/Manager-release.zip) [CI Channel](https://t.me/ReSukiSU/4) | |
| -> KernelSU-Next (\`KSUN\`): [Releases](https://github.com/rifsxd/KernelSU-Next/releases) / [CI builds](https://t.me/ksunext_ci) | |
| -> xx's KernelSU (\`xxKSU\`): [Releases](https://github.com/backslashxx/KernelSU/releases) / [KowSU](https://t.me/kowsu_build) | |
| Versions used for KernelSU variants: | |
| -> Rissu's KernelSU (\`RKSU\`): [${{ env.RKSU_V }}](${{ env.RKSU_URL }}) | |
| -> ReSukiSU (\`ReSUKI\`): [${{ env.ReSUKI_V }}](${{ env.ReSUKI.URL }}) | |
| -> KernelSU Next (\`KSUN\`): [${{ env.KSUN_V }}](${{ env.KSUN_URL }}) | |
| -> xx's KernelSU (\`xxKSU\`): [${{ env.xxKSU_V }}](${{ env.xxKSU_URL }}) | |
| ### Unsure about which kernel to choose? [View the README.md file for recommendations](https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}?tab=readme-ov-file#kernel-recommendations). | |
| EOF | |
| - name: Set release tag | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| gh auth setup-git | |
| git clone --depth=1 "https://github.com/${{ github.repository }}" --depth=1 --branch="${{ github.ref_name }}" repo | |
| cd repo | |
| echo "repo_dir=$PWD" >> $GITHUB_ENV | |
| if [ "${{ github.ref_type }}" != "tag" ]; then | |
| if [[ "${{ github.ref_name }}" != "master" || "${{ github.event_name }}" == "schedule" ]]; then | |
| TAG=$(date +"%Y/%m/%d")-test | |
| gh release delete "$TAG" -y || true | |
| else | |
| TAG=$(date +"%Y/%m/%d")-r1 | |
| LATEST_TAG=$(gh api repos/${{ github.repository }}/tags --jq '.[0].name') | |
| BEFORE_LATEST_TAG=$(gh api repos/${{ github.repository }}/tags --jq '.[1].name') | |
| if [[ "$LATEST_TAG" == "$TAG" && "$BEFORE_LATEST_TAG" != "$TAG"* ]]; then | |
| TAG=$(echo "$LATEST_TAG" | awk -F'-r' '{suffix=$2; if (!suffix) suffix=0; suffix++; printf "%s-r%d", $1, suffix}') | |
| elif [[ "$LATEST_TAG" == "$TAG"* && "$BEFORE_LATEST_TAG" == "$TAG"* ]]; then | |
| LATEST_SUFFIX=$(echo "$LATEST_TAG" | awk -F'-r' '{suffix=$2; if (!suffix) suffix=0; suffix++; printf "%d", suffix}') | |
| BEFORE_LATEST_SUFFIX=$(echo "$BEFORE_LATEST_TAG" | awk -F'-r' '{suffix=$2; if (!suffix) suffix=0; suffix++; printf "%d", suffix}') | |
| if [ "$LATEST_SUFFIX" -gt "$BEFORE_LATEST_SUFFIX" ]; then | |
| TAG="$TAG-r$LATEST_SUFFIX" | |
| else | |
| TAG="$TAG-r$BEFORE_LATEST_SUFFIX" | |
| fi | |
| fi | |
| fi | |
| echo "Created tag: $TAG" | |
| echo "TAG=$TAG" >> $GITHUB_ENV | |
| git tag $TAG || true | |
| git push origin $TAG || true | |
| else | |
| echo "TAG=${{ github.ref_name }}" >> $GITHUB_ENV | |
| fi | |
| - name: Create Release | |
| id: create_release | |
| uses: softprops/action-gh-release@v3 | |
| with: | |
| tag_name: ${{ env.TAG }} | |
| name: ${{ env.date }} | |
| body_path: release_body.md | |
| prerelease: ${{ endsWith(env.TAG, '-test') }} | |
| - name: Upload Release Assets | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| bash ${{ env.sh_dir }}/upload-assets.sh "${{ env.TAG }}" "${{ env.repo_dir }}" "${{ env.artifacts_dir }}" | |
| - name: Send Telegram Notification | |
| if: always() | |
| run: | | |
| curl -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \ | |
| -d "chat_id=@ok_kernel_ci" \ | |
| -d "parse_mode=Markdown" \ | |
| --data-urlencode "text= | |
| • 🔔 ${{ env.tg_title }} | |
| #ci\_${{ github.run_number }} | |
| 🏷️ *Branch*: ${{ github.ref_name }} | |
| 📌 *Tag*: ${{ env.TAG }} | |
| 📆 *Released*: ${{ env.date }} | |
| [Release](https://github.com/${{ github.repository }}/releases/tag/${{ env.TAG }}) • [Workflow run](${{ env.run_url }}) • [Nightly](${{ env.nightly_url }}) | |
| • Rissu's KernelSU (RKSU) [${{ env.RKSU_V }}](${{ env.RKSU_URL }}) | |
| • ReSukiSU (ReSUKI) [${{ env.ReSUKI_V }}](${{ env.ReSUKI_URL }}) | |
| • KernelSU-Next (KSUN) [${{ env.KSUN_V }}](${{ env.KSUN_URL }}) | |
| • xx's KernelSU (xxKSU) [${{ env.xxKSU_V }}](${{ env.xxKSU_URL }})" |