Last week was a Hack Week at Novell, so I spent some time working on a new idea I've been cooking in the past weeks: a Community Add-in Repository for MonoDevelop, which I'm calling Cydin.
The idea is to have a web site where add-in developers can publish their MonoDevelop add-ins and make them available to all users. The site works like a build bot: it pulls the source code of add-ins from version control repositories, builds and packages them, and then publishes them in an add-in repository, to which MonoDevelop will be subscribed.
In one week I've been able to implement the basic functionality, although it still needs some polish before I can make it publicly available. I implemented the site using ASP.NET MVC. I didn't know much about MVC in ASP.NET, so it has been also great to learn something new.
Beware: I put zero effort to the visual design.
So, how does it work? This is the home page:
The first thing you have to do is to log in. Authentication will be based on OpenID, but this is not yet fully functional (I'm using the DotNetOpenAuth library but I'm having trouble making it work on Linux).
The home page is very simple. It shows a list of the projects owned by the user and a list of recent releases. I planed to include add-in browse and search options, but I had no time for this.
The Create Project link allows creating a new add-in project:
This page allows entering the add-in name, the identifier and a description. When clicking on Create, the source definition page is shown:
This page allows specifying the location of the source code of the add-in. Right now it only supports Subversion, but I plan to add support for GIT soon.
When specifying the URL of the subversion repo, there is a twist: if the URL ends with "/*" the build service will pull all directories bellow that URL, and each directory will be considered a
different release. So for example, if you specify:
https://test.googlecode.com/svn/trunk/tags/test-project/*
then all tags of test-project will be pulled as independent releases.
If the auto-publish checkbox is set, the build service will automatically publish new versions of the add-in at every commit.
After saving the changes, the project home page is shown:
The page will be empty because pulling and building the source code may take some time.
Source code is pulled and built by a Build Service. The build service is independent from the web site and can run in a different host. Communication between the two is done through a web service.
So after a bit we'll see:
This shows that the build service found six directories below the specified svn url, and pulled all of them. Then it started building.
Notice that the build service extracts some information from the add-ins: the add-in version, the MonoDevelop version that the add-in is targeting, and the target platforms.
Sources with the 'Ready' status are already built and packaged, but not yet available in the add-in repository. To make them available, you have to click on the 'Publish' link. This is not necessary if the auto-publish option is set for this SVN source (in this case the release would be automatically published after building).
This is how the page looks like after publishing some releases:
The site administrator has some control over which releases are published. By default, new projects releases have to be validated by an administrator.
Published add-ins can be installed using the MonoDevelop add-in manager:
There is still some work to do, but I hope I can publish the site as a beta soon so you can start experimenting with it.
View comments