Hi everyone,
For a few years now we have pondered whether git would be the right VCS for the development of 0 A.D. One of the main selling points of git is the ability to create numerous branches for parallel development of features and bugfixes. Several popular platforms (Github, Gitlab.com, ...) leverage this to provide a feature-packed development environment, where people can contribute, discuss, review, and test patches.
Historically, the development of 0 A.D. has been performed using SVN, which is a bit old... but suits our needs in a number of ways, already discussed elsewhere. We are using Phabricator to supercharge SVN with a review and CI/CD platform, but alas, Phabricator has been abandoned by its developers. In any case, a lot of contributors in the past couple of years have expressed disappointment with the peculiarities of Phabricator.
Thus, we have discussed finally moving to git, without any strong urgency or hard opinions on the matter. I have proposed myself to set up a migration path and a new development environment for 0 A.D., and I am proud to present it to you folks today.
I have started working on this "for real" more than a year ago, and started dedicating all my "0 A.D. time" (which has been very scarce) on this project at the end of Spring 2023. It is still, unfortunately, very much a work-in-progress, but now is the time to reveal it and receive feedback.
Ideally, I would like to collect feedback from the community, finish the CI/CD system, and fix bugs, over the course of the spring, with the aim of performing the actual migration, if the community wishes to perform it, during the summer. As always, delays should be expected. It is worth noting that personal changes in my life/work balance will give me more free time after the summer.
Thanks in advance for the feedback you will provide
Presentation of the Proof of Concept
I am self-hosting the services for the duration of the tests, so that I have full control and do not divert resources from WFG. All URLs are under itms.ovh, which should eventually become wildfiregames.com
Email does not work on this Proof of Concept! I have no will to setup email and I certainly don't want to spam anyone with tests.
The services are not updated automatically: the full migration takes around 48h and necessitates some human input. The PoC I am presenting was generated from scratch the past two days. I will update stuff from time to time, when I fix bugs or when I'm bored, but don't expect the PoC to follow the actual development of the WFG services.
Please test as many things as you want and don't hesitate to try to break things! Now is the time to make sure I didn't forget anything. All the data sent to the PoC will be wiped out whenever I re-migrate the services, and of course whenever the actual migration happens. Please feel free to play around all this.
The services (this will be regularly updated)
- gitea.itms.ovh The development platform.
This is an instance of Gitea, a self-hosted lightweight alternative to Gitlab/Github. If, in the far future, we want to stop self-hosting stuff, Gitea is compatible with Github features to allow for easy migration.
The git repository is at wfg/0ad. Commit messages were reformatted, contain the original SVN revision, links to other commits are preserved as much as possible. The HEAD revision of the main "trunk" branch is the HEAD of the SVN repo.
If you wish to use the git repository for development, you must, for now, use the "future" branch, which will be merged to trunk upon the migration.
All Gitea users were imported from Trac. Since email does not work, if you want to login, shoot me a DM and I'll send you a password.
All Trac tickets are imported at wfg/0ad/issues.
The Trac wiki is imported at wfg/0ad/wiki. I tried to self-document the PoC as much as possible, so please read the updated pages, especially BuildInstructionsGettingTheCode and BuildAndDeploymentEnvironment. The FAQ is defaced beyond readability because of its formatting peculiarities, work is needed, my apologies to everyone who worked hard on the visuals of the Trac page...
- trac.itms.ovh A read-only copy of Trac, upgraded to the latest release.
This serves as a reference, and can stay online as long as needed. See below for the redirect tool.
- code.itms.ovh A registration-disabled copy of Phabricator, upgraded to the latest version (RIP).
All the inactive accounts were deleted, especially the dormant spam accounts.
We need to keep all the discussions on patches and commits online, however, Phabricator is now a security liability. I disabled the API access as well as the possibility to upload new diffs or files, and, in the future, I might make it read-only. I will consider migrating to Phorge (the community-maintained fork of Phabricator) when they officially support PHP8, which will allow us to stop using a deprecated version of PHP. However, migrating to Phorge does not mean we will start using Phabricator again.
- svn.itms.ovh The old and new SVN repositories.
This holds the current ps repo (which will stop receiving commits after the migration), the audio and art sources (which will keep working as-is), the new libraries repos for precompiled Windows and for bundled libs, and most importantly the new nightly-build repo.
The nightly build can be used by anyone to test the latest development version. Please read NightlyBuild if you want to know more.
- ariadne.itms.ovh Ariadne is a small redirect tool I wrote as a drop-in replacement for Trac or Phabricator when/if we decide to drop them. A lot of links to Trac exist on the Internet. You can follow Trac-like paths on Ariadne to find the relevant content. Each Trac page displays a link to the associated Ariadne path.
For instance :
A ticket https://ariadne.itms.ovh/ticket/666
A wiki page https://ariadne.itms.ovh/wiki/Manual_Settings
A SVN changeset https://ariadne.itms.ovh/changeset/28056
A Phabricator commit page https://ariadne.itms.ovh/rP28056
A file in the Trac browser https://ariadne.itms.ovh/browser/ps/trunk/source/test_setup.cpp
Ariadne also provides a nice page for knowing commit correspondence, just use `rXXXX` as path:
https://ariadne.itms.ovh/r28056
https://ariadne.itms.ovh/r28000
Enjoy! And see you soon for regular updates