尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
GitHub Actions实战:Morphe-AutoBuilds每日定时流水线patch.yml完整逐段解读指南
【免费下载链接】Morphe-AutoBuildsConfig-driven CI pipeline that automates Android app builds daily. Educational purposes.项目地址https://gitcode.com/gh_mirrors/mo/Morphe-AutoBuilds点击查看免费下载Morphe-AutoBuilds 是一个配置驱动的 GitHub Actions 自动化构建流水线每天 06:00 UTC 定时触发自动从多个 APK 源下载应用、应用补丁、签名并产出可按需安装的安卓 APK。核心全部逻辑由一份工作流文件 patch.yml 驱动——这篇文章就带你逐段读懂它学完即可上手搭建自己的每日定时 CI 流水线。️ 流水线全景5 个 Job 如何串联patch.yml 定义了 5 个 job形成「检查 → 读配置 → 并行构建 → 发布 → 清理」的完整闭环Job职责关键依赖download-tools下载构建工具并写缓存当前已禁用独立check-updates增量更新检查输出构建矩阵独立patch-apps读取构建矩阵兜底回退全量配置needs: check-updatesbuild-apps按矩阵并行构建 APK核心needs: patch-appscreate-single-release汇总产物、生成 manifest 并发布needs: [check-updates, build-apps]cleanup删除历史 workflow 运行记录needs: [build-apps, create-single-release]这种「用needsif条件控制任务是否执行」的编排思路是所有复杂 Actions 流水线的通用范式。1️⃣ 触发器定时 手动双入口patch.yml#L6-L15 定义了两种触发方式定时触发cron: 0 6 * * *即每天 UTC 6 点自动执行这是「每日定时流水线」的起点手动触发workflow_dispatch提供force_full_rebuild布尔开关勾选后忽略增量检查、强制重建所有应用——排查问题或首次铺量时非常有用。 小知识点GitHub 的 cron 表达式为 5 段分 时 日 月 周时区为 UTC。2️⃣ download-tools工具缓存的「模板」Jobpatch.yml#L18-L53 负责用curl下载 revanced-cli、patches 与 integrations 三个工具再交给actions/cachev4写入缓存。两个值得学习的细节缓存 key 用内容哈希key: revanced-tools-${{ hashFiles(patch-config.json, arch-config.json) }}——只要两个配置文件不变就命中缓存一旦配置变更自动失效重建if: ${{ false }}一键禁用该 job 目前整体被关闭构建逻辑已改为运行时按需下载但保留完整步骤作为「工具预取 缓存」的标准写法是 patch.yml 中最容易看懂的一段。3️⃣ check-updates增量构建的「大脑」这是整条流水线最聪明的部分。每天全量重建几十款应用既慢又浪费配额于是 check-updates job 先跑 scripts/check_app_updates.py 做增量判断读取 patch-config.json95 个 app/source 组合 arch-config.json架构矩阵展开出完整矩阵拉取上一轮发布的manifest.json基线对每个条目比对三类信号配置版本变化、补丁源 Release 签名变化、APK 是否缺失输出build_matrix.json需要重建的、carry_over.json沿用旧包的、new_manifest.json新基线并上传为build-plan工件patch.yml#L108-L117。if: needs.check-updates.outputs.has_updates true # 没更新下游全部跳过失败兜底设计也很到位脚本内部任何异常都会回退到全量重建矩阵check_app_updates.py#L1018-L1033宁可多建、不可漏建。4️⃣ patch-apps矩阵读取与兜底回退patch-apps job 本身很短把上游输出的build_matrix透传给strategy.matrix若检查阶段输出为空则回退到jq -c .patch_list patch-config.json全量重建——一个典型的防御式编程写法。5️⃣ build-apps核心构建 Job 逐段拆解build-apps 是整个流水线的重头戏可拆成 6 个知识点① 矩阵并行 失败隔离strategy: fail-fast: false # 单个 app 失败不取消兄弟任务 matrix: include: ${{ fromJson(needs.patch-apps.outputs.matrix) }}矩阵里每行{app_name, source}展开成一个独立并行的 runner某款应用挂了不会拖垮其他应用。② FlareSolverr 反爬服务patch.yml#L146-L151 用services拉起flaresolverr容器宿主端口 8192 映射容器 8191专门替下载脚本解决 Cloudflare 验证。随后「Wait for FlareSolverr」步骤用for i in $(seq 1 30)轮询最多 150 秒等它就绪——服务容器就绪 ≠ 立刻可用这种轮询等待是 services 场景的标准姿势。③ 环境装配setup-pythonv5装 Python 3.11 与依赖setup-javav4装 Temurin JDK 21actions/cachev4按相同的hashFileskey 恢复工具缓存与第 2 节形成闭环。④ 真正的构建命令patch.yml#L197-L208 把APP_NAME / SOURCE / ARCH注入环境变量后执行python -m src。入口 src/main.py 会按 arch-config.json 展开架构、从 apps/ 读取应用配置、多源 failover 下载 APKAPKMirror → APKPure → Aptoide → Uptodown…、按 patches/ 中的/-规则增删补丁、裁剪架构并用 keystore/public.jks 统一签名。一个有趣的细节构建前先sleep $((RANDOM % 30))随机抖动避免矩阵任务同时开火把下载源限流打爆。⑤ 构建记账无论成败if: always()record_build.py 都会为每个产出的 APK 写一条 JSON 记录含从文件名提取的实际版本号随build-records-*工件上传——这是下一轮增量判断的数据来源。⑥ 产物工件actions/upload-artifactv4按apk-app-source命名上传*.apk供发布 job 统一收集。6️⃣ create-single-release汇总、合并清单与发布create-single-release 注意if: always() ...——即使 build-apps 部分失败也尝试发布成功的那部分最大化每次运行的产出download-artifactv4按pattern: apk-*一次性拉回所有 APK 工件用find ... | wc -l检查是否真有产物没有则置skip_releasetrue优雅跳过后续步骤merge_manifest.py 把build-plan/new_manifest.json与各构建记录合并成最终manifest.json并只在构建成功后把pending_source_sig转正为source_sig——失败的构建不会「消耗」掉一次上游变更下次运行自动重试闭环极其严谨执行 scripts/gitlab_publish_release.py以--merge模式上传新 APK 与 manifest、替换latestRelease 资源链接、删除同身份前缀的旧版本 APK实现「滚动替换」而非堆积归档。7️⃣ cleanup给仓库「断舍离」patch.yml#L358-L370 使用第三方 actionMattraks/delete-workflow-runsv2保留最近 3 天、至少 5 次运行记录防止每天定时任务把 Actions 历史刷屏。if: always()保证清理永远执行。 总结值得抄进自己流水线的 6 个设计设计对应片段一句话收益cron workflow_dispatch 双触发patch.yml#L6-L15定时兜底 手动可控增量检查 全量兜底check-app job省配额且不漏建hashFiles缓存 keypatch.yml#L47-L49配置一变缓存自动失效矩阵fail-fast: falsepatch.yml#L154-L157单点失败不雪崩services 轮询等待就绪patch.yml#L185-L195稳定对接有状态服务manifest 状态机pending 转正merge_manifest.py失败可自动重试配套的 manual-patch.yml 还演示了另一种玩法通过workflow_dispatch的choice输入框指定 app、架构、版本做单应用的手动精准构建两者对照阅读收获更大。⚠️ 免责声明本项目仅用于学习与研究自动化构建流水线仓库本身不包含任何可下载文件构建产物需自行遵守相关应用与补丁源的许可条款。赞分享【免费下载链接】Morphe-AutoBuildsConfig-driven CI pipeline that automates Android app builds daily. Educational purposes.项目地址https://gitcode.com/gh_mirrors/mo/Morphe-AutoBuilds点击查看免费下载相关推荐5分钟掌握KeyMapper让你的Android按键功能翻倍的终极自定义指南5分钟掌握KeyMapper让你的Android按键功能翻倍的终极自定义指南 你是否曾想过手机上的音量键除了调节音量还能做什么游戏手柄的按键是否只能局限于移动开发NemoClaw 项目工作流指南GitHub Project 字段、每日例会流水线与发布标签的维护者实践NemoClaw 项目工作流指南GitHub Project 字段、每日例会流水线与发布标签的维护者实践 NemoClaw 是一个在 NVIDIA OpenS多智能体AI投资分析实战TradingAgents-CN深度解析与部署指南多智能体AI投资分析实战TradingAgents CN深度解析与部署指南 在人工智能技术飞速发展的今天传统投资分析模式正面临革命性变革。TradingAg人工智能大模型AI Agent多智能体金融科技后端前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Apache Iceberg FileIO 深度解析:面向多存储的读写抽象与实现机制

