doit logo

Table Of Contents

Sponsors

Your logo here

Sponsor/Donate


Why Donate? Donations will be used to sponsor further development of the project.

For corporate donations the logo of your company will be placed on this website side-bar (see above). For more information please contact schettino72@gmail.com

Hire me

Looking for a python developer with a proven record of designing and developing robust and well tested applications? The creator and maintainer of doit is available for hire. Full-time, part-time or one-off job.
Contact: schettino72@gmail.com



Introduction

doit comes from the idea of bringing the power of build-tools to execute any kind of task

A task describes some computation to be done (actions), and contains some extra meta-data.

def task_example():
    return {
        'actions': ['myscript'],
        'file_dep': ['my_input_file'],
        'targets': ['result_file'],
    }

actions

  • can be external programs (executed as shell commands) or python functions.
  • a single task may define more than one action.

doit uses the task’s meta-data to:

cache task results

doit checks if the task is up-to-date and skips its execution if the task would produce the same result (cached) of a previous execution.

correct execution order

By checking the inter-dependency between tasks doit ensures that tasks will be execute in the correct order.

parallel execution

built-in support for parallel (threaded or multi-process) task execution (more)

Traditional build-tools were created mainly to deal with compile/link process of source code. doit was designed to solve a broader range of tasks.

powerful dependency system

  • the up-to-date check is not restricted to looking for file modification on dependencies, it can be customized for each task (more)
  • target files are not required in order to check if a task is up-to-date (more)
  • dependencies can be dynamically calculated by other tasks (more)

Task’s metadata (actions, dependencies, targets...) are better described in a declarative way, but often you want to create this metadata programmatically.

flexible task definition

doit uses plain python modules to create tasks (and its meta-data)

customizable task definition

By default tasks are described by a dict. But it can be easily customized. (more) like:

# with a decorator
@task(file_dep=['input.txt'])
def my_task_action(dependencies):
     # do something

Other features...

self documented

doit command allows you to list and obtain help/documentation for tasks (more)

inotify integration

built-in support for a long-running process that automatically re-execute tasks based on file changes by external process (linux/mac only) (more)

custom output

process output can be completely customized through reporters (more)

tab-completion

tab-completion for commands/task (supports bash and zsh) (more)

extensible

Apart from using doit to automate your project it also expose its API so you can create new applications/tools using doit functionality (more)

Check the documentation for more features...

What people are saying about doit

Congratulations! Your tool follows the KISS principle very closely. I always wondered why build tools had to be that complicated. - Elena

Let me start by saying I’m really lovin doit, at first the interface seemed verbose but quickly changed my mind when I started using it and realized the flexibility. Many thanks for the great software! - Michael Gliwinski

I love all the traditional unix power tools, like cron, make, perl, ..., I also like new comprehensive configuration management tools like CFEngine and Puppet. But I find doit to be so versatile and so productive. - Charlie Guo

I needed a sort of ‘make’ tool to glue things together and after trying out all kinds, doit ... has actually turned out to be beautiful. Its easy to add and manage tasks, even complex ones– gluing things together with decorators and ‘library’ functions I’ve written to do certain similar things. - Matthew

Some time ago, I grew frustrated with Make and Ant and started porting my build files to every build tool I found (SCons, Waf, etc.). Each time, as soon as I stepped out of already available rules, I ran into some difficult to overcome stumbling blocks. Then I discovered this little gem of simplicity: doit. It’s Python-based. It doesn’t try to be smart, it does not try to be cool, it just works. If you are looking for a flexible little build tool for different languages and tasks, give it a chance. (...) - lelele

Success Stories...

Project Details

  • This is an open-source project (MIT license) written in python. Runs on Python 2.6 through 3.4 with a single codebase.
  • Download from PyPi
  • Project management (bug tracker, feature requests and source code ) on github.
  • Questions and feedback on google group. Please do not send questions to my private email.
  • This web site is hosted on http://pages.github.com
  • doit projects contains a collection of non-trivial examples and re-usable task creators for doit.
  • Professional support and consulting services available from doit creator & maintainer (schettino72 at gmail.com).

Status

This blog post explains how everything started in 2008.

doit is under active development. Version 0.26 released on 2014-08.

doit core features are quite stable. If there is no recent development, it does NOT mean doit is not being maintained... The project has 100% unit-test code coverage and kept with zero bugs in the tracker.

Development is done based on real world use cases. It is well designed and has a small code base, so adding new features is not hard. Patches are welcome.