Skip to content

release: Add CI number to Telegram message #213

release: Add CI number to Telegram message

release: Add CI number to Telegram message #213

Workflow file for this run

name: Kernel Build
on:
workflow_dispatch:
inputs:
workflow_call:
inputs:
scheduled:
description: 'Is it a scheduled build?'
required: true
type: boolean
default: true
pull_request:
push:
paths-ignore:
- 'README.md'
branches:
- test
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"
anykernel_branch: "sm6125"
tag: "SM6125-22.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"
anykernel_branch: "ginkgo"
tag: "SM6125-22.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: "Snowflake"
kernel_url: "https://github.com/liquidprjkt/snowflake_laurel_sprout"
kernel_branch: "snowflake_noname"
tag: "Snowflake"
defconfig: "vendor/laurel_sprout-perf_defconfig"
- kernel_name: "N18.1"
kernel_url: "https://github.com/TheSillyOk/kernel_laurel_sprout"
kernel_branch: "lineage-18.1"
tag: "NoName-18.1"
python3_patch: true
- kernel_name: "N-VIC"
kernel_url: "https://github.com/TheSillyOk/kernel_laurel_sprout"
kernel_branch: "vic"
tag: "NoName-VIC"
python3_patch: true
build_type: ["Normal", "RKSU", "KSUN"]
susfs: [false, true]
exclude:
- build_type: "Normal"
susfs: true
permissions:
contents: write
steps:
- name: Set Environment Variables
id: vars
run: |
echo "defconfig=${{ matrix.kernel_config.defconfig || 'vendor/laurel_sprout-perf_defconfig' }}" >> $GITHUB_ENV
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
- 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
sudo curl -L https://raw.githubusercontent.com/kadwanev/retry/master/retry -o /usr/local/bin/retry && sudo chmod +x /usr/local/bin/retry
- name: Cache Clang
uses: actions/cache@v4
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: |
retry -t 3 -s 5 "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@v4
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-${{ github.sha }}
${{ env.device }}-${{ matrix.build_type }}-${{ matrix.kernel_config.tag }}-SUSFS_${{ matrix.susfs }}-ccache-
- 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"
if ${{ env.python3 }}; then
patch -p1 -F 3 -N < "${{ env.workspace_folder }}/kernel_patches/python3.patch" || true
fi
for patch_name in fix_lto ptrace_fix; do
patch -p1 < "${{ env.workspace_folder }}/kernel_patches/${patch_name}.patch" || true
done
sed -i 's/-dirty//' ./scripts/setlocalversion
sed -i -E 's/^(CONFIG_LOCALVERSION=.*)/\1-Ok/gi' "arch/arm64/configs/${{ env.defconfig }}"
sed -i -E 's/^CONFIG_(LTO[^=]*|HAVE_LTO[^=]*|CC_OPTIMIZE_FOR[^=]*|MODVERSIONS)=(y|n)/# CONFIG_\1=\2/g' "arch/arm64/configs/${{ env.defconfig }}"
echo -e "\n\n# Workflow added configs #\nCONFIG_LTO_CLANG=y\nCONFIG_LTO_CLANG_THIN=y\nCONFIG_HAVE_LTO_CLANG=y\nCONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y\nCONFIG_MODVERSIONS=n" >> "arch/arm64/configs/${{ env.defconfig }}"
- name: Apply KernelSU / Forks
if: matrix.build_type != 'Normal'
working-directory: ${{ env.kernel_folder }}
run: |
set -e
case "${{ matrix.build_type }}" in
KSU)
curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.9.5
for patch_name in path_unmount get_cred_rcu strncpy_from_user_nofault ${{ env.patches_folder }}/manual_hooks; do
patch -p1 -F 3 -N < "${{ env.patches_dir }}/${patch_name}.patch"
done
;;
KSUN)
curl -LSs "https://raw.githubusercontent.com/rifsxd/KernelSU-Next/next/kernel/setup.sh" | bash -s next
patch -p1 -F 3 -N < "${{ env.patches_dir }}/KSUN/syscall_hooks.patch"
;;
RKSU)
curl -LSs "https://raw.githubusercontent.com/rsuntk/KernelSU/main/kernel/setup.sh" | bash -s main
for patch_name in path_unmount get_cred_rcu strncpy_from_user_nofault KSUN/syscall_hooks; do
patch -p1 -F 3 -N < "${{ env.patches_dir }}/${patch_name}.patch"
done
;;
esac
sed -i -E 's/^CONFIG_(KPROBES|TMPFS_XATTR|KSU[^=]*)=(y|n)/# CONFIG_\1=\2/g' "arch/arm64/configs/${{ env.defconfig }}"
echo -e "\nCONFIG_KPROBES=n\nCONFIG_KSU=y\nCONFIG_TMPFS_XATTR=y\n" >> "arch/arm64/configs/${{ env.defconfig }}"
- name: Apply SUSFS
if: matrix.susfs
working-directory: ${{ env.kernel_folder }}
run: |
set -e
SUSFS_FOLDER="${{ env.workspace_folder }}/susfs4ksu"
git clone --depth=1 https://gitlab.com/simonpunk/susfs4ksu.git -b "${{ env.susfs_branch }}" "$SUSFS_FOLDER"
case "${{ matrix.build_type }}" in
KSU)
patch -p1 -F 3 -N < "$SUSFS_FOLDER/kernel_patches/50_add_susfs_in_${{ env.susfs_branch }}.patch" || true
patch -p1 -F 3 -N < "${{ env.patches_dir }}/${{ env.patches_folder }}/fix_susfs_rejects.patch" || true
cp -r $SUSFS_FOLDER/kernel_patches/fs/* fs/
cp -r $SUSFS_FOLDER/kernel_patches/include/linux/* include/linux
cd KernelSU
patch -p1 -F 3 -N < "$SUSFS_FOLDER/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch"
;;
RKSU|KSUN)
patch -p1 -F 3 -N < "${{ env.patches_dir }}/susfs-1.5.9.patch" || true
cd KernelSU*
patch -p1 -F 3 -N < "${{ env.patches_dir }}/${{ matrix.build_type }}/${{ matrix.build_type }}-SUSFS-1.5.9.patch"
;;
esac
- 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 ${{ env.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
BUILD_SUFFIX=""
case "${{ matrix.build_type }}" in
KSUN) BUILD_SUFFIX="-KSUNext" ;;
KSU) BUILD_SUFFIX="-KSU" ;;
RKSU) BUILD_SUFFIX="-RKSU" ;;
esac
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@v4
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@v4
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
if [ -n "${{ inputs.scheduled_build }}" ]; 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 HEAD | awk '{print "https://github.com/KernelSU-Next/KernelSU-Next/commit/"$1}')
RKSU_URL=$(git ls-remote https://github.com/rsuntk/KernelSU HEAD | awk '{print "https://github.com/rsuntk/KernelSU/commit/"$1}')
echo "KSUN_URL=$KSUN_URL" >> $GITHUB_ENV
echo "RKSU_URL=$RKSU_URL" >> $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
echo "KSUN_V=$(./sh/get_ksuver.sh "KernelSU-Next" "KernelSU-Next" "next")" >> $GITHUB_ENV
echo "RKSU_V=$(./sh/get_ksuver.sh "rsuntk" "KernelSU" "main")" >> $GITHUB_ENV
- name: Generate Release Body
id: release_body
run: |
cat << EOF > release_body.md
Kernels w/ KSU (and forks) + SUSFS by @TheSillyOk
Updated: ${{ env.date }}
[Updates](https://t.me/ok_kernel) • [Support](https://t.me/ok_kernel_chat)
[Github run](${{ env.run_url }}) • [Nightly run](${{ env.nightly_url }})
[SUSFS Module](https://github.com/sidex15/ksu_module_susfs/releases)
KSU Managers:
-> Rissu's KernelSU (\`RKSU\`): [Manager](https://github.com/rsuntk/KernelSU/releases) / [Alternative](https://t.me/mksu_ci)
-> KernelSU-Next (\`KSUN\`): [Releases](https://github.com/rifsxd/KernelSU-Next/releases) / [CI builds](https://t.me/ksunext_ci)
Versions used for KernelSU variants & susfs:
-> Rissu's KernelSU (\`RKSU\`): [${{ env.RKSU_V }}](${{ env.RKSU_URL }}) - SUSFS 1.5.9
-> KernelSU Next (\`KSUN\`): [${{ env.KSUN_V }}](${{ env.KSUN_URL }}) - SUSFS 1.5.9
Credits:
• @Skyblueborb for helping in building the kernel & kernel source
• @aleeeee1 & @PowerX-NOT & @RainySorcerer for kernel sources
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" ]]; 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@v2
with:
tag_name: ${{ env.TAG }}
name: ${{ env.date }}
body_path: release_body.md
prerelease: ${{ github.ref_name != 'master' }}
- 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 }})
• KernelSU-Next (KSUN) [${{ env.KSUN_V }}](${{ env.KSUN_URL }})
• Rissu's KernelSU (RKSU) [${{ env.RKSU_V }}](${{ env.RKSU_URL }})"