- 桌面应用
【免费下载链接】itch
🎮 The best way to play your itch.io games
本篇围绕 itch 仓库的 Flathub 发布文档 展开,说明 Linux 版 itch 桌面应用(Flatpak 包名io.itch.itch)如何从内部制品仓库(broth)自动同步到 Flathub、每次版本发布时需要人工完成的五步操作,以及当应用本身变更时哪些 manifest 文件需要手动改、如何用flatpak-builder在本地验证。读完本文,读者可以完整掌握 itch 应用在 Flathub 上的发布机制与日常维护操作。
包的基本形态:从 broth 下载 zip,用 zypak 包装
Flathub 上的包是io.itch.itch,由独立的 flathub 仓库(https://github.com/flathub/io.itch.itch)维护。它的构建方式可以概括为一句话:
从 broth 下载
linux-amd64的 zip 包,用 zypak 和 Wine base runtime 包装起来,应用运行在 flatpak 沙箱内;更新来自 Flathub,而不是应用自带的更新器。
这句话里涉及三个关键事实,都可以在本仓库中找到对应证据:
- linux-amd64 zip 从哪来:本仓库的 release/deploy.js 在 CI 中把各平台构建产物推送到 itch.io 的 butler 通道,其中 Linux 版就是
linux-amd64通道(./butler push ${artifactPath} itchio/itch:linux-amd64 --userversion=... --no-auto-wrap)。这些制品聚合在broth.itch.zone上——该地址同样出现在源码的 URL 常量定义(brothRepo: "https://broth.itch.zone")中,应用运行时也用它作为 broth 仓库基址。 - zip 是怎么打出来的:release/packaging/do-package.js 展示了 Linux 包的产出过程——用
@electron/packager把prefix/目录打成可移植 Electron 应用(asar: false、overwrite: true,输出到build/v<版本>/),再执行flipElectronFuses关掉RunAsNode、EnableNodeCliInspectArguments、EnableNodeOptionsEnvironmentVariable等“逃生门”,最后移入artifacts/linux-amd64目录。linux-amd64是 itch 在 Linux 上唯一的正式构建目标(getElectronOptions只处理os === "linux" && arch === "amd64"的组合)。 - 为什么 Flathub 版不走自带更新器:itch 的自带更新逻辑在 src/main/reactors/self-update.ts 中实现——通过
itch-setup组件约每 2 小时检查一次(UPDATE_INTERVAL = 2 * 60 * 60 * 1000),由itch-setup --relaunch完成下载与重启。但在 flatpak 沙箱里,应用安装目录不可写、也没有提权手段,因此 Flathub 版必须放弃这条路,改由 Flathub 自身分发新版本——这正是文档中“updates come from Flathub, not from our own updater”的由来。另外从 src/main/broth/manager.ts 可以看到,常规组件包是["butler", "itch-setup"],它们随包内运行,与 Flathub 层面的应用更新相互独立。
自动同步机制:Flathub 机器人监听 LATEST
itch 团队不向 Flathub 推送任何构建。同步完全由 Flathub 的 bot 完成:
- bot 监听
https://broth.itch.zone/itch/linux-amd64/LATEST这个“最新制品”指针; - 每当该地址对应的内容变化(即 itch 发布新版本、broth 通道更新后),bot 会在 flathub 仓库自动开一个 PR;
- 该 PR 的内容是:更新
io.itch.itch.yaml中的存档 URL 与 sha256,并在io.itch.itch.metainfo.xml里追加一条 release 记录。
换句话说,itch 侧唯一要做的“发布动作”就是先把新版本推到 itch.io 的 butler 通道(由release/deploy.js完成);剩下拉取、校验、打包、上架全部由 Flathub 基础设施接管。这也解释了为什么 release/push-tag.js 里严格校验版本号格式为vX.Y.Z(-canary)?——版本号会一路流传到 metainfo 的 release 记录里,格式必须规整(例如v9999.0.0-canary这类 canary 版本的版本号生成逻辑见 release/common.js 中的getBuildTag/getBuildVersion)。
每次应用发布的五步操作清单
文档给出了逐版发布时的标准操作流程,完整继承如下:
- 等 bot 的 PR 出现:broth 推送完成后,到
https://github.com/flathub/io.itch.itch/pulls查看 bot 自动开的 PR,通常一天内会出现。 - 等“Test build succeeded”评论:合并前可先用该评论中的测试仓库链接安装测试版尝鲜。
- 核对 bot 追加的 metainfo release 记录:版本号不能带
v前缀;如果缺少指向 GitHub release 的<url>,要手动补上。 - 合并 PR:Flathub 会自行构建并发布,通常数小时内完成。
- 关闭过期 PR:对于被跳过的版本(比如发版后又回滚、直接发新版覆盖了中间版本),把对应旧版本的 bot PR 关闭掉,避免它们被误合并。
第 3 步值得强调:metainfo 是 Flathub 展示给用户的元数据(描述、截图、release 历史),版本号带v前缀这类小问题不会导致构建失败,却会影响商店页展示,所以需要在合并前人工把关。
应用自身变更时:需要手动 PR 的内容
当 itch 应用本身的依赖或行为变化时,flathub 仓库中有三处需要人工提交 PR(bot 的自动 PR 只改版本号和 sha256,不会碰这些):
| 文件 / 配置 | 什么时候需要改 | 说明 |
|---|---|---|
io.itch.itch.yaml中的finish-args | 应用需要新的 D-Bus 名字、设备访问或环境变量时 | 特别地:以flatpak-spawn --sandbox方式启动的游戏,需要加--talk-name=org.freedesktop.Flatpak,否则沙箱内的游戏进程无法再通过 flatpak 接口做嵌套操作 |
itch-run | 启动器脚本内容变化时 | 该脚本持有 Electron/Ozone 相关的启动参数(如 Wayland 下的--ozone-platform等渲染后端选择) |
io.itch.itch.metainfo.xml | 商店页内容变化时 | 描述、截图、链接等 |
finish-args一项与 itch 的核心业务直接相关:itch 作为游戏启动器,其本职就是拉起游戏进程。在 flatpak 沙箱里,游戏要么继承沙箱权限运行,要么经flatpak-spawn --sandbox进一步隔离——后一种路径要求宿主 flatpak 进程持有与org.freedesktop.Flatpak服务对话的权限,这就是文档强调--talk-name=org.freedesktop.Flatpak的原因。
本地验证 manifest 修改
改了 flathub 仓库的 manifest 之后,不必等 CI,可以在本地直接构建并安装验证:
flatpak-builder build-dir io.itch.itch.yaml --install --user --force-clean flatpak run io.itch.itch参数含义:
build-dir:flatpak-builder 的中间工作目录,缓存各 runtime 依赖,重复构建时不必重新拉取;--install:构建完成后直接安装到当前用户(--user安装,不需要 root 权限);--user:装入用户级 flatpak 安装目录,便于随时flatpak uninstall清理;--force-clean:丢弃缓存的构建产物,确保从 manifest 干净地重新走一遍完整流程——验证finish-args或itch-run变更时尤其重要,避免上一次构建的残留干扰判断。
小结:一条“单向、低维护成本”的发布链
把上面的机制串起来,itch 在 Flathub 的发布链是单向的:git tag→ CI 打包(release/packaging/do-package.js)→ butler 推送到itchio/itch:linux-amd64(release/deploy.js)→ Flathub bot 发现LATEST变化 → 自动 PR(URL + sha256 + metainfo)→ 人工五步核对 → 合并 → Flathub 构建上架。itch 团队在这条链上只承担“推制品 + 合并前核对”两件事,版本分发、签名与上架全部交给 Flathub 基础设施;而当应用行为变化(权限、启动参数、商店页)时,则回到 flathub 仓库手动 PR 并可用flatpak-builder本地闭环验证。完整操作依据见 release/flathub.md。
- 桌面应用
【免费下载链接】itch
🎮 The best way to play your itch.io games
相关推荐
itch 桌面应用上架 Epic Games Store:用 BuildPatchTool 发布 itch-setup 引导器的完整流程
itch 桌面应用上架 Epic Games Store:用 BuildPatchTool 发布 itch setup 引导器的完整流程 本文基于 itch 桌
桌面应用ImageGlass Flatpak 打包指南:构建、分发与上架 Flathub 全流程
ImageGlass Flatpak 打包指南:构建、分发与上架 Flathub 全流程 ImageGlass 是一款开源、跨平台(Windows / macO
桌面应用图像处理如何3步实现实时AI换脸:Deep-Live-Cam终极入门指南
如何3步实现实时AI换脸:Deep Live Cam终极入门指南 你是否想过在视频通话中瞬间变成另一个人?Deep Live Cam正是这样一个神奇的AI实时换
人工智能AI 应用计算机视觉媒体生成
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考