拓冰建站拓冰建站
首页 / 资讯中心 / 正文

一次触发、26 个并行构建:WSABuilds 的 GitHub Actions 流水线全解

一次触发、26 个并行构建WSABuilds 的 GitHub Actions 流水线全解【免费下载链接】WSABuildsRun Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root solutions) built in.项目地址: https://gitcode.com/GitHub_Trending/ws/WSABuildsWSAWindows Subsystem for Android每次更新WSABuilds 都要发布一组架构、Root 方案、GApps 组合各不相同的安装镜像靠的是 GitHub Actions 持续集成一次手动触发26 个并行 WSA 自动化构建最后落出 3 个 Release 标签。本文按一次运行从触发到发布的完整生命周期走一遍看看一条多架构 CI 流水线是怎么编排的。入口一个手动表单和三个前置任务update.yml 是整条流水线的总调度。它通过workflow_dispatch触发也就是 Actions 页面里的一张表单只填三项新的 WSA 版本号、发布说明、渠道WIF 或 retail。后面的任务靠needs声明依赖关系决定谁先谁后先是三个预处理 job26 个构建 job 全部排在它们后面。构建之前先跑的三个 jobcheck跑MagiskOnWSA/Update Check/目录下的四个脚本把 Magisk Stable/Canary、KernelSU、MindTheGapps 的上游最新版本和仓库里的.appversion记录对比有变化就写入update分支并导出一句版本变更消息到环境变量。update-downloadlinks按渠道重新生成 README 里的下载徽章链接。check-and-create-tag等前两个完成后先确认Windows_11_版本、Windows_11_版本_arm64、Windows_10_版本三个标签不存在再把 release notes 模板里的版本号填好创建三个空 Release。这是典型的先摆货架再上货构建 job 之后只需要把包放进对应标签。顺序反了就会出现重复发布或者 notes 缺失。26 个构建 job把工作流当子函数调用预处理完成后26 个 job 各自做的事都是同一个调用一个可复用工作流reusable workflow。uses: ./.github/workflows/build.yml相当于一个被其他工作流调用的子函数参数通过with传入这是 GitHub Actions 可复用工作流的核心用法。build_x64_magisk_gapps_redfin: needs: [check, check-and-create-tag, update-downloadlinks] uses: ./.github/workflows/build.yml with: arch: x64 root: magisk gapps: --install-gapps devicemodel: redfin这段定义的是Pixel 5代号 redfin x64 Magisk 稳定版 GApps这一个变体。把 root 换成 none 或 kernelsu、加不加--remove-amazon就派生出其余 25 个。job 之间没有依赖GitHub Actions 会并行跑完。为什么有四个构建函数文件.github/workflows/ 下实际有四个可复用文件build.yml、build_old.yml、buildarm64.yml、build_arm64_old.yml。WIF 渠道的 x64 走build.ymlretail 渠道和 KernelSU 组合基本走_old变体——旧版/零售 WSA 的镜像布局和 Insider Fast 不同拆出去比在一个文件里塞满 if 分支好读。读这份代码时先搞清楚 job 指向哪个文件。子函数内部从零到一个 7z 包环境准备两行缓存省下大半时间- uses: actions/setup-pythonv6 with: cache: pip cache-dependency-path: MagiskOnWSA/scripts/pip 依赖走官方缓存apt 包e2fsprogs、qemu-utils、xmlstarlet 这些操作镜像要用的工具则交给 cache-apt-pkgs-action。缓存命中时环境准备从冷启动的十分钟级缩到分钟级。真正的重活在 build.sh 里环境就绪后工作流把参数全部转手给 build.sh./scripts/build.sh --arch x64 --release-type WIF --magisk-ver stable \ --root-sol magisk --install-gapps --compress-format none脚本内部先把每个参数对照白名单校验check_list不在列表里立即报错退出参数拼错不会静默跑到底。两条组合规则有意思选了 GApps 却选无 Root时会被强制装 Magisk挂载 GApps 镜像依赖它GApps KernelSU 则直接拒绝。脚本用 mktemp 建临时目录、按清单下载 WSA 包、VCLibs/XAML 依赖、Magisk 包和 GApps 镜像EXIT 时 trap 统一清理。后处理Win10 兼容补丁和两个包x64 管线先出 Windows 11 包houdini_installer.sh 注入 Houdinix86 二进制翻译器LZMA2 压缩。然后是 Win10 补丁用 xmlstarlet 删掉 Windows 11 专属节点、改写最低系统版本xmlstarlet ed --inplace --delete //*[local-name()Capability and NamecustomInstallActions] AppxManifest.xml xmlstarlet ed --inplace --update //*[local-name()TargetDeviceFamily]/MinVersion -v 10.0.19041.264 AppxManifest.xml这两条等于手动打开 XML 删节点、改属性。打完补丁再下载三个兼容 DLL二次压缩成 Win10 包。最后softprops/action-gh-release把两个包分别传到预建的标签下并开了fail_on_unmatched_files: true——文件缺失整个 job 直接失败不会发出空壳 Release。想自己定做一个buildtester 的跨平台接力表单加一道硬校验buildtester.yml 是 Custom Build 入口Windows 版本、架构、8 种 Root 方案含 Magisk Debug/Alpha/Delta、GApps、14 个 Pixel 机型代号、压缩格式全在下拉框里选。job 第一步是一道硬校验if [[ ${{ github.event.inputs.wintype }} Windows 10 ${{ inputs.arch }} arm64 ]]; then exit 1 fi这四行把无效组合Win10 补丁不支持 arm64当场拦下。10 秒内失败总比 40 分钟后才发现强。Linux 到 Windows 的接力棒构建本体在 ubuntu-latest 上跑但合并 PRI 资源、压缩镜像需要 makepri.exe 和 diskpart得在 windows-latest 上做第二个 job。两者之间既不用 artifact 也不推 git而是actions/cache构建结束cache/save把MagiskOnWSA/output按产物名时间戳做 key 存起来make-pri job 用同一 keycache/restore取回。Windows 侧依次合并语言/密度资源、用 diskpart 的 COMPACT VDISK 压缩 system 等四个 vhdx 分区、生成 SHA256 校验和最终包走 upload-artifact 供人手动下载。这套用 cache 跨操作系统传大文件的手法很实用。上游版本谁来盯四个更新检查脚本check job 里的四个脚本干的是同一件事拉取上游最新版Magisk 读 stable/canary 的 jsonKernelSU 和 MindTheGapps 抓 release 信息与本地.appversion文件如 MagiskStableUpdateCheck.py 维护的magiskstable.appversion比对不同就更新文件、提交到 update 分支并把从 vX 升到 vY写进环境变量——这句话最后由 check-and-create-tag 填进 release notes 的版本号位置。发布页上的每个组件版本都是发布时算出来的不是手敲的。结尾还有个细节它顺手把Check update这个工作流自身的历史运行记录清空跑得多又不能霸占 Actions 列表。构建挂了先查这三处参数段每个可复用工作流都有 Check workflow inputs 步骤把输入原样 echo 出来加上 build.sh 的白名单校验参数问题基本在头几分钟现形。下载段build.sh 按组件清单下载超时多半是上游Magisk 发布页、WSA 下载源的问题重跑即可--offline、--skip-download-wsa参数允许调试时复用本地已有包。产物段挂在发布步骤时先核对 7z 文件名和标签名Windows_11_x与Windows_10_x是否对得上——这条管线 Win10/Win11 分成两个标签是手滑重灾区。工作流里若干ls -lR、echo步骤看着冗余实则是排障的主要证据阶段交界处多留一点过程输出失败定位成本能降一个数量级。延伸阅读建议从 update.yml 的 job 依赖编排读起再看 build.sh 里的参数校验与下载逻辑最后翻MagiskOnWSA/Update Check/目录下的四个脚本把版本从哪来、包怎么拼、标签怎么建串成闭环。【免费下载链接】WSABuildsRun Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root solutions) built in.项目地址: https://gitcode.com/GitHub_Trending/ws/WSABuilds创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门