forked from xingguangcuican6666/ABK
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoneplus-full-feature-matrix.yml
More file actions
362 lines (337 loc) · 14 KB
/
oneplus-full-feature-matrix.yml
File metadata and controls
362 lines (337 loc) · 14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
name: OnePlus 全矩阵内核构建
permissions:
contents: write
actions: write
on:
workflow_dispatch:
inputs:
kernelsu_variant:
description: "KernelSU 变体"
required: true
type: choice
options:
- Official
- SukiSU
- ReSukiSU
- None
default: SukiSU
enable_susfs:
description: "启用 SUSFS(仅 android14/6.1 与 android15/6.6 生效,5.10/5.15 自动关闭)"
required: false
type: boolean
default: false
use_kpm:
description: "启用 KPM(仅 SukiSU/ReSukiSU 生效)"
required: false
type: boolean
default: false
use_lz4kd:
description: "启用 lz4kd"
required: false
type: boolean
default: false
use_bbg:
description: "启用 BBG 基带防护"
required: false
type: boolean
default: true
use_bbr:
description: "启用 BBR"
required: false
type: boolean
default: false
use_proxy_optimization:
description: "启用代理相关网络优化(MTK 会自动关闭)"
required: false
type: boolean
default: true
use_unicode_bypass:
description: "启用 Unicode 零宽绕过修复"
required: false
type: boolean
default: false
workflow_call:
inputs:
kernelsu_variant:
required: true
type: string
enable_susfs:
required: false
type: boolean
default: false
use_kpm:
required: false
type: boolean
default: false
use_lz4kd:
required: false
type: boolean
default: false
use_bbg:
required: false
type: boolean
default: true
use_bbr:
required: false
type: boolean
default: false
use_proxy_optimization:
required: false
type: boolean
default: true
use_unicode_bypass:
required: false
type: boolean
default: false
jobs:
get-manager:
name: 上传管理器和 SUSFS 模块
if: ${{ inputs.kernelsu_variant != 'None' }}
uses: ./.github/workflows/get-manager.yml
secrets: inherit
with:
kernelsu_variant: ${{ inputs.kernelsu_variant }}
prepare-matrix:
name: 准备 OnePlus 机型矩阵
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.oneplus-matrix.outputs.matrix }}
count: ${{ steps.oneplus-matrix.outputs.count }}
steps:
- name: 检出代码仓库
uses: actions/checkout@v6
- name: 生成矩阵
id: oneplus-matrix
shell: bash
env:
MATRIX_KSU_VARIANT: ${{ inputs.kernelsu_variant }}
MATRIX_ENABLE_SUSFS: ${{ inputs.enable_susfs }}
MATRIX_USE_KPM: ${{ inputs.use_kpm }}
MATRIX_USE_LZ4KD: ${{ inputs.use_lz4kd }}
MATRIX_USE_BBG: ${{ inputs.use_bbg }}
MATRIX_USE_BBR: ${{ inputs.use_bbr }}
MATRIX_USE_PROXY_OPTIMIZATION: ${{ inputs.use_proxy_optimization }}
MATRIX_USE_UNICODE_BYPASS: ${{ inputs.use_unicode_bypass }}
run: |
set -euo pipefail
python3 <<'PY'
import json
import os
import re
import subprocess
import tempfile
from collections import Counter
from pathlib import Path
SUPPORTED_CPUS = [
"sm8750",
"sm8735",
"mt6991",
"sm8650",
"mt6989",
"sm8635",
"sm8550",
"sm8450",
"sm8475",
"sm7675",
"sm7635",
"sm7550",
"sm6375",
]
SUPPORTED_MANIFESTS = [
"oneplus_13_b",
"oneplus_13s_b",
"oneplus_13t_b",
"oneplus_ace5_pro_b",
"oneplus_ace_6",
"oneplus_pad_2_pro_b",
"oneplus_pad_3_b",
"oneplus_ace5_ultra_b",
"oneplus_turbo_6",
"oneplus_12_b",
"oneplus_ace3_pro_b",
"oneplus_ace5_b",
"oneplus_13r_b",
"oneplus_pad2_b",
"oneplus_pad_pro_b",
"oneplus_ace5_race_b",
"oneplus_nord_5_b",
"oneplus_11_b",
"oneplus_12r_b",
"oneplus_ace2_pro_b",
"oneplus_ace3_b",
"oneplus_open_b",
"oneplus_10t_v",
"oneplus_11r_b",
"oneplus_ace2_b",
"oneplus_ace_pro_v",
"oneplus_10_pro_b",
"oneplus_ace_3v_b",
"oneplus_turbo_6v",
"oneplus_nord_4_b",
"oneplus_nord_ce4_lite_5g",
"oneplus_nord_ce4_b",
]
PROFILE_MAP = {
"oneplus_13_b": ("OnePlus 13", "ColorOS/OxygenOS 16"),
"oneplus_13s_b": ("OnePlus 13s", "ColorOS/OxygenOS 16"),
"oneplus_13t_b": ("OnePlus 13T", "ColorOS/OxygenOS 16"),
"oneplus_ace5_pro_b": ("OnePlus Ace5 Pro", "ColorOS/OxygenOS 16"),
"oneplus_ace_6": ("OnePlus Ace 6", "ColorOS/OxygenOS 16"),
"oneplus_pad_2_pro_b": ("OnePlus Pad 2 Pro", "ColorOS/OxygenOS 16"),
"oneplus_pad_3_b": ("OnePlus Pad 3", "ColorOS/OxygenOS 16"),
"oneplus_ace5_ultra_b": ("OnePlus Ace5 Ultra", "ColorOS/OxygenOS 16"),
"oneplus_turbo_6": ("OnePlus Turbo 6", "ColorOS/OxygenOS 16"),
"oneplus_12_b": ("OnePlus 12", "ColorOS/OxygenOS 16"),
"oneplus_ace3_pro_b": ("OnePlus Ace3 Pro", "ColorOS/OxygenOS 16"),
"oneplus_ace5_b": ("OnePlus Ace5", "ColorOS/OxygenOS 16"),
"oneplus_13r_b": ("OnePlus 13R", "ColorOS/OxygenOS 16"),
"oneplus_pad2_b": ("OnePlus Pad 2", "ColorOS/OxygenOS 16"),
"oneplus_pad_pro_b": ("OnePlus Pad Pro", "ColorOS/OxygenOS 16"),
"oneplus_ace5_race_b": ("OnePlus Ace5 Race", "ColorOS/OxygenOS 16"),
"oneplus_nord_5_b": ("OnePlus Nord 5", "ColorOS/OxygenOS 16"),
"oneplus_11_b": ("OnePlus 11", "ColorOS/OxygenOS 16"),
"oneplus_12r_b": ("OnePlus 12R", "ColorOS/OxygenOS 16"),
"oneplus_ace2_pro_b": ("OnePlus Ace2 Pro", "ColorOS/OxygenOS 16"),
"oneplus_ace3_b": ("OnePlus Ace3", "ColorOS/OxygenOS 16"),
"oneplus_open_b": ("OnePlus Open", "ColorOS/OxygenOS 16"),
"oneplus_10t_v": ("OnePlus 10T", "ColorOS/OxygenOS 15"),
"oneplus_11r_b": ("OnePlus 11R", "ColorOS/OxygenOS 16"),
"oneplus_ace2_b": ("OnePlus Ace2", "ColorOS/OxygenOS 16"),
"oneplus_ace_pro_v": ("OnePlus Ace Pro", "ColorOS/OxygenOS 15"),
"oneplus_10_pro_b": ("OnePlus 10 Pro", "ColorOS/OxygenOS 16"),
"oneplus_ace_3v_b": ("OnePlus Ace 3V", "ColorOS/OxygenOS 16"),
"oneplus_turbo_6v": ("OnePlus Turbo 6V", "ColorOS/OxygenOS 16"),
"oneplus_nord_4_b": ("OnePlus Nord 4", "ColorOS/OxygenOS 16"),
"oneplus_nord_ce4_lite_5g": ("OnePlus Nord CE4 Lite 5G", "ColorOS/OxygenOS 15"),
"oneplus_nord_ce4_b": ("OnePlus Nord CE4", "ColorOS/OxygenOS 16"),
}
KERNEL_LINES = {
"1": ("android12", "5.10"),
"2": ("android13", "5.15"),
"3": ("android14", "6.1"),
"4": ("android15", "6.6"),
}
def run(cmd, cwd=None):
return subprocess.check_output(cmd, cwd=cwd, text=True)
def env_enabled(name):
return "on" if os.environ.get(name, "").lower() == "true" else "off"
supported_manifest_set = set(SUPPORTED_MANIFESTS)
cpu_order = {cpu: index for index, cpu in enumerate(SUPPORTED_CPUS)}
manifest_order = {manifest: index for index, manifest in enumerate(SUPPORTED_MANIFESTS)}
with tempfile.TemporaryDirectory() as tmpdir:
repo_path = Path(tmpdir) / "kernel_manifest"
subprocess.run(
[
"git",
"clone",
"--depth=1",
"--filter=blob:none",
"--no-checkout",
"--no-single-branch",
"https://github.com/Xiaomichael/kernel_manifest.git",
str(repo_path),
],
check=True,
)
matrix = []
found = set()
for cpu in SUPPORTED_CPUS:
branch = f"origin/oneplus/{cpu}"
xml_files = [
line
for line in run(["git", "ls-tree", "-r", "--name-only", branch], cwd=repo_path).splitlines()
if line.endswith(".xml")
]
for xml_file in xml_files:
device_manifest = Path(xml_file).stem
if device_manifest not in supported_manifest_set:
continue
xml = run(["git", "show", f"{branch}:{xml_file}"], cwd=repo_path)
upstream_match = re.search(r'upstream="refs/heads/ks-kernel\.lnx\.(\d+)\.0\.', xml)
if not upstream_match:
raise SystemExit(f"Cannot detect kernel line for {cpu}/{device_manifest}")
line = KERNEL_LINES.get(upstream_match.group(1))
if line is None:
raise SystemExit(
f"Unsupported OnePlus kernel line {upstream_match.group(1)}.0 for {cpu}/{device_manifest}"
)
android_version, kernel_version = line
display_name, system_version = PROFILE_MAP[device_manifest]
enable_susfs = (
os.environ.get("MATRIX_ENABLE_SUSFS", "").lower() == "true"
and os.environ.get("MATRIX_KSU_VARIANT", "") != "None"
and f"{android_version}/{kernel_version}" in {"android14/6.1", "android15/6.6"}
)
matrix.append(
{
"cpu": cpu,
"device_manifest": device_manifest,
"device_label": (
f"{display_name} · {system_version} · "
f"{android_version}/{kernel_version} · {cpu}"
),
"android_version": android_version,
"kernel_version": kernel_version,
"enable_susfs": enable_susfs,
}
)
found.add(device_manifest)
missing = sorted(supported_manifest_set - found, key=manifest_order.get)
if missing:
raise SystemExit("Supported OnePlus manifests missing upstream: " + ", ".join(missing))
matrix.sort(
key=lambda row: (
["5.10", "5.15", "6.1", "6.6"].index(row["kernel_version"]),
cpu_order[row["cpu"]],
manifest_order[row["device_manifest"]],
)
)
matrix_json = json.dumps({"include": matrix}, separators=(",", ":"))
with open(os.environ["GITHUB_OUTPUT"], "a", encoding="utf-8") as output:
output.write(f"matrix={matrix_json}\n")
output.write(f"count={len(matrix)}\n")
line_counts = Counter(f'{row["android_version"]}-{row["kernel_version"]}' for row in matrix)
cpu_counts = Counter(row["cpu"] for row in matrix)
with open(os.environ["GITHUB_STEP_SUMMARY"], "a", encoding="utf-8") as summary:
summary.write("## OnePlus 全矩阵内核构建\n\n")
summary.write(f"- 总任务数: {len(matrix)}\n")
summary.write(f"- KernelSU 变体: {os.environ.get('MATRIX_KSU_VARIANT', '')}\n")
summary.write(f"- SUSFS: {env_enabled('MATRIX_ENABLE_SUSFS')}(仅 android14/6.1 与 android15/6.6 生效,5.10/5.15 自动 off)\n")
summary.write(f"- KPM: {env_enabled('MATRIX_USE_KPM')}(仅 SukiSU/ReSukiSU 生效)\n")
summary.write(f"- lz4kd: {env_enabled('MATRIX_USE_LZ4KD')}\n")
summary.write(f"- BBG: {env_enabled('MATRIX_USE_BBG')}\n")
summary.write(f"- BBR: {env_enabled('MATRIX_USE_BBR')}\n")
summary.write(f"- 代理优化: {env_enabled('MATRIX_USE_PROXY_OPTIMIZATION')}(MTK 分支自动 off)\n")
summary.write(f"- Unicode 绕过: {env_enabled('MATRIX_USE_UNICODE_BYPASS')}\n\n")
summary.write("### KMI 分布\n")
for combo in sorted(line_counts):
summary.write(f"- {combo}: {line_counts[combo]}\n")
summary.write("\n### CPU 分布\n")
for cpu in SUPPORTED_CPUS:
if cpu in cpu_counts:
summary.write(f"- {cpu}: {cpu_counts[cpu]}\n")
print(matrix_json)
PY
build-oneplus-full-matrix:
name: "${{ matrix.device_label }} · ${{ inputs.kernelsu_variant }}"
needs: prepare-matrix
if: ${{ needs.prepare-matrix.outputs.count != '0' }}
strategy:
fail-fast: false
max-parallel: 16
matrix: ${{ fromJson(needs.prepare-matrix.outputs.matrix) }}
uses: ./.github/workflows/oneplus-build.yml
secrets: inherit
with:
cpu: ${{ matrix.cpu }}
device_manifest: ${{ matrix.device_manifest }}
android_version: ${{ matrix.android_version }}
kernel_version: ${{ matrix.kernel_version }}
ksu_variant: ${{ inputs.kernelsu_variant }}
enable_susfs: ${{ matrix.enable_susfs }}
use_kpm: ${{ inputs.use_kpm }}
use_lz4kd: ${{ inputs.use_lz4kd }}
use_bbg: ${{ inputs.use_bbg }}
use_bbr: ${{ inputs.use_bbr }}
use_proxy_optimization: ${{ inputs.use_proxy_optimization }}
use_unicode_bypass: ${{ inputs.use_unicode_bypass }}