main.yml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. name: Build Kernels
  2. permissions:
  3. contents: write
  4. actions: write
  5. on:
  6. workflow_dispatch:
  7. inputs:
  8. release_type:
  9. description: "Choose Release Type"
  10. required: true
  11. type: choice
  12. options:
  13. - Actions
  14. - Pre-Release
  15. - Release
  16. default: Actions
  17. ksun:
  18. description: "KSUN"
  19. required: false
  20. default: true
  21. type: boolean
  22. susfs:
  23. description: "SUSFS"
  24. required: false
  25. type: boolean
  26. default: true
  27. bbg:
  28. description: "BBG"
  29. required: false
  30. type: boolean
  31. default: true
  32. zeromount:
  33. description: "Zeromount"
  34. required: false
  35. type: boolean
  36. default: false
  37. unicodefix:
  38. description: "Unicode fix"
  39. required: false
  40. type: boolean
  41. default: true
  42. droidspace:
  43. description: "Droidspaces"
  44. required: false
  45. type: boolean
  46. default: true
  47. ntsync:
  48. description: "NTsync"
  49. required: false
  50. type: boolean
  51. default: true
  52. bbr:
  53. description: "bbrv3"
  54. required: false
  55. type: boolean
  56. default: true
  57. cache:
  58. description: "CCache"
  59. required: false
  60. default: true
  61. type: boolean
  62. ipv6_nat:
  63. description: "IPv6_NAT & IP-SET"
  64. required: false
  65. default: true
  66. type: boolean
  67. optimization:
  68. description: "optimization patches"
  69. required: false
  70. default: true
  71. type: boolean
  72. ttl:
  73. description: "TTL support"
  74. required: false
  75. default: true
  76. type: boolean
  77. jobs:
  78. build-samsung:
  79. uses: ./.github/workflows/kernel-samsung.yml
  80. secrets: inherit
  81. with:
  82. susfs: ${{ inputs.susfs }}
  83. bbg: ${{ inputs.bbg }}
  84. unicodefix: ${{ inputs.unicodefix }}
  85. zeromount: ${{ inputs.zeromount }}
  86. ksun: ${{ inputs.ksun }}
  87. droidspace: ${{ inputs.droidspace }}
  88. ntsync: ${{ inputs.ntsync }}
  89. bbr: ${{ inputs.bbr }}
  90. cache: ${{ inputs.cache }}
  91. ipv6_nat: ${{ inputs.ipv6_nat }}
  92. optimization: ${{ inputs.optimization }}
  93. ttl: ${{ inputs.ttl }}
  94. release:
  95. runs-on: ubuntu-latest
  96. if: inputs.release_type != 'Actions'
  97. needs:
  98. - build-samsung
  99. env:
  100. GH_TOKEN: ${{ github.token }}
  101. RELEASE_NAME: "Samsung GKI Kernels With KSUN v3.2.0 & SUSFS v2.2.0"
  102. RELEASE_BODY: ""
  103. steps:
  104. - name: Free Disk Space
  105. if: true
  106. uses: endersonmenezes/free-disk-space@v3 # Use @main for latest, @v3 for stable
  107. with:
  108. remove_android: true
  109. remove_dotnet: true
  110. remove_haskell: true
  111. remove_tool_cache: true
  112. remove_swap: true
  113. remove_packages: "azure-cli google-cloud-cli microsoft-edge-stable google-chrome-stable firefox postgresql* temurin-* *llvm* mysql* dotnet-sdk-*"
  114. remove_packages_one_command: true
  115. 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"
  116. rm_cmd: "rmz" # Use 'rmz' for faster deletion (default: 'rm')
  117. rmz_version: "3.1.1" # Required when rm_cmd is 'rmz'
  118. testing: false
  119. - name: Checkout code
  120. uses: actions/checkout@v4
  121. - name: Generate New Tag
  122. if: inputs.release_type != 'Actions'
  123. run: |
  124. LATEST_TAG=$(gh api repos/${{ github.repository }}/tags --jq '.[0].name' 2>/dev/null || echo "")
  125. if [ -z "$LATEST_TAG" ]; then
  126. LATEST_TAG="v2.2.0-r0"
  127. fi
  128. NEW_TAG=$(echo "$LATEST_TAG" | awk -F'-r' '{suffix=$2; if (!suffix) suffix=0; suffix++; printf "%s-r%d", $1, suffix}')
  129. echo "New tag: $NEW_TAG"
  130. echo "NEW_TAG=${NEW_TAG}" >> $GITHUB_ENV
  131. - name: Download Artifacts
  132. uses: actions/download-artifact@v4
  133. with:
  134. path: ./downloaded-artifacts
  135. pattern: '*-AnyKernel3'
  136. - name: get ksun and susfs commit hashes
  137. run: |
  138. echo "SUSFS_510=(git ls-remote https://gitlab.com/simonpunk/susfs4ksu.git refs/heads/gki-android12-5.10 | cut -f1)" >> $GITHUB_ENV
  139. echo "SUSFS_515=(git ls-remote https://gitlab.com/simonpunk/susfs4ksu.git refs/heads/gki-android13-5.15 | cut -f1)" >> $GITHUB_ENV
  140. echo "SUSFS_61=(git ls-remote https://gitlab.com/simonpunk/susfs4ksu.git refs/heads/gki-android14-6.1 | cut -f1)" >> $GITHUB_ENV
  141. echo "SUSFS_66=(git ls-remote https://gitlab.com/simonpunk/susfs4ksu.git refs/heads/gki-android15-6.6 | cut -f1)" >> $GITHUB_ENV
  142. echo "KSUN_HASH=(git ls-remote https://github.com/pershoot/KernelSU-Next.git refs/heads/dev | cut -f1)" >> $GITHUB_ENV
  143. - name: Set release body
  144. run: |
  145. cat << 'EOF' > release_body.md
  146. **IMPORTANT DISCLAIMER**
  147. This software is provided for testing and educational purposes only. Use at your own risk.
  148. The developers are not responsible for any damage, data loss, or issues that may occur.
  149. Please ensure you have proper backups before installation.
  150. Features:
  151. EOF
  152. if [ "${{ inputs.ksun }}" = "true" ]; then
  153. cat <<'EOF' >> release_body.md
  154. -> KernelSU-Next v3.2.0 - https://github.com/KernelSU-Next/KernelSU-Next
  155. EOF
  156. fi
  157. if [ "${{ inputs.susfs }}" = "true" ]; then
  158. cat <<'EOF' >> release_body.md
  159. -> SUSFS ඞ v2.2.0 - https://gitlab.com/simonpunk/susfs4ksu
  160. -> SUSFS Inline hooks
  161. EOF
  162. fi
  163. if [ "${{ inputs.bbg }}" = "true" ]; then
  164. cat <<'EOF' >> release_body.md
  165. -> BBG - https://github.com/vc-teahouse/Baseband-guard
  166. EOF
  167. fi
  168. if [ "${{ inputs.unicodefix }}" = "true" ]; then
  169. cat <<'EOF' >> release_body.md
  170. -> unicode fix - Prevent path traversal and other detections using non-printable Unicode codepoints
  171. EOF
  172. fi
  173. if [ "${{ inputs.zeromount }}" = "true" ]; then
  174. cat <<'EOF' >> release_body.md
  175. -> Zeromount - https://github.com/Enginex0/zeromount
  176. EOF
  177. fi
  178. if [ "${{ inputs.droidspace }}" = "true" ]; then
  179. cat <<'EOF' >> release_body.md
  180. -> droidspaces support - https://github.com/ravindu644/Droidspaces-OSS
  181. EOF
  182. fi
  183. if [ "${{ inputs.ntsync }}" = "true" ]; then
  184. cat <<'EOF' >> release_body.md
  185. -> NTSync - Provide high-performance, low-latency synchronization primitives compatible with the Windows NT kernel API
  186. EOF
  187. fi
  188. if [ "${{ inputs.bbr }}" = "true" ]; then
  189. cat <<'EOF' >> release_body.md
  190. -> TCP BBRV3 (better TCP congestion and faster internet)
  191. -> CAKE and PIE qdisc Support - Better Net Schedulers
  192. EOF
  193. fi
  194. if [ "${{ inputs.ipv6_nat }}" = "true" ]; then
  195. cat <<'EOF' >> release_body.md
  196. -> IP Set & IPv6 NAT Support - Advanced firewall capabilities and IPv6 NAT Support
  197. EOF
  198. fi
  199. if [ "${{ inputs.ttl }}" = "true" ]; then
  200. cat <<'EOF' >> release_body.md
  201. -> TTL Target Support - Network packet manipulation
  202. EOF
  203. fi
  204. if [ "${{ inputs.optimization }}" = "true" ]; then
  205. cat <<'EOF' >> release_body.md
  206. -> Kernel Optimization - Memory, I/O, CPU scheduler, network and other general tunings
  207. -> Patches for optimizations can be found here - https://github.com/WildKernels/kernel_patches/tree/main/common
  208. EOF
  209. fi
  210. cat <<'EOF' >> release_body.md
  211. Notes:
  212. - Currently no support for KernelPatch-Next/KPM for the time being.
  213. Module:
  214. -> https://github.com/sidex15/ksu_module_susfs
  215. -> https://github.com/rrr333nnn333/BRENE
  216. Commit Hashes:
  217. KSUN: ${{ env.KSUN_HASH }}
  218. SUSFS:
  219. android12-5.10: ${{ env.SUSFS_510 }}
  220. android13-5.15: ${{ env.SUSFS_515 }}
  221. android14-6.1: ${{ env.SUSFS_61 }}
  222. android15-6.6: ${{ env.SUSFS_66 }}
  223. EOF
  224. - name: Create GitHub Release
  225. uses: softprops/action-gh-release@v2
  226. with:
  227. tag_name: ${{ env.NEW_TAG }}
  228. prerelease: ${{ inputs.release_type == 'Pre-Release' }}
  229. files: ""
  230. name: ${{ env.RELEASE_NAME }}
  231. body_path: release_body.md
  232. - name: Upload Release Assets
  233. run: |
  234. shopt -s nullglob
  235. anykernel_dirs=(./downloaded-artifacts/*/)
  236. if [ ${#anykernel_dirs[@]} -eq 0 ]; then
  237. echo "No artifact directories found under ./downloaded-artifacts; skipping upload."
  238. else
  239. for dir in "${anykernel_dirs[@]}"; do
  240. # Check if this is an AnyKernel3 artifact directory
  241. if [[ "$(basename "$dir")" == *"-AnyKernel3" ]]; then
  242. artifact_name=$(basename "$dir")
  243. echo "Creating ZIP for $artifact_name..."
  244. # Navigate into the directory and zip its contents directly
  245. cd "$dir"
  246. zip -r -9 "../../${artifact_name}.zip" ./*
  247. cd - > /dev/null
  248. echo "Uploading ${artifact_name}.zip..."
  249. gh release upload ${{ env.NEW_TAG }} "${artifact_name}.zip"
  250. fi
  251. done
  252. fi
  253. # - name: Send Telegram Notification
  254. # if: inputs.release_type != 'Actions'
  255. # run: |
  256. # RELEASE_TYPE_TEXT=""
  257. # if [ "${{ inputs.release_type }}" == "Pre-Release" ]; then
  258. # RELEASE_TYPE_TEXT="🧪 *Pre-Release*"
  259. # else
  260. # RELEASE_TYPE_TEXT="🚀 *Release*"
  261. # fi
  262. #
  263. # curl -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
  264. # -F chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \
  265. # -F message_thread_id="${{ secrets.TELEGRAM_TOPIC_ID_GKI }}" \
  266. # -F text="
  267. # 🌽 *New Kernel $RELEASE_TYPE_TEXT Uploaded*
  268. # 📦 *Repository:* [${{ github.repository }}](https://github.com/${{ github.repository }})
  269. # ✏️ *Commit:* [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }})
  270. # [🔗 View GitHub Release](https://github.com/${{ github.repository }}/releases/tag/${{ env.NEW_TAG }})" \
  271. # -F parse_mode="Markdown"