> On Feb 9, 2017, at 5:49 PM, Bob Wilson via swift-dev <swift-dev@swift.org> 
> wrote:
> 
> Since the feedback on this was all positive, we’re moving ahead with this 
> change. It seems like a good time for a status update.
> 
> Some changes are already done:
> 
> * We test up a test bot to build against the upstream-with-swift branches of 
> LLVM/Clang 
> (https://ci.swift.org/view/swift-master-next/job/oss-swift-incremental-RA-osx-master-next-upstream-with-swift/
>  
> <https://ci.swift.org/view/swift-master-next/job/oss-swift-incremental-RA-osx-master-next-upstream-with-swift/>).
>  This has been working well.

I think we can remove this test bot now, so don’t be surprised if it goes away 
soon.

> 
> * Mishal set up an automerger to continuously update the Swift master-next 
> branch with changes from master.
> 
> * I audited the master-next branches in the other repos (e.g., swiftpm, etc.) 
> and found that none of them have any changes from master. For now, we will 
> simply stop using those branches, and once we’re done with this transition 
> and things are settled, we can remove them.
> 
> * We’ve had some discussions about how LLDB will fit into this plan. See the 
> recent thread on “Changes to LLDB Branch Management” for details on that.
> 
> Here is what is left to do:
> 
> * Update all of our master-next bots to build against the “new” branches 
> (e.g., upstream-with-swift instead of stable-next).

New update: Mishal switched all the master-next bots to build against 
Clang/LLVM upstream-with-swift, so this step is done now.

The bad news is that things are in kind of bad shape. Beginning on Wednesday, 
the build stopped working — it is getting killed by timeouts, so maybe 
something is hanging.

> 
> * Update documentation.
> 
> * Remove unused branches.
> 
>> On Dec 8, 2016, at 10:54 AM, Michael Gottesman <mgottes...@apple.com 
>> <mailto:mgottes...@apple.com>> wrote:
>> 
>>> 
>>> On Dec 8, 2016, at 7:43 AM, Saleem Abdulrasool via swift-dev 
>>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
>>> 
>>> Having been involved in the update process for the next branches, I'm 
>>> really excited to see this type of change.
>>> 
>>> I think that the "simple" approach is both better to work and collaborate 
>>> in as well as closer to the llvm development model which makes it easier to 
>>> cross pollinate.
>>> 
>>> The one thing that I think could be more strongly called out is that normal 
>>> PR CI shouldn't be gated on master next passing.
>>> 
>>> Beyond that, I think that this proposal should ease collaboration and 
>>> maintenance pains in the current process.
>> 
>> I agree with everything said here. The collaboration issue is the high order 
>> bit that needs to be fixed. Any other issues that come up can be fixed 
>> incrementally if necessary based on experience (for instance using the "back 
>> up" alternative). This is even more true since it is clear that that 
>> infrastructure would take time to develop and an incremental solution now 
>> that improves the collaboration will not make it more difficult to develop 
>> such a solution.
>> 
>> My only strong feeling here is that I think we need documentation of this 
>> process in ./docs in addition to this proposal.
>> 
>> Michael
>> 
>>> 
>>> On Wed, Dec 7, 2016 at 7:30 PM Bob Wilson via swift-dev 
>>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
>>> I would like to make a change in the way we handle the master-next branch.
>>> 
>>> Summary: I’d like to switch to a model where we continuously test against 
>>> the latest upstream LLVM changes. The goal is to simplify the process and 
>>> make it easier to collaborate on maintaining master-next.
>>> 
>>> Background: We develop Swift against “stable” branches of LLVM (which I am 
>>> using here to refer to the llvm, clang, and compiler-rt repositories) that 
>>> are typically rebranched from trunk once for each release, with other 
>>> commits individually cherry-picked for specific bug fixes and other 
>>> changes. This insulates Swift development from the churn of changes in 
>>> LLVM. At the same time, we maintain the “master-next” branches of Swift 
>>> repos to keep up to date with trunk LLVM. For Swift, our “trunk” comes from 
>>> the “upstream-with-swift” branches in our GitHub LLVM repos. We have 
>>> existing automation to continuously merge changes from llvm.org 
>>> <http://llvm.org/> into those upstream-with-swift branches.
>>> 
>>> We currently use a manual process to update master-next. Someone on the 
>>> Swift team is designated as the "merge czar" and is responsible for this. 
>>> This merge typically happens once every few weeks. Michael Gottesman 
>>> developed some internal tools to help automate the process, but someone 
>>> still needs to drive those tools manually. The process involves merging 
>>> “master” to “master-next” for all the Swift repos and updating the 
>>> “stable-next” branches of the GitHub LLVM repos for Swift. The 
>>> “stable-next” branches are basically snapshots of the LLVM 
>>> upstream-with-swift branches at the point where master-next was most 
>>> recently merged.
>>> 
>>> Swift CI includes a set of Jenkins bots to test master-next building with 
>>> the stable-next branches of LLVM 
>>> (https://ci.swift.org/view/swift-master-next 
>>> <https://ci.swift.org/view/swift-master-next>). The merge czar can use 
>>> these bots to confirm that everything is working after a merge.
>>> 
>>> Reasons to change: The current process has the advantage that the merge 
>>> czar can choose when to do a merge and can schedule that around other work, 
>>> but it has some significant problems.
>>> 
>>> - It is difficult for multiple people to collaborate on updating 
>>> master-next. The changes involved are often rev-locked between Swift and 
>>> the LLVM repos, so there is no good way for someone to fix a problem 
>>> without doing the whole merge process.
>>> 
>>> - The current system is hard to understand. I’ve been serving as the merge 
>>> czar for the last few months, and it took me a while to figure out how to 
>>> do it well.
>>> 
>>> - It requires extra “stable-next” branches in our GitHub LLVM repos, 
>>> further adding to the complexity.
>>> 
>>> - The tools we have to help automate the process are currently internal to 
>>> Apple and require ongoing maintenance. They could be cleaned up to release 
>>> publicly but that would take more work.
>>> 
>>> Proposal: We already have Jenkins bots testing master-next. I would like to 
>>> add a job to continuously merge master to master-next and change the 
>>> existing bots to build against the “upstream-with-swift” branches in our 
>>> GitHub LLVM repos. The bots would then detect any new problems soon after 
>>> they are introduced. Anyone could fix those problems, whether they are 
>>> merge conflicts, build failures, or test issues. A partial fix could be 
>>> applied directly without needing to resolve all of the outstanding issues.
>>> 
>>> This would avoid the need for our current internal merging tools. We 
>>> already have automatic merging bots, so adding another one would not be 
>>> difficult.
>>> 
>>> The biggest advantage is that it provides a straightforward model that 
>>> anyone can understand: master-next becomes just another branch that anyone 
>>> can modify, build and test in the usual way. Collaboration is no more 
>>> difficult than for other branches.
>>> 
>>> The cost of this simpler approach is that we would need to be willing to 
>>> let the master-next branch break occasionally. An LLVM change might break 
>>> things in a way that takes some time to fix, and the master-next bots would 
>>> continue to fail during that time. Someone might want to apply a partial 
>>> fix that does not resolve all the issues, and we would want to allow that 
>>> even if the bots still fail. That would mean we would have to relax (or 
>>> override) the requirement for PR testing for commits in that kind of 
>>> situation. In the worst case, if new problems are introduced more quickly 
>>> than we can fix them, this approach could fall apart. My experience as 
>>> merge czar over the last few months suggests that is unlikely. Usually 
>>> there are no more than a few problems per week and most of them are easy to 
>>> fix.
>>> 
>>> I propose to roll this out in steps. First, we can add a new Jenkins bot 
>>> that tests master-next building against upstream-with-swift. If that goes 
>>> well, and if there are no objections to this proposal, we can add the 
>>> automerger to merge master into master-next. At the same time, we would 
>>> update the other master-next bots to use upstream-with-swift instead of 
>>> stable-next for the LLVM repos.
>>> 
>>> Alternative: We can achieve some of the same goals at a considerable 
>>> increase in complexity by introducing an automatic gated merge solution. We 
>>> would have automation perform the merge and commit it as long as everything 
>>> works. If there were any problems, the automation would create a pull 
>>> request that would need to be manually updated to resolve the problems. 
>>> People could still collaborate by working together on the pull request 
>>> branch. Until the problems were resolved, no further merging would take 
>>> place. I would like to try the simple approach before considering this more 
>>> complex solution, since I don’t think it will be necessary, at least in the 
>>> near future.
>>> 
>>> Any objections to this? Comments or suggestions?
>>> _______________________________________________
>>> 
>>> swift-dev mailing list
>>> 
>>> swift-dev@swift.org <mailto:swift-dev@swift.org>
>>> 
>>> https://lists.swift.org/mailman/listinfo/swift-dev 
>>> <https://lists.swift.org/mailman/listinfo/swift-dev>
>>> 
>>> _______________________________________________
>>> swift-dev mailing list
>>> swift-dev@swift.org <mailto:swift-dev@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-dev 
>>> <https://lists.swift.org/mailman/listinfo/swift-dev>
> _______________________________________________
> swift-dev mailing list
> swift-dev@swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to