Another project that I’m working on right now is the so-called Developer Assistant. Its purpose is simple: helping developers with setting up projects in various languages, setting up environment and source control, setting up deployment, installing dependencies etc.
Easier said than done. Devassistant is meant to got to Fedora 19, where it will have just the most basic functionality – setting up various projects in C, Java and Python, other languages support is uncertain at this moment (since it’s being worked on for a month and a half and I have lots of other stuff to do).
So what is it going to look like?
$ devassistant python django -n myproject -e
This will create a basic Django project named “myproject” inside current directory. It will also set up the project as Eclipse PyDev project (-e switch) and set a git repository with sane
.gitignore. Before all that, it will install all the needed dependencies.
When creating projects, Devassistant is using so-called “assistants” that form a simple hierarchy. E.g. the top assistant (Devassistant itself) has several subassistants like Ruby, Python, C, … Each of these subassistants can have more subassistants etc. The type of the project is specified by the full path in this hierarchy, like in the example above:
devassistant python django.
In future versions (Fedora 20?), Devassistant will have assistants like “rpm” for building RPM from a project or “openshift” for Openshift deployment.
Devassistant is just an engine that can run assistants, which are considered data. For Fedora 19, we will ship this in one package, but before Fedora 20, we will split the packages (and upstream development, too), so that we are able to provide different assistant packages for different systems (RHEL 6 would need different package names than Fedora 19, also the package set is different, …).
The assistants can be written in Python or using Yaml files that follow certain rules. The reason for supporting Yaml assistants is the fact, that Devassistant is written purely in Python and we wanted everybody to be able to contribute in a language agnostic way (Yaml assistants were actually meant to be simple config files, but in short time they got support for conditions, variable assignment and calling sections repeatedly, so they are in fact Turing-complete now).
We welcome all contributions and I’ll be happy to guide you if you have any difficulties.
I’m really looking forward to what people are going to say about this – I hope we’ll get at least some positive comments ;) Enjoy!