name: Setup pinned root implementation description: Clone exactly one supported root implementation at a verified commit inputs: flavor: description: 'kernelsu, next, resukisu, or sukisu-ultra' required: true commit: description: 'Full immutable commit SHA' required: true runs: using: composite steps: - name: Clone and integrate selected root shell: bash working-directory: ${{ github.workspace }}/kernel run: | set -euo pipefail flavor="${{ inputs.flavor }}" expected_commit="${{ inputs.commit }}" case "$flavor" in kernelsu) repo="https://github.com/tiann/KernelSU.git" directory="KernelSU" manager="KernelSU Manager" ;; next) repo="https://github.com/KernelSU-Next/KernelSU-Next.git" directory="KernelSU-Next" manager="KernelSU Next Manager" ;; resukisu) repo="https://github.com/ReSukiSU/ReSukiSU.git" directory="ReSukiSU" manager="ReSukiSU Manager" ;; sukisu-ultra) repo="https://github.com/SukiSU-Ultra/SukiSU-Ultra.git" directory="SukiSU-Ultra" manager="SukiSU-Ultra Manager" ;; *) echo "Unsupported root flavor: $flavor" >&2 exit 2 ;; esac if ! [[ "$expected_commit" =~ ^[0-9a-f]{40}$ ]]; then echo "Root commit must be a full 40-character SHA." >&2 exit 2 fi for candidate in KernelSU KernelSU-Next ReSukiSU SukiSU-Ultra; do if [ "$candidate" != "$directory" ] && [ -e "$candidate" ]; then echo "Refusing mixed root implementations: found $candidate." >&2 exit 1 fi done if [ -d common/drivers ]; then drivers_dir="common/drivers" elif [ -d drivers ]; then drivers_dir="drivers" else echo "Kernel drivers directory not found." >&2 exit 1 fi if [ -e "$drivers_dir/kernelsu" ] || [ -L "$drivers_dir/kernelsu" ]; then echo "Refusing to replace an existing kernelsu integration." >&2 exit 1 fi if [ -e "$directory" ]; then echo "Refusing to reuse an existing root checkout: $directory." >&2 exit 1 fi git clone --no-checkout "$repo" "$directory" git -C "$directory" fetch --depth=1 origin "$expected_commit" git -C "$directory" checkout --detach "$expected_commit" actual_commit="$(git -C "$directory" rev-parse HEAD)" if [ "$actual_commit" != "$expected_commit" ]; then echo "Root commit mismatch: expected $expected_commit, got $actual_commit." >&2 exit 1 fi if [ ! -f "$directory/kernel/Kconfig" ] || [ ! -f "$directory/kernel/Makefile" ]; then echo "Selected root checkout does not contain a kernel integration." >&2 exit 1 fi root_version="$(git -C "$directory" describe --tags --always --dirty)" relative_kernel="$(realpath --relative-to="$drivers_dir" "$PWD/$directory/kernel")" ln -s "$relative_kernel" "$drivers_dir/kernelsu" grep -q 'obj-$(CONFIG_KSU) += kernelsu/' "$drivers_dir/Makefile" || printf '\nobj-$(CONFIG_KSU) += kernelsu/\n' >> "$drivers_dir/Makefile" grep -q 'source "drivers/kernelsu/Kconfig"' "$drivers_dir/Kconfig" || sed -i '/endmenu/i source "drivers/kernelsu/Kconfig"' "$drivers_dir/Kconfig" echo "ROOT_IMPLEMENTATION=$flavor" >> "$GITHUB_ENV" echo "ROOT_MANAGER=$manager" >> "$GITHUB_ENV" echo "ROOT_VERSION=$root_version" >> "$GITHUB_ENV" echo "ROOT_COMMIT=$actual_commit" >> "$GITHUB_ENV" - name: Enable root configuration uses: ./.github/actions/set-kernel-config with: config_list: | CONFIG_KSU=y - name: Disable multi-manager for ReSukiSU if: inputs.flavor == 'resukisu' uses: ./.github/actions/set-kernel-config with: config_list: | CONFIG_KSU_MULTI_MANAGER_SUPPORT=n CONFIG_KSU_TOOLKIT_SUPPORT=y