diff --git a/.github/actions/apply-device-patches/action.yml b/.github/actions/apply-device-patches/action.yml new file mode 100644 index 0000000000..9edd4bad93 --- /dev/null +++ b/.github/actions/apply-device-patches/action.yml @@ -0,0 +1,35 @@ +name: 'Apply Device-Specific Patches' +description: 'Apply WiFi/Bluetooth fixes for Samsung and Xiaomi 6.6 GKI devices' +inputs: + kernel_version: + description: 'Kernel version (e.g., 6.6)' + required: true + +runs: + using: "composite" + steps: + - name: Fix WiFi and Bluetooth on Samsung 6.6 GKI Devices + if: ${{ inputs.kernel_version == '6.6' }} + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + SYMBOL_LIST=android/abi_gki_aarch64_galaxy + echo "kdp_set_cred_non_rcu" >> $SYMBOL_LIST + echo "kdp_usecount_dec_and_test" >> $SYMBOL_LIST + echo "kdp_usecount_inc" >> $SYMBOL_LIST + + PATCH="${{ github.workspace }}/kernel_patches/samsung/min_kdp/add-min_kdp-symbols.patch" + if patch -p1 --dry-run < "$PATCH"; then + patch -p1 --no-backup-if-mismatch < $PATCH + fi + + cp "${{ github.workspace }}/kernel_patches/samsung/min_kdp/min_kdp.c" drivers/min_kdp.c + echo "obj-y += min_kdp.o" >> drivers/Makefile + + - name: Fix WiFi and Bluetooth on Xiaomi 6.6 GKI Devices + if: ${{ inputs.kernel_version == '6.6' }} + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + SYMBOL_LIST=android/abi_gki_aarch64_xiaomi + echo "device_find_any_child" >> $SYMBOL_LIST diff --git a/.github/actions/apply-kernel-branding/action.yml b/.github/actions/apply-kernel-branding/action.yml new file mode 100644 index 0000000000..81df837c2e --- /dev/null +++ b/.github/actions/apply-kernel-branding/action.yml @@ -0,0 +1,49 @@ +name: 'Apply Kernel Branding' +description: 'Apply Wild kernel branding to kernel version string' +inputs: + build_type: + description: 'Build type (Normal, Bypass, MarionKernel, Hakan, etc.)' + required: true + kernel_version: + description: 'Kernel version (e.g., 5.10, 6.1, 6.6)' + required: true + +runs: + using: "composite" + steps: + - name: Apply Kernel Name Branding + if: false + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + # Apply kernel branding based on version and variant + if [[ "${{ inputs.kernel_version }}" == "5."* ]] || [[ "${{ inputs.kernel_version }}" == "6.1" ]]; then + # Older kernels: append to end of version string + case ${{ inputs.build_type }} in + MarionKernel) + perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-Wild-MarionKernel"/s' ./common/scripts/setlocalversion + ;; + Hakan) + perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-Wild-Hakan"/s' ./common/scripts/setlocalversion + ;; + TheWildJames) + perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-Wild-TheWildJames"/s' ./common/scripts/setlocalversion + ;; + vTomsonek) + perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-Wild-vTomsonek"/s' ./common/scripts/setlocalversion + ;; + *) + perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-Wild"/s' ./common/scripts/setlocalversion + ;; + esac + else + # Newer kernels (6.6+): insert before scm_version + case ${{ inputs.build_type }} in + *) + perl -i -0777 -pe 's/(.*)echo "\$\{KERNELVERSION\}\$\{file_localversion\}\$\{config_localversion\}\$\{LOCALVERSION\}\$\{scm_version\}"/$1echo "\${KERNELVERSION}\${file_localversion}\${config_localversion}\${LOCALVERSION}-Wild\${scm_version}"/s' ./common/scripts/setlocalversion + ;; + esac + fi + + # Set build timestamp + export KBUILD_BUILD_TIMESTAMP="$(date -u '+%a %b %e %H:%M:%S UTC %Y')" diff --git a/.github/actions/bbg/action.yml b/.github/actions/bbg/action.yml new file mode 100644 index 0000000000..63fc177df9 --- /dev/null +++ b/.github/actions/bbg/action.yml @@ -0,0 +1,41 @@ +name: Setup Baseband Guard (BBG) +description: Download and configure Baseband Guard security module + +runs: + using: composite + steps: + - name: Install Baseband Guard + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + wget -O- https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh | bash + + - name: Configure Baseband Guard + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + # Add BBG to defconfig + echo "CONFIG_BBG=y" >> "${{ github.workspace }}/wild_gki.fragment" + + # Modify security Kconfig to include baseband_guard in LSM + sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/selinux/selinux,baseband_guard/ } }' common/security/Kconfig + + - name: Verify BBG Installation + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + if grep -q "baseband_guard" common/security/Kconfig; then + echo "โœ“ SUCCESS: baseband_guard found in common/security/Kconfig" + grep -n "baseband_guard" common/security/Kconfig || true + else + echo "โœ— FAILED: baseband_guard not found in common/security/Kconfig" + exit 1 + fi + + - name: Extract BBG Version + shell: bash + working-directory: ${{ github.workspace }}/kernel/Baseband-guard + run: | + # Extract and export BBG version info + BBG_COMMIT=$(git rev-parse --short HEAD 2>/dev/null) + echo "BBG_COMMIT=$BBG_COMMIT" >> $GITHUB_ENV diff --git a/.github/actions/clean-kernel-flags/action.yml b/.github/actions/clean-kernel-flags/action.yml new file mode 100644 index 0000000000..e1293a3336 --- /dev/null +++ b/.github/actions/clean-kernel-flags/action.yml @@ -0,0 +1,29 @@ +name: 'Clean Kernel Flags' +description: 'Clean dirty flags and ABI exports to prevent build errors' + +runs: + using: "composite" + steps: + - name: Clean Dirty Flags and ABI Exports + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + # Clean dirty flags and ABI exports based on build system + if [ -f "build/build.sh" ]; then + # Old build system (5.10, 5.15, early 6.1) + sed -i 's/-dirty//' ./common/scripts/setlocalversion + else + # Bazel build system (newer kernels) + sed -i "/stable_scmversion_cmd/s/-maybe-dirty//g" ./build/kernel/kleaf/impl/stamp.bzl + sed -i 's/-dirty//' ./common/scripts/setlocalversion + # Remove ABI protected exports to prevent build errors + rm -rf ./common/android/abi_gki_protected_exports_* + perl -pi -e 's/^\s*"protected_exports_list"\s*:\s*"android\/abi_gki_protected_exports_aarch64",\s*$//;' ./common/BUILD.bazel + fi + + # Commit changes to avoid dirty state during build + cd ${{ github.workspace }}/kernel/common + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add . + git commit -m "Wild: Clean Dirty Flag" diff --git a/.github/actions/configure-kernel/action.yml b/.github/actions/configure-kernel/action.yml new file mode 100644 index 0000000000..43da2092dc --- /dev/null +++ b/.github/actions/configure-kernel/action.yml @@ -0,0 +1,56 @@ +name: 'Configure Kernel Options' +description: 'Set up kernel configuration fragment with required options' +inputs: + kernel_version: + description: 'Kernel version (e.g., 6.6)' + required: true + +runs: + using: "composite" + steps: + - name: Apply Kernel Configuration + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + cat >> "${{ github.workspace }}/wild_gki.fragment" << 'EOF' + # Optional kernel config placeholders + # Networking Configuration + CONFIG_IP_NF_TARGET_TTL=y + CONFIG_IP6_NF_TARGET_HL=y + CONFIG_IP6_NF_MATCH_HL=y + + # BBR TCP Congestion Control + CONFIG_TCP_CONG_ADVANCED=y + CONFIG_TCP_CONG_BBR=y + CONFIG_NET_SCH_FQ=y + # CONFIG_TCP_CONG_BIC is not set + # CONFIG_TCP_CONG_WESTWOOD is not set + # CONFIG_TCP_CONG_HTCP is not set + + # IPSet Support + CONFIG_IP_SET=y + CONFIG_IP_SET_MAX=65534 + CONFIG_IP_SET_BITMAP_IP=y + CONFIG_IP_SET_BITMAP_IPMAC=y + CONFIG_IP_SET_BITMAP_PORT=y + CONFIG_IP_SET_HASH_IP=y + CONFIG_IP_SET_HASH_IPMARK=y + CONFIG_IP_SET_HASH_IPPORT=y + CONFIG_IP_SET_HASH_IPPORTIP=y + CONFIG_IP_SET_HASH_IPPORTNET=y + CONFIG_IP_SET_HASH_IPMAC=y + CONFIG_IP_SET_HASH_MAC=y + CONFIG_IP_SET_HASH_NETPORTNET=y + CONFIG_IP_SET_HASH_NET=y + CONFIG_IP_SET_HASH_NETNET=y + CONFIG_IP_SET_HASH_NETPORT=y + CONFIG_IP_SET_HASH_NETIFACE=y + CONFIG_IP_SET_LIST_SET=y + EOF + + - name: Apply Kernel Config for 5.10 + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + if: inputs.kernel_version == '5.10' + run: | + sed -i 's/CONFIG_IP_SET_MAX/65534/g' net/netfilter/ipset/ip_set_core.c diff --git a/.github/actions/download-kernel/action.yml b/.github/actions/download-kernel/action.yml new file mode 100644 index 0000000000..6794246749 --- /dev/null +++ b/.github/actions/download-kernel/action.yml @@ -0,0 +1,47 @@ +name: 'Download Kernel Repository' +description: 'Initialize and sync Android kernel source repository' + +inputs: + android_version: + description: 'Android version (e.g., android14)' + required: true + kernel_version: + description: 'Kernel version (e.g., 5.15, 6.1)' + required: true + os_patch_level: + description: 'OS patch level (e.g., 2024-01)' + required: true + +outputs: + deprecated_branch: + description: 'Whether the branch is deprecated' + value: ${{ steps.sync.outputs.deprecated }} + +runs: + using: composite + steps: + - name: Initialize and Sync Kernel Repository + id: sync + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + FORMATTED_BRANCH="${{ inputs.android_version }}-${{ inputs.kernel_version }}-${{ inputs.os_patch_level }}" + + # Initialize repo with the target branch + repo init -u https://android.googlesource.com/kernel/manifest -b common-${FORMATTED_BRANCH} --depth=1 + + # Check if branch is deprecated + REMOTE_BRANCH=$(git ls-remote https://android.googlesource.com/kernel/common ${FORMATTED_BRANCH}) + DEFAULT_MANIFEST_PATH=.repo/manifests/default.xml + DEPRECATED=false + + if grep -q deprecated <<< $REMOTE_BRANCH; then + sed -i "s/\"${FORMATTED_BRANCH}\"/\"deprecated\/${FORMATTED_BRANCH}\"/g" $DEFAULT_MANIFEST_PATH + echo "โš  Note: Branch ${FORMATTED_BRANCH} is considered deprecated." + DEPRECATED=true + fi + + echo "deprecated=$DEPRECATED" >> $GITHUB_OUTPUT + + # Sync kernel source + repo --trace sync -c -j$(nproc --all) --fail-fast --no-tags --force-sync --no-clone-bundle diff --git a/.github/actions/fetch-commits/action.yml b/.github/actions/fetch-commits/action.yml new file mode 100644 index 0000000000..4ffa7d32c0 --- /dev/null +++ b/.github/actions/fetch-commits/action.yml @@ -0,0 +1,96 @@ +name: Fetch Latest Commits +description: "Fetches the latest commit hashes for Wild KSU, AnyKernel3, Kernel Patches, and SUSFS" +inputs: + ksu_commit: + description: "Optional: Specific Wild KSU commit to use" + required: false + default: "" +outputs: + ksu_commit: + description: "Wild KSU Commit" + value: ${{ steps.commits.outputs.ksu_commit }} + anykernel_commit: + description: "AnyKernel3 Commit" + value: ${{ steps.commits.outputs.anykernel_commit }} + patches_commit: + description: "Kernel Patches Commit" + value: ${{ steps.commits.outputs.patches_commit }} + susfs_commit: + description: "SUSFS Commit (Map)" + value: ${{ steps.commits.outputs.susfs_commit }} + +runs: + using: "composite" + steps: + - name: Get Latest Commits + id: commits + shell: bash + run: | + # Helper to get latest commit from remote without cloning full repo + get_commit() { + git ls-remote "$1" "$2" | awk '{print $1}' + } + + echo "Fetching latest commits..." + + # Wild KSU + if [ -n "${{ inputs.ksu_commit }}" ]; then + # Try to resolve input as a ref (branch/tag) + resolved_commit=$(get_commit "https://github.com/WildKernels/Wild_KSU.git" "${{ inputs.ksu_commit }}") + + if [ -n "$resolved_commit" ]; then + ksu_commit="$resolved_commit" + else + # If resolution failed, assume input is a commit SHA + ksu_commit="${{ inputs.ksu_commit }}" + fi + echo "Using provided Wild KSU commit: $ksu_commit" + else + ksu_commit=$(get_commit "https://github.com/WildKernels/Wild_KSU.git" "refs/heads/canary") + echo "Wild KSU: $ksu_commit" + fi + echo "ksu_commit=$ksu_commit" >> $GITHUB_OUTPUT + + # AnyKernel3 + AK3_COMMIT=$(get_commit "https://github.com/WildKernels/AnyKernel3.git" "refs/heads/gki-2.0") + echo "AnyKernel3: $AK3_COMMIT" + echo "anykernel_commit=$AK3_COMMIT" >> $GITHUB_OUTPUT + + # Kernel Patches + PATCHES_COMMIT=$(get_commit "https://github.com/WildKernels/kernel_patches.git" "HEAD") + echo "Kernel Patches: $PATCHES_COMMIT" + echo "patches_commit=$PATCHES_COMMIT" >> $GITHUB_OUTPUT + + # SUSFS (using gitlab) - Fetch all relevant branches + SUSFS_REPO="https://gitlab.com/simonpunk/susfs4ksu.git" + echo "Fetching SUSFS commits for all branches..." + + # We need to construct a JSON object or a simple string map + # Format: branch1:commit1,branch2:commit2,... + + BRANCHES=( + "gki-android12-5.10" + "gki-android13-5.10" + "gki-android13-5.15" + "gki-android14-5.15" + "gki-android14-6.1" + "gki-android15-6.6" + "gki-android16-6.12" + ) + + SUSFS_MAP="" + for branch in "${BRANCHES[@]}"; do + COMMIT=$(get_commit "$SUSFS_REPO" "refs/heads/$branch") + if [ -n "$COMMIT" ]; then + echo " $branch: $COMMIT" + if [ -z "$SUSFS_MAP" ]; then + SUSFS_MAP="$branch:$COMMIT" + else + SUSFS_MAP="$SUSFS_MAP,$branch:$COMMIT" + fi + else + echo " $branch: Not found" + fi + done + + echo "susfs_commit=$SUSFS_MAP" >> $GITHUB_OUTPUT diff --git a/.github/actions/hakan/action.yml b/.github/actions/hakan/action.yml new file mode 100644 index 0000000000..69d2b83020 --- /dev/null +++ b/.github/actions/hakan/action.yml @@ -0,0 +1,21 @@ +name: Setup RFKILL Modules +description: Configure WiFi/Bluetooth RFKILL modules for Hakan variant + +runs: + using: composite + steps: + - name: Configure RFKILL for WiFi/Bluetooth + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + cat >> "${{ github.workspace }}/wild_gki.fragment" << 'EOF' + CONFIG_RFKILL=y + CONFIG_CFG80211=y + CONFIG_MAC80211=y + EOF + + # Remove libarc4.ko and rfkill.ko from modules list + sed -i \ + -e '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*"lib\/crypto\/libarc4\.ko",[[:space:]]*$/d}' \ + -e '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*"net\/rfkill\/rfkill\.ko",[[:space:]]*$/d}' \ + common/modules.bzl diff --git a/.github/actions/susfs-patches/action.yml b/.github/actions/susfs-patches/action.yml new file mode 100644 index 0000000000..b47cf03da4 --- /dev/null +++ b/.github/actions/susfs-patches/action.yml @@ -0,0 +1,127 @@ +name: Setup SUSFS Patches +description: Clone and apply SUSFS patches with version-specific fixes +inputs: + android_version: + description: 'Android version (e.g., android15)' + required: true + kernel_version: + description: 'Kernel version (e.g., 6.6)' + required: true + os_patch_level: + description: 'OS patch level (e.g., 2024-07)' + required: true + sublevel: + description: 'Kernel sublevel' + required: true + +runs: + using: composite + steps: + - name: Apply Android 12 5.10 Fixes + if: inputs.android_version == 'android12' && inputs.kernel_version == '5.10' + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + SUBLEVEL=${{ env.SUBLEVEL }} + SUSFS_VERSION=${{ env.SUSFS_VERSION }} + + if [[ "$SUBLEVEL" -le 209 ]]; then + sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c + fi + + if [[ "$SUBLEVEL" -le 117 ]]; then + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a12-5.10/fdinfo.c.patch ./ + patch -p1 < fdinfo.c.patch + fi + + if [[ "$SUBLEVEL" -le 43 ]]; then + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a12-5.10/base.c.patch ./ + patch -p1 < base.c.patch + fi + + - name: Apply Android 13 5.10 Fixes + if: inputs.android_version == 'android13' && inputs.kernel_version == '5.10' + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + SUBLEVEL=${{ env.SUBLEVEL }} + SUSFS_VERSION=${{ env.SUSFS_VERSION }} + + if [[ "$SUBLEVEL" -le 107 ]]; then + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.10/fdinfo.c.patch ./ + patch -p1 < fdinfo.c.patch + fi + + if [[ "$SUBLEVEL" -le 209 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then + sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c + fi + + - name: Apply Android 13 5.15 Fixes + if: inputs.android_version == 'android13' && inputs.kernel_version == '5.15' + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + SUBLEVEL=${{ env.SUBLEVEL }} + SUSFS_VERSION=${{ env.SUSFS_VERSION }} + + if [[ "$SUBLEVEL" -le 41 ]]; then + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/namespace.c.patch ./ + patch -p1 < namespace.c.patch + + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/fdinfo.c.patch ./ + patch -p1 < fdinfo.c.patch + + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/open.c.patch ./ + patch -p1 < open.c.patch + + sed -i 's|i_uid_into_mnt(i_user_ns(&fi->inode), &fi->inode).val|fi->inode.i_uid.val|g' fs/susfs.c + sed -i 's|i_uid_into_mnt(i_user_ns(inode), inode).val|inode->i_uid.val|g' fs/susfs.c + fi + + if [[ "$SUBLEVEL" -le 148 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then + sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c + fi + + - name: Apply Android 14 5.15 Fixes + if: inputs.android_version == 'android14' && inputs.kernel_version == '5.15' + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + SUBLEVEL=${{ env.SUBLEVEL }} + + if [[ "$SUBLEVEL" -le 148 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then + sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c + fi + + - name: Apply Android 14 6.1 Fixes + if: inputs.android_version == 'android14' && inputs.kernel_version == '6.1' + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + SUBLEVEL=${{ env.SUBLEVEL }} + SUSFS_VERSION=${{ env.SUSFS_VERSION }} + + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a14-6.1/base.c.patch ./ + patch -p1 < base.c.patch + + if [[ "$SUBLEVEL" -le 75 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then + sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c + fi + + - name: Apply Android 15 6.6 Fixes + if: inputs.android_version == 'android15' && inputs.kernel_version == '6.6' + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + SUBLEVEL=${{ env.SUBLEVEL }} + SUSFS_VERSION=${{ env.SUSFS_VERSION }} + + if [[ "$SUBLEVEL" -le 92 ]]; then + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a15-6.6/base.c.patch ./ + patch -p1 < base.c.patch + fi + + if [[ "$SUBLEVEL" -le 58 ]]; then + cp ${{ github.workspace }}/kernel_patches/wild/susfs_fix_patches/v${SUSFS_VERSION}/a15-6.6/task_mmu.c.patch ./ + patch -p1 < task_mmu.c.patch + fi \ No newline at end of file diff --git a/.github/actions/susfs/action.yml b/.github/actions/susfs/action.yml new file mode 100644 index 0000000000..26fc66cc24 --- /dev/null +++ b/.github/actions/susfs/action.yml @@ -0,0 +1,88 @@ +name: Setup SUSFS +description: Clone and apply SUSFS patches with version-specific fixes +inputs: + android_version: + description: 'Android version (e.g., android15)' + required: true + kernel_version: + description: 'Kernel version (e.g., 6.6)' + required: true + os_patch_level: + description: 'OS patch level (e.g., 2024-07)' + required: true + sublevel: + description: 'Kernel sublevel' + required: true + susfs_commit: + description: 'Commit map (branch:commit,branch:commit...)' + required: false + +runs: + using: composite + steps: + - name: Setup SUSFS Branch + shell: bash + run: | + SUSFS_BRANCH="gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}" + SUSFS_REPO="https://gitlab.com/simonpunk/susfs4ksu.git" + + echo "Preparing SUSFS for branch: $SUSFS_BRANCH" + + # Parse commit map to find the commit for this branch + COMMIT_MAP="${{ inputs.susfs_commit }}" + TARGET_COMMIT="" + + if [ -n "$COMMIT_MAP" ]; then + # Split by comma + IFS=',' read -ra ENTRIES <<< "$COMMIT_MAP" + for entry in "${ENTRIES[@]}"; do + # Split by colon + IFS=':' read -r branch commit <<< "$entry" + if [ "$branch" == "$SUSFS_BRANCH" ]; then + TARGET_COMMIT="$commit" + break + fi + done + fi + + if [ -n "$TARGET_COMMIT" ]; then + echo "Found specific commit for $SUSFS_BRANCH: $TARGET_COMMIT" + git clone "$SUSFS_REPO" -b "$SUSFS_BRANCH" susfs4ksu + cd susfs4ksu + git checkout "$TARGET_COMMIT" + cd .. + else + echo "No specific commit found for $SUSFS_BRANCH, cloning latest..." + git clone "$SUSFS_REPO" -b "$SUSFS_BRANCH" --depth=1 susfs4ksu + fi + + SUSFS_VERSION="2.0.0" + echo "SUSFS_VERSION=$SUSFS_VERSION" >> $GITHUB_ENV + + - name: Enable KernelSU SUSFS Config + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + cat >> "${{ github.workspace }}/wild_gki.fragment" << 'EOF' + # KernelSU SUSFS Configuration + CONFIG_KSU_SUSFS=y + CONFIG_KSU_SUSFS_SUS_PATH=y + CONFIG_KSU_SUSFS_SUS_MOUNT=y + CONFIG_KSU_SUSFS_SUS_KSTAT=y + CONFIG_KSU_SUSFS_SPOOF_UNAME=y + CONFIG_KSU_SUSFS_ENABLE_LOG=y + CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y + CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y + CONFIG_KSU_SUSFS_OPEN_REDIRECT=y + CONFIG_KSU_SUSFS_SUS_MAP=y + EOF + + - name: Apply Base SUSFS Patches + shell: bash + working-directory: ${{ github.workspace }}/kernel/common + run: | + # Apply base SUSFS patches + cp "${{ github.workspace }}/susfs4ksu/kernel_patches/fs/"* "${{ github.workspace }}/kernel/common/fs/" + cp "${{ github.workspace }}/susfs4ksu/kernel_patches/include/linux/"* "${{ github.workspace }}/kernel/common/include/linux/" + cp ${{ github.workspace }}/susfs4ksu/kernel_patches/50_add_susfs_in_gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}.patch ./ + patch -p1 < 50_add_susfs_in_gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}.patch || true \ No newline at end of file diff --git a/.github/actions/telegram-notify/action.yml b/.github/actions/telegram-notify/action.yml new file mode 100644 index 0000000000..b5aa112804 --- /dev/null +++ b/.github/actions/telegram-notify/action.yml @@ -0,0 +1,112 @@ +name: 'Telegram Notification' +description: 'Send Telegram notifications for kernel builds' +inputs: + release_type: + description: 'Type of release (Actions, Pre-Release, Release)' + required: true + new_tag: + description: 'New release tag' + required: false + default: '' + release_result: + description: 'Result of the release job' + required: false + default: 'success' + telegram_bot_token: + description: 'Telegram bot token' + required: true + telegram_chat_id: + description: 'Telegram chat ID for announcements' + required: true + telegram_topic_id: + description: 'Telegram topic/thread ID' + required: true + telegram_user_id: + description: 'Telegram user ID for direct messages' + required: true + artifact_pattern: + description: 'Pattern for artifacts to download' + required: false + default: '*-TheWildJames-AnyKernel3' + +runs: + using: "composite" + steps: + - name: Download Kernel Artifacts + uses: actions/download-artifact@v4 + with: + path: ./downloaded-artifacts + pattern: ${{ inputs.artifact_pattern }} + + - name: Prepare Artifact Zips + shell: bash + run: | + shopt -s nullglob + # Iterate over directories in downloaded-artifacts + for dir in ./downloaded-artifacts/*-AnyKernel3; do + [ -d "$dir" ] || continue + artifact_name=$(basename "$dir") + # Create zip for each artifact + (cd "$dir" && zip -r -q -9 "$GITHUB_WORKSPACE/${artifact_name}.zip" ./*) + done + + - name: Send Telegram Notification (Actions) + if: ${{ inputs.release_type == 'Actions' }} + shell: bash + run: | + curl -X POST "https://api.telegram.org/bot${{ inputs.telegram_bot_token }}/sendMessage" \ + -F chat_id="${{ inputs.telegram_chat_id }}" \ + -F message_thread_id="${{ inputs.telegram_topic_id }}" \ + -F text=" + ๐ŸŒฝ *New Kernel Actions Build Finished* + ๐Ÿ“ฆ *Repository:* [${{ github.repository }}](https://github.com/${{ github.repository }}) + โœ๏ธ *Commit:* [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) + [๐Ÿ”— View Action Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" \ + -F parse_mode="Markdown" + + - name: Send Telegram Notification (Release) + if: ${{ inputs.release_type != 'Actions' && inputs.release_result == 'success' }} + shell: bash + run: | + RELEASE_TYPE_TEXT="" + if [ "${{ inputs.release_type }}" == "Pre-Release" ]; then + RELEASE_TYPE_TEXT="๐Ÿงช *Pre-Release*" + else + RELEASE_TYPE_TEXT="๐Ÿš€ *Release*" + fi + + curl -X POST "https://api.telegram.org/bot${{ inputs.telegram_bot_token }}/sendMessage" \ + -F chat_id="${{ inputs.telegram_chat_id }}" \ + -F message_thread_id="${{ inputs.telegram_topic_id }}" \ + -F text=" + ๐ŸŒฝ *New Kernel $RELEASE_TYPE_TEXT Uploaded* + ๐Ÿ“ฆ *Repository:* [${{ github.repository }}](https://github.com/${{ github.repository }}) + โœ๏ธ *Commit:* [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) + [๐Ÿ”— View GitHub Release](https://github.com/${{ github.repository }}/releases/tag/${{ inputs.new_tag }})" \ + -F parse_mode="Markdown" + + - name: Send Direct Message with Artifacts + if: always() + shell: bash + run: | + shopt -s nullglob + files=("$GITHUB_WORKSPACE"/*.zip) + + if [ ${#files[@]} -eq 0 ]; then + echo "No ZIP files found for DM." + exit 0 + fi + + if [ -z "${{ inputs.telegram_user_id }}" ]; then + echo "Error: telegram_user_id is not set." + exit 1 + fi + + for file in "${files[@]}"; do + # Send each zip to Telegram DM + # Using || true to prevent failure of one send from failing the whole action + curl -v -F chat_id="${{ inputs.telegram_user_id }}" \ + -F document=@"$file" \ + -F caption="๐Ÿ“ฆ Build: $(basename "$file")" \ + https://api.telegram.org/bot${{ inputs.telegram_bot_token }}/sendDocument || true + done diff --git a/.github/actions/vtomsonek/action.yml b/.github/actions/vtomsonek/action.yml new file mode 100644 index 0000000000..d0a8977afd --- /dev/null +++ b/.github/actions/vtomsonek/action.yml @@ -0,0 +1,92 @@ +name: 'Setup Audio Modules' +description: 'Configure SND audio modules for vTomsonek variant' +inputs: + android_version: + description: 'Android version' + required: true + kernel_version: + description: 'Kernel version' + required: true + sublevel: + description: 'Kernel sublevel' + required: true + os_patch_level: + description: 'OS patch level' + required: true + +runs: + using: "composite" + steps: + - name: Configure SND Audio Modules + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + cat >> "${{ github.workspace }}/wild_gki.fragment" << 'EOF' + # Sound Configuration + CONFIG_SND=y + CONFIG_SND_DRIVERS=y + CONFIG_SND_PCM=y + CONFIG_SND_TIMER=y + CONFIG_SND_DYNAMIC_MINORS=y + CONFIG_SND_PROC_FS=y + CONFIG_SND_ALOOP=m + CONFIG_USB_GADGET=y + CONFIG_CONFIGFS_FS=y + CONFIG_USB_CONFIGFS=y + CONFIG_USB_LIBCOMPOSITE=m + CONFIG_USB_AUDIO=m + CONFIG_USB_CONFIGFS_F_UAC1=y + CONFIG_USB_CONFIGFS_F_UAC2=y + EOF + + # Add audio modules to gki modules list + echo "drivers/usb/gadget/legacy/g_audio.ko" >> common/android/gki_aarch64_modules + echo "sound/drivers/snd-aloop.ko" >> common/android/gki_aarch64_modules + + if [[ -f common/modules.bzl ]]; then + # Insert audio modules into the module list based on version + if [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" && ${{ inputs.sublevel }} -le 110 && "${{ inputs.os_patch_level }}" != "2023-09" ]] \ + || [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "6.1" && ${{ inputs.sublevel }} -le 25 && "${{ inputs.os_patch_level }}" != "2023-09" ]]; then + # For older kernel builds + sed -i '/COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "sound/drivers/snd-aloop.ko", + }' common/modules.bzl + sed -i '/COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "drivers/usb/gadget/libcomposite.ko", + }' common/modules.bzl + sed -i '/COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "drivers/usb/gadget/legacy/g_audio.ko", + }' common/modules.bzl + else + # For newer kernel builds + sed -i '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "sound/drivers/snd-aloop.ko", + }' common/modules.bzl + sed -i '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "drivers/usb/gadget/libcomposite.ko", + }' common/modules.bzl + sed -i '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "drivers/usb/gadget/legacy/g_audio.ko", + }' common/modules.bzl + fi + + # Verify injection success + if grep -q '"sound/drivers/snd-aloop.ko"' common/modules.bzl && \ + grep -q '"drivers/usb/gadget/libcomposite.ko"' common/modules.bzl && \ + grep -q '"drivers/usb/gadget/legacy/g_audio.ko"' common/modules.bzl && \ + grep -q '"drivers/usb/gadget/configfs.ko"' common/modules.bzl; then + echo "โœ“ Audio modules injection: successfully added all modules to list" + else + echo "โœ— Audio modules injection: failed to add one or more modules" + exit 1 + fi + fi + + # ABI compare bypass per kernel/android version + if [[ "${{ inputs.android_version }}" == "android12" && "${{ inputs.kernel_version }}" == "5.10" ]]; then + sed -i 's/^\s*exit 1$/ echo "Who Cares? Bypassing Now!"/' build/abi/compare_to_symbol_list + elif [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.10" ]]; then + sed -i 's/^\s*exit 1$/ echo "Who Cares? Bypassing Now!"/' build/kernel/abi/compare_to_symbol_list + elif [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.15" ]]; then + sed -i 's/^\s*exit 1$/ echo "Who Cares? Bypassing Now!"/' build/kernel/abi/compare_to_symbol_list + elif [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" ]]; then + perl -i -pe 's/^(\s*)return 1$/$1print("Who Cares? Bypassing Now!")\n$1return 0/g if /if missing_symbols:/../return 1/' build/kernel/abi/check_buildtime_symbol_protection.py + elif [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "6.1" ]]; then + perl -i -pe 's/^(\s*)return 1$/$1print("Who Cares? Bypassing Now!")\n$1return 0/g if /if missing_symbols:/../return 1/' build/kernel/abi/check_buildtime_symbol_protection.py + elif [[ "${{ inputs.android_version }}" == "android15" && "${{ inputs.kernel_version }}" == "6.6" ]]; then + perl -i -pe 's/^(\s*)return 1$/$1print("Who Cares? Bypassing Now!")\n$1return 0/g if /if missing_symbols:/../return 1/' build/kernel/abi/check_buildtime_symbol_protection.py + fi diff --git a/.github/actions/wksu/action.yml b/.github/actions/wksu/action.yml new file mode 100644 index 0000000000..603cdd19a2 --- /dev/null +++ b/.github/actions/wksu/action.yml @@ -0,0 +1,41 @@ +name: Setup Wild KSU +description: Download and configure Wild KSU with version tracking +inputs: + ksu_commit: + description: "KSU Commit" + required: true + type: string + +runs: + using: composite + steps: + - name: Download Wild KSU + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + # Clone the repository + curl -LSs "https://raw.githubusercontent.com/WildKernels/Wild_KSU/stable/kernel/setup.sh" | bash -s ${{ inputs.ksu_commit }} + + - name: Enable KernelSU Config + shell: bash + working-directory: ${{ github.workspace }}/kernel + run: | + cat >> "${{ github.workspace }}/wild_gki.fragment" << 'EOF' + # KernelSU Configuration + CONFIG_KSU=y + EOF + + - name: Extract KSU Version Info + id: ksu-version + shell: bash + working-directory: ${{ github.workspace }}/kernel/Wild_KSU + run: | + # Extract and export KSU version info + KSU_GIT_VERSION=$(git rev-list --count HEAD 2>/dev/null) + KSU_GIT_TAG=$(git describe --tags --abbrev=0 2>/dev/null) + KSU_COMMIT=$(git rev-parse --short HEAD 2>/dev/null) + KSU_VERSION=$((30000 + KSU_GIT_VERSION)) + + echo "KSU_GIT_TAG=$KSU_GIT_TAG" >> $GITHUB_ENV + echo "KSU_VERSION=$KSU_VERSION" >> $GITHUB_ENV + echo "KSU_COMMIT=$KSU_COMMIT" >> $GITHUB_ENV diff --git a/.github/kernel-config/a12-5.10.json b/.github/kernel-config/a12-5.10.json new file mode 100644 index 0000000000..8c430b1743 --- /dev/null +++ b/.github/kernel-config/a12-5.10.json @@ -0,0 +1,40 @@ +{ + "include": [ + {"kernel_version": "5.10.43-android12-2021-08"}, + {"kernel_version": "5.10.43-android12-2021-09"}, + {"kernel_version": "5.10.43-android12-2021-10"}, + {"kernel_version": "5.10.66-android12-2021-11"}, + {"kernel_version": "5.10.66-android12-2021-12"}, + {"kernel_version": "5.10.66-android12-2022-01"}, + {"kernel_version": "5.10.81-android12-2022-02"}, + {"kernel_version": "5.10.81-android12-2022-03"}, + {"kernel_version": "5.10.101-android12-2022-04"}, + {"kernel_version": "5.10.101-android12-2022-05"}, + {"kernel_version": "5.10.110-android12-2022-06"}, + {"kernel_version": "5.10.110-android12-2022-07"}, + {"kernel_version": "5.10.117-android12-2022-08"}, + {"kernel_version": "5.10.117-android12-2022-09"}, + {"kernel_version": "5.10.136-android12-2022-10"}, + {"kernel_version": "5.10.136-android12-2022-11"}, + {"kernel_version": "5.10.149-android12-2022-12"}, + {"kernel_version": "5.10.149-android12-2023-01"}, + {"kernel_version": "5.10.160-android12-2023-02"}, + {"kernel_version": "5.10.160-android12-2023-03"}, + {"kernel_version": "5.10.168-android12-2023-04"}, + {"kernel_version": "5.10.168-android12-2023-05"}, + {"kernel_version": "5.10.177-android12-2023-06"}, + {"kernel_version": "5.10.177-android12-2023-07"}, + {"kernel_version": "5.10.185-android12-2023-09"}, + {"kernel_version": "5.10.198-android12-2023-11"}, + {"kernel_version": "5.10.198-android12-2024-01"}, + {"kernel_version": "5.10.205-android12-2024-03"}, + {"kernel_version": "5.10.209-android12-2024-05"}, + {"kernel_version": "5.10.218-android12-2024-08"}, + {"kernel_version": "5.10.226-android12-2024-11"}, + {"kernel_version": "5.10.233-android12-2025-02"}, + {"kernel_version": "5.10.236-android12-2025-05"}, + {"kernel_version": "5.10.237-android12-2025-06"}, + {"kernel_version": "5.10.240-android12-2025-09"}, + {"kernel_version": "5.10.246-android12-2025-12"} + ] +} diff --git a/.github/kernel-config/a13-5.10.json b/.github/kernel-config/a13-5.10.json new file mode 100644 index 0000000000..4d548d8116 --- /dev/null +++ b/.github/kernel-config/a13-5.10.json @@ -0,0 +1,41 @@ +{ + "include": [ + {"kernel_version": "5.10.107-android13-2022-04"}, + {"kernel_version": "5.10.107-android13-2022-05"}, + {"kernel_version": "5.10.107-android13-2022-06"}, + {"kernel_version": "5.10.107-android13-2022-07"}, + {"kernel_version": "5.10.107-android13-2022-08"}, + {"kernel_version": "5.10.107-android13-2022-09"}, + {"kernel_version": "5.10.107-android13-2022-10"}, + {"kernel_version": "5.10.107-android13-2022-11"}, + {"kernel_version": "5.10.149-android13-2022-12"}, + {"kernel_version": "5.10.149-android13-2023-01"}, + {"kernel_version": "5.10.157-android13-2023-02"}, + {"kernel_version": "5.10.157-android13-2023-03"}, + {"kernel_version": "5.10.168-android13-2023-04"}, + {"kernel_version": "5.10.168-android13-2023-05"}, + {"kernel_version": "5.10.177-android13-2023-06"}, + {"kernel_version": "5.10.177-android13-2023-07"}, + {"kernel_version": "5.10.186-android13-2023-08"}, + {"kernel_version": "5.10.186-android13-2023-09"}, + {"kernel_version": "5.10.189-android13-2023-10"}, + {"kernel_version": "5.10.189-android13-2023-11"}, + {"kernel_version": "5.10.198-android13-2023-12"}, + {"kernel_version": "5.10.198-android13-2024-01"}, + {"kernel_version": "5.10.205-android13-2024-02"}, + {"kernel_version": "5.10.205-android13-2024-03"}, + {"kernel_version": "5.10.209-android13-2024-04"}, + {"kernel_version": "5.10.209-android13-2024-05"}, + {"kernel_version": "5.10.210-android13-2024-06"}, + {"kernel_version": "5.10.214-android13-2024-07"}, + {"kernel_version": "5.10.218-android13-2024-08"}, + {"kernel_version": "5.10.223-android13-2024-09"}, + {"kernel_version": "5.10.223-android13-2024-11"}, + {"kernel_version": "5.10.228-android13-2025-01"}, + {"kernel_version": "5.10.234-android13-2025-03"}, + {"kernel_version": "5.10.236-android13-2025-05"}, + {"kernel_version": "5.10.238-android13-2025-07"}, + {"kernel_version": "5.10.243-android13-2025-10"}, + {"kernel_version": "5.10.246-android13-2026-01"} + ] +} diff --git a/.github/kernel-config/a13-5.15.json b/.github/kernel-config/a13-5.15.json new file mode 100644 index 0000000000..ad5e2615f6 --- /dev/null +++ b/.github/kernel-config/a13-5.15.json @@ -0,0 +1,40 @@ +{ + "include": [ + {"kernel_version": "5.15.41-android13-2022-06"}, + {"kernel_version": "5.15.41-android13-2022-07"}, + {"kernel_version": "5.15.41-android13-2022-08"}, + {"kernel_version": "5.15.41-android13-2022-09"}, + {"kernel_version": "5.15.41-android13-2022-10"}, + {"kernel_version": "5.15.41-android13-2022-11"}, + {"kernel_version": "5.15.74-android13-2022-12"}, + {"kernel_version": "5.15.74-android13-2023-01"}, + {"kernel_version": "5.15.78-android13-2023-02"}, + {"kernel_version": "5.15.78-android13-2023-03"}, + {"kernel_version": "5.15.94-android13-2023-04"}, + {"kernel_version": "5.15.94-android13-2023-05"}, + {"kernel_version": "5.15.104-android13-2023-06"}, + {"kernel_version": "5.15.104-android13-2023-07"}, + {"kernel_version": "5.15.119-android13-2023-08"}, + {"kernel_version": "5.15.119-android13-2023-09"}, + {"kernel_version": "5.15.123-android13-2023-10"}, + {"kernel_version": "5.15.123-android13-2023-11"}, + {"kernel_version": "5.15.137-android13-2023-12"}, + {"kernel_version": "5.15.137-android13-2024-01"}, + {"kernel_version": "5.15.144-android13-2024-02"}, + {"kernel_version": "5.15.144-android13-2024-03"}, + {"kernel_version": "5.15.148-android13-2024-04"}, + {"kernel_version": "5.15.148-android13-2024-05"}, + {"kernel_version": "5.15.149-android13-2024-06"}, + {"kernel_version": "5.15.149-android13-2024-07"}, + {"kernel_version": "5.15.151-android13-2024-08"}, + {"kernel_version": "5.15.153-android13-2024-09"}, + {"kernel_version": "5.15.167-android13-2024-11"}, + {"kernel_version": "5.15.170-android13-2025-01"}, + {"kernel_version": "5.15.178-android13-2025-03"}, + {"kernel_version": "5.15.180-android13-2025-05"}, + {"kernel_version": "5.15.185-android13-2025-07"}, + {"kernel_version": "5.15.189-android13-2025-09"}, + {"kernel_version": "5.15.194-android13-2025-12"}, + {"kernel_version": "5.15.197-android13-2026-03"} + ] +} diff --git a/.github/kernel-config/a14-5.15.json b/.github/kernel-config/a14-5.15.json new file mode 100644 index 0000000000..777b686790 --- /dev/null +++ b/.github/kernel-config/a14-5.15.json @@ -0,0 +1,24 @@ +{ + "include": [ + {"kernel_version": "5.15.110-android14-2023-06"}, + {"kernel_version": "5.15.110-android14-2023-08"}, + {"kernel_version": "5.15.110-android14-2023-09"}, + {"kernel_version": "5.15.131-android14-2023-11"}, + {"kernel_version": "5.15.137-android14-2024-01"}, + {"kernel_version": "5.15.144-android14-2024-02"}, + {"kernel_version": "5.15.144-android14-2024-03"}, + {"kernel_version": "5.15.148-android14-2024-04"}, + {"kernel_version": "5.15.148-android14-2024-05"}, + {"kernel_version": "5.15.149-android14-2024-06"}, + {"kernel_version": "5.15.153-android14-2024-07"}, + {"kernel_version": "5.15.158-android14-2024-08"}, + {"kernel_version": "5.15.164-android14-2024-09"}, + {"kernel_version": "5.15.167-android14-2024-11"}, + {"kernel_version": "5.15.170-android14-2025-01"}, + {"kernel_version": "5.15.178-android14-2025-03"}, + {"kernel_version": "5.15.180-android14-2025-05"}, + {"kernel_version": "5.15.185-android14-2025-07"}, + {"kernel_version": "5.15.192-android14-2025-10"}, + {"kernel_version": "5.15.196-android14-2026-01"} + ] +} diff --git a/.github/kernel-config/a14-6.1.json b/.github/kernel-config/a14-6.1.json new file mode 100644 index 0000000000..0a57d37241 --- /dev/null +++ b/.github/kernel-config/a14-6.1.json @@ -0,0 +1,34 @@ +{ + "include": [ + {"kernel_version": "6.1.25-android14-2023-06"}, + {"kernel_version": "6.1.25-android14-2023-07"}, + {"kernel_version": "6.1.25-android14-2023-08"}, + {"kernel_version": "6.1.25-android14-2023-09"}, + {"kernel_version": "6.1.25-android14-2023-10"}, + {"kernel_version": "6.1.43-android14-2023-11"}, + {"kernel_version": "6.1.57-android14-2023-12"}, + {"kernel_version": "6.1.57-android14-2024-01"}, + {"kernel_version": "6.1.68-android14-2024-02"}, + {"kernel_version": "6.1.68-android14-2024-03"}, + {"kernel_version": "6.1.75-android14-2024-04"}, + {"kernel_version": "6.1.75-android14-2024-05"}, + {"kernel_version": "6.1.78-android14-2024-06"}, + {"kernel_version": "6.1.84-android14-2024-07"}, + {"kernel_version": "6.1.90-android14-2024-08"}, + {"kernel_version": "6.1.93-android14-2024-09"}, + {"kernel_version": "6.1.99-android14-2024-10"}, + {"kernel_version": "6.1.112-android14-2024-11"}, + {"kernel_version": "6.1.115-android14-2024-12"}, + {"kernel_version": "6.1.118-android14-2025-01"}, + {"kernel_version": "6.1.124-android14-2025-02"}, + {"kernel_version": "6.1.128-android14-2025-03"}, + {"kernel_version": "6.1.129-android14-2025-04"}, + {"kernel_version": "6.1.134-android14-2025-05"}, + {"kernel_version": "6.1.138-android14-2025-06"}, + {"kernel_version": "6.1.141-android14-2025-07"}, + {"kernel_version": "6.1.145-android14-2025-08"}, + {"kernel_version": "6.1.145-android14-2025-09"}, + {"kernel_version": "6.1.157-android14-2025-12"}, + {"kernel_version": "6.1.162-android14-2026-03"} + ] +} diff --git a/.github/kernel-config/a15-6.6.json b/.github/kernel-config/a15-6.6.json new file mode 100644 index 0000000000..79fbb2a554 --- /dev/null +++ b/.github/kernel-config/a15-6.6.json @@ -0,0 +1,21 @@ +{ + "include": [ + {"kernel_version": "6.6.30-android15-2024-07"}, + {"kernel_version": "6.6.30-android15-2024-08"}, + {"kernel_version": "6.6.46-android15-2024-09"}, + {"kernel_version": "6.6.50-android15-2024-10"}, + {"kernel_version": "6.6.56-android15-2024-11"}, + {"kernel_version": "6.6.57-android15-2024-12"}, + {"kernel_version": "6.6.58-android15-2025-01"}, + {"kernel_version": "6.6.66-android15-2025-02"}, + {"kernel_version": "6.6.77-android15-2025-03"}, + {"kernel_version": "6.6.82-android15-2025-04"}, + {"kernel_version": "6.6.87-android15-2025-05"}, + {"kernel_version": "6.6.89-android15-2025-06"}, + {"kernel_version": "6.6.92-android15-2025-07"}, + {"kernel_version": "6.6.98-android15-2025-08"}, + {"kernel_version": "6.6.98-android15-2025-09"}, + {"kernel_version": "6.6.102-android15-2025-10"}, + {"kernel_version": "6.6.118-android15-2026-01"} + ] +} diff --git a/.github/kernel-config/a16-6.12.json b/.github/kernel-config/a16-6.12.json new file mode 100644 index 0000000000..acbd4c5f15 --- /dev/null +++ b/.github/kernel-config/a16-6.12.json @@ -0,0 +1,10 @@ +{ + "include": [ + {"kernel_version": "6.12.23-android16-2025-05-exp"}, + {"kernel_version": "6.12.23-android16-2025-06"}, + {"kernel_version": "6.12.30-android16-2025-07"}, + {"kernel_version": "6.12.38-android16-2025-08"}, + {"kernel_version": "6.12.38-android16-2025-09"}, + {"kernel_version": "6.12.58-android16-2025-12"} + ] +} diff --git a/.github/kernel-config/bypass.json b/.github/kernel-config/bypass.json new file mode 100644 index 0000000000..7b1ea938e5 --- /dev/null +++ b/.github/kernel-config/bypass.json @@ -0,0 +1,11 @@ +{ + "include": [ + {"kernel_version": "5.10.X-android12-lts", "variant": "Bypass"}, + {"kernel_version": "5.10.X-android13-lts", "variant": "Bypass"}, + {"kernel_version": "5.15.X-android13-lts", "variant": "Bypass"}, + {"kernel_version": "5.15.X-android14-lts", "variant": "Bypass"}, + {"kernel_version": "6.1.X-android14-lts", "variant": "Bypass"}, + {"kernel_version": "6.6.X-android15-lts", "variant": "Bypass"}, + {"kernel_version": "6.12.X-android16-lts", "variant": "Bypass" } + ] +} diff --git a/.github/kernel-config/custom.json b/.github/kernel-config/custom.json new file mode 100644 index 0000000000..6863752d37 --- /dev/null +++ b/.github/kernel-config/custom.json @@ -0,0 +1,9 @@ +{ + "include": [ + {"kernel_version": "5.10.226-android12-2024-11", "variant": "vTomsonek"}, + {"kernel_version": "6.1.145-android14-2025-09", "variant": "TheWildJames"}, + {"kernel_version": "6.1.157-android14-2025-12", "variant": "MarionKernel"}, + {"kernel_version": "6.1.128-android14-2025-03", "variant": "Hakan"}, + {"kernel_version": "5.10.226-android12-2024-11", "variant": "Neyugn"} + ] +} diff --git a/.github/kernel-config/lts.json b/.github/kernel-config/lts.json new file mode 100644 index 0000000000..2eee337c1c --- /dev/null +++ b/.github/kernel-config/lts.json @@ -0,0 +1,11 @@ +{ + "include": [ + {"kernel_version": "5.10.X-android12-lts"}, + {"kernel_version": "5.10.X-android13-lts"}, + {"kernel_version": "5.15.X-android13-lts"}, + {"kernel_version": "5.15.X-android14-lts"}, + {"kernel_version": "6.1.X-android14-lts"}, + {"kernel_version": "6.6.X-android15-lts"}, + {"kernel_version": "6.12.X-android16-lts"} + ] +} diff --git a/.github/kernel-config/testing.json b/.github/kernel-config/testing.json new file mode 100644 index 0000000000..186ec8ff56 --- /dev/null +++ b/.github/kernel-config/testing.json @@ -0,0 +1,5 @@ +{ + "include": [ + {"kernel_version": "6.1.145-android14-2025-08", "variant": "Placeholder"} + ] +} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c81f687144..45e04c08c8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,69 +6,74 @@ permissions: on: workflow_call: inputs: - android_version: - required: true - type: string kernel_version: required: true type: string - sub_level: - required: true + variant: + required: false type: string - os_patch_level: - required: true + ksu_commit: + required: false type: string - variant: + anykernel_commit: required: false type: string - ksu_variant: - required: true + patches_commit: + required: false type: string - ksu_commit: + susfs_commit: required: false type: string - build_bypass: + feature_set: required: true - type: boolean + type: string jobs: build-gki: - name: "${{ inputs.kernel_version }}.${{ inputs.sub_level }}-${{ inputs.android_version }}-${{ inputs.os_patch_level }}-${{ matrix.build_type }}-${{ inputs.ksu_variant }}" + name: "${{ inputs.kernel_version }}${{ inputs.variant && format('-{0}', inputs.variant) || '' }}" runs-on: ubuntu-latest timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - build_type: >- - ${{ - fromJSON( - inputs.variant == 'vTomsonek' && '["vTomsonek"]' || - inputs.variant == 'TheWildJames' && '["TheWildJames"]' || - inputs.variant == 'TheWildJamesTest' && '["TheWildJamesTest"]' || - inputs.variant == 'MarionKernel' && '["MarionKernel"]' || - inputs.variant == 'Hakan' && '["Hakan"]' || - inputs.variant == 'Duchamp' && '["Duchamp"]' || - inputs.variant == 'Neyugn' && '["Neyugn"]' || - (inputs.build_bypass && '["Normal","Bypass"]' || '["Normal"]') - ) - }} steps: - - name: Build Summary + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Parse kernel version + id: parse run: | - echo "========================================" - echo " Kernel Build Summary" - echo "========================================" - echo "Android Version : ${{ inputs.android_version }}" - echo "Kernel Version : ${{ inputs.kernel_version }}" - echo "Sub Level : ${{ inputs.sub_level }}" - echo "Patch Level : ${{ inputs.os_patch_level }}" - echo "Build Type : ${{ matrix.build_type }}" - echo "KSU Variant : ${{ inputs.ksu_variant }}" - echo "KSU Commit : ${{ inputs.ksu_commit || 'Default' }}" - echo "SUSFS Enabled : ${{ inputs.susfs_enabled }}" - echo "Variant : ${{ inputs.variant || 'Standard' }}" - echo "========================================" + # Parse version string. + # Format: [KERNEL_VERSION].[SUBLEVEL]-[ANDROID_VERSION]-[PATCH_LEVEL] + # Example 1: 5.10.198-android12-2024-01 -> K=5.10, S=198, A=android12, P=2024-01 + # Example 2: 5.10.X-android12-lts -> K=5.10, S=X, A=android12, P=lts + + INPUT_VERSION="${{ inputs.kernel_version }}" + + # Split by hyphens + IFS='-' read -r KERNEL_PART ANDROID_PART REST <<< "$INPUT_VERSION" + + # Extract Kernel Version and Sublevel + KERNEL_VERSION="${KERNEL_PART%.*}" + SUB_LEVEL="${KERNEL_PART##*.}" + + # Extract Android Version + ANDROID_VERSION="$ANDROID_PART" + + # Everything after the android version is the patch level + OS_PATCH_LEVEL="$REST" + + echo "Parsed: KERNEL=$KERNEL_VERSION, SUB=$SUB_LEVEL, ANDROID=$ANDROID_VERSION, PATCH=$OS_PATCH_LEVEL" + + # Set environment variables for subsequent steps and shell scripts + echo "ANDROID_VERSION=$ANDROID_VERSION" >> "$GITHUB_ENV" + echo "KERNEL_VERSION=$KERNEL_VERSION" >> "$GITHUB_ENV" + echo "SUB_LEVEL=$SUB_LEVEL" >> "$GITHUB_ENV" + echo "OS_PATCH_LEVEL=$OS_PATCH_LEVEL" >> "$GITHUB_ENV" + + # Set step outputs for immediate YAML context access (avoids validation warnings) + echo "android_version=$ANDROID_VERSION" >> $GITHUB_OUTPUT + echo "kernel_version=$KERNEL_VERSION" >> $GITHUB_OUTPUT + echo "sub_level=$SUB_LEVEL" >> $GITHUB_OUTPUT + echo "os_patch_level=$OS_PATCH_LEVEL" >> $GITHUB_OUTPUT - name: Free Disk Space if: true @@ -86,104 +91,78 @@ jobs: rmz_version: "3.1.1" # Required when rm_cmd is 'rmz' testing: false - - name: Install System Dependencies - if: false - run: | - set -e - sudo apt-get update - sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - binutils \ - binutils-x86-64-linux-gnu \ - lld - - if ! command -v ld >/dev/null 2>&1 && command -v x86_64-linux-gnu-ld >/dev/null 2>&1; then - sudo ln -sf "$(command -v x86_64-linux-gnu-ld)" /usr/bin/ld - fi - - command -v ld - ld --version | head -n 1 - echo "PATH=/usr/bin:/bin:$PATH" >> "$GITHUB_ENV" - echo "HOSTLDFLAGS=-B/usr/bin ${HOSTLDFLAGS:-}" >> "$GITHUB_ENV" - echo "LDFLAGS=-B/usr/bin ${LDFLAGS:-}" >> "$GITHUB_ENV" - - name: Setup Build Environment run: | - CONFIG="${{ inputs.android_version }}-${{ inputs.kernel_version }}-${{ inputs.sub_level }}" - KERNEL_ROOT="$GITHUB_WORKSPACE/$CONFIG" - mkdir -p "$KERNEL_ROOT" - - cat >> $GITHUB_ENV << EOF - DEFCONFIG=$KERNEL_ROOT/common/arch/arm64/configs/gki_defconfig - DEFCONFIG_FRAGMENT=$KERNEL_ROOT/common/arch/arm64/configs/wild_gki.fragment - CONFIG=$CONFIG - KERNEL_ROOT=$KERNEL_ROOT - SUSFS4KSU=$GITHUB_WORKSPACE/susfs4ksu - KERNEL_PATCHES=$GITHUB_WORKSPACE/kernel_patches - ANYKERNEL3=$GITHUB_WORKSPACE/AnyKernel3 - REPO=$GITHUB_WORKSPACE/git-repo/repo - EOF - + mkdir -p "$GITHUB_WORKSPACE/kernel" mkdir -p "$GITHUB_WORKSPACE/git-repo" curl -L https://storage.googleapis.com/git-repo-downloads/repo -o "$GITHUB_WORKSPACE/git-repo/repo" - chmod 0755 "$GITHUB_WORKSPACE/git-repo/repo" + chmod +x "$GITHUB_WORKSPACE/git-repo/repo" echo "$GITHUB_WORKSPACE/git-repo" >> "$GITHUB_PATH" - - - name: Clone AnyKernel3 and Other Dependencies - run: | - ANYKERNEL_BRANCH="gki-2.0" - git clone https://github.com/WildKernels/AnyKernel3.git -b "$ANYKERNEL_BRANCH" - rm -rf AnyKernel3/.git - git clone https://github.com/WildKernels/kernel_patches.git - - - name: Initialize and Sync Kernel Source - working-directory: ${{ env.KERNEL_ROOT }} - run: | - FORMATTED_BRANCH="${{ inputs.android_version }}-${{ inputs.kernel_version }}-${{ inputs.os_patch_level }}" - - repo init -u https://android.googlesource.com/kernel/manifest -b common-${FORMATTED_BRANCH} --repo-rev=v2.16 --depth=1 - - REMOTE_BRANCH=$(git ls-remote https://android.googlesource.com/kernel/common ${FORMATTED_BRANCH}) - DEFAULT_MANIFEST_PATH=.repo/manifests/default.xml - if grep -q deprecated <<< $REMOTE_BRANCH; then - sed -i "s/\"${FORMATTED_BRANCH}\"/\"deprecated\/${FORMATTED_BRANCH}\"/g" $DEFAULT_MANIFEST_PATH + + # Clone patches if commit is provided + if [ -n "${{ inputs.patches_commit }}" ]; then + echo "Cloning Kernel Patches at commit ${{ inputs.patches_commit }}" + if [ -d "$GITHUB_WORKSPACE/kernel_patches" ]; then rm -rf "$GITHUB_WORKSPACE/kernel_patches"; fi + git clone https://github.com/WildKernels/kernel_patches.git "$GITHUB_WORKSPACE/kernel_patches" + cd "$GITHUB_WORKSPACE/kernel_patches" + git checkout "${{ inputs.patches_commit }}" + cd "$GITHUB_WORKSPACE" + else + git clone https://github.com/WildKernels/kernel_patches.git "$GITHUB_WORKSPACE/kernel_patches" fi - repo --trace sync -c -j$(nproc --all) --fail-fast --no-tags --force-sync --no-clone-bundle + # Use specific commit if provided + if [ -n "${{ inputs.anykernel_commit }}" ]; then + echo "Cloning AnyKernel3 at commit ${{ inputs.anykernel_commit }}" + if [ -d "$GITHUB_WORKSPACE/AnyKernel3" ]; then rm -rf "$GITHUB_WORKSPACE/AnyKernel3"; fi + git clone https://github.com/WildKernels/AnyKernel3.git "$GITHUB_WORKSPACE/AnyKernel3" + cd "$GITHUB_WORKSPACE/AnyKernel3" + git checkout "${{ inputs.anykernel_commit }}" + cd "$GITHUB_WORKSPACE" + elif [ ! -d "$GITHUB_WORKSPACE/AnyKernel3" ]; then + # Fallback if not downloaded + git clone https://github.com/WildKernels/AnyKernel3.git -b gki-2.0 "$GITHUB_WORKSPACE/AnyKernel3" + fi - - name: Configure Kernel Options - if: inputs.variant == 'Duchamp' - working-directory: ${{ env.KERNEL_ROOT }} - run: | - rm -rf common - git clone --depth=1 --single-branch --branch lineage-23.0 https://github.com/mt6897-devs/android_kernel_6.1.git ./common + - name: Download Kernel Repository + uses: ./.github/actions/download-kernel + with: + android_version: ${{ steps.parse.outputs.android_version }} + kernel_version: ${{ steps.parse.outputs.kernel_version }} + os_patch_level: ${{ steps.parse.outputs.os_patch_level }} - name: Extract Sublevel and Set File Name + id: extract run: | - ACTUAL_SUBLEVEL="${{ inputs.sub_level }}" - if [[ -f "$KERNEL_ROOT/common/Makefile" ]]; then - EXTRACTED=$(grep '^SUBLEVEL = ' "$KERNEL_ROOT/common/Makefile" | awk '{print $3}') - [[ -n "$EXTRACTED" ]] && ACTUAL_SUBLEVEL="$EXTRACTED" + SUBLEVEL="$SUB_LEVEL" + if [[ -f "$GITHUB_WORKSPACE/kernel/common/Makefile" ]]; then + EXTRACTED=$(grep '^SUBLEVEL = ' "$GITHUB_WORKSPACE/kernel/common/Makefile" | awk '{print $3}') + [[ -n "$EXTRACTED" ]] && SUBLEVEL="$EXTRACTED" fi - ARTIFACT_BASE="${{ inputs.kernel_version }}.$ACTUAL_SUBLEVEL-${{ inputs.android_version }}-${{ inputs.os_patch_level }}-${{ matrix.build_type }}" - echo "ACTUAL_SUBLEVEL=$ACTUAL_SUBLEVEL" >> $GITHUB_ENV - echo "ARTIFACT_BASE=$ARTIFACT_BASE" >> $GITHUB_ENV - echo "FILE_NAME=$ARTIFACT_BASE" >> $GITHUB_ENV + FILE_NAME="$KERNEL_VERSION.$SUBLEVEL-$ANDROID_VERSION-$OS_PATCH_LEVEL${{ inputs.variant && format('-{0}', inputs.variant) || '' }}" + echo "SUBLEVEL=$SUBLEVEL" >> $GITHUB_ENV + echo "FILE_NAME=$FILE_NAME" >> $GITHUB_ENV + + # Set step outputs for parse-time YAML context access + echo "file_name=$FILE_NAME" >> $GITHUB_OUTPUT + echo "sublevel=$SUBLEVEL" >> $GITHUB_OUTPUT - name: Apply glibc 2.38 Compatibility Fix + if: true run: | - # Use ACTUAL_SUBLEVEL for LTS builds, otherwise use the input sub_level - if [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.10" && $ACTUAL_SUBLEVEL -le 186 ]] || - [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.15" && $ACTUAL_SUBLEVEL -le 119 ]] || - [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" && $ACTUAL_SUBLEVEL -le 110 ]] || - [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "6.1" && $ACTUAL_SUBLEVEL -le 43 ]]; then + # Use SUBLEVEL for LTS builds, otherwise use the input sub_level + if [[ "$ANDROID_VERSION" == "android13" && "$KERNEL_VERSION" == "5.10" && $SUBLEVEL -le 186 ]] || + [[ "$ANDROID_VERSION" == "android13" && "$KERNEL_VERSION" == "5.15" && $SUBLEVEL -le 119 ]] || + [[ "$ANDROID_VERSION" == "android14" && "$KERNEL_VERSION" == "5.15" && $SUBLEVEL -le 110 ]] || + [[ "$ANDROID_VERSION" == "android14" && "$KERNEL_VERSION" == "6.1" && $SUBLEVEL -le 43 ]]; then GLIBC_VERSION=$(ldd --version 2>/dev/null | head -n 1 | awk '{print $NF}') if [ "$(printf '%s\n' "2.38" "$GLIBC_VERSION" | sort -V | head -n1)" = "2.38" ]; then - cd "$KERNEL_ROOT/common" + cd "$GITHUB_WORKSPACE/kernel/common" sed -i '/\$(Q)\$(MAKE) -C \$(SUBCMD_SRC) OUTPUT=\$(abspath \$(dir \$@))\/ \$(abspath \$@)/s//$(Q)$(MAKE) -C $(SUBCMD_SRC) EXTRA_CFLAGS="$(CFLAGS)" OUTPUT=$(abspath $(dir $@))\/ $(abspath $@)/' tools/bpf/resolve_btfids/Makefile 2>/dev/null || true - if [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.10" && $ACTUAL_SUBLEVEL -le 186 ]] || - [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.15" && $ACTUAL_SUBLEVEL -le 119 ]] || - [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" && $ACTUAL_SUBLEVEL -le 110 ]]; then + if [[ "$ANDROID_VERSION" == "android13" && "$KERNEL_VERSION" == "5.10" && $SUBLEVEL -le 186 ]] || + [[ "$ANDROID_VERSION" == "android13" && "$KERNEL_VERSION" == "5.15" && $SUBLEVEL -le 119 ]] || + [[ "$ANDROID_VERSION" == "android14" && "$KERNEL_VERSION" == "5.15" && $SUBLEVEL -le 110 ]]; then sed -i '/char \*buf = NULL;/a int i;' tools/lib/subcmd/parse-options.c 2>/dev/null || true sed -i 's/for (int i = 0; subcommands\[i\]; i++) {/for (i = 0; subcommands[i]; i++) {/' tools/lib/subcmd/parse-options.c 2>/dev/null || true sed -i '/if (subcommands) {/a int i;' tools/lib/subcmd/parse-options.c 2>/dev/null || true @@ -193,318 +172,51 @@ jobs: fi - name: Fix Less Than 6.6.50 Builds - if: inputs.android_version == 'android15' && inputs.kernel_version == '6.6' - working-directory: ${{ env.KERNEL_ROOT }}/common + if: ${{ steps.parse.outputs.android_version == 'android15' && steps.parse.outputs.kernel_version == '6.6'}} + working-directory: ${{ github.workspace }}/kernel/common run: | if ! grep -qxF '#include ' ./fs/namespace.c; then sed -i '/#include /a #include ' ./fs/namespace.c fi - - name: Apply ptrace patch for older kernels - if: false && fromJSON(inputs.kernel_version) < 5.16 - working-directory: ${{ env.KERNEL_ROOT }}/common - run: | - patch -p1 -F 3 < "$KERNEL_PATCHES/gki_ptrace.patch" - - - name: Add KernelSU Variant - working-directory: ${{ env.KERNEL_ROOT }} - run: | - case "${{ inputs.ksu_variant }}" in - WKSU) - if [[ -n "${{ inputs.ksu_commit }}" ]]; then - curl -LSs "https://raw.githubusercontent.com/WildKernels/Wild_KSU/wild/kernel/setup.sh" | bash -s "${{ inputs.ksu_commit }}" - else - curl -LSs "https://raw.githubusercontent.com/WildKernels/Wild_KSU/wild/kernel/setup.sh" | bash -s stable - fi - ;; - Next) - if [[ -n "${{ inputs.ksu_commit }}" ]]; then - curl -LSs "https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/stable/kernel/setup.sh" | bash -s "${{ inputs.ksu_commit }}" - else - curl -LSs "https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/dev/kernel/setup.sh" | bash -s dev - fi - ;; - KSU) - if [[ -n "${{ inputs.ksu_commit }}" ]]; then - curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s "${{ inputs.ksu_commit }}" - else - curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s main - fi - ;; - RKSU) - if [[ -n "${{ inputs.ksu_commit }}" ]]; then - curl -LSs "https://raw.githubusercontent.com/rsuntk/KernelSU/main/kernel/setup.sh" | bash -s "${{ inputs.ksu_commit }}" - else - curl -LSs "https://raw.githubusercontent.com/rsuntk/KernelSU/main/kernel/setup.sh" | bash -s main - fi - ;; - esac - - - name: Clone & Apply SUSFS Patches for KernelSU Variants - run: | - SUSFS_BRANCH="gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}" - git clone https://gitlab.com/simonpunk/susfs4ksu.git -b "$SUSFS_BRANCH" - - case "${{ inputs.ksu_variant }}" in - WKSU) - SUSFS_VERSION="2.0.0" - cd "$KERNEL_ROOT/Wild_KSU" - echo "Nothing to fix for WKSU" - - cd "$KERNEL_ROOT/common" - cp "$SUSFS4KSU/kernel_patches/fs/"* "$KERNEL_ROOT/common/fs/" - cp "$SUSFS4KSU/kernel_patches/include/linux/"* "$KERNEL_ROOT/common/include/linux/" - cp $SUSFS4KSU/kernel_patches/50_add_susfs_in_gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}.patch ./ - patch -p1 < 50_add_susfs_in_gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}.patch || true - - if [[ "${{ inputs.android_version }}" == "android12" && "${{ inputs.kernel_version }}" == "5.10" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -le 209 ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - if [[ "$ACTUAL_SUBLEVEL" -le 117 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a12-5.10/fdinfo.c.patch ./ - patch -p1 < fdinfo.c.patch - fi - if [[ "$ACTUAL_SUBLEVEL" -le 43 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a12-5.10/base.c.patch ./ - patch -p1 < base.c.patch - fi - fi - - if [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.10" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -le 107 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.10/fdinfo.c.patch ./ - patch -p1 < fdinfo.c.patch - fi - if [[ "$ACTUAL_SUBLEVEL" -le 209 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - fi - - if [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.15" ]]; then - if [ "$ACTUAL_SUBLEVEL" -le 41 ]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/namespace.c.patch ./ - patch -p1 < namespace.c.patch - fi - if [ "$ACTUAL_SUBLEVEL" -le 41 ]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/fdinfo.c.patch ./ - patch -p1 < fdinfo.c.patch - fi - if [ "$ACTUAL_SUBLEVEL" -le 41 ]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/open.c.patch ./ - patch -p1 < open.c.patch - fi - if [ "$ACTUAL_SUBLEVEL" -le 41 ]; then - sed -i 's|is_i_uid_not_allowed(i_uid_into_mnt(i_user_ns(inode), inode).val)))|is_i_uid_not_allowed(inode->i_uid.val)))|g' fs/susfs.c - fi - if [[ "$ACTUAL_SUBLEVEL" -le 148 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - fi - - if [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -le 148 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - fi - - if [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "6.1" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -ge 145 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a14-6.1/base.c.patch ./ - patch -p1 < base.c.patch - fi - if [[ "$ACTUAL_SUBLEVEL" -le 75 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - fi - - if [[ "${{ inputs.android_version }}" == "android15" && "${{ inputs.kernel_version }}" == "6.6" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -ge 98 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a15-6.6/base.c.patch ./ - patch -p1 < base.c.patch - fi - if [[ "$ACTUAL_SUBLEVEL" -le 58 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a15-6.6/task_mmu.c.patch ./ - patch -p1 < task_mmu.c.patch - fi - fi - - if [[ "${{ inputs.android_version }}" == "android16" && "${{ inputs.kernel_version }}" == "6.12" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -le 9999 ]]; then - echo "Nothing to fix!" - fi - fi - ;; - Next) - SUSFS_VERSION="2.0.0" - cd "$KERNEL_ROOT/KernelSU-Next" - echo "patching kernel" - cp $SUSFS4KSU/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch ./ - patch -p1 < 10_enable_susfs_for_ksu.patch || true - echo "patching susfs fix patches" - cp "$KERNEL_PATCHES/next/susfs_fix_patches/v${SUSFS_VERSION}/"*.patch ./ - echo "fixing Makefile/kbuild" - patch -p1 < fix_Makefile.patch - echo "fixing allowlist.c" - patch -p1 < fix_allowlist.c.patch - echo "fixing apk_sign.c" - patch -p1 < fix_apk_sign.c.patch - echo "fixing kernel_umount.c" - patch -p1 < fix_kernel_umount.c.patch - echo "fixing ksu.c" - patch -p1 < fix_ksu.c.patch - echo "fixing ksud.c" - patch -p1 < fix_ksud.c.patch - echo "fixing selinux.c" - patch -p1 < fix_selinux.c.patch - echo "fixing setuid_hook.c" - patch -p1 < fix_setuid_hook.c.patch - echo "fixing sucompat.c" - patch -p1 < fix_sucompat.c.patch - echo "fixing supercalls.c" - patch -p1 < fix_supercalls.c.patch - echo "overwriting hook mode" - patch -p1 < overwrite_hook_mode.patch - echo "patching ksu_toolkit" - patch -p1 < ksu_toolkit.patch - - cd "$KERNEL_ROOT/common" - cp "$SUSFS4KSU/kernel_patches/fs/"* "$KERNEL_ROOT/common/fs/" - cp "$SUSFS4KSU/kernel_patches/include/linux/"* "$KERNEL_ROOT/common/include/linux/" - cp $SUSFS4KSU/kernel_patches/50_add_susfs_in_gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}.patch ./ - patch -p1 < 50_add_susfs_in_gki-${{ inputs.android_version }}-${{ inputs.kernel_version }}.patch || true - - if [[ "${{ inputs.android_version }}" == "android12" && "${{ inputs.kernel_version }}" == "5.10" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -le 209 ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - if [[ "$ACTUAL_SUBLEVEL" -le 117 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a12-5.10/fdinfo.c.patch ./ - patch -p1 < fdinfo.c.patch - fi - if [[ "$ACTUAL_SUBLEVEL" -le 43 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a12-5.10/base.c.patch ./ - patch -p1 < base.c.patch - fi - fi - - if [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.10" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -le 107 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.10/fdinfo.c.patch ./ - patch -p1 < fdinfo.c.patch - fi - if [[ "$ACTUAL_SUBLEVEL" -le 209 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - fi - - if [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.15" ]]; then - if [ "$ACTUAL_SUBLEVEL" -le 41 ]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/namespace.c.patch ./ - patch -p1 < namespace.c.patch - fi - if [ "$ACTUAL_SUBLEVEL" -le 41 ]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/fdinfo.c.patch ./ - patch -p1 < fdinfo.c.patch - fi - if [ "$ACTUAL_SUBLEVEL" -le 41 ]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a13-5.15/open.c.patch ./ - patch -p1 < open.c.patch - fi - if [ "$ACTUAL_SUBLEVEL" -le 41 ]; then - sed -i 's|is_i_uid_not_allowed(i_uid_into_mnt(i_user_ns(inode), inode).val)))|is_i_uid_not_allowed(inode->i_uid.val)))|g' fs/susfs.c - fi - if [[ "$ACTUAL_SUBLEVEL" -le 148 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - fi - - if [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -le 148 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - fi - - if [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "6.1" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -ge 145 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a14-6.1/base.c.patch ./ - patch -p1 < base.c.patch - fi - if [[ "$ACTUAL_SUBLEVEL" -le 75 && "${{ inputs.os_patch_level }}" != "2024-05" ]]; then - sed -i -e 's/goto show_pad;/return 0;/' ./fs/proc/task_mmu.c - fi - fi - - if [[ "${{ inputs.android_version }}" == "android15" && "${{ inputs.kernel_version }}" == "6.6" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -ge 98 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a15-6.6/base.c.patch ./ - patch -p1 < base.c.patch - fi - if [[ "$ACTUAL_SUBLEVEL" -le 58 ]]; then - cp $KERNEL_PATCHES/wild/susfs_fix_patches/v${SUSFS_VERSION}/a15-6.6/task_mmu.c.patch ./ - patch -p1 < task_mmu.c.patch - fi - fi + - name: Setup Wild KSU + if: contains(inputs.feature_set, 'WKSU') + uses: ./.github/actions/wksu + with: + ksu_commit: ${{ inputs.ksu_commit }} - if [[ "${{ inputs.android_version }}" == "android16" && "${{ inputs.kernel_version }}" == "6.12" ]]; then - if [[ "$ACTUAL_SUBLEVEL" -le 9999 ]]; then - echo "Nothing to fix!" - fi - fi - ;; - KSU) - SUSFS_VERSION="2.0.0" - cd "$KERNEL_ROOT/KernelSU" - cp "$SUSFS4KSU/kernel_patches/KernelSU/10_enable_susfs_for_ksu.patch" . - patch -p1 < 10_enable_susfs_for_ksu.patch - ;; - esac - - - name: Apply Performance Patches - if: false - working-directory: ${{ env.KERNEL_ROOT }}/common - run: | - MIN_VERSION="5.16" - cp "$KERNEL_PATCHES/common/optimized_mem_operations.patch" ./ - patch -p1 --forward < optimized_mem_operations.patch - cp "$KERNEL_PATCHES/common/file_struct_8bytes_align.patch" ./ - patch -p1 --forward < file_struct_8bytes_align.patch - cp "$KERNEL_PATCHES/common/reduce_cache_pressure.patch" ./ - patch -p1 --forward < reduce_cache_pressure.patch - if [[ "$(printf '%s\n' "${{ inputs.kernel_version }}" "$MIN_VERSION" | sort -V | head -n1)" = "${{ inputs.kernel_version }}" ]]; then - cp "$KERNEL_PATCHES/common/clear_page_16bytes_align.patch" ./ - patch -p1 --forward < clear_page_16bytes_align.patch - else - cp "$KERNEL_PATCHES/common/clear_page_16bytes_align.patch" ./ - sed -e 's/SYM_FUNC_START_PI(clear_page)/SYM_FUNC_START_PI(__pi_clear_page)/' clear_page_16bytes_align.patch > clear_page_16bytes_align__pi.patch - patch -p1 -F3 --forward < clear_page_16bytes_align__pi.patch - fi + - name: Setup SUSFS + if: contains(inputs.feature_set, 'SUSFS') + uses: ./.github/actions/susfs + with: + android_version: ${{ steps.parse.outputs.android_version }} + kernel_version: ${{ steps.parse.outputs.kernel_version }} + os_patch_level: ${{ steps.parse.outputs.os_patch_level }} + sublevel: ${{ steps.extract.outputs.sublevel }} + susfs_commit: ${{ inputs.susfs_commit }} + + - name: Setup SUSFS Patches + if: contains(inputs.feature_set, 'SUSFS') + uses: ./.github/actions/susfs-patches + with: + android_version: ${{ steps.parse.outputs.android_version }} + kernel_version: ${{ steps.parse.outputs.kernel_version }} + os_patch_level: ${{ steps.parse.outputs.os_patch_level }} + sublevel: ${{ steps.extract.outputs.sublevel }} - - name: Add BBG - if: true - working-directory: ${{ env.KERNEL_ROOT }} - run: | - curl -LSs https://github.com/vc-teahouse/Baseband-guard/raw/main/setup.sh | bash - echo "CONFIG_BBG=y" >> "${{ env.DEFCONFIG_FRAGMENT }}" - sed -i '/^config LSM$/,/^help$/{ /^[[:space:]]*default/ { /baseband_guard/! s/selinux/selinux,baseband_guard/ } }' common/security/Kconfig - if grep -q "baseband_guard" common/security/Kconfig; then - echo "SUCCESS: baseband_guard found in common/security/Kconfig" - grep -n "baseband_guard" common/security/Kconfig || true - else - echo "FAILED: baseband_guard not found in common/security/Kconfig" - exit 1 - fi + - name: Setup Baseband Guard + if: contains(inputs.feature_set, 'BBG') + uses: ./.github/actions/bbg - name: Apply Module Check Bypass - if: ${{ matrix.build_type == 'Bypass' || matrix.build_type == 'Hakan' || matrix.build_type == 'Duchamp' }} + if: ${{ inputs.variant == 'Bypass' || inputs.variant == 'Hakan' }} run: | - if [[ "${{ inputs.kernel_version }}" == "6.1" || "${{ inputs.kernel_version }}" == "6.6" || "${{ inputs.kernel_version }}" == "6.12" ]]; then - TARGET_FILE="$KERNEL_ROOT/common/kernel/module/version.c" + if [[ "$KERNEL_VERSION" == "6.1" || "$KERNEL_VERSION" == "6.6" || "$KERNEL_VERSION" == "6.12" ]]; then + TARGET_FILE="$GITHUB_WORKSPACE/kernel/common/kernel/module/version.c" else - TARGET_FILE="$KERNEL_ROOT/common/kernel/module.c" + TARGET_FILE="$GITHUB_WORKSPACE/kernel/common/kernel/module.c" fi - - echo "Applying bypass to $TARGET_FILE" + # Apply bypass patch to the target file sed -i '/bad_version:/{:a;n;/return 0;/{s/return 0;/return 1;/;b};ba}' "$TARGET_FILE" # Verify the bypass @@ -516,185 +228,52 @@ jobs: exit 1 fi - - name: Fix WiFi and Bluetooth on Samsung 6.6 GKI devices - if: ${{ ( inputs.kernel_version == '6.6' ) }} - working-directory: ${{ env.KERNEL_ROOT }}/common - run: | - SYMBOL_LIST=android/abi_gki_aarch64_galaxy - echo "kdp_set_cred_non_rcu" >> $SYMBOL_LIST - echo "kdp_usecount_dec_and_test" >> $SYMBOL_LIST - echo "kdp_usecount_inc" >> $SYMBOL_LIST - - PATCH="$KERNEL_PATCHES/samsung/min_kdp/add-min_kdp-symbols.patch" - if patch -p1 --dry-run < "$PATCH"; then - patch -p1 --no-backup-if-mismatch < $PATCH - fi - - cp "$KERNEL_PATCHES/samsung/min_kdp/min_kdp.c" drivers/min_kdp.c - echo "obj-y += min_kdp.o" >> drivers/Makefile - - - name: Fix WiFi and Bluetooth on Xiaomi 6.6 GKI devices - if: ${{ ( inputs.kernel_version == '6.6' ) }} - working-directory: ${{ env.KERNEL_ROOT }}/common - run: | - SYMBOL_LIST=android/abi_gki_aarch64_xiaomi - echo "device_find_any_child" >> $SYMBOL_LIST + - name: Apply Device-Specific Patches + uses: ./.github/actions/apply-device-patches + with: + kernel_version: ${{ steps.parse.outputs.kernel_version }} - name: Configure Kernel Options - working-directory: ${{ env.KERNEL_ROOT }} - run: | - cat >> "${{ env.DEFCONFIG_FRAGMENT }}" << 'EOF' - # KernelSU Configuration - CONFIG_KSU=y - CONFIG_KSU_SUSFS=y - - # KPatch Next Support - CONFIG_KALLSYMS=y - CONFIG_KALLSYMS_ALL=y - - # Mountify Support - CONFIG_TMPFS_XATTR=y - CONFIG_TMPFS_POSIX_ACL=y - - # Networking Configuration - CONFIG_IP_NF_TARGET_TTL=y - CONFIG_IP6_NF_TARGET_HL=y - CONFIG_IP6_NF_MATCH_HL=y - - # BBR TCP Congestion Control - CONFIG_TCP_CONG_ADVANCED=y - CONFIG_TCP_CONG_BBR=y - CONFIG_NET_SCH_FQ=y - # CONFIG_TCP_CONG_BIC is not set - # CONFIG_TCP_CONG_WESTWOOD is not set - # CONFIG_TCP_CONG_HTCP is not set - - # IPSet Support - CONFIG_IP_SET=y - CONFIG_IP_SET_MAX=65534 - CONFIG_IP_SET_BITMAP_IP=y - CONFIG_IP_SET_BITMAP_IPMAC=y - CONFIG_IP_SET_BITMAP_PORT=y - CONFIG_IP_SET_HASH_IP=y - CONFIG_IP_SET_HASH_IPMARK=y - CONFIG_IP_SET_HASH_IPPORT=y - CONFIG_IP_SET_HASH_IPPORTIP=y - CONFIG_IP_SET_HASH_IPPORTNET=y - CONFIG_IP_SET_HASH_IPMAC=y - CONFIG_IP_SET_HASH_MAC=y - CONFIG_IP_SET_HASH_NETPORTNET=y - CONFIG_IP_SET_HASH_NET=y - CONFIG_IP_SET_HASH_NETNET=y - CONFIG_IP_SET_HASH_NETPORT=y - CONFIG_IP_SET_HASH_NETIFACE=y - CONFIG_IP_SET_LIST_SET=y - - EOF - - echo "Contents of ${{ env.DEFCONFIG_FRAGMENT }}:" - cat "${{ env.DEFCONFIG_FRAGMENT }}" + uses: ./.github/actions/configure-kernel + with: + kernel_version: ${{ steps.parse.outputs.kernel_version }} - - name: Configure Audio Modules - if: inputs.variant == 'Hakan' - working-directory: ${{ env.KERNEL_ROOT }} - run: | - cat >> "${{ env.DEFCONFIG_FRAGMENT }}" << 'EOF' - CONFIG_RFKILL=y - CONFIG_CFG80211=y - CONFIG_MAC80211=y - EOF + - name: Setup Hakan + if: ${{ inputs.variant == 'Hakan' }} + uses: ./.github/actions/hakan - sed -i \ - -e '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*"lib\/crypto\/libarc4\.ko",[[:space:]]*$/d}' \ - -e '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*"net\/rfkill\/rfkill\.ko",[[:space:]]*$/d}' \ - common/modules.bzl + - name: Setup vTomsonek + if: ${{ inputs.variant == 'vTomsonek' }} + uses: ./.github/actions/vtomsonek + with: + android_version: ${{ steps.parse.outputs.android_version }} + kernel_version: ${{ steps.parse.outputs.kernel_version }} + sublevel: ${{ steps.parse.outputs.sub_level }} + os_patch_level: ${{ steps.parse.outputs.os_patch_level }} - - name: Configure SND - if: inputs.variant == 'vTomsonek' - working-directory: ${{ env.KERNEL_ROOT }} + - name: Apply ABI Compare Bypass + if: false + working-directory: ${{ github.workspace }}/kernel run: | - cat >> "${{ env.DEFCONFIG_FRAGMENT }}" << 'EOF' - # Sound Configuration - CONFIG_SND=y - CONFIG_SND_DRIVERS=y - CONFIG_SND_PCM=y - CONFIG_SND_TIMER=y - CONFIG_SND_DYNAMIC_MINORS=y - CONFIG_SND_PROC_FS=y - CONFIG_SND_ALOOP=m - CONFIG_USB_GADGET=y - CONFIG_CONFIGFS_FS=y - CONFIG_USB_CONFIGFS=y - CONFIG_USB_LIBCOMPOSITE=m - CONFIG_USB_AUDIO=m - CONFIG_USB_CONFIGFS_F_UAC1=y - CONFIG_USB_CONFIGFS_F_UAC2=y - EOF - - # Add snd-aloop.ko to modules list - echo "drivers/usb/gadget/legacy/g_audio.ko" >> common/android/gki_aarch64_modules - echo "sound/drivers/snd-aloop.ko" >> common/android/gki_aarch64_modules - #echo "drivers/usb/gadget/libcomposite.ko" >> common/android/gki_aarch64_modules - - if [[ -f common/modules.bzl ]]; then - # Insert before the closing bracket of COMMON_GKI_MODULES_LIST or _COMMON_GKI_MODULES_LIST - echo "Audio modules injection: adding to module list" - if [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" && $ACTUAL_SUBLEVEL -le 110 && "${{ inputs.os_patch_level }}" != "2023-09" ]] \ - || [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "6.1" && $ACTUAL_SUBLEVEL -le 25 && "${{ inputs.os_patch_level }}" != "2023-09" ]]; then - # snd-aloop - sed -i '/COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "sound/drivers/snd-aloop.ko", - }' common/modules.bzl - # USB Gadget Audio modules - sed -i '/COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "drivers/usb/gadget/libcomposite.ko", - }' common/modules.bzl - sed -i '/COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "drivers/usb/gadget/legacy/g_audio.ko", - }' common/modules.bzl - else - # snd-aloop - sed -i '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "sound/drivers/snd-aloop.ko", - }' common/modules.bzl - # USB Gadget Audio modules - sed -i '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "drivers/usb/gadget/libcomposite.ko", - }' common/modules.bzl - sed -i '/_COMMON_GKI_MODULES_LIST = \[/,/^[[:space:]]*\]/{/^[[:space:]]*\]$/i\ "drivers/usb/gadget/legacy/g_audio.ko", - }' common/modules.bzl - fi - - # Verify the injection was successful - if grep -q '"sound/drivers/snd-aloop.ko"' common/modules.bzl && \ - grep -q '"drivers/usb/gadget/libcomposite.ko"' common/modules.bzl && \ - grep -q '"drivers/usb/gadget/legacy/g_audio.ko"' common/modules.bzl && \ - grep -q '"drivers/usb/gadget/configfs.ko"' common/modules.bzl; then - echo "โœ“ Audio modules injection: successfully added all modules to list" - else - echo "โœ— Audio modules injection: failed to add one or more modules" - exit 1 - fi - fi - - # Add symbols to abi_gki_aarch64 - #SYMBOL_LIST=common/android/abi_gki_aarch64 - #cat Wild_KSU/kernel/export_symbol.txt | awk '{sub("[ \t]+","");print " "$0}' >> $SYMBOL_LIST - # ABI compare bypass per kernel/android version # Edit each block as needed per version - if [[ "${{ inputs.android_version }}" == "android12" && "${{ inputs.kernel_version }}" == "5.10" ]]; then + if [[ "$ANDROID_VERSION" == "android12" && "$KERNEL_VERSION" == "5.10" ]]; then sed -i 's/^\s*exit 1$/ echo "Who Cares? Bypassing Now!"/' build/abi/compare_to_symbol_list - elif [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.10" ]]; then + elif [[ "$ANDROID_VERSION" == "android13" && "$KERNEL_VERSION" == "5.10" ]]; then sed -i 's/^\s*exit 1$/ echo "Who Cares? Bypassing Now!"/' build/kernel/abi/compare_to_symbol_list - elif [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.15" ]]; then + elif [[ "$ANDROID_VERSION" == "android13" && "$KERNEL_VERSION" == "5.15" ]]; then sed -i 's/^\s*exit 1$/ echo "Who Cares? Bypassing Now!"/' build/kernel/abi/compare_to_symbol_list - elif [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" ]]; then + elif [[ "$ANDROID_VERSION" == "android14" && "$KERNEL_VERSION" == "5.15" ]]; then perl -i -pe 's/^(\s*)return 1$/$1print("Who Cares? Bypassing Now!")\n$1return 0/g if /if missing_symbols:/../return 1/' build/kernel/abi/check_buildtime_symbol_protection.py - elif [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "6.1" ]]; then + elif [[ "$ANDROID_VERSION" == "android14" && "$KERNEL_VERSION" == "6.1" ]]; then perl -i -pe 's/^(\s*)return 1$/$1print("Who Cares? Bypassing Now!")\n$1return 0/g if /if missing_symbols:/../return 1/' build/kernel/abi/check_buildtime_symbol_protection.py - elif [[ "${{ inputs.android_version }}" == "android15" && "${{ inputs.kernel_version }}" == "6.6" ]]; then + elif [[ "$ANDROID_VERSION" == "android15" && "$KERNEL_VERSION" == "6.6" ]]; then perl -i -pe 's/^(\s*)return 1$/$1print("Who Cares? Bypassing Now!")\n$1return 0/g if /if missing_symbols:/../return 1/' build/kernel/abi/check_buildtime_symbol_protection.py fi - name: Append ashmem exports if missing - if: ${{ inputs.android_version == 'android16' && inputs.kernel_version == '6.12' }} - working-directory: ${{ env.KERNEL_ROOT }} + if: ${{ steps.parse.outputs.android_version == 'android16' && steps.parse.outputs.kernel_version == '6.12' && false }} + working-directory: ${{ github.workspace }}/kernel run: | FILE=common/drivers/staging/android/ashmem.c if [[ -f "$FILE" ]] && ! grep -q 'is_ashmem_file' "$FILE"; then @@ -727,56 +306,26 @@ jobs: cat common/drivers/android/Makefile fi - - name: Change Kernel Name - working-directory: ${{ env.KERNEL_ROOT }} - run: | - #Wild to Kernel Version (replace last instance only) - if [[ "${{ inputs.kernel_version }}" == "5."* ]] || [[ "${{ inputs.kernel_version }}" == "6.1" ]]; then - case ${{ matrix.build_type }} in - TheWildJames) - perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-๐ŸŸข-Wild-Exclusive"/s' ./common/scripts/setlocalversion - ;; - MarionKernel) - perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-Wild-MarionKernel"/s' ./common/scripts/setlocalversion - ;; - Hakan) - perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-Wild-Hakan"/s' ./common/scripts/setlocalversion - ;; - *) - perl -i -0777 -pe 's/(.*)echo "\$res"/$1echo "\$res-Wild"/s' ./common/scripts/setlocalversion - ;; - esac - else - perl -i -0777 -pe 's/(.*)echo "\$\{KERNELVERSION\}\$\{file_localversion\}\$\{config_localversion\}\$\{LOCALVERSION\}\$\{scm_version\}"/$1echo "\${KERNELVERSION}\${file_localversion}\${config_localversion}\${LOCALVERSION}-Wild\${scm_version}"/s' ./common/scripts/setlocalversion - fi - export KBUILD_BUILD_TIMESTAMP="$(date -u '+%a %b %e %H:%M:%S UTC %Y')" - if [ -f "build/build.sh" ]; then - #Remove Dirty Flag - sed -i 's/-dirty//' ./common/scripts/setlocalversion - else - #Remove Dirty Flag - sed -i "/stable_scmversion_cmd/s/-maybe-dirty//g" ./build/kernel/kleaf/impl/stamp.bzl - sed -i 's/-dirty//' ./common/scripts/setlocalversion - #Remove Abi Exports and Error - rm -rf ./common/android/abi_gki_protected_exports_* - perl -pi -e 's/^\s*"protected_exports_list"\s*:\s*"android\/abi_gki_protected_exports_aarch64",\s*$//;' ./common/BUILD.bazel - fi + - name: Apply Kernel Branding + uses: ./.github/actions/apply-kernel-branding + with: + build_type: ${{ inputs.variant || 'Normal' }} + kernel_version: ${{ steps.parse.outputs.kernel_version }} - cd $KERNEL_ROOT/common - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add . - git commit -m "Wild: Clean Dirty Flag" + - name: Clean Kernel Flags + uses: ./.github/actions/clean-kernel-flags - name: Build Kernel - working-directory: ${{ env.KERNEL_ROOT }} + working-directory: ${{ github.workspace }}/kernel run: | set -ex + #make -C common mrproper if [ -f "build/build.sh" ]; then - PATH="/usr/bin:/bin:$PATH" HOSTLDFLAGS="-B/usr/bin ${HOSTLDFLAGS:-}" LDFLAGS="-B/usr/bin ${LDFLAGS:-}" \ - GKI_DEFCONFIG_FRAGMENT="${{ env.DEFCONFIG_FRAGMENT }}" LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh || exit 1 + SKIP_MRPROPER=1 GKI_DEFCONFIG_FRAGMENT="$GITHUB_WORKSPACE/wild_gki.fragment" LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh || exit 1 else - if [[ "${{ inputs.android_version }}" == "android14" ]]; then + # Copy fragment to kernel tree for bazel + cp "$GITHUB_WORKSPACE/wild_gki.fragment" common/arch/arm64/configs/wild_gki.fragment + if [[ "$ANDROID_VERSION" == "android14" ]]; then tools/bazel build --config=fast --lto=thin --defconfig_fragment=//common:arch/arm64/configs/wild_gki.fragment //common:kernel_aarch64_dist || exit 1 else tools/bazel build --config=fast --lto=none --defconfig_fragment=//common:arch/arm64/configs/wild_gki.fragment //common:kernel_aarch64_dist || exit 1 @@ -786,10 +335,10 @@ jobs: - name: Prepare AnyKernel3 Zip run: | # Copy Image from normal build locations - if [ -f "$KERNEL_ROOT/out/${{ inputs.android_version }}-${{ inputs.kernel_version }}/dist/Image" ]; then - cp "$KERNEL_ROOT/out/${{ inputs.android_version }}-${{ inputs.kernel_version }}/dist/Image" "$ANYKERNEL3/Image" - elif [ -f "$KERNEL_ROOT/bazel-bin/common/kernel_aarch64/Image" ]; then - cp "$KERNEL_ROOT/bazel-bin/common/kernel_aarch64/Image" "$ANYKERNEL3/Image" + if [ -f "$GITHUB_WORKSPACE/kernel/out/$ANDROID_VERSION-$KERNEL_VERSION/dist/Image" ]; then + cp "$GITHUB_WORKSPACE/kernel/out/$ANDROID_VERSION-$KERNEL_VERSION/dist/Image" "$GITHUB_WORKSPACE/AnyKernel3/Image" + elif [ -f "$GITHUB_WORKSPACE/kernel/bazel-bin/common/kernel_aarch64/Image" ]; then + cp "$GITHUB_WORKSPACE/kernel/bazel-bin/common/kernel_aarch64/Image" "$GITHUB_WORKSPACE/AnyKernel3/Image" else echo "Error: Image file not found in any expected location" exit 1 @@ -799,25 +348,26 @@ jobs: if: ${{ inputs.variant == 'vTomsonek' }} run: | if [ "${{ inputs.variant }}" = "vTomsonek" ]; then - sed -i 's|^do\.modules=.*|do.modules=1|' ./AnyKernel3/anykernel.sh + sed -i 's|^do\.modules=.*|do.modules=1|' "$GITHUB_WORKSPACE/AnyKernel3/anykernel.sh" fi - mkdir -p AnyKernel3/modules/data/adb/lkm + mkdir -p "$GITHUB_WORKSPACE/AnyKernel3/modules/data/adb/lkm" - if [[ "${{ inputs.android_version }}" == "android12" || "${{ inputs.android_version }}" == "android13" ]]; then - SRC_DIR="$KERNEL_ROOT/out/${{ inputs.android_version }}-${{ inputs.kernel_version }}/dist" + if [[ "$ANDROID_VERSION" == "android12" || "$ANDROID_VERSION" == "android13" ]]; then + SRC_DIR="$GITHUB_WORKSPACE/kernel/out/$ANDROID_VERSION-$KERNEL_VERSION/dist" else - SRC_DIR="$KERNEL_ROOT/bazel-bin/common/kernel_aarch64" + SRC_DIR="$GITHUB_WORKSPACE/kernel/bazel-bin/common/kernel_aarch64" fi - cp "$SRC_DIR/snd-aloop.ko" "$ANYKERNEL3/modules/data/adb/lkm/" - cp "$SRC_DIR/g_audio.ko" "$ANYKERNEL3/modules/data/adb/lkm/" + cp "$SRC_DIR/snd-aloop.ko" "$GITHUB_WORKSPACE/AnyKernel3/modules/data/adb/lkm/" + cp "$SRC_DIR/g_audio.ko" "$GITHUB_WORKSPACE/AnyKernel3/modules/data/adb/lkm/" - name: Scan and collect patch rejects + id: scan if: ${{ always() }} run: | set -e - CONFIG_DIR="$KERNEL_ROOT" + CONFIG_DIR="$GITHUB_WORKSPACE/kernel" REJECTS_DIR="$GITHUB_WORKSPACE/patch-rejects" mkdir -p "$REJECTS_DIR" # Find all .rej files under the configuration directory @@ -825,6 +375,7 @@ jobs: REJ_COUNT=${#REJS[@]} echo "Found $REJ_COUNT .rej files under $CONFIG_DIR" echo "REJ_COUNT=$REJ_COUNT" >> $GITHUB_ENV + echo "rej_count=$REJ_COUNT" >> $GITHUB_OUTPUT if [ "$REJ_COUNT" -gt 0 ]; then for REJ in "${REJS[@]}"; do # Relative path from $CONFIG @@ -846,18 +397,42 @@ jobs: - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: ${{ env.FILE_NAME }}-AnyKernel3 - path: ./AnyKernel3/** + name: ${{ steps.extract.outputs.file_name }}-AnyKernel3 + path: ${{ github.workspace }}/AnyKernel3/** if-no-files-found: ignore compression-level: 9 - name: Upload Rejects - if: ${{ always() && matrix.build_type != 'Bypass' && env.REJ_COUNT > 0 }} + if: ${{ always() && inputs.variant != 'Bypass' && steps.scan.outputs.rej_count > 0 }} uses: actions/upload-artifact@v4 with: - name: ${{ env.FILE_NAME }}-Rejects + name: ${{ steps.extract.outputs.file_name }}-Rejects path: patch-rejects/ if-no-files-found: ignore compression-level: 9 + - name: Build Summary + if: ${{ always() }} + run: | + # Kernel info + echo "Android Version : $ANDROID_VERSION" + echo "Kernel Version : $KERNEL_VERSION" + echo "Sub Level : $SUB_LEVEL" + echo "Sub level (Makefile): $SUBLEVEL" + echo "Patch Level : $OS_PATCH_LEVEL" + # Branch info + echo "Repo Branch : common-$KERNEL_VERSION-$ANDROID_VERSION-$OS_PATCH_LEVEL || 'normal'" + echo "Deprecated : $DEPRECATED_BRANCH" + # Build info + echo "Build Type : ${{ inputs.variant || 'Normal' }}" + # Features info + echo "Features : ${{ inputs.feature_set || 'None' }}" + echo "WKSU Commit : ${{ inputs.ksu_commit || 'canary' }}" + echo "WKSU Tag : $KSU_GIT_TAG" + echo "WKSU Version : $KSU_VERSION" + echo "BBG Commit : $BBG_COMMIT" + echo "BBG Version : $BBG_VERSION" + # Variant info + echo "Variant : ${{ inputs.variant || 'Standard' }}" + echo "Features : ${{ inputs.feature_set || 'None' }}" # End of workflow diff --git a/.github/workflows/kernel-a12-5-10.yml b/.github/workflows/kernel-a12-5-10.yml deleted file mode 100644 index 12bfb49427..0000000000 --- a/.github/workflows/kernel-a12-5-10.yml +++ /dev/null @@ -1,113 +0,0 @@ -name: Kernel Config - A12 5.10 - -permissions: - contents: write # Allow writing to repository contents - actions: write # Allows triggering actions - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernels-a12: - name: "5.10.${{ matrix.sub_level }}-${{ matrix.os_patch_level }}" - strategy: - fail-fast: false - matrix: - include: - # Deprecated series (Android 12 - 5.10) - - sub_level: "43" - os_patch_level: "2021-08" - - sub_level: "43" - os_patch_level: "2021-09" - - sub_level: "43" - os_patch_level: "2021-10" - - sub_level: "66" - os_patch_level: "2021-11" - - sub_level: "66" - os_patch_level: "2021-12" - - sub_level: "66" - os_patch_level: "2022-01" - - sub_level: "81" - os_patch_level: "2022-02" - - sub_level: "81" - os_patch_level: "2022-03" - - sub_level: "101" - os_patch_level: "2022-04" - - sub_level: "101" - os_patch_level: "2022-05" - - sub_level: "110" - os_patch_level: "2022-06" - - sub_level: "110" - os_patch_level: "2022-07" - - sub_level: "117" - os_patch_level: "2022-08" - - sub_level: "117" - os_patch_level: "2022-09" - - sub_level: "136" - os_patch_level: "2022-10" - - sub_level: "136" - os_patch_level: "2022-11" - - sub_level: "149" - os_patch_level: "2022-12" - - sub_level: "149" - os_patch_level: "2023-01" - - sub_level: "160" - os_patch_level: "2023-02" - - sub_level: "160" - os_patch_level: "2023-03" - - sub_level: "168" - os_patch_level: "2023-04" - - sub_level: "168" - os_patch_level: "2023-05" - - sub_level: "177" - os_patch_level: "2023-06" - - sub_level: "177" - os_patch_level: "2023-07" - - sub_level: "185" - os_patch_level: "2023-09" - - sub_level: "198" - os_patch_level: "2023-11" - - sub_level: "198" - os_patch_level: "2024-01" - - sub_level: "205" - os_patch_level: "2024-03" - - sub_level: "209" - os_patch_level: "2024-05" - - sub_level: "218" - os_patch_level: "2024-08" - # Active series - - sub_level: "226" - os_patch_level: "2024-11" - - sub_level: "233" - os_patch_level: "2025-02" - - sub_level: "236" - os_patch_level: "2025-05" - - sub_level: "237" - os_patch_level: "2025-06" - - sub_level: "240" - os_patch_level: "2025-09" - - sub_level: "246" - os_patch_level: "2025-12" - # LTS meta - - sub_level: "X" - os_patch_level: "lts" - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: "android12" - kernel_version: "5.10" - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/kernel-a13-5-10.yml b/.github/workflows/kernel-a13-5-10.yml deleted file mode 100644 index 17746675c3..0000000000 --- a/.github/workflows/kernel-a13-5-10.yml +++ /dev/null @@ -1,115 +0,0 @@ -name: Kernel Config - A13 5.10 - -permissions: - contents: write # Allow writing to repository contents - actions: write # Allows triggering actions - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernels-a13-5-10: - name: "5.10.${{ matrix.sub_level }}-${{ matrix.os_patch_level }}" - strategy: - fail-fast: false - matrix: - include: - # Deprecated series (Android 13 - 5.10) - - sub_level: "107" - os_patch_level: "2022-04" - - sub_level: "107" - os_patch_level: "2022-05" - - sub_level: "107" - os_patch_level: "2022-06" - - sub_level: "107" - os_patch_level: "2022-07" - - sub_level: "107" - os_patch_level: "2022-08" - - sub_level: "107" - os_patch_level: "2022-09" - - sub_level: "107" - os_patch_level: "2022-10" - - sub_level: "107" - os_patch_level: "2022-11" - - sub_level: "149" - os_patch_level: "2022-12" - - sub_level: "149" - os_patch_level: "2023-01" - - sub_level: "157" - os_patch_level: "2023-02" - - sub_level: "157" - os_patch_level: "2023-03" - - sub_level: "168" - os_patch_level: "2023-04" - - sub_level: "168" - os_patch_level: "2023-05" - - sub_level: "177" - os_patch_level: "2023-06" - - sub_level: "177" - os_patch_level: "2023-07" - - sub_level: "186" - os_patch_level: "2023-08" - - sub_level: "186" - os_patch_level: "2023-09" - - sub_level: "189" - os_patch_level: "2023-10" - - sub_level: "189" - os_patch_level: "2023-11" - - sub_level: "198" - os_patch_level: "2023-12" - - sub_level: "198" - os_patch_level: "2024-01" - - sub_level: "205" - os_patch_level: "2024-02" - - sub_level: "205" - os_patch_level: "2024-03" - - sub_level: "209" - os_patch_level: "2024-04" - - sub_level: "209" - os_patch_level: "2024-05" - - sub_level: "210" - os_patch_level: "2024-06" - - sub_level: "214" - os_patch_level: "2024-07" - - sub_level: "218" - os_patch_level: "2024-08" - # Active series - - sub_level: "223" - os_patch_level: "2024-09" - - sub_level: "223" - os_patch_level: "2024-11" - - sub_level: "228" - os_patch_level: "2025-01" - - sub_level: "234" - os_patch_level: "2025-03" - - sub_level: "236" - os_patch_level: "2025-05" - - sub_level: "238" - os_patch_level: "2025-07" - - sub_level: "243" - os_patch_level: "2025-10" - - sub_level: "246" - os_patch_level: "2026-01" - # LTS meta - - sub_level: "X" - os_patch_level: "lts" - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: "android13" - kernel_version: "5.10" - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/kernel-a13-5-15.yml b/.github/workflows/kernel-a13-5-15.yml deleted file mode 100644 index f9d94f9d12..0000000000 --- a/.github/workflows/kernel-a13-5-15.yml +++ /dev/null @@ -1,108 +0,0 @@ -name: Kernel Config - A13 5.15 - -permissions: - contents: write # Allow writing to repository contents - actions: write # Allows triggering actions - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernels-a13-5-15: - name: "5.15.${{ matrix.sub_level }}-${{ matrix.os_patch_level }}" - strategy: - fail-fast: false - matrix: - include: - - sub_level: "41" - os_patch_level: "2022-06" - - sub_level: "41" - os_patch_level: "2022-07" - - sub_level: "41" - os_patch_level: "2022-08" - - sub_level: "41" - os_patch_level: "2022-09" - - sub_level: "41" - os_patch_level: "2022-10" - - sub_level: "41" - os_patch_level: "2022-11" - - sub_level: "74" - os_patch_level: "2022-12" - - sub_level: "74" - os_patch_level: "2023-01" - - sub_level: "78" - os_patch_level: "2023-02" - - sub_level: "78" - os_patch_level: "2023-03" - - sub_level: "94" - os_patch_level: "2023-04" - - sub_level: "94" - os_patch_level: "2023-05" - - sub_level: "104" - os_patch_level: "2023-06" - - sub_level: "104" - os_patch_level: "2023-07" - - sub_level: "119" - os_patch_level: "2023-08" - - sub_level: "119" - os_patch_level: "2023-09" - - sub_level: "123" - os_patch_level: "2023-10" - - sub_level: "123" - os_patch_level: "2023-11" - - sub_level: "137" - os_patch_level: "2023-12" - - sub_level: "137" - os_patch_level: "2024-01" - - sub_level: "144" - os_patch_level: "2024-02" - - sub_level: "144" - os_patch_level: "2024-03" - - sub_level: "148" - os_patch_level: "2024-04" - - sub_level: "148" - os_patch_level: "2024-05" - - sub_level: "149" - os_patch_level: "2024-06" - - sub_level: "149" - os_patch_level: "2024-07" - - sub_level: "151" - os_patch_level: "2024-08" - - sub_level: "153" - os_patch_level: "2024-09" - - sub_level: "167" - os_patch_level: "2024-11" - - sub_level: "170" - os_patch_level: "2025-01" - - sub_level: "178" - os_patch_level: "2025-03" - - sub_level: "180" - os_patch_level: "2025-05" - - sub_level: "185" - os_patch_level: "2025-07" - - sub_level: "189" - os_patch_level: "2025-09" - - sub_level: "194" - os_patch_level: "2025-12" - - sub_level: "X" - os_patch_level: "lts" - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: "android13" - kernel_version: "5.15" - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/kernel-a14-5-15.yml b/.github/workflows/kernel-a14-5-15.yml deleted file mode 100644 index 7fca876df9..0000000000 --- a/.github/workflows/kernel-a14-5-15.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: Kernel Config - A14 5.15 - -permissions: - contents: write # Allow writing to repository contents - actions: write # Allows triggering actions - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernels-a14-5-15: - name: "5.15.${{ matrix.sub_level }}-${{ matrix.os_patch_level }}" - strategy: - fail-fast: false - matrix: - include: - - sub_level: "110" - os_patch_level: "2023-06" - - sub_level: "110" - os_patch_level: "2023-08" - - sub_level: "110" - os_patch_level: "2023-09" - - sub_level: "131" - os_patch_level: "2023-11" - - sub_level: "137" - os_patch_level: "2024-01" - - sub_level: "144" - os_patch_level: "2024-02" - - sub_level: "144" - os_patch_level: "2024-03" - - sub_level: "148" - os_patch_level: "2024-04" - - sub_level: "148" - os_patch_level: "2024-05" - - sub_level: "149" - os_patch_level: "2024-06" - - sub_level: "153" - os_patch_level: "2024-07" - - sub_level: "158" - os_patch_level: "2024-08" - - sub_level: "164" - os_patch_level: "2024-09" - - sub_level: "167" - os_patch_level: "2024-11" - - sub_level: "170" - os_patch_level: "2025-01" - - sub_level: "178" - os_patch_level: "2025-03" - - sub_level: "180" - os_patch_level: "2025-05" - - sub_level: "185" - os_patch_level: "2025-07" - - sub_level: "192" - os_patch_level: "2025-10" - - sub_level: "196" - os_patch_level: "2026-01" - - sub_level: "X" - os_patch_level: "lts" - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: "android14" - kernel_version: "5.15" - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/kernel-a14-6-1.yml b/.github/workflows/kernel-a14-6-1.yml deleted file mode 100644 index 423fafa407..0000000000 --- a/.github/workflows/kernel-a14-6-1.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: Kernel Config - A14 6.1 - -permissions: - contents: write # Allow writing to repository contents - actions: write # Allows triggering actions - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernels-a14-6-1: - name: "6.1.${{ matrix.sub_level }}-${{ matrix.os_patch_level }}" - strategy: - fail-fast: false - matrix: - include: - - sub_level: "25" - os_patch_level: "2023-06" - - sub_level: "25" - os_patch_level: "2023-07" - - sub_level: "25" - os_patch_level: "2023-08" - - sub_level: "25" - os_patch_level: "2023-09" - - sub_level: "25" - os_patch_level: "2023-10" - - sub_level: "43" - os_patch_level: "2023-11" - - sub_level: "57" - os_patch_level: "2023-12" - - sub_level: "57" - os_patch_level: "2024-01" - - sub_level: "68" - os_patch_level: "2024-02" - - sub_level: "68" - os_patch_level: "2024-03" - - sub_level: "75" - os_patch_level: "2024-04" - - sub_level: "75" - os_patch_level: "2024-05" - - sub_level: "78" - os_patch_level: "2024-06" - - sub_level: "84" - os_patch_level: "2024-07" - - sub_level: "90" - os_patch_level: "2024-08" - - sub_level: "93" - os_patch_level: "2024-09" - - sub_level: "99" - os_patch_level: "2024-10" - - sub_level: "112" - os_patch_level: "2024-11" - - sub_level: "115" - os_patch_level: "2024-12" - - sub_level: "118" - os_patch_level: "2025-01" - - sub_level: "124" - os_patch_level: "2025-02" - - sub_level: "128" - os_patch_level: "2025-03" - - sub_level: "129" - os_patch_level: "2025-04" - - sub_level: "134" - os_patch_level: "2025-05" - - sub_level: "138" - os_patch_level: "2025-06" - - sub_level: "141" - os_patch_level: "2025-07" - - sub_level: "145" - os_patch_level: "2025-08" - - sub_level: "145" - os_patch_level: "2025-09" - - sub_level: "157" - os_patch_level: "2025-12" - - sub_level: "X" - os_patch_level: "lts" - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: "android14" - kernel_version: "6.1" - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/kernel-a15-6-6.yml b/.github/workflows/kernel-a15-6-6.yml deleted file mode 100644 index 1d8bc70224..0000000000 --- a/.github/workflows/kernel-a15-6-6.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: Kernel Config - A15 6.6 - -permissions: - contents: write # Allow writing to repository contents - actions: write # Allows triggering actions - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernels-a15: - name: "6.6.${{ matrix.sub_level }}-${{ matrix.os_patch_level }}" - strategy: - fail-fast: false - matrix: - include: - - sub_level: "30" - os_patch_level: "2024-07" - - sub_level: "30" - os_patch_level: "2024-08" - - sub_level: "46" - os_patch_level: "2024-09" - - sub_level: "50" - os_patch_level: "2024-10" - - sub_level: "56" - os_patch_level: "2024-11" - - sub_level: "57" - os_patch_level: "2024-12" - - sub_level: "58" - os_patch_level: "2025-01" - - sub_level: "66" - os_patch_level: "2025-02" - - sub_level: "77" - os_patch_level: "2025-03" - - sub_level: "82" - os_patch_level: "2025-04" - - sub_level: "87" - os_patch_level: "2025-05" - - sub_level: "89" - os_patch_level: "2025-06" - - sub_level: "92" - os_patch_level: "2025-07" - - sub_level: "98" - os_patch_level: "2025-08" - - sub_level: "98" - os_patch_level: "2025-09" - - sub_level: "102" - os_patch_level: "2025-10" - - sub_level: "118" - os_patch_level: "2026-01" - - sub_level: "X" - os_patch_level: "lts" - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: "android15" - kernel_version: "6.6" - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/kernel-a16-612.yml b/.github/workflows/kernel-a16-612.yml deleted file mode 100644 index 34ff4b2bc7..0000000000 --- a/.github/workflows/kernel-a16-612.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Kernel Config - A16 6.12 - -permissions: - contents: write - actions: write - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernels-a16-612: - name: "6.12.${{ matrix.sub_level }}-${{ matrix.os_patch_level }}" - strategy: - fail-fast: false - matrix: - include: - - sub_level: "23" - os_patch_level: "2025-05-exp" - - sub_level: "30" - os_patch_level: "2025-07" - - sub_level: "38" - os_patch_level: "2025-08" - - sub_level: "38" - os_patch_level: "2025-09" - - sub_level: "58" - os_patch_level: "2025-12" - - sub_level: "X" - os_patch_level: "lts" - # Add more sublevels/patch levels as needed - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: "android16" - kernel_version: "6.12" - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - variant: "A16-612" - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/kernel-custom.yml b/.github/workflows/kernel-custom.yml deleted file mode 100644 index 345514c4e8..0000000000 --- a/.github/workflows/kernel-custom.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: Kernel Config - Custom - -permissions: - contents: write - actions: write - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernel-custom: - strategy: - fail-fast: false - matrix: - include: - - android_version: "android12" - kernel_version: "5.10" - sub_level: "226" - os_patch_level: "2024-11" - variant: "vTomsonek" - - android_version: "android14" - kernel_version: "6.1" - sub_level: "145" - os_patch_level: "2025-09" - variant: "TheWildJames" - - android_version: "android14" - kernel_version: "6.1" - sub_level: "157" - os_patch_level: "2025-12" - variant: "MarionKernel" - - android_version: "android14" - kernel_version: "6.1" - sub_level: "128" - os_patch_level: "2025-03" - variant: "Hakan" - - android_version: "android14" - kernel_version: "6.1" - sub_level: "68" - os_patch_level: "2024-03" - variant: "Duchamp" - - android_version: "android12" - kernel_version: "5.10" - sub_level: "226" - os_patch_level: "2024-11" - variant: "Neyugn" - - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: ${{ matrix.android_version }} - kernel_version: ${{ matrix.kernel_version }} - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - variant: ${{ matrix.variant }} - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/kernel-lts.yml b/.github/workflows/kernel-lts.yml deleted file mode 100644 index d1454f0505..0000000000 --- a/.github/workflows/kernel-lts.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Kernel Config - LTS AIO - -permissions: - contents: write - actions: write - -on: - workflow_call: - inputs: - ksu_variant: - required: true - type: string - ksu_commit: - required: false - type: string - build_bypass: - required: true - type: boolean - -jobs: - build-kernels-lts: - name: "LTS-${{ matrix.android_version }}-${{ matrix.kernel_version }}" - strategy: - fail-fast: false - matrix: - include: - - android_version: "android12" - kernel_version: "5.10" - sub_level: "X" - os_patch_level: "lts" - - android_version: "android13" - kernel_version: "5.10" - sub_level: "X" - os_patch_level: "lts" - - android_version: "android13" - kernel_version: "5.15" - sub_level: "X" - os_patch_level: "lts" - - android_version: "android14" - kernel_version: "5.15" - sub_level: "X" - os_patch_level: "lts" - - android_version: "android14" - kernel_version: "6.1" - sub_level: "X" - os_patch_level: "lts" - - android_version: "android15" - kernel_version: "6.6" - sub_level: "X" - os_patch_level: "lts" - - android_version: "android16" - kernel_version: "6.12" - sub_level: "X" - os_patch_level: "lts" - - uses: ./.github/workflows/build.yml - secrets: inherit - with: - android_version: ${{ matrix.android_version }} - kernel_version: ${{ matrix.kernel_version }} - sub_level: ${{ matrix.sub_level }} - os_patch_level: ${{ matrix.os_patch_level }} - variant: ${{ matrix.variant }} - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 00dfc1e1ae..a8daf292dc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,143 +12,210 @@ on: type: choice options: [ Actions, Pre-Release, Release ] default: Actions - ksu_variant: - description: "KernelSU Variant" + kernel_build_version: + description: "Kernel Version to Build" type: choice - options: [ KSU, WKSU, Next, RKSU] - default: WKSU + options: + - all + - a12-5-10 + - a13-5-10 + - a13-5-15 + - a14-5-15 + - a14-6-1 + - a15-6-6 + - a16-6-12 + - lts + - custom + - testing + - bypass + default: custom + feature_set: + description: "Feature Set" + type: choice + options: + - WKSU+SUSFS+BBG + - WKSU+BBG + - WKSU + - BBG + - None + default: WKSU+SUSFS+BBG ksu_commit: description: "KSU Commit (optional)" type: string default: "" required: false - build_bypass: - description: "Build Bypass" - type: boolean - default: false - # Build Selection - build_a12_5_10: - description: "Android 12 - 5.10" - type: boolean - default: false - build_a13_5_10: - description: "Android 13 - 5.10" - type: boolean - default: false - build_a13_5_15: - description: "Android 13 - 5.15" - type: boolean - default: false - build_a14_5_15: - description: "Android 14 - 5.15" - type: boolean - default: false - build_a14_6_1: - description: "Android 14 - 6.1" - type: boolean - default: false - build_a15_6_6: - description: "Android 15 - 6.6" - type: boolean - default: false - build_a16_6_12: - description: "Android 16 - 6.12" - type: boolean - default: false - build_custom: - description: "Custom Builds" - type: boolean - default: true - build_lts: - description: "Build All LTS Kernels" - type: boolean - default: false + push: + branches: + - main + tags: + - 'v*' jobs: + fetch-commits: + runs-on: ubuntu-latest + outputs: + ksu_commit: ${{ steps.fetch.outputs.ksu_commit }} + anykernel_commit: ${{ steps.fetch.outputs.anykernel_commit }} + patches_commit: ${{ steps.fetch.outputs.patches_commit }} + susfs_commit: ${{ steps.fetch.outputs.susfs_commit }} + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Fetch Commits + id: fetch + uses: ./.github/actions/fetch-commits + with: + ksu_commit: ${{ inputs.ksu_commit }} + build-a12-5-10: - if: inputs.build_a12_5_10 - uses: ./.github/workflows/kernel-a12-5-10.yml - secrets: inherit + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'a12-5-10' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/a12-5.10.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit build-a13-5-10: - if: inputs.build_a13_5_10 - uses: ./.github/workflows/kernel-a13-5-10.yml - secrets: inherit + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'a13-5-10' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/a13-5.10.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit build-a13-5-15: - if: inputs.build_a13_5_15 - uses: ./.github/workflows/kernel-a13-5-15.yml - secrets: inherit + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'a13-5-15' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/a13-5.15.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit build-a14-5-15: - if: inputs.build_a14_5_15 - uses: ./.github/workflows/kernel-a14-5-15.yml - secrets: inherit + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'a14-5-15' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/a14-5.15.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit build-a14-6-1: - if: inputs.build_a14_6_1 - uses: ./.github/workflows/kernel-a14-6-1.yml - secrets: inherit + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'a14-6-1' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/a14-6.1.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit build-a15-6-6: - if: inputs.build_a15_6_6 - uses: ./.github/workflows/kernel-a15-6-6.yml - secrets: inherit + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'a15-6-6' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/a15-6.6.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit build-a16-6-12: - if: inputs.build_a16_6_12 - uses: ./.github/workflows/kernel-a16-612.yml + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'a16-6-12' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml + with: + config_file: .github/kernel-config/a16-6.12.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} secrets: inherit + + build-lts: + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'lts' || (github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/v')) || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/lts.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit build-custom: - if: inputs.build_custom - uses: ./.github/workflows/kernel-custom.yml - secrets: inherit + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'custom' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/custom.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit - build-lts: - if: inputs.build_lts - uses: ./.github/workflows/kernel-lts.yml + build-testing: + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'testing' || (github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/v')) || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml + with: + config_file: .github/kernel-config/testing.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} secrets: inherit + + build-bypass: + if: ${{ inputs.kernel_build_version == 'all' || inputs.kernel_build_version == 'bypass' || startsWith(github.ref, 'refs/tags/v') }} + needs: fetch-commits + uses: ./.github/workflows/prepare.yml with: - ksu_variant: ${{ inputs.ksu_variant }} - ksu_commit: ${{ inputs.ksu_commit }} - build_bypass: ${{ inputs.build_bypass }} + config_file: .github/kernel-config/bypass.json + ksu_commit: ${{ inputs.ksu_commit || needs.fetch-commits.outputs.ksu_commit }} + anykernel_commit: ${{ needs.fetch-commits.outputs.anykernel_commit }} + patches_commit: ${{ needs.fetch-commits.outputs.patches_commit }} + susfs_commit: ${{ needs.fetch-commits.outputs.susfs_commit }} + feature_set: ${{ inputs.feature_set || 'WKSU+SUSFS+BBG' }} + secrets: inherit rej: if: always() runs-on: ubuntu-latest + permissions: + actions: read + contents: read needs: - build-a12-5-10 - build-a13-5-10 @@ -159,12 +226,15 @@ jobs: - build-a16-6-12 - build-custom - build-lts + - build-testing + - build-bypass steps: - name: Download Misc Artifacts - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v4 with: path: ./downloaded-artifacts pattern: '*-Rejects' + merge-multiple: false - name: Process Reject Artifacts run: | @@ -176,7 +246,7 @@ jobs: [ -d "$dir" ] || continue dirname=$(basename "$dir") - echo "Processing $dirname..." + # Process each reject artifact # Get original name (remove -Rejects suffix) original_name=${dirname%-Rejects} @@ -185,17 +255,17 @@ jobs: # Check for patch-rejects folder (legacy structure) or direct contents if [ -d "$dir/patch-rejects" ]; then - echo "Found patch-rejects subdir in $dirname" + # Legacy structure cp -r "$dir/patch-rejects/." "aio-rejects/$original_name/" else - echo "Copying contents from $dirname" + # Current structure cp -r "$dir/." "aio-rejects/$original_name/" fi done # Zip and upload if we found anything if [ "$(ls -A aio-rejects)" ]; then - echo "Creating AIO-REJ.zip..." + # Create a single zip of all rejects cd aio-rejects zip -r -q -9 ../AIO-REJ.zip . cd .. @@ -212,7 +282,7 @@ jobs: release: runs-on: ubuntu-latest - if: ${{ always() && inputs.release_type != 'Actions' }} + if: ${{ (github.event_name == 'workflow_dispatch' && inputs.release_type != 'Actions') || startsWith(github.ref, 'refs/tags/v') }} permissions: contents: write needs: @@ -223,12 +293,14 @@ jobs: - build-a14-6-1 - build-a15-6-6 - build-a16-6-12 - - build-custom - build-lts + - build-custom + - build-bypass + - rej env: GH_TOKEN: ${{ github.token }} - RELEASE_NAME: "!!TESTING!! GKI Kernels With KernelSU-Next & SUSFS v2.0.0 !!TESTING!!" + RELEASE_NAME: "GKI Kernels With WKSU & SUSFS v2.0.0" RELEASE_BODY: "" outputs: new_tag: ${{ steps.tag.outputs.new_tag }} @@ -238,28 +310,34 @@ jobs: set -euo pipefail failed=0 + current_type="${{ inputs.kernel_build_version }}" + if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then + current_type="all" + fi check_selected() { - local selected="$1" + local target="$1" local job_name="$2" local result="$3" - if [[ "$selected" == "true" ]]; then + + if [[ "$current_type" == "all" || "$current_type" == "$target" ]]; then if [[ "$result" != "success" ]]; then - echo "Selected job $job_name did not succeed (result: $result)" + echo "Required job $job_name did not succeed (result: $result)" failed=1 fi fi } - check_selected "${{ inputs.build_a12_5_10 }}" "build-a12-5-10" "${{ needs.build-a12-5-10.result }}" - check_selected "${{ inputs.build_a13_5_10 }}" "build-a13-5-10" "${{ needs.build-a13-5-10.result }}" - check_selected "${{ inputs.build_a13_5_15 }}" "build-a13-5-15" "${{ needs.build-a13-5-15.result }}" - check_selected "${{ inputs.build_a14_5_15 }}" "build-a14-5-15" "${{ needs.build-a14-5-15.result }}" - check_selected "${{ inputs.build_a14_6_1 }}" "build-a14-6-1" "${{ needs.build-a14-6-1.result }}" - check_selected "${{ inputs.build_a15_6_6 }}" "build-a15-6-6" "${{ needs.build-a15-6-6.result }}" - check_selected "${{ inputs.build_a16_6_12 }}" "build-a16-6-12" "${{ needs.build-a16-6-12.result }}" - check_selected "${{ inputs.build_custom }}" "build-custom" "${{ needs.build-custom.result }}" - check_selected "${{ inputs.build_lts }}" "build-lts" "${{ needs.build-lts.result }}" + check_selected "a12-5-10" "build-a12-5-10" "${{ needs.build-a12-5-10.result }}" + check_selected "a13-5-10" "build-a13-5-10" "${{ needs.build-a13-5-10.result }}" + check_selected "a13-5-15" "build-a13-5-15" "${{ needs.build-a13-5-15.result }}" + check_selected "a14-5-15" "build-a14-5-15" "${{ needs.build-a14-5-15.result }}" + check_selected "a14-6-1" "build-a14-6-1" "${{ needs.build-a14-6-1.result }}" + check_selected "a15-6-6" "build-a15-6-6" "${{ needs.build-a15-6-6.result }}" + check_selected "a16-6-12" "build-a16-6-12" "${{ needs.build-a16-6-12.result }}" + check_selected "custom" "build-custom" "${{ needs.build-custom.result }}" + check_selected "lts" "build-lts" "${{ needs.build-lts.result }}" + check_selected "bypass" "build-bypass" "${{ needs.build-bypass.result }}" if [[ "$failed" -ne 0 ]]; then exit 1 @@ -283,12 +361,24 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Ensure tag is from main + if: ${{ startsWith(github.ref, 'refs/tags/v') }} + run: | + git fetch origin main + git merge-base --is-ancestor "$GITHUB_SHA" "origin/main" - name: Generate New Tag id: tag - if: inputs.release_type != 'Actions' + if: ${{ github.event_name == 'workflow_dispatch' && inputs.release_type != 'Actions' }} run: | - LATEST_TAG=$(gh api repos/${{ github.repository }}/tags --jq '.[0].name' 2>/dev/null || echo "") + LATEST_TAG=$(gh api repos/${{ github.repository }}/tags --jq '.[0].name' 2>/dev/null || echo "v0.0.0") + if [[ -z "$LATEST_TAG" || "$LATEST_TAG" == "null" ]]; then + LATEST_TAG="v0.0.0" + fi + if [[ "$LATEST_TAG" =~ ^(.*)-r([0-9]+)$ ]]; then VERSION="${BASH_REMATCH[1]}" REV="${BASH_REMATCH[2]}" @@ -298,6 +388,7 @@ jobs: NEW_TAG="${LATEST_TAG}-r1" fi + echo "Latest tag: $LATEST_TAG" echo "New tag: $NEW_TAG" echo "NEW_TAG=${NEW_TAG}" >> $GITHUB_ENV echo "new_tag=$NEW_TAG" >> $GITHUB_OUTPUT @@ -306,32 +397,17 @@ jobs: run: | cat << 'EOF' > release_body.md - !!THIS RELEASE IS A TESTING RELEASE!! - **IMPORTANT DISCLAIMER** This software is provided for testing and educational purposes only. Use at your own risk. The developers are not responsible for any damage, data loss, or issues that may occur. Please ensure you have proper backups before installation. - ๐Ÿ”น Normal - - Default kernel configuration - - Standard kernel module loading behavior - - Recommended for most users - - ๐Ÿ”น Bypass - - Includes module check bypass modifications - - What are kernel modules? Kernel modules are pieces of code that can be loaded into the kernel at runtime to extend functionality (like device drivers, filesystem support, etc.). These are different from KernelSU/Magisk modules. - - The Problem: Sometimes when installing a custom kernel, the device tries to load a kernel module that fails due to version mismatches, missing dependencies, or signature verification issues. This can cause boot failures or device instability. - - The Solution: This version changes one line from false to true to force load the kernel module, bypassing the failure check that would normally prevent loading. - Features: -> Wild KSU Manager Support, Also Compatible with KernelSU-Next Manager -> SUSFS เถž v2.0.0 -> SUSFS Inline Hooks - -> Ptrace Patch Support for Older Kernels (<5.16) -> IPSet Support for Advanced Network Filtering - -> Wireguard Support - -> BBR v1 Support + -> BBRv1 TCP Congestion Control -> BBG: https://github.com/vc-teahouse/Baseband-guard ๐Ÿ”น BBG (Baseband-guard) @@ -341,6 +417,12 @@ jobs: - Kernel-level protection via LSM hooks - Reduces risk of soft-brick/hard-brick issues + ๐Ÿ”น Bypass Builds + - Includes module check bypass modifications + - What are kernel modules? Kernel modules are pieces of code that can be loaded into the kernel at runtime to extend functionality (like device drivers, filesystem support, etc.). These are different from KernelSU/Magisk modules. + - The Problem: Sometimes when installing a custom kernel, the device tries to load a kernel module that fails due to version mismatches, missing dependencies, or signature verification issues. This can cause boot failures or device instability. + - The Solution: These versions change one line from false to true to force load the kernel module, bypassing the failure check that would normally prevent loading. + Kernel Flasher: -> https://github.com/fatalcoder524/KernelFlasher/ @@ -350,150 +432,49 @@ jobs: Module: -> https://github.com/sidex15/ksu_module_susfs - - !!THIS RELEASE IS A TESTING RELEASE!! EOF - - name: Create GitHub Release + - name: Resolve release tag + id: release_tag run: | - PRERELEASE_FLAG="" - if [ "${{ inputs.release_type }}" == "Pre-Release" ]; then - PRERELEASE_FLAG="--prerelease" + if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then + echo "tag=${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT" + else + echo "tag=${{ steps.tag.outputs.new_tag }}" >> "$GITHUB_OUTPUT" fi - echo "Creating release ${{ env.NEW_TAG }}..." - gh release create "${{ env.NEW_TAG }}" \ - --title "${{ env.RELEASE_NAME }}" \ - --notes-file release_body.md \ - --target "${{ github.sha }}" \ - $PRERELEASE_FLAG - - - name: Download Artifacts - uses: actions/download-artifact@v5 + - name: Download AnyKernel3 Artifacts + uses: actions/download-artifact@v4 with: path: ./downloaded-artifacts pattern: '*-AnyKernel3' + merge-multiple: false - - name: Upload Release Assets - run: |+ - shopt -s nullglob - mapfile -t anykernel_dirs < <(find ./downloaded-artifacts -maxdepth 2 -type d -name '*-AnyKernel3' -print) - - for dir in "${anykernel_dirs[@]}"; do - artifact_name=$(basename "$dir") - echo "Creating ZIP for $artifact_name..." - (cd "$dir" && zip -r -q -9 "$GITHUB_WORKSPACE/${artifact_name}.zip" ./*) & - done - wait - - for dir in "${anykernel_dirs[@]}"; do - artifact_name=$(basename "$dir") - echo "Uploading 2 ${artifact_name}.zip..." - gh release upload "${{ env.NEW_TAG }}" "$GITHUB_WORKSPACE/${artifact_name}.zip" --clobber - done - - notify-actions: - runs-on: ubuntu-latest - needs: [release] - if: ${{ always() && (inputs.release_type == 'Actions' || needs.release.result == 'success') }} - env: - NEW_TAG: ${{ needs.release.outputs.new_tag }} - steps: - - name: Free Disk Space - if: true - uses: endersonmenezes/free-disk-space@v3 # Use @main for latest, @v3 for stable - with: - remove_android: true - remove_dotnet: true - remove_haskell: true - remove_tool_cache: true - remove_swap: true - remove_packages: "azure-cli google-cloud-cli microsoft-edge-stable google-chrome-stable firefox postgresql* temurin-* *llvm* mysql* dotnet-sdk-*" - remove_packages_one_command: true - remove_folders: "/usr/share/swift /usr/share/miniconda /usr/share/az* /usr/local/lib/node_modules /usr/local/share/chromium /usr/local/share/powershell /usr/local/julia /usr/local/aws-cli /usr/local/aws-sam-cli /usr/share/gradle" - rm_cmd: "rmz" # Use 'rmz' for faster deletion (default: 'rm') - rmz_version: "3.1.1" # Required when rm_cmd is 'rmz' - testing: false - - - name: Download Artifacts - uses: actions/download-artifact@v5 - with: - path: ./downloaded-artifacts/6.1.145-android14-2025-09-TheWildJames-AnyKernel3 - pattern: 6.1.145-android14-2025-09-TheWildJames-AnyKernel3 - continue-on-error: true - - - name: Download Artifacts - uses: actions/download-artifact@v5 + - name: Download AIO-REJ Artifact + uses: actions/download-artifact@v4 with: - path: ./downloaded-artifacts/6.1.145-android14-2025-09-Normal-AnyKernel3 - pattern: 6.1.145-android14-2025-09-Normal-AnyKernel3 - continue-on-error: true - - - name: Upload Release Assets - run: |+ - shopt -s nullglob - mapfile -t anykernel_dirs < <(find ./downloaded-artifacts -maxdepth 2 -type d -name '*-AnyKernel3' -print) - - for dir in "${anykernel_dirs[@]}"; do - artifact_name=$(basename "$dir") - echo "Creating ZIP for $artifact_name..." - (cd "$dir" && zip -r -q -9 "$GITHUB_WORKSPACE/${artifact_name}.zip" ./*) & - done - wait - - - name: Send Telegram Notification - if: inputs.release_type == 'Actions' && false - run: | - curl -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \ - -F chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \ - -F message_thread_id="${{ secrets.TELEGRAM_TOPIC_ID_GKI }}" \ - -F text=" - ๐ŸŒฝ *New Kernel Actions Build Finished* - ๐Ÿ“ฆ *Repository:* [${{ github.repository }}](https://github.com/${{ github.repository }}) - โœ๏ธ *Commit:* [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) - [๐Ÿ”— View Action Run](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" \ - -F parse_mode="Markdown" - - - name: Send Telegram Notification - if: inputs.release_type != 'Actions' && needs.release.result == 'success' && false - run: | - RELEASE_TYPE_TEXT="" - if [ "${{ inputs.release_type }}" == "Pre-Release" ]; then - RELEASE_TYPE_TEXT="๐Ÿงช *Pre-Release*" - else - RELEASE_TYPE_TEXT="๐Ÿš€ *Release*" - fi + path: ./downloaded-artifacts + pattern: 'AIO-REJ' + merge-multiple: true - curl -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \ - -F chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \ - -F message_thread_id="${{ secrets.TELEGRAM_TOPIC_ID_GKI }}" \ - -F text=" - ๐ŸŒฝ *New Kernel $RELEASE_TYPE_TEXT Uploaded* - ๐Ÿ“ฆ *Repository:* [${{ github.repository }}](https://github.com/${{ github.repository }}) - โœ๏ธ *Commit:* [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) - [๐Ÿ”— View GitHub Release](https://github.com/${{ github.repository }}/releases/tag/${{ env.NEW_TAG }})" \ - -F parse_mode="Markdown" - - - name: DM Artifacts - if: always() + - name: Package release zips run: | - shopt -s nullglob - files=("$GITHUB_WORKSPACE"/*.zip) - - if [ ${#files[@]} -eq 0 ]; then - echo "No ZIP files found for DM." - exit 0 - fi - - if [ -z "${{ secrets.TELEGRAM_USER_ID }}" ]; then - echo "Error: TELEGRAM_USER_ID secret is not set." - exit 1 + mkdir -p release-assets + for dir in ./downloaded-artifacts/*-AnyKernel3; do + [ -d "$dir" ] || continue + name=$(basename "$dir") + (cd "$dir" && zip -r -q -9 "../../release-assets/${name}.zip" .) + done + if [ -f "./downloaded-artifacts/AIO-REJ.zip" ]; then + cp "./downloaded-artifacts/AIO-REJ.zip" "./release-assets/AIO-REJ.zip" fi - for file in "${files[@]}"; do - echo "Sending $(basename "$file") to Telegram DM..." - curl -v -F chat_id="${{ secrets.TELEGRAM_USER_ID }}" \ - -F document=@"$file" \ - -F caption="๐Ÿ“ฆ Build: $(basename "$file")" \ - https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendDocument - done + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ steps.release_tag.outputs.tag }} + name: ${{ steps.release_tag.outputs.tag }} + body_path: release_body.md + draft: false + prerelease: ${{ github.event_name == 'workflow_dispatch' && inputs.release_type == 'Pre-Release' }} + files: release-assets/*.zip diff --git a/.github/workflows/prepare.yml b/.github/workflows/prepare.yml new file mode 100644 index 0000000000..19be7ff563 --- /dev/null +++ b/.github/workflows/prepare.yml @@ -0,0 +1,78 @@ +name: Prepare and Build + +on: + workflow_call: + inputs: + config_file: + description: "Path to the JSON config file" + required: true + type: string + ksu_commit: + description: "KSU Commit" + required: false + type: string + anykernel_commit: + description: "AnyKernel3 Commit" + required: false + type: string + patches_commit: + description: "Kernel Patches Commit" + required: false + type: string + susfs_commit: + description: "SUSFS Commit" + required: false + type: string + feature_set: + description: "Feature Set" + required: false + type: string + +jobs: + generate-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Read Config and Generate Matrix + id: set-matrix + run: | + echo "Reading config from ${{ inputs.config_file }}" + if [ ! -f "${{ inputs.config_file }}" ]; then + echo "Error: Config file not found: ${{ inputs.config_file }}" + exit 1 + fi + + # Read the file content + MATRIX_JSON=$(cat "${{ inputs.config_file }}") + + # Compact the JSON to a single line to avoid issues + # If jq is not available, we might need another way, but ubuntu-latest usually has it. + if command -v jq &> /dev/null; then + MATRIX_JSON=$(echo "$MATRIX_JSON" | jq -c .) + else + # Fallback for simple minification if jq missing (unlikely on runner) + MATRIX_JSON=$(echo "$MATRIX_JSON" | tr -d '\n' | tr -d ' ') + fi + + echo "Matrix content: $MATRIX_JSON" + echo "matrix=$MATRIX_JSON" >> $GITHUB_OUTPUT + + build: + needs: generate-matrix + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} + uses: ./.github/workflows/build.yml + with: + kernel_version: ${{ matrix.kernel_version }} + variant: ${{ matrix.variant }} + ksu_commit: ${{ inputs.ksu_commit }} + anykernel_commit: ${{ inputs.anykernel_commit }} + patches_commit: ${{ inputs.patches_commit }} + susfs_commit: ${{ inputs.susfs_commit }} + feature_set: ${{ inputs.feature_set }} + secrets: inherit diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 74c185996d..0000000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -patch-rejects -KernelSU-Next -kernel_patches \ No newline at end of file diff --git a/download.sh b/download.sh deleted file mode 100644 index 70bb730e61..0000000000 --- a/download.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# ===== CONFIG ===== -REPO="WildKernels/GKI_KernelSU_SUSFS" -RUN_ID="20671082108" -PATTERN="(Normal|Bypass)-AnyKernel3$" -OUT_DIR="$HOME/gki_anykernel3" -# ================== - -mkdir -p "$OUT_DIR" - -echo "Fetching AnyKernel3 artifacts from run $RUN_ID..." - -gh api \ - repos/$REPO/actions/runs/$RUN_ID/artifacts \ - --paginate | -jq -r --arg pattern "$PATTERN" ' - .artifacts[] - | select(.name | test($pattern)) - | "\(.id) \(.name)" -' | -while read -r ID NAME; do - FILE="$OUT_DIR/$NAME.zip" - echo "Downloading: $NAME" - gh api \ - repos/$REPO/actions/artifacts/$ID/zip \ - > "$FILE" -done - -echo "Done. Files saved to: $OUT_DIR"