A Study in IGitt

GSoC Coding Period Phase II

The Coding Period Phase II is coming to an end, and we’ve are almost close to getting the coafile Bot ready for use. Basically, the coafile bot will help you get a coafile for any repository an GitHub by just tagging @coafile in an GitHub Repository’s Issue, harnessing the potential of coala-quickstart. We decided to add this functionality in GitMate, because it just fits perfectly, as once users have a coafile for their repository, ultimately they’d love to have GitMate Integration in the repo.

coafile Bot

The bot has heavy dependency on GitHub API, that’s the backbone of its whole existence. So to interact with the API Lasse suggested that if we can get IGitt to help us out then it will be really awesome as IGitt has the potential to support like any Git Hosting service, example GitHub, GitLab, one library to work with any of the APIs. It is an open source library being developed in GitMate actively.

IGitt

So in this phase, I dived into the architecture of IGitt. In IGitt, everything from Notifications, Issues, Commits, Repository are dealt by implementing interfaces. So I created an interface for Contents API, then added APi support to create a repo’s fork, delete a repo, create a file on repo, create a merge request or a pull request. Then after doing this, I added support for Notifications API and Threads API so that we can use polling in the bot. When user tags the bot, then bot gets a Notification, it comments back on the issue thread and runs quickstart and then it’ll comment back its output coafile.

projects.coala.io

During this phase, we also made the project’s repository YAML configurable, and totally extensible with Jekyll support. A great thanks to Lasse and Fabian and special thanks to Arsfiqball who is taking part in Besut Kode and he helped me out with a lot of stuff in that otherwise tricky PR which dealt with making projects modular, extensible. Now the process of addition of projects as conflict free as it can be. The data was stored in a single projects.js file, and it is linked to markdown files. Now we have a single file per project, and no interlinking to a separate file whatsoever, and that single file is autogenerated with Jekyll, Liquid and JS magic. Project details go in front matter and content is the detailed description of the project. You can check it out right here on projects.coala.io, https://github.com/coala/projects