Frequently Asked Questions¶
How is development different with OpenDev?¶
OpenDev doesn’t use a pull request (or merge request) workflow, like those implemented by GitHub or Gitlab. Instead it follows Gerrit’s iterative change proposal workflow, which results in a slightly different experience.
In GitHub or Gitlab, contribution typically starts by forking a personal copy of the original repository, cloning that locally, and pushing one or more commits to that personal fork. Once your code seems ready to merge, you ask the service to create a pull request for your branch into the original repository. The pull request is reviewed, and if accepted your changes get merged into the original repository. If not, you push more commits to your fork and update the request seeking more reviews.
By contrast, contribution with Gerrit starts by cloning the original repository locally. You iterate on development of one or more local commits, and then use git push (or the git-review tool) to propose your commits as a series of changes to the Gerrit code review service. Each change in the series is reviewed, and if it’s accepted (and passing tests) then it gets merged into the original repository. If more work is needed, you amend the same commits and push new versions of them for re-review.
The difference is subtle, but significant. In the pull request model, you create a fork of the original repository, push changes to it, and ultimately propose to merge changes back. In the change proposal model, you prepare a change, and propose it. You do not create a complete fork and everyone contributes into the same original repository with what are basically lightweight, ephemeral topic branches. It results in less fragmentation overall, and avoids confusion between the original repository and its numerous forks.
That high-level difference also affects lower-level details. A pull request may contain several commits, and if merged all those commits will appear in the original repository history. In Gerrit, every commit is a separate change (optionally depending on other related changes) for code reviewers to review, so developers squash or amend edits made while developing to represent the desired final state of that change. Each prior revision of a change is still retained by the service, as are all the review comments, so updates can be compared side-by-side for a clear picture of how the change evolved. It generally results in easier code review, but also a cleaner branch history with the commit messages reviewed as an integral part of each change.
In summary, the Gerrit workflow, its user experience and UI are different from the pull request workflow. While it may not be immediately familiar to developers used to pull request workflows, it’s worth learning. Long-term benefits outweigh the short-term cost of having to learn a new tool, especially for someone who is going to spend a lot of time developing for that project anyway.
What is the Integrated Continuous Integration?¶
One key benefit of OpenDev is that it integrates powerful continuous integration features, made possible by the donation of compute resources from our generous infrastructure partners. Test jobs are run when changes are proposed and provide code reviewers with valuable information. Test jobs also run again at merge time, in case recently approved changes introduce an incompatibility, preventing code which doesn’t pass tests from merging to the repository.
Advanced Zuul features like speculative execution of tests allow the testing of sequenced changes in parallel, so development velocity is rarely limited by how thorough you want your tests to be. Changes in one Git repository can depend on proposed changes in another repository, allowing integration testing of features actively developed across multiple projects, removing artificial barriers between development teams.
This advanced continuous integration system was developed to sustain the complexity and scale of OpenStack development, one of the three most actively developed open source projects in the world. OpenDev makes this system available to other projects, enabling open development at scale for everyone.
Isn’t this just OpenStack Infrastructure rebranded?¶
It is more than that. We want to make this toolset available to others that would find it helpful. OpenStack is one of the OpenDev tenants, but other tenants like Zuul or $gizmo would be just as important.
Can I host my project on OpenDev?¶
Yes! However, as noted above it is still early days yet and the early experience might be a bit bumpy. Certain things may still say “OpenStack” on them as we figure out the transition. And while any moves should come with appropriate redirects, we may have some inadvertent misses.
Can I run tests on Windows or OSX machines?¶
Currently all of our test resources are Linux based. Adding additional platforms would likely require someone to help us get that running, but Zuul will support systems with ansible connection plugins. Talk to us!
I am an existing OpenStack Infra user do I need to do anything?¶
No. We’ll continue to communicate changes as they happen. We’ll also do our best to make this as smooth a transition as possible. If we run into situations that force us to break something we’ll be sure to let you know at that point.
Is a CLA required for hosted repos?¶
No.
What if I don’t like Gerrit and would prefer (insert tool here)?¶
We’ve got a fair bit of experience with the existing toolset and adding new tools for which we’ve already got an answer is currently out of scope. We think the existing tools (like Gerrit) work well, and should only get better as we update them. The system is able to scale because we do not need multiple implementations of different software that solve similar problems.
Why can’t we use Gitea’s issue tracker and wiki?¶
For scaling and redundancy purposes we are actually running a number of independent Giteas behind a load balancer. We can keep Git repos in sync from Gerrit reasonably well, but the issue tracker and wiki functionality would need another level of state syncing. Once Gitea can be run as a proper cluster this may change, but until then the functionality is limited.