
Firefox Application Services 发布流程全解从版本号、tag-release 到 Maven 与 SwiftPM【免费下载链接】application-servicesFirefox Application Services项目地址: https://gitcode.com/gh_mirrors/ap/application-servicesFirefox Application ServicesFirefox 应用服务是 Mozilla 为 Firefox 全家桶打造的 Rust 核心组件集合为 Android 与 iOS 上的 Firefox、Focus、Fenix 等应用提供账号同步、密码管理、地址建议、Nimbus 实验等底层能力。它的发布流程是一条从「版本号」出发经过发布分支、tag-release 打标签、CI 构建最终分两条路交付的流水线Android 组件走Maven 仓库iOS 组件走SwiftPM XCFramework。本文面向新手带你一次看懂这套发布流程的完整细节。一、Firefox Application Services 组件发布全景Firefox Application Services 的核心理念是把浏览器底层能力拆解为一个个独立的 Rust 组件。每个组件都有统一的工程结构Cargo.toml、uniffi.toml、metrics.yaml再通过 Megazord巨兽包把多个组件合并成 Android 的 AAR 或 iOS 的 XCFramework统一分发给消费应用。上图直观展示了从 Rust 源码到最终分发目标的完整构建与发布流水线组件编译后产出 Android 的 Kotlin 绑定与 iOS 的 Swift 绑定再分发到 Firefox-iOS、mozilla-central 等消费方。二、版本号从哪来version.txt 与语义化版本版本号是整个发布流程的起点仓库根目录的version.txt是唯一的事实来源当前版本为156.0a1。156.0a1中a1表示 alpha 预发布版本用于 Nightly 构建正式版本形如156.0遵循语义化版本规范MAJOR.MINOR.PATCH版本读取逻辑在 settings.gradle 的calcVersion()中正常构建直接读取version.txtNightly 构建使用nightlyVersion并追加.nightly分组本地调试则生成0.0.1-SNAPSHOT避免误依赖正式版本。三、发布分支prepare-release.py 三步创建 release-vXXX发布不是直接改main而是通过automation/prepare-release.py拉起一条专用发布分支。分支命名规则定义在 automation/shared.py 的RefNames类中分支名用途main日常开发主线release-vXXX某个主版本对应的发布分支如release-v156cut-vX.0针对发布分支的「切版本」PRstart-release-vX1针对 main 的「开启下一版本」PR脚本流程非常清晰先校验工作区干净然后从main创建并推送release-vXXX分支接着把version.txt写入正式版本号、把 CHANGELOG.md 的首行从(In progress)更新为发布日期最后为main开启下一轮a1预发布版本。四、tag-release.py一键为发布打上 v 版本标签打标签是发布流程的「临门一脚」由automation/tag-release.py完成用法是传入主版本号./automation/tag-release.py 156脚本会依次执行git fetch拉取远程发布分支 → 从release-v156分支的version.txt读取版本号拼出v156.0标签 → 定位分支最新 commit 并打印分支、提交与标签信息 → 交互确认默认 Y后执行git tag与git push。整个打标签过程高度自动化且强依赖「版本号只在 version.txt 中维护」这一约定保证标签与版本永远一致。五、Nightly 与 Release 双轨构建机制Firefox Application Services 的构建分为两条轨道具体规则记录在 docs/howtos/releases.mdNightly 构建由 taskcluster 的 cron 定时任务每天自动触发产物直接供消费应用使用用于提前发现破坏性变更Release 构建从release-vXXX发布分支触发走 Ship-it 发布管理release-promotion 两阶段push阶段把候选产物复制到 staging 暂存区供消费应用联调测试ship阶段才把产物复制到 archive.mozilla.org 永久存储正式对外发布。六、Maven 发布Android 组件如何进入仓库Android 侧的交付核心是 Gradle 的 maven-publish 插件配置集中在 publish.gradle每个组件生成一个aar类型的 MavenPublication附带-sources.jar与.pom文件.pom中写入 license、开发者、SCM 等完整元数据发布前会通过automation/check_artifact_size.sh校验产物大小防止异常膨胀的包流入仓库。发布目标分为四个 Maven 渠道maven-production正式、maven-nightly-production夜版正式、maven-staging与maven-nightly-staging联调暂存。所有组件统一使用org.mozilla.appservices作为 groupId版本号由 settings.gradle 动态计算。对本地开发者而言automation/publish_to_maven_local_if_modified.py提供了「有改动才发布」的智能流程先对仓库内容做 SHA-256 哈希无变化直接跳过有变化则清理 megazord 的intermediates缓存后执行./gradlew publishToMavenLocal -Plocal时间戳保证本地消费方拿到最新产物。七、SwiftPM 发布iOS 消费侧的分发方式iOS 侧的交付不经过 Maven而是通过Swift Package Manager XCFramework。核心配置在 megazords/ios-rust/Package.swift包名MozillaRustComponents以binaryTarget方式内嵌 XCFramework包含 Rust 二进制与头文件外层再包一层MozillaRustComponentsWrapper作为 Swift 源码封装构建时由 megazords/ios-rust/generate-files.sh 调用uniffi-bindgen-library-mode生成 Swift 绑定代码。每次发布还会生成*RustComponentsSwift.xcframework.zip与swift-components.tar.xz后者被解压进 rust-components-swift 仓库供 Firefox-iOS、Focus 等应用在 Xcode 的 Package Dependencies 面板中直接引用实现「加一个包依赖就能用上整个组件生态」的体验。八、发布全流程速查清单阶段关键动作涉及文件版本号更新 version.txtversion.txt创建发布分支运行 prepare-release.pyautomation/prepare-release.py触发构建推送 release-vXXX 分支docs/howtos/releases.md打标签运行 tag-release.pyautomation/tag-release.pyAndroid 交付Maven 多渠道发布publish.gradleiOS 交付SwiftPM XCFrameworkmegazords/ios-rust/Package.swift掌握了版本号、发布分支、tag-release 打标签、双轨构建以及 Maven 与 SwiftPM 两条交付链路你就能完整看懂 Firefox Application Services 从代码到消费应用的每一次发布旅程。无论是想在本地调试组件还是参与贡献这套流程都是你入门的必修课。【免费下载链接】application-servicesFirefox Application Services项目地址: https://gitcode.com/gh_mirrors/ap/application-services创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考