It’s been more than a half year since we got that little idea to create a piece of software that would help developers with everyday repetitive tasks. Nothing really new, nothing really unseen. We’ll just write couple of scripts, glue them together with Python and be done with it.
Turns out it’s not as simple as that
And so, after more than half a year, we have a growing project, we’re creating a website for it and I’ll probably no longer write about DevAssistant on my personal blog, since we have this one. And most importantly, some people actually use DevAssistant!
So what is DevAssistant? Going back to that first idea we had, it was supposed to be a set of scripts (Bash, Python, whatever) that would kickstart projects in various languages. We kept the idea of “kickstarting new projects”, but we also added “working with existing projects” and “preparing environment for work with upstream projects”. These are now the basic three use cases we’re working with.
The actual assistants aren’t Bash or Python scripts anymore, they are Yaml files with a defined structure. I think it is fair to say that we have invented our own scripting micro-language based on Yaml (how crazy is that?) that gets interpreted by DevAssistant core (written in Python).
Why did we need to do this? We needed to centralize functionality like logging, Github repos manipulation etc., which meant:
- Doing everything in one language
- Defining some sort of interface between core and the scripts, which would probably be even more insane and very hard for maintenance and script writing.
We chose the first option. And since not all people want to use Python, we had to create something language agnostic, so there it is. And it’s fairly simple, too.
How Assistants Work
So how do the assistants work? For each of the three use cases mentioned above, we have a set of assistants, that can have subassistants, etc. For example, we have the “kickstarting new projects” use case, for which we have assistants like
ruby. But there is nothing like “just a Python project”, so
python assistant has subassistants like
flask. If you want to create a Django project by DevAssistant, you just need to run terminal and type
da crt python django -n newapp
crt refers to the usecase (we abbreviate “create” as “crt”, the other two usecases are “mod” as “modify” and “prep” as “prepare”),
django are the assistants and
-n newapp specifies the name of the new project. This not only sets up the project, but also installs dependencies and initializes a Git repo inside the project directory. When used with correct options, this can also create a repo on Github and push your sources there (
-g) or import the project into Eclipse (
-e). That’s a whole lot of work for just one line in terminal! Just remember, every time you want to know your current options, use
--help to see what DevAssistant has to offer.
In the newest version, 0.7.0, we also have a GUI prototype that allows you to do all the stuff from a nice Gtk+ graphical interface. This version has received major updates in commandline interface as well as in internal structure. The internal shuffling will continue for 0.8.0, but Yaml assistants will most likely not be affected by this, so if you write an assistant that works in 0.7.0, it should also work with 0.8.0 and newer versions, possibly up until version 1.0.0.
As already mentioned, we’ll be doing some internal code shuffling, but that’s pretty boring. On the more exciting end, we’re preparing some cool features like:
- Central repository for assistants, that would allow you to share your custom assistants with the world.
- Integration with docker.io for deployment.
- Improved documentation with tutorials about writing assistants.
- Support for platforms other than Fedora/CentOS/RHEL (did I mention that we currently only support these?).
- And more…
All in all, we’ve got a lot of work ahead, but we’re looking forward to it. If you use DevAssistant, consider telling us your impressions, either by writing to our mailing list (which doesn’t exist yet, but we’re working on it), comming to our IRC channel (#devassistant on freenode) or opening a bug on our Github project page.