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”.

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.