Apache Iceberg FileIO 深度解析:面向多存储的读写抽象与实现机制

数据湖湖仓一体大数据 【免费下载链接】iceberg Apache Iceberg 项目地址: https://gitcode.com/gh_mirrors/iceberg5/iceberg 点击查看 免费下载 Iceberg 的 FileIO 是连接 Iceberg 库与底层存储层的可插拔抽象,负责元数据与数据文件在作业规划、提交阶…

📅 2026/10/14 15:44:26
归并排序实战:用分治思想解决“寻找大富翁”Top M问题

归并排序实战:用分治思想解决“寻找大富翁”Top M问题

在 OJ 题库的排序专题里,“寻找大富翁”属于那种题目扫一眼就懂、动手写却容易反复提交的经典题。题意本身不难:给你一堆人的财产估值,输出其中财富排名前 M 位的数字。真正的坎在于数据量。当 N 被抬到十万甚至百万量级,冒泡、插…

📅 2026/10/14 15:44:26
python的机器人基础原理工业场景模拟第十九篇:机械臂仿真,零重力工况模拟,关闭重力项,输出仅由运动产生的关节力矩曲线。

python的机器人基础原理工业场景模拟第十九篇:机械臂仿真,零重力工况模拟,关闭重力项,输出仅由运动产生的关节力矩曲线。

