[Zope-CMF] A Tale of Two Repositories
Tres Seaver
tseaver at palladion.com
Thu May 14 21:14:40 CEST 2015
Proposed Github-Launchpad Workflow for CMF
==========================================
A Tale of Two Repositories
--------------------------
.. blockquote::
It was the best of times, it was the worst of times, it was the age
of wisdom, it was the age of foolishness, it was the epoch of belief,
it was the epoch of incredulity, it was the season of Light, it was
the season of Darkness, it was the spring of hope, it was the winter
of despair, we had everything before us, we had nothing before us, we
were all going direct to Heaven, we were all going direct the other
way – in short, the period was so far like the present period, that
some of its noisiest authorities insisted on its being received, for
good or for evil, in the superlative degree of comparison only.
At present, the various CMF projects (``Products.CMFCore``,
``Products.CMFDefault``, ``Products.CMFCalendar``,
``Products.CMFTopic``, ``Products.CMFUID``, ``Products.GenericSetup``)
are the only Zope Foundation projects actively maintained on
``svn.zope.org``: all others have migrated to Github. In the case that
any other previously-languishing project becomes active, it is first
moved to Github (e.g., [1]).
The CMF projects are in this state because one of the main developers is
unwilling to participate in the project if it moves entirely to
Github[2], but is willing to continue if a proposal is in place to
maintain a second public repository, against which his contributions
would be made[3]. This proposal aims to satisfy that request by hosting
the second, synchronized repository for each project using the new
Launchpad Git hosting option[4].
Repository Details
------------------
For each of the projects listed above:
1) Create a Git repository from its Subversion history, and push that
repository to Github; this step will use the same scripts used for
other ZF repositories. E.g., the branches, tags, and trunk for
``Products.CMFCore`` will be hosted on Github at
https://github.com/zopefoundation/Products.CMFCore
2) Push the new Git repository also to Launchpad. E.g., the same
repository will be pushed to
https://code.launchpad.net/~zope-cmf/Products.CMFCore
3) Remove all entries from the project's trunk and active release
branches on ``svn.zope.org``, leaving behind only a
4) Add one-way synchronization ("mirroring") from the Github repository
to the Launchpad repository, with the synch happening on a
ZF-maintained host. This explicit syncronization can be retired once
the Launchpad Git integration has added its own mirroring (already
announced as underway on [4]).
Contributor Workflow: Github
-----------------------------
Github-based contributors will follow normal Github workflow patterns:
- Fork the repository of interest via the Github UI.
- Check out the fork, e.g.:
.. code-block:: bash
$ git clone git at github.com:username/Products.CMFCore
$ cd Products.CMFCore
- Make their changes on a branch, test them, and commit.
.. code-block:: bash
$ git checkout -b bug-12345 master
$ vim Products/CMFCore/DynamicType.py
...
$ tox
...
$ git commit -am "Clean up dyanmic types.
Fixes #12345"
- Push the changed branch back to their fork on Github:
.. code-block:: bash
$ git push origin bug-12345
- Create a pull request from the branch of their fork to the appropriate
master / release branch of ZF's repository via the Github UI.
Contributor Workflow: Launchpad
--------------------------------
Launchpad-based contributors will follow normal Launchpad workflow
patterns. (URLs below assume the contributor has applied the Git
configuration described in the "Configuring Git" section of [4]).
- Clone the repository, e.g.:
.. code-block:: bash
$ git clone lp:Products.CMFCore
$ cd Products.CMFCore
- Make their changes on a branch, test them, and commit.
.. code-block:: bash
$ git checkout -b bug-12345 master
$ vim Products/CMFCore/DynamicType.py
...
$ tox
...
$ git commit -am "Clean up dyanmic types.
Fixes #12345"
- Push the changed branch back to their fork on Launchad:
.. code-block:: bash
$ git push lpme:Products.CMFCore
- Create a merge proposal from the branch of their fork to the
appropriate master / release branch of ZF's repository via the LP UI.
Maintainer Workflow: Github
-----------------------------
Maintainers will work with the Github repository as the "primary"
repository for a CMF project, using the normal patterns for other ZF
repositories hosted at Github (checking for contributor status, etc.)
- The canonical location for bug reports will be on Github.
- We will enable continuous integration for pull requests and merges via
Travis-CI.
- After review by a maintainer, and assuming the CI passes, the
maintainer may merge pull requests via the Github UI of via the
command line.
- Releases will be made from the maintainer's clone of the Github
repository, after creating and pushing the appropriate tag for the
release.
Maintainer Workflow: Launchpad
-------------------------------
When reviewing a Launchpad merge proposal, the maintainers fetches the
proposed branch, e.g.:
.. code-block:: bash
$ cd ~/projects/CMF/Products.CMFCore
$ git checkout -b contributor-bug-12345 master
$ git pull lp:~contributor/+git/Products.CMFCore bug-12345
and reviews / tests it locally, e.g.:
.. code-block:: bash
$ git log -p
$ tox
Once review and testing are complete, the maintainer merges the
branch via the command line, e.g.:
.. code-block:: bash
$ git checkout master
$ git merge --no-ff contributor-bug-12345
The maintainer pushes the target branch *to Github only*, e.g.:
.. code-block:: bash
$ git remote -v | grep origin
origin git at github.com:zopefoundation/gcloud-python.git (fetch)
origin git at github.com:zopefoundation/gcloud-python.git (push)
$ git push origin master
The Launchpad repository will be synched automatically, whether by the
cron job or by the built-in Launchpad mirroring.
References
----------
[1] http://comments.gmane.org/gmane.comp.web.zope.devel/30569
[2] http://permalink.gmane.org/gmane.comp.web.zope.cmf/18242
[3] http://permalink.gmane.org/gmane.comp.web.zope.cmf/19025
[4] https://help.launchpad.net/Code/Git
--
===================================================================
Tres Seaver +1 540-429-0999 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
More information about the Zope-CMF
mailing list