Reproducible workflows

把开发、构建与创作任务迁入一台独享云端 Mac

MiniDeploy 提供整台 Mac mini 的独享物理机资源,不与其他租户共享芯片、内存或存储,也不是虚拟机。你可以通过远程 Mac 桌面操作图形界面,也可以使用 SSH、脚本和 self-hosted runner 执行自动化任务。

INPUT / 01

任务输入

将代码、依赖锁定文件、代理素材、模型权重或自动化任务同步到物理节点。先确定输入规模、来源位置与增量同步方式。

EXECUTE / 02

云端执行

在独享 Apple Silicon 芯片、16GB 内存与 256GB SSD 上运行 Xcode、测试、推理或编码任务。系统命令行与 macOS 图形界面完整可用。

OUTPUT / 03

产物输出

把归档包、测试报告、性能数据或媒体文件回传到团队存储。验收时同时检查完整性、日志、耗时与可重复执行能力。

先定义验收,再迁移任务。 一条可控的云端工作流应明确输入来源、执行命令、产物位置、失败回滚方式与最长可接受耗时,而不是只验证“能够远程登录”。

Usecase cards

四类真实任务,四套不同的验收标准

同一台云端 Mac 可以承担交互式与自动化任务,但输入规模、网络依赖和完成条件不同。先按任务类型确定关键指标,再决定节点与连接方式。

交互式

独立开发者维护 Xcode 项目

通过远程 Mac 桌面打开工程,在图形界面完成断点调试、配置检查和归档;依赖安装、测试与重复构建交给命令行。

输入
代码仓库、依赖锁定文件、签名材料
执行
Xcode、xcodebuild、fastlane
输出
测试报告、归档包、分发记录
验收
工程可编译,归档可重复,日志可追溯
自动化

CI 团队运行 self-hosted runner

代码提交后由 runner 接单,在隔离工作目录中执行依赖恢复、测试、构建与产物上传,让构建环境和缓存策略由团队控制。

输入
提交记录、流水线配置、构建参数
执行
runner、测试脚本、xcodebuild
输出
制品、覆盖率、构建日志
验收
连续三次干净构建结果一致
实验

AI 实验用户验证本地推理

固定 Python 环境、模型版本、量化方式和输入样本,在 Apple Silicon 上记录首轮加载、稳定吞吐、内存峰值与输出一致性。

输入
模型、样本、环境清单、随机种子
执行
预处理、预热、批量推理
输出
结果文件、耗时、资源记录
验收
环境可重建,数据口径可复核
媒体

音视频团队远程处理素材

先上传低体积代理素材,再通过远程桌面完成剪辑、时间线检查与编码;高分辨率源文件和成片传输安排在非交互阶段。

输入
代理素材、工程文件、编码预设
执行
剪辑、检查、渲染、编码
输出
成片、工程归档、校验值
验收
帧率、音轨、色彩与文件完整

Developer workflow

独立开发者:从远程桌面进入 Xcode,再把重复步骤交给命令行

适合需要持续维护 iOS、macOS 或 visionOS 工程,但本地没有可长期运行 Mac 环境的开发者。交互式调试使用远程 Mac 桌面,构建与归档则保留可复现命令。

建议连接方式:查看界面、断点和模拟器时使用屏幕共享或 VNC;拉取代码、查看日志和执行脚本时使用 SSH。两条连接链路分别验证,避免桌面异常阻断自动化任务。
  1. 01

    固定工程输入

    拉取指定提交,确认子模块、依赖锁定文件和构建配置已同步。不要以未经记录的本地缓存作为唯一依赖来源。

    验收:git status 无意外改动,提交标识与待构建版本一致。

  2. 02

    复刻工具链

    记录 Xcode 版本、命令行工具路径、Ruby 与 Python 运行环境,以及包管理器解析结果。先执行依赖安装,再打开工程检查方案和目标。

    验收:xcodebuild -version 与项目基线一致,依赖解析无漂移。

  3. 03

    交互式调试

    通过远程桌面进入 Xcode,检查编译错误、断点、控制台输出和模拟器行为。降低桌面分辨率可以减少高延迟网络中的画面传输量。

    验收:目标能够启动,关键路径可复现,调试日志包含对应提交标识。

  4. 04

    签名、归档与分发

    将签名材料限制在专用目录和最小权限账户中,通过可审计脚本执行归档与导出。完成检查后再进入 TestFlight 分发步骤。

    验收:归档版本、构建号、导出配置和分发结果均写入本次任务日志。

CI/CD workflow

CI 团队:让云端 Mac runner 可重建、可隔离、可追踪