《Python机器人基础原理》第十九篇:机械臂仿真——零重力工况模拟,关闭重力项,输出仅由运动产生的关节力矩曲线1. 实际工业应用场景周一早晨,某航天部件装配车间的地面测试大厅。一台3-DOF垂直关节机械臂(基座偏航肘部…

📅 2026/10/14 15:44:26
MORE NEWS

更多资讯

📰

两相短路故障Matlab/Simulink仿真模型搭建与波形分析详解

做电力系统继电保护或者故障分析这块,两相短路故障的仿真模型是一个绕不开的基础工具。不管是做保护定值整定、故障反演,还是给课程设计交差,大家都得在Matlab/Simulink里把这套东西搭起来过一遍。两相短路属于不对称故障,它的特征…

📰

带注解的深度学习入门源码:MNIST神经网络训练与调参避坑指南

简介:面向深度学习刚入门者的鱼书(《深度学习入门:基于Python的理论与实现》)配套源码增强包,作者在原始代码基础上添加了详细个人注释,并结合MNIST手写数字识别案例梳理神经网络搭建流程,适合希…

📰

8086系统结构深度解析:从寄存器到分段寻址的底层原理

1. 为什么还要啃8086这块“老骨头” 如果你正在上微机原理这门课,或者准备考研、准备嵌入式方向的面试,大概率绕不开8086。很多人的第一反应是:都什么年代了,还在讲四十多年前的芯片?我当初也是这个心态,觉…

📰

微信小程序闹钟源码实战:从定时逻辑到真机唤醒的完整避坑指南

简介:这份资源是面向微信小程序初学者与移动端开发练习者的闹钟应用完整源码,帮助读者通过一个可运行的小项目掌握小程序开发的核心流程。项目围绕闹钟功能展开,涉及页面结构搭建、数据绑定与状态管理、时间处理与定时触发、用户事件响应、本…

📰

C语言手写FFT:从DFT到O(N log N)的实战指南

简介:这份资源面向信号处理、图像分析与数字滤波方向的学习者与开发者,提供用C语言实现快速傅里叶变换(FFT)及逆变换(IFFT)的完整工程代码。内容围绕Cooley-Tukey基2算法展开,涵盖序列分解、蝶形…

📰

易语言大漠模块封装与免注册调用实战指南

1. 从“重复造轮子”到“一键封装”:为什么要做大漠模块先说说我自己的经历。早些年做桌面自动化项目,每次新开一个工程,第一件事就是把大漠插件的注册命令、初始化代码、释放资源代码从头敲一遍。那时候图省事,直接把整套调用代码…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