Swift 3.1 发布流程
这篇文章描述了 Swift 3.1 的目标、发布流程和预计时间表。
Swift 3.1 旨在与 Swift 3.0 源码兼容。它将包含对核心语言的一些附加增强功能,以及对 Swift Package Manager、Linux 上的 Swift 的改进,以及编译器和标准库的总体质量改进。
Swift 3.1 计划于 2017 年春季发布。
源码兼容性
一个重要的目标是,绝大多数使用 Swift 3.0 编译器构建的源代码可以继续使用 Swift 3.1 编译器构建。例外情况是编译器中的错误修复,这些修复会导致编译器拒绝原本就不应该接受的代码。但在实践中,这些情况应该相对罕见。
关于 Swift 版本发布的源码兼容性意图的描述,可以在 thread 的 swift-evolution 邮件列表中找到。
如果您遇到 Swift 3.1 编译器意外拒绝了之前使用 Swift 3.0 编译器编译的代码的情况,请提交 错误报告。
Swift 3.1 的快照
之前的 Swift 版本有“开发者预览版”,例如“Preview 1”、“Preview 2”等,代表 Swift 版本在收敛时的稳定快照。开发者预览版之间的间隔通常不规律,有时没有为 Swift 社区提供足够的粒度来尝试新功能或验证版本收敛过程中的错误修复。
对于 Swift 3.1,将改为每日提供可下载的发布分支快照。快照将作为 持续集成 测试的一部分生成。因此,可下载快照的频率和粒度将更高。如果测试通过,快照将每天发布。
一旦 Swift 3.1 发布,除了快照之外,还将发布官方最终版本构建。
将更改纳入 Swift 3.1
Swift 3.1 的范围预计是有限的,希望在 2017 年初将重点转移到 Swift 4 的开发上。为了实现此目标,Swift 3.1 将仅包含 1 月 16 日之前在主线开发(即 master 分支)中的更改。在此日期之后,将有一个“bake”期,在此期间,只有经过挑选的关键修复程序才会进入 swift-3.1-branch,并且 master 将转移到 Swift 4 的开发。
分支
-
master:除了 swift-llvm 和 swift-clang 存储库(请参阅 受影响的存储库)之外,Swift 3.1 的开发在
master中进行。所有进入master的更改都将成为最终 Swift 3.1 版本的一部分,直到 1 月 16 日。届时,master将跟踪 Swift 4 的开发。 -
swift-3.1-branch:Swift 3.1 的发布管理在
swift-3.1-branch上进行。所有 Swift 3.1 快照都从此分支构建,Swift 3.1 GM 也将从此分支发布。
在操作上,master 将定期合并到 swift-3.1-branch 中,大约每两周一次,直到 1 月 16 日。两周的窗口在 master 上的热门开发和精心策划的发布分支之间提供了一个缓冲。在合并 master 之间,更改可以通过 cherry-pick(通过拉取请求)到 swift-3.1-branch 中。
此计划的一个显著例外是 swift-package-manager,它将每天从 master 合并到 swift-3.1-branch 中。
将更改纳入 Swift 3.1 的理念
-
与 Swift 3.0 的源码兼容性是首要任务。
-
随着 Swift 3.1 的收敛,只会考虑与该版本核心目标相符的更改。
-
Swift 3.1 的所有语言和 API 更改都将通过 Swift Evolution 流程。
-
Swift 3.1 的主要工作应该围绕 1 月 16 日的日期进行,但根据发布经理的判断,更改仍然可以在此之后纳入 3.1 版本。随着版本的收敛,将更改拉入 3.1 的标准将变得越来越严格。
受影响的存储库
以下存储库将有一个 swift-3.1-branch 分支来跟踪作为 Swift 3.1 版本一部分的源代码
- swift
- swift-lldb
- swift-cmark
- swift-llbuild
- swift-package-manager
- swift-corelibs-libdispatch
- swift-corelibs-foundation
- swift-corelibs-xctest
- swift-llvm
- swift-clang
请注意,swift-llvm 和 swift-clang 存储库已经从 master 分支创建了 swift-3.1-branch,并且不会再次重新分支。
发布经理
发布的总体管理将由以下人员监督,他们将在 Swift 3.1 版本收敛时宣布何时对更改实施更严格的控制
-
Ted Kremenek 是 Swift 3.1 的总体发布经理。
-
Frédéric Riss 是 swift-llvm 和 swift-clang 的发布经理。
-
Jason Gosnell 是 swift-lldb 的发布经理。
-
Tony Parker 是 swift-corelibs-foundation 的发布经理。
-
Daniel Steffen 是 swift-corelibs-libdispatch 的发布经理。
-
Brian Croom 是 swift-corelibs-xctest 的发布经理。
-
Rick Ballard 是 swift-package-manager 的发布经理。
如有关于发布管理流程的任何问题,请随时发送电子邮件至 swift-dev 或直接联系 Ted Kremenek。
发布分支的拉取请求
所有提名更改以包含在发布分支中的拉取请求都应包含以下信息
-
解释:对正在修复的问题或正在进行的增强的描述。这可以简短,但应该清楚。
-
范围:对更改的影响/重要性的评估。例如,更改是否是破坏源码的语言更改等。
-
SR 问题:SR(如果更改修复/实现 bugs.swift.org 上的问题/增强功能)。
-
风险:进行此更改对发布有哪些(具体)风险?
-
测试:已完成或需要完成哪些具体测试,以进一步验证此更改的任何影响?
受影响组件的一个或多个代码所有者应审查更改。技术审查可以由代码所有者委派,或根据需要或有用的方式请求。
所有进入 swift-3.1-branch 的更改(自动从 master 合并的更改除外)必须通过拉取请求,且拉取请求必须由相应的发布经理接受。