The Parrot project is now using GitHub's issue tracking system. Parrot has used GitHub's source code control for months now, but we had hundreds of tickets in the Trac system. Now, over the past few weeks, I've been working with Rick from GitHub to migrate the tickets out of Trac into GitHub's issue system.
Like most data conversion projects, the challenges were less about the coding and more about making the decisions about how to massage the data between two similar systems. For example, Trac has fields for Severity and Priority of tickets, but GitHub only has free-form tagging, so I had to create GitHub tags that correspond to Severity and Priority in Trac. GitHub's tracking system doesn't handle file attachments, so my conversion code had to make inline comments of the file attachments.
Most time-consuming of all was the conversion of users from Trac to GitHub. We needed the issue history to have accurate user IDs on them, so I needed a big lookup table to do the job. While users like "coke" and "chromatic" have the same user IDs on both the Trac instance and GitHub, Trac user "jonathan" is "jnthn" on GitHub, and so on. Anyone I couldn't find a match for became generic user "Parrot".
The actual code to do all this is only about 200 lines of Perl code, which should be no surprise for someone who has the CPAN at his disposal. I used Net::Trac to read from the Trac instance, and the JSON module to write out JSON files in the GitHub API format. The bulk of the code is project-specific conversions to make little data tweaks like change severity to tags, and to make the output code a little more friendly in Markdown.
I have to specifically thank Rick at GitHub for helping us through this project. I used a lot of his time with questions about how GitHub would handle my import format, and we had two test imports for us to see real results, so that I could adjust my conversion process. The final results are beautiful, and the Parrot team is excited to see this move made.
I've long been a fan of GitHub and how they help out the community, and this just adds to it. This sort of aid to open source projects should stand as an example to other companies that work with open source. Many companies give back to the communities of the projects on which their businesses are based. It's fantastic to have a company willing to use human capital actually working with a project in which they have no direct involvement. In helping us, GitHub gains nothing but the grateful thanks of the Parrot project.