action.yml 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. name: Setup pinned root implementation
  2. description: Clone exactly one supported root implementation at a verified commit
  3. inputs:
  4. flavor:
  5. description: 'kernelsu, next, resukisu, sukisu-ultra, or kowsu'
  6. required: true
  7. commit:
  8. description: 'Full immutable commit SHA'
  9. required: true
  10. runs:
  11. using: composite
  12. steps:
  13. - name: Clone and integrate selected root
  14. shell: bash
  15. working-directory: ${{ github.workspace }}/kernel
  16. run: |
  17. set -euo pipefail
  18. flavor="${{ inputs.flavor }}"
  19. expected_commit="${{ inputs.commit }}"
  20. case "$flavor" in
  21. kernelsu)
  22. repo="https://github.com/tiann/KernelSU.git"
  23. directory="KernelSU"
  24. manager="KernelSU Manager"
  25. ;;
  26. next)
  27. repo="https://github.com/KernelSU-Next/KernelSU-Next.git"
  28. directory="KernelSU-Next"
  29. manager="KernelSU Next Manager"
  30. ;;
  31. resukisu)
  32. repo="https://github.com/ReSukiSU/ReSukiSU.git"
  33. directory="ReSukiSU"
  34. manager="ReSukiSU Manager"
  35. ;;
  36. sukisu-ultra)
  37. repo="https://github.com/SukiSU-Ultra/SukiSU-Ultra.git"
  38. directory="SukiSU-Ultra"
  39. manager="SukiSU-Ultra Manager"
  40. ;;
  41. kowsu)
  42. repo="https://github.com/KOWX712/KernelSU.git"
  43. directory="KowSU"
  44. manager="KowSU Manager"
  45. ;;
  46. *)
  47. echo "Unsupported root flavor: $flavor" >&2
  48. exit 2
  49. ;;
  50. esac
  51. if ! [[ "$expected_commit" =~ ^[0-9a-f]{40}$ ]]; then
  52. echo "Root commit must be a full 40-character SHA." >&2
  53. exit 2
  54. fi
  55. for candidate in KernelSU KernelSU-Next ReSukiSU SukiSU-Ultra KowSU; do
  56. if [ "$candidate" != "$directory" ] && [ -e "$candidate" ]; then
  57. echo "Refusing mixed root implementations: found $candidate." >&2
  58. exit 1
  59. fi
  60. done
  61. if [ -d common/drivers ]; then
  62. drivers_dir="common/drivers"
  63. elif [ -d drivers ]; then
  64. drivers_dir="drivers"
  65. else
  66. echo "Kernel drivers directory not found." >&2
  67. exit 1
  68. fi
  69. if [ -e "$drivers_dir/kernelsu" ] || [ -L "$drivers_dir/kernelsu" ]; then
  70. echo "Refusing to replace an existing kernelsu integration." >&2
  71. exit 1
  72. fi
  73. if [ -e "$directory" ]; then
  74. echo "Refusing to reuse an existing root checkout: $directory." >&2
  75. exit 1
  76. fi
  77. git clone --no-checkout "$repo" "$directory"
  78. git -C "$directory" fetch --depth=1 origin "$expected_commit"
  79. git -C "$directory" checkout --detach "$expected_commit"
  80. actual_commit="$(git -C "$directory" rev-parse HEAD)"
  81. if [ "$actual_commit" != "$expected_commit" ]; then
  82. echo "Root commit mismatch: expected $expected_commit, got $actual_commit." >&2
  83. exit 1
  84. fi
  85. if [ ! -f "$directory/kernel/Kconfig" ] || [ ! -f "$directory/kernel/Makefile" ]; then
  86. echo "Selected root checkout does not contain a kernel integration." >&2
  87. exit 1
  88. fi
  89. root_version="$(git -C "$directory" describe --tags --always --dirty)"
  90. relative_kernel="$(realpath --relative-to="$drivers_dir" "$PWD/$directory/kernel")"
  91. ln -s "$relative_kernel" "$drivers_dir/kernelsu"
  92. grep -q 'obj-$(CONFIG_KSU) += kernelsu/' "$drivers_dir/Makefile" ||
  93. printf '\nobj-$(CONFIG_KSU) += kernelsu/\n' >> "$drivers_dir/Makefile"
  94. grep -q 'source "drivers/kernelsu/Kconfig"' "$drivers_dir/Kconfig" ||
  95. sed -i '/endmenu/i source "drivers/kernelsu/Kconfig"' "$drivers_dir/Kconfig"
  96. echo "ROOT_IMPLEMENTATION=$flavor" >> "$GITHUB_ENV"
  97. echo "ROOT_MANAGER=$manager" >> "$GITHUB_ENV"
  98. echo "ROOT_VERSION=$root_version" >> "$GITHUB_ENV"
  99. echo "ROOT_COMMIT=$actual_commit" >> "$GITHUB_ENV"
  100. - name: Enable root configuration
  101. uses: ./.github/actions/set-kernel-config
  102. with:
  103. config_list: |
  104. CONFIG_KSU=y
  105. - name: Disable multi-manager for ReSukiSU
  106. if: inputs.flavor == 'resukisu'
  107. uses: ./.github/actions/set-kernel-config
  108. with:
  109. config_list: |
  110. CONFIG_KSU_MULTI_MANAGER_SUPPORT=n
  111. CONFIG_KSU_TOOLKIT_SUPPORT=y