main.yml 12 KB

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