main.yml 12 KB

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