main.yml 12 KB

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