root-variants.yml 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. name: Build-verified only GKI root variants
  2. on:
  3. workflow_dispatch:
  4. inputs:
  5. kernel_build_version:
  6. description: "Supported GKI target"
  7. required: true
  8. type: choice
  9. options:
  10. - android12-5.10
  11. - android13-5.10
  12. - android13-5.15
  13. - android14-5.15
  14. - android14-6.1
  15. - android15-6.6
  16. - android16-6.12
  17. default: android14-6.1
  18. os_patch_level:
  19. description: "Patch date (YYYY-MM), kernel sublevel, lts (builds the LTS branch), or all"
  20. required: true
  21. type: string
  22. default: lts
  23. commit_mode:
  24. description: "verified = audited pinned SHAs, latest = branch tips at run time"
  25. required: false
  26. type: choice
  27. options:
  28. - verified
  29. - latest
  30. default: verified
  31. permissions:
  32. contents: read
  33. actions: write
  34. jobs:
  35. resolve-pins:
  36. runs-on: ubuntu-latest
  37. outputs:
  38. config_file: ${{ steps.pins.outputs.config_file }}
  39. susfs_commit: ${{ steps.pins.outputs.susfs_commit }}
  40. nomount_commit: ${{ steps.pins.outputs.nomount_commit }}
  41. ksu_commit: ${{ steps.pins.outputs.ksu_commit }}
  42. next_commit: ${{ steps.pins.outputs.next_commit }}
  43. resukisu_commit: ${{ steps.pins.outputs.resukisu_commit }}
  44. steps:
  45. - id: pins
  46. shell: bash
  47. run: |
  48. set -euo pipefail
  49. # Verified pins. KernelSU-Next (next) is intentionally NOT pinned: it
  50. # always resolves at latest. SUSFS below uses the verified pinned SHA per
  51. # GKI target; build.yml overrides SUSFS to latest ONLY for the next
  52. # (KernelSU-Next) variant, keeping kernelsu/resukisu stuck on the pin.
  53. nomount_commit="26417ca5fb4021c4fd0c886e6ee8662d3f7b117a"
  54. ksu_commit="abc3fdcf5b6ec9e0add131e600d55853a0fffbf2"
  55. resukisu_commit="03b60f260cce36f23efbd26c9c334edfdc9ce7eb"
  56. case "${{ inputs.kernel_build_version }}" in
  57. android12-5.10) susfs_commit="44d9fed948b6d21c25ace142081418690f568dd3" ;;
  58. android13-5.10) susfs_commit="83ffa9f7a9039e233af3d47aeeb838278b23ef8c" ;;
  59. android13-5.15) susfs_commit="9623bd64ccb195dc538af70133ad3374f30de795" ;;
  60. android14-5.15) susfs_commit="fcfdf108e3003fe97a95bf6ed238eb13a93b4aba" ;;
  61. android14-6.1) susfs_commit="0ff932799d898366d57b3b5984d85cdbcfcfad0a" ;;
  62. android15-6.6) susfs_commit="7767a4614146d44f7a81a18b6e687dd8316fc959" ;;
  63. android16-6.12) susfs_commit="78a1f10a21df7271329fe5a733a3cb43c9c6c230" ;;
  64. *) echo "Unsupported GKI target." >&2; exit 2 ;;
  65. esac
  66. next_commit="$(git ls-remote https://github.com/KernelSU-Next/KernelSU-Next.git refs/heads/dev | cut -f1)"
  67. if [ "${{ inputs.commit_mode }}" = "latest" ]; then
  68. echo "Resolving latest branch tips..."
  69. nomount_commit="$(git ls-remote https://github.com/maxsteeel/nomount.git refs/heads/dev | cut -f1)"
  70. ksu_commit="$(git ls-remote https://github.com/tiann/KernelSU.git refs/heads/main | cut -f1)"
  71. resukisu_commit="$(git ls-remote https://github.com/ReSukiSU/ReSukiSU.git refs/heads/main | cut -f1)"
  72. susfs_commit="$(git ls-remote https://gitlab.com/simonpunk/susfs4ksu.git "refs/heads/gki-${{ inputs.kernel_build_version }}" | cut -f1)"
  73. fi
  74. echo "config_file=.github/config/${{ inputs.kernel_build_version }}.json" >> "$GITHUB_OUTPUT"
  75. echo "susfs_commit=$susfs_commit" >> "$GITHUB_OUTPUT"
  76. echo "nomount_commit=$nomount_commit" >> "$GITHUB_OUTPUT"
  77. echo "ksu_commit=$ksu_commit" >> "$GITHUB_OUTPUT"
  78. echo "next_commit=$next_commit" >> "$GITHUB_OUTPUT"
  79. echo "resukisu_commit=$resukisu_commit" >> "$GITHUB_OUTPUT"
  80. build-nomount-module:
  81. needs: resolve-pins
  82. runs-on: ubuntu-latest
  83. steps:
  84. - uses: actions/checkout@v7
  85. - name: Build NoMount metamodule
  86. id: nomount-metamodule
  87. uses: ./.github/actions/nomount-metamodule
  88. with:
  89. commit: ${{ needs.resolve-pins.outputs.nomount_commit }}
  90. - name: Upload NoMount metamodule
  91. uses: actions/upload-artifact@v7
  92. with:
  93. name: NoMount-Metamodule
  94. path: ${{ steps.nomount-metamodule.outputs.module_dir }}
  95. if-no-files-found: error
  96. build:
  97. needs: [resolve-pins, build-nomount-module]
  98. strategy:
  99. fail-fast: false
  100. matrix:
  101. include:
  102. - flavor: kernelsu
  103. commit: ${{ needs.resolve-pins.outputs.ksu_commit }}
  104. variant: KernelSU
  105. - flavor: next
  106. commit: ${{ needs.resolve-pins.outputs.next_commit }}
  107. variant: KernelSU-Next
  108. - flavor: resukisu
  109. commit: ${{ needs.resolve-pins.outputs.resukisu_commit }}
  110. variant: ReSukiSU
  111. uses: ./.github/workflows/prepare.yml
  112. with:
  113. config_file: ${{ needs.resolve-pins.outputs.config_file }}
  114. feature_set: SUSFS+NTSync+Ptrace+Unicode+BPF
  115. susfs_commit: ${{ needs.resolve-pins.outputs.susfs_commit }}
  116. root_flavor: ${{ matrix.flavor }}
  117. root_commit: ${{ matrix.commit }}
  118. nomount_commit: ${{ needs.resolve-pins.outputs.nomount_commit }}
  119. preserve_abi: true
  120. build_bypass: false
  121. os_patch_level: ${{ inputs.os_patch_level }}
  122. variant: ${{ matrix.variant }}
  123. secrets: inherit