main.yml 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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: Set release body
  137. run: |
  138. cat << 'EOF' > release_body.md
  139. **IMPORTANT DISCLAIMER**
  140. This software is provided for testing and educational purposes only. Use at your own risk.
  141. The developers are not responsible for any damage, data loss, or issues that may occur.
  142. Please ensure you have proper backups before installation.
  143. Features:
  144. EOF
  145. if [ "${{ inputs.ksun }}" = "true" ]; then
  146. cat <<'EOF' >> release_body.md
  147. -> KernelSU-Next v3.2.0
  148. EOF
  149. fi
  150. if [ "${{ inputs.susfs }}" = "true" ]; then
  151. cat <<'EOF' >> release_body.md
  152. -> SUSFS ඞ v2.2.0
  153. -> SUSFS Inline hooks
  154. EOF
  155. fi
  156. if [ "${{ inputs.bbg }}" = "true" ]; then
  157. cat <<'EOF' >> release_body.md
  158. -> BBG - https://github.com/vc-teahouse/Baseband-guard
  159. EOF
  160. fi
  161. if [ "${{ inputs.unicodefix }}" = "true" ]; then
  162. cat <<'EOF' >> release_body.md
  163. -> unicode fix - Prevent path traversal and other detections using non-printable Unicode codepoints
  164. EOF
  165. fi
  166. if [ "${{ inputs.zeromount }}" = "true" ]; then
  167. cat <<'EOF' >> release_body.md
  168. -> Zeromount - https://github.com/Enginex0/zeromount
  169. EOF
  170. fi
  171. if [ "${{ inputs.droidspace }}" = "true" ]; then
  172. cat <<'EOF' >> release_body.md
  173. -> droidspaces support - https://github.com/ravindu644/Droidspaces-OSS
  174. EOF
  175. fi
  176. if [ "${{ inputs.ntsync }}" = "true" ]; then
  177. cat <<'EOF' >> release_body.md
  178. -> NTSync - Provide high-performance, low-latency synchronization primitives compatible with the Windows NT kernel API
  179. EOF
  180. fi
  181. if [ "${{ inputs.bbr }}" = "true" ]; then
  182. cat <<'EOF' >> release_body.md
  183. -> TCP BBRV3 (better TCP congestion and faster internet)
  184. -> CAKE and PIE qdisc Support - Better Net Schedulers
  185. EOF
  186. fi
  187. if [ "${{ inputs.ipv6_nat }}" = "true" ]; then
  188. cat <<'EOF' >> release_body.md
  189. -> IP Set & IPv6 NAT Support - Advanced firewall capabilities and IPv6 NAT Support
  190. EOF
  191. fi
  192. if [ "${{ inputs.ttl }}" = "true" ]; then
  193. cat <<'EOF' >> release_body.md
  194. -> TTL Target Support - Network packet manipulation
  195. EOF
  196. fi
  197. if [ "${{ inputs.optimization }}" = "true" ]; then
  198. cat <<'EOF' >> release_body.md
  199. -> Kernel Optimization - Memory, I/O, CPU scheduler, network and other general tunings
  200. EOF
  201. fi
  202. cat <<'EOF' >> release_body.md
  203. Notes:
  204. - The only modifications to Samsung Kernels at this time are KSUN and SUSFS. Everything else is left at default settings.
  205. - Currently no support for KernelPatch-Next/KPM for the time being.
  206. Module:
  207. -> https://github.com/sidex15/ksu_module_susfs
  208. -> https://github.com/rrr333nnn333/BRENE
  209. Manager:
  210. -> KSUN: https://github.com/KernelSU-Next/KernelSU-Next
  211. EOF
  212. - name: Create GitHub Release
  213. uses: softprops/action-gh-release@v2
  214. with:
  215. tag_name: ${{ env.NEW_TAG }}
  216. prerelease: ${{ inputs.release_type == 'Pre-Release' }}
  217. files: ""
  218. name: ${{ env.RELEASE_NAME }}
  219. body_path: release_body.md
  220. - name: Upload Release Assets
  221. run: |
  222. shopt -s nullglob
  223. anykernel_dirs=(./downloaded-artifacts/*/)
  224. if [ ${#anykernel_dirs[@]} -eq 0 ]; then
  225. echo "No artifact directories found under ./downloaded-artifacts; skipping upload."
  226. else
  227. for dir in "${anykernel_dirs[@]}"; do
  228. # Check if this is an AnyKernel3 artifact directory
  229. if [[ "$(basename "$dir")" == *"-AnyKernel3" ]]; then
  230. artifact_name=$(basename "$dir")
  231. echo "Creating ZIP for $artifact_name..."
  232. # Navigate into the directory and zip its contents directly
  233. cd "$dir"
  234. zip -r -9 "../../${artifact_name}.zip" ./*
  235. cd - > /dev/null
  236. echo "Uploading ${artifact_name}.zip..."
  237. gh release upload ${{ env.NEW_TAG }} "${artifact_name}.zip"
  238. fi
  239. done
  240. fi
  241. # - name: Send Telegram Notification
  242. # if: inputs.release_type != 'Actions'
  243. # run: |
  244. # RELEASE_TYPE_TEXT=""
  245. # if [ "${{ inputs.release_type }}" == "Pre-Release" ]; then
  246. # RELEASE_TYPE_TEXT="🧪 *Pre-Release*"
  247. # else
  248. # RELEASE_TYPE_TEXT="🚀 *Release*"
  249. # fi
  250. #
  251. # curl -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" \
  252. # -F chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" \
  253. # -F message_thread_id="${{ secrets.TELEGRAM_TOPIC_ID_GKI }}" \
  254. # -F text="
  255. # 🌽 *New Kernel $RELEASE_TYPE_TEXT Uploaded*
  256. # 📦 *Repository:* [${{ github.repository }}](https://github.com/${{ github.repository }})
  257. # ✏️ *Commit:* [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }})
  258. # [🔗 View GitHub Release](https://github.com/${{ github.repository }}/releases/tag/${{ env.NEW_TAG }})" \
  259. # -F parse_mode="Markdown"