面向两套 GitHub Actions 工作流,分别用于生成 线刷包(EMMC) 与 卡刷包(TF/SD) 的 *-mod 镜像,并自动:
- 将产物上传到当前仓库的 Release;
- (可选)按日期目录上传到百度网盘。
| 工作流名 | 用途 | 触发方式 | Release 标签/名称前缀 | 设备矩阵 | 私仓脚本 | 大文件处理 | 网盘上传 |
|---|---|---|---|---|---|---|---|
| 稀范科技Emuelec线刷包魔改 | 线刷包(EMMC)魔改 | 手动 workflow_dispatch |
emmc-build-YYYYMMDD-HHMMSS |
3326、3326_en |
private/emmc.sh |
>2GB 自动 7z 1.9GB/卷、无压缩 并上传分卷 | 使用 BaiduPCS-Go 串行下载/解压/上传/删除 |
| 稀范科技Emuelec卡刷包魔改 | 卡刷包(TF/SD)魔改 | 手动 workflow_dispatch |
tf-build-YYYYMMDD-HHMMSS |
3326、3326_en |
private/build_mod_img.sh |
同上 | 同上 |
两个工作流都接受相同的输入参数:
image_url(必填):原始镜像下载地址,仅支持.img/.img.gzbaidu_dir(选填):百度网盘父目录(当天会自动建子目录),默认/Emuelec/魔改构建
- 运行时会在工作目录
private/检出私有仓库:${{ github.actor }}/ee_img_build - 在 本仓库 Settings → Secrets and variables → Actions 中新增:
GH_PAT:GitHub Personal Access Token(至少repo权限),用于拉取私有仓库
- 如需上传至百度网盘,请新增:
BAIDU_COOKIE:Baidu 网盘登录 Cookie 字符串(从已登录浏览器复制)
GITHUB_TOKEN为内置 Token,用于在当前仓库创建/上传 Release 与通过ghCLI 上传资产
- 默认 Runner:
ubuntu-22.04 - 将安装:
jq curl wget xz-utils gzip tar coreutils、gdisk parted e2fsprogs xfsprogs dosfstools util-linux、kpartx squashfs-tools unzip p7zip-full - 上传阶段安装:
gh p7zip-full unzip,并下载 BaiduPCS-Go v3.9.0
- 打开仓库 Actions → 选择对应工作流:
- 线刷包:稀范科技Emuelec线刷包魔改
- 卡刷包:稀范科技Emuelec卡刷包魔改
- 点击 Run workflow,填写:
image_url(必填):源镜像直链(.img/.img.gz)- 脚本会自动下载,若为
.img.gz会 gunzip 解压得到.img - 若文件小于 100MB 会被判定为下载异常并失败
- 脚本会自动下载,若为
baidu_dir(选填):远端父目录(默认/Emuelec/魔改构建)。
当天会自动创建子目录:<baidu_dir>/<YYYYMMDD>。
- 计算 UTC 时间戳并生成 Release tag/name:
- 线刷包:
emmc-build-YYYYMMDD-HHMMSS - 卡刷包:
tf-build-YYYYMMDD-HHMMSS
- 线刷包:
- 使用
softprops/action-gh-release@v2在 当前仓库 创建/更新对应 Release
- 设备矩阵:
["3326", "3326_en"] - 检出当前仓库与 私有仓库
ee_img_build至private/ - 下载与解压输入镜像(只接受
.img/.img.gz) - 执行私仓脚本:
- 线刷包:
sudo -E ./emmc.sh <device> <image.img> - 卡刷包:
sudo -E ./build_mod_img.sh <device> <image.img>
- 线刷包:
- 定位输出:匹配
*-mod.img/*-mod.img.gz(按时间排序取最新为主文件)
- 若主文件 > 2GB:使用
7z a -v1900m -mx=0分卷(1.9GB/卷、无压缩),逐卷上传到 Release;否则直接上传单文件 - 使用
gh release upload --clobber,可覆盖同名资产
- Job
upload_baidu在两个设备都构建完成后执行;并用concurrency.group: baidu-upload串行化处理 - Release 资产做同名归并:将同一镜像的分卷(
.7z.001/.7z.002…)归为同一个 key(去掉.7z.*尾巴) - 处理流程(逐镜像):
- 下载分卷(若存在)→ 本地解压合并;否则下载单文件
- 上传到:
<baidu_dir>/<YYYYMMDD>/ - 完成后删除临时文件
- 跳过文件名包含
mini的镜像
- 如缺少
BAIDU_COOKIE,该 Job 会报错并退出
- 构建 Job 与上传 Job 都会清理临时/包管理缓存,保证磁盘充足
- 产物文件:
*-mod.img或*-mod.img.gz(由私仓脚本产出) - 存储位置:
- GitHub:发布在本仓库对应的 Release(按时间戳命名)
- 百度网盘(如启用):
<baidu_dir>/<YYYYMMDD>/
- 对超大文件,Release 中会出现多段分卷(
.7z.001、.7z.002…);网盘侧会先合并再上传为单一文件
- 线刷包工作流:调用
emmc.sh;标签前缀emmc-build- - 卡刷包工作流:调用
build_mod_img.sh;标签前缀tf-build- - 其余(输入参数、设备矩阵、分卷与网盘上传逻辑)保持一致
- 新增设备:在
build.strategy.matrix.device增加型号,并确保私仓脚本支持 - 更改分卷大小/压缩级别:调整
7z a -v1900m -mx=0的-v(分卷大小)与-mx(压缩等级) - 调整网盘目录结构:改动
upload_baiduJob 中日期与目录拼接逻辑 - 替换网盘实现:可将 BaiduPCS-Go 改为其他 CLI 或 API
Q1:为什么提示 “Unsupported file type”?
仅支持 .img 与 .img.gz,请确认 image_url 的扩展名与内容一致。
Q2:下载后报 “太小,疑似下载不完整(<100MB)”?
通常是直链失效/限速/重定向到 HTML 页面。请在浏览器验证直链或更换下载地址。
Q3:提示 “No mod image produced”?
说明私仓脚本未生成 *-mod.img(或 .img.gz)。请检查 ee_img_build 的脚本逻辑、依赖与机型匹配。
Q4:Release 分卷成功但网盘上传失败?
upload_baidu 会寻找 .001 起始分卷并合并;若缺失,说明 Release 资产不完整或命名被改动,请核对分卷是否齐全。
Q5:需要哪些权限?
GITHUB_TOKEN:创建/上传 Release(内置)GH_PAT:拉取 私有仓库(需repo权限)BAIDU_COOKIE:BaiduPCS-Go 免扫码登录(Cookie 字符串)
Q6:如何只构建其中一个设备?
在 YAML 中将 strategy.matrix.device 改为单值,例如 ["3326"]。
GH_PAT与BAIDU_COOKIE为敏感凭据,请只存放于 GitHub Secrets,不要写入仓库- 确保你对原始镜像与私仓脚本拥有合法使用与再分发权限
- 建议开启环境保护/审批流程以提高可审计性
- 已在当前仓库添加
GH_PAT(repo权限) - 如需网盘:已添加
BAIDU_COOKIE(有效且未过期) - 私有仓库
${{ github.actor }}/ee_img_build可被当前 Token 读取 - 准备好可直链下载的
image_url(.img/.img.gz,≥ 100MB) - 如需仅构建特定设备或更改分卷大小,已按需修改工作流 YAML