独享物理机适合需要固定 Xcode 版本、可控缓存和持续可用执行环境的流水线。节点全年 365 天正常运行,团队仍应为脚本失败、磁盘占满和上游依赖异常设置明确退出路径。

TRIGGER

提交触发

以提交标识、分支、目标方案和构建类型组成任务输入。禁止让不同项目共享同一个未清理工作目录。

  • 限制允许执行的仓库与分支
  • 为合并请求和正式发布拆分队列
  • 记录触发者、任务编号与提交标识
PREPARE

环境准备

runner 接单后创建独立目录,恢复经过版本化的依赖缓存。缓存键至少包含工具链、架构与锁定文件摘要。

  • 先检查剩余磁盘空间
  • 区分只读缓存和任务临时目录
  • 缓存未命中时允许完整重建
BUILD

测试与构建

使用固定参数调用测试和 xcodebuild,将标准输出、退出码、测试结果包与耗时写入同一任务记录。

  • 失败后保留首个有效错误
  • 为测试和归档设置独立超时
  • 不以重复重试掩盖不稳定测试
DELIVER

制品回传

上传归档包、测试报告和校验值,确认接收端完整后再清理任务目录。敏感日志应在上传前完成脱敏。

  • 产物名称包含版本与提交标识
  • 上传后执行大小和摘要校验
  • 按项目策略保留失败日志

Runner acceptance

上线前至少完成三轮验证

  1. 清空可再生缓存后执行一次完整构建,确认环境没有隐藏依赖。
  2. 连续提交两次相同代码,核对测试数量、产物摘要和构建参数是否一致。
  3. 主动终止一个任务,确认 runner 能释放工作目录并接收下一条任务。

AI inference workflow

AI 实验:固定模型、输入与测量口径,再比较 Apple Silicon 推理结果

M4 Core 提供 M4、16GB RAM 与 256GB SSD。它适合验证能够放入可用内存和存储范围内的本地推理任务,不应只凭模型名称判断能否运行。

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.lock
python3 benchmark.py --warmup 3 --runs 10 --seed 42
A / ENV

环境可重建

记录 macOS 版本、Python 版本、依赖锁定文件和执行命令。模型运行依赖应从空环境安装成功,而不是依赖个人终端历史。

B / DATA

输入可比较

固定模型修订版、量化方式、提示词、样本长度、批次大小和随机种子。模型文件同步完成后核对文件大小与摘要。

C / RUN

执行分预热与稳定阶段

将首次加载耗时和预热后的连续推理分开记录。每轮保存开始时间、结束时间、峰值内存与异常退出信息。

D / RESULT

输出带测量口径

报告至少包含首轮延迟、中位耗时、稳定吞吐、内存峰值和十轮结果离散程度。不同环境的数字不可直接混用。

容量边界:模型权重、运行时缓存、上下文和其他进程会共同占用内存。若任务需要更大存储,可在订购时核对 1TB 或 2TB SSD 附加项;若模型与运行时无法在 16GB RAM 范围内稳定执行,应调整量化、上下文或任务拆分方式。

Media workflow

音视频任务:交互阶段传代理,输出阶段传成片

远程桌面传输的是操作画面,不会消除源素材上传时间。把高体积传输和交互式剪辑分开安排,通常比直接远程操作原始素材更稳定。

01

准备代理素材

在上传前统一代理编码、分辨率、帧率与文件命名。保留源素材和代理素材之间的映射清单,避免后续重新链接时依赖人工记忆。

验收:代理文件可播放,时码、音轨和原始素材一一对应。
02

增量同步工程

先同步工程文件、代理素材和必要资源,再单独传输可延后的源文件。网络中断后应支持从未完成部分继续,而不是重新发送全部内容。

验收:随机抽查文件大小和摘要,工程打开后没有离线代理。
03

远程剪辑与检查

根据节点延迟调整远程桌面分辨率、色深和帧率。时间线编辑可使用代理画面;精确色彩、实时音频和逐帧判断应先进行兼容性测试。

验收:连续操作无明显输入阻塞,关键音画同步点经过复核。
04

编码与回传

使用固定预设输出,保存编码日志。成片生成后先在节点内检查时长、帧率、音轨和文件大小,再回传团队存储并核对摘要。

验收:接收端文件摘要一致,工程归档包含预设和版本说明。

Terminal mock

一次自动化任务应留下哪些可核对记录

下面是示例执行记录。它展示 runner 接单、依赖缓存命中、xcodebuild 测试和 fastlane 上传四个阶段,以及每一阶段需要保留的标识与退出状态。

runner@m4-core · build-1842 ACTIVE
09:41:02 runner      accepted job build-1842
09:41:02 checkout    commit 8f31c2a · branch release
09:41:03 workspace   /Users/runner/work/build-1842

09:41:04 cache       key xcode-m4-lock-77d1
09:41:04 cache       HIT · restored dependencies
09:41:07 toolchain   Xcode selected · configuration Release

09:41:08 test        xcodebuild test -scheme App -destination platform=macOS
09:42:46 test        executed 128 tests · 0 failures
09:42:46 test        result bundle saved

09:42:48 archive     xcodebuild archive -scheme App
09:44:19 archive     SUCCEEDED · App.xcarchive
09:44:20 deliver     fastlane upload_artifact
09:44:37 deliver     artifact uploaded · checksum verified

09:44:38 runner      job completed · exit 0
09:44:38 cleanup     workspace removed · cache retained
输入标识任务号、提交、分支 环境标识缓存键、工具链、配置 执行结果测试数、退出码、耗时 产物校验路径、大小、摘要状态

Migration path

从本地 Mac 迁到云端 Mac 的三步路径

迁移不是复制整个用户目录。先分离项目数据与可再生数据,再复刻工具链,最后接入 CI。每一步通过验收后再进入下一步,可以缩小故障范围。

STEP 01

数据迁移

按代码、项目资源、签名材料、缓存与输出文件分类。代码优先通过版本库同步;大文件采用支持增量续传的方式;缓存和可重新生成的产物不作为首批输入。

执行清单

  • 记录待迁移目录、容量和负责人
  • 排除构建缓存与临时输出
  • 对关键文件生成摘要
  • 迁移后限制敏感目录权限
验收条件

代码提交一致;关键文件摘要一致;工程引用路径没有指向本地旧目录;敏感材料仅对指定账户可读。

STEP 02

工具链复刻

从版本清单重建 Xcode、命令行工具、包管理器和项目依赖。将环境变量、脚本入口和构建参数纳入项目文档,避免只存在于个人终端配置中。

执行清单

  • 固定 Xcode 与 SDK 版本
  • 保存依赖锁定文件
  • 检查脚本中的绝对路径
  • 从干净终端执行完整构建
验收条件

空缓存构建成功;测试数量与本地基线一致;归档结果可生成;所有必要环境参数都有来源记录。

STEP 03

CI 接入

将节点注册为 self-hosted runner,限制可执行项目和工作目录。先接入非发布任务,再逐步加入归档、签名与产物回传,避免一次迁移整条链路。

执行清单

  • 设置 runner 标签与并发上限
  • 隔离项目工作目录和缓存
  • 配置失败日志与产物留存
  • 验证取消任务后的清理行为
验收条件

连续三次任务结果一致;失败任务可定位;取消后能继续接单;产物上传完成后通过大小与摘要检查。

MIGRATION RULE 任何一步未通过验收,都先停在当前层处理。

数据错误、工具链漂移和 CI 配置问题具有不同修复路径。分阶段迁移可以避免把三类问题混成一次难以复现的失败。

Fit boundaries

这些任务应先验证网络、外设与数据规模

云端 Mac 提供完整物理节点资源,但远程连接无法改变客户端到节点的网络路径,也不能替代必须接在使用者身边的实时设备。以下需求应先做小范围验证,再决定是否迁移完整流程。

实时外设依赖

需要持续连接本地采集卡、专业音频接口、摄像设备或其他低层硬件的流程,应先确认设备能否通过现有远程方案使用。

先测:设备识别、驱动兼容、断线恢复和数据回传路径。

超低延迟预览

逐帧色彩判断、实时音频处理和对输入延迟高度敏感的操作,不应只根据普通桌面可用性判断。客户端网络抖动会直接影响体验。

先测:往返延迟、抖动、丢包、目标分辨率和连续操作时长。

大规模素材上传

数百 GB 以上素材的首次同步时间主要取决于上传带宽和源数据位置。先测一组代表性文件,不能用短时峰值速度估算全部迁移。

先测:持续上传速度、续传能力、摘要耗时和团队存储位置。

未梳理的敏感数据

如果项目尚未区分代码、密钥、签名材料、客户数据和可再生缓存,应先完成分类、最小权限和备份设计,再进行迁移。

先测:权限边界、密钥轮换、日志脱敏和租期结束前的迁出流程。
节点选择建议:交互式远程桌面优先测试客户端到新加坡、日本东京、韩国首尔、香港或美国西部节点的实际延迟;CI/CD 任务还要同时考虑代码仓库、依赖源和制品存储的位置。节点库存会动态变化,下单前应再次核对。

Start with one workflow

先迁移一条可验收的任务链路

选择一个固定提交、一个明确命令和一个可校验产物。确认数据同步、远程连接、执行日志与输出回传都符合要求后,再扩展到完整团队流程。