summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lib/jitterbug.pm32
-rw-r--r--lib/jitterbug/Schema.pm2
-rw-r--r--lib/jitterbug/Schema/Result/Task.pm10
-rw-r--r--lib/jitterbug/Task.pm2
-rw-r--r--public/css/style.css5
-rwxr-xr-xscripts/upgrade_db.pl70
-rw-r--r--sql/MySQL/deploy/1/001-auto-__VERSION.sql18
-rw-r--r--sql/MySQL/deploy/1/001-auto.sql46
-rw-r--r--sql/MySQL/deploy/2/001-auto-__VERSION.sql18
-rw-r--r--sql/MySQL/deploy/2/001-auto.sql47
-rw-r--r--sql/MySQL/downgrade/2-1/001-auto.sql12
-rw-r--r--sql/MySQL/upgrade/1-2/001-auto.sql12
-rw-r--r--sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql17
-rw-r--r--sql/PostgreSQL/deploy/1/001-auto.sql63
-rw-r--r--sql/PostgreSQL/deploy/2/001-auto-__VERSION.sql17
-rw-r--r--sql/PostgreSQL/deploy/2/001-auto.sql64
-rw-r--r--sql/PostgreSQL/downgrade/2-1/001-auto.sql12
-rw-r--r--sql/PostgreSQL/upgrade/1-2/001-auto.sql12
-rw-r--r--sql/SQLite/deploy/1/001-auto-__VERSION.sql18
-rw-r--r--sql/SQLite/deploy/1/001-auto.sql42
-rw-r--r--sql/SQLite/deploy/2/001-auto-__VERSION.sql18
-rw-r--r--sql/SQLite/deploy/2/001-auto.sql43
-rw-r--r--sql/SQLite/downgrade/2-1/001-auto.sql47
-rw-r--r--sql/SQLite/upgrade/1-2/001-auto.sql12
-rw-r--r--sql/_source/deploy/1/001-auto-__VERSION.yml312
-rw-r--r--sql/_source/deploy/1/001-auto.yml511
-rw-r--r--sql/_source/deploy/2/001-auto-__VERSION.yml316
-rw-r--r--sql/_source/deploy/2/001-auto.yml525
-rw-r--r--views/index.tt17
-rw-r--r--views/task/index.tt7
30 files changed, 2317 insertions, 10 deletions
diff --git a/lib/jitterbug.pm b/lib/jitterbug.pm
index c876cb6..1bf3aab 100644
--- a/lib/jitterbug.pm
+++ b/lib/jitterbug.pm
@@ -9,9 +9,17 @@ our $VERSION = '0.1';
 load_app 'jitterbug::Hook',       prefix => '/hook';
 load_app 'jitterbug::Project',    prefix => '/project';
 load_app 'jitterbug::WebService', prefix => '/api';
-#load_app 'jitterbug::Task',       prefix => '/task';
+load_app 'jitterbug::Task',       prefix => '/task';
 
 get '/' => sub {
+    my $projects = _get_projects();
+    my ( $builds, $runnings ) = _get_builds();
+
+    template 'index',
+      { projects => $projects, builds => $builds, runnings => $runnings };
+};
+
+sub _get_projects {
 
     my @projects = ();
 
@@ -41,7 +49,25 @@ get '/' => sub {
       sort { $b->{last_build}->{timestamp} cmp $a->{last_build}->{timestamp} }
       @projects;
 
-    template 'index', {projects => \@projects};
-};
+    return \@projects;
+}
+
+sub _get_builds {
+
+    my @builds   = ();
+    my @runnings = ();
+
+    my $builds = schema->resultset('Task')->search();
+    while ( my $build = $builds->next ) {
+        my $build_desc = {
+            project => $build->project->name,
+            id      => $build->id,
+            running => $build->running,
+        };
+        $build->running ? push @runnings, $build_desc : push @builds,
+          $build_desc;
+    }
+    return ( \@builds, \@runnings );
+}
 
 true;
diff --git a/lib/jitterbug/Schema.pm b/lib/jitterbug/Schema.pm
index 5014c12..f47d7e9 100644
--- a/lib/jitterbug/Schema.pm
+++ b/lib/jitterbug/Schema.pm
@@ -1,6 +1,8 @@
 package jitterbug::Schema;
 use base qw/DBIx::Class::Schema/;
 
+our $VERSION = '3';
+
 __PACKAGE__->load_namespaces();
 
 1;
diff --git a/lib/jitterbug/Schema/Result/Task.pm b/lib/jitterbug/Schema/Result/Task.pm
index e63e101..2eaed62 100644
--- a/lib/jitterbug/Schema/Result/Task.pm
+++ b/lib/jitterbug/Schema/Result/Task.pm
@@ -2,6 +2,7 @@ package jitterbug::Schema::Result::Task;
 use base qw/DBIx::Class::Core/;
 
 __PACKAGE__->table('task');
+__PACKAGE__->load_components(qw/InflateColumn::DateTime/);
 __PACKAGE__->add_columns(
     taskid => {
         data_type         => 'int',
@@ -12,6 +13,15 @@ __PACKAGE__->add_columns(
         data_type      => 'int',
         is_foreign_key => 1,
     },
+    running => {
+        data_type     => 'bool',
+        default_value => 0,
+    },
+    started_when => {
+        data_type                 => 'datetime',
+        is_nullable               => 1,
+        datetime_undef_if_invalid => 1
+    },
 );
 
 __PACKAGE__->set_primary_key('taskid');
diff --git a/lib/jitterbug/Task.pm b/lib/jitterbug/Task.pm
index f14a9c6..998e9e4 100644
--- a/lib/jitterbug/Task.pm
+++ b/lib/jitterbug/Task.pm
@@ -7,7 +7,7 @@ use jitterbug::Plugin::Template;
 get '/:task_id' => sub {
     my $task_id = params->{task_id};
 
-    my $task = schema->resultset('Task')->search($task_id);
+    my $task = schema->resultset('Task')->find($task_id);
 
     if (!$task) {
         render_error("task doesn't exists", 404);
diff --git a/public/css/style.css b/public/css/style.css
index fdd5d32..d22b898 100644
--- a/public/css/style.css
+++ b/public/css/style.css
@@ -233,10 +233,13 @@ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",m
 .repo p.desc{margin:0 0 3px 0;font-size:12px;color:#444;}
 .repo p.updated-at{margin:0;font-size:11px;color:#888;}
 
+.comming-builds{border:1px solid #d8d8d8;background-color:#f0f0f0}
+.running-build{border:1px solid #d8d8d8;background-color:#f0f0f0}
+
 .commit .name{float:left; width: 100%;}
 .commit .name .date{color:#888;font-size:90%;}
 .commit .name .author{font-weight: bolder;line-height:2em}
 .commit .gravatar{border:1px solid #d0d0d0;padding:2px;background-color:white;float:left;margin-right:.7em;}
 
 .columns .first{float:left;width:450px;}
-.columns .last{float:right;width:450px;}
+.columns .last{float:right;width:300px;}
diff --git a/scripts/upgrade_db.pl b/scripts/upgrade_db.pl
new file mode 100755
index 0000000..00f6306
--- /dev/null
+++ b/scripts/upgrade_db.pl
@@ -0,0 +1,70 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+use lib 'lib';
+
+use YAML::Syck;
+use DBIx::Class::DeploymentHandler;
+use SQL::Translator;
+
+my $config = shift;
+die "need configuration file" unless $config;
+
+my $schema = 'jitterbug::Schema';
+
+my $version = eval "use $schema; $schema->VERSION" or die $@;
+
+print "processing version $version of $schema...\n";
+
+my $jitterbug_conf = LoadFile($config);
+my $dbix_conf      = $jitterbug_conf->{plugins}->{DBIC}->{schema};
+my $s              = $schema->connect( @{ $dbix_conf->{connect_info} } );
+
+my $dh = DBIx::Class::DeploymentHandler->new(
+    {
+        schema              => $s,
+        databases           => [qw/ SQLite PostgreSQL MySQL /],
+        sql_translator_args => { add_drop_table => 0, },
+    }
+);
+
+print "generating deployment script\n";
+$dh->prepare_install;
+
+if ( $version > 1 ) {
+    print "generating upgrade script\n";
+    $dh->prepare_upgrade(
+        {
+            from_version => $version - 1,
+            to_version   => $version,
+            version_set  => [ $version - 1, $version ],
+        }
+    );
+
+    print "generating downgrade script\n";
+    $dh->prepare_downgrade(
+        {
+            from_version => $version,
+            to_version   => $version - 1,
+            version_set  => [ $version, $version - 1 ],
+        }
+    );
+}
+
+# print "generating graph\n";
+
+# my $trans = SQL::Translator->new(
+#     parser        => 'SQL::Translator::Parser::DBIx::Class',
+#     parser_args   => { package => $schema },
+#     producer_args => {
+#         show_constraints => 1,
+#         show_datatypes   => 1,
+#         show_sizes       => 1,
+#         show_fk_only     => 0,
+#     }
+# );
+
+# $trans->translate;
+
+print "done\n";
diff --git a/sql/MySQL/deploy/1/001-auto-__VERSION.sql b/sql/MySQL/deploy/1/001-auto-__VERSION.sql
new file mode 100644
index 0000000..597d180
--- /dev/null
+++ b/sql/MySQL/deploy/1/001-auto-__VERSION.sql
@@ -0,0 +1,18 @@
+-- 
+-- Created by SQL::Translator::Producer::MySQL
+-- Created on Mon Jan 24 21:25:06 2011
+-- 
+;
+SET foreign_key_checks=0;
+--
+-- Table: `dbix_class_deploymenthandler_versions`
+--
+CREATE TABLE `dbix_class_deploymenthandler_versions` (
+  `id` integer NOT NULL auto_increment,
+  `version` varchar(50) NOT NULL,
+  `ddl` text,
+  `upgrade_sql` text,
+  PRIMARY KEY (`id`),
+  UNIQUE `dbix_class_deploymenthandler_versions_version` (`version`)
+);
+SET foreign_key_checks=1
\ No newline at end of file
diff --git a/sql/MySQL/deploy/1/001-auto.sql b/sql/MySQL/deploy/1/001-auto.sql
new file mode 100644
index 0000000..2a8b829
--- /dev/null
+++ b/sql/MySQL/deploy/1/001-auto.sql
@@ -0,0 +1,46 @@
+-- 
+-- Created by SQL::Translator::Producer::MySQL
+-- Created on Mon Jan 24 21:25:06 2011
+-- 
+;
+SET foreign_key_checks=0;
+--
+-- Table: `project`
+--
+CREATE TABLE `project` (
+  `projectid` integer NOT NULL auto_increment,
+  `name` text NOT NULL,
+  `url` text NOT NULL,
+  `description` text NOT NULL,
+  `owner` text NOT NULL,
+  PRIMARY KEY (`projectid`),
+  UNIQUE `project_name` (`name`)
+) ENGINE=InnoDB;
+--
+-- Table: `commit_push`
+--
+CREATE TABLE `commit_push` (
+  `sha256` text NOT NULL,
+  `content` text NOT NULL,
+  `projectid` integer NOT NULL,
+  `timestamp` datetime NOT NULL,
+  INDEX `commit_push_idx_projectid` (`projectid`),
+  PRIMARY KEY (`sha256`),
+  CONSTRAINT `commit_push_fk_projectid` FOREIGN KEY (`projectid`) REFERENCES `project` (`projectid`)
+) ENGINE=InnoDB;
+--
+-- Table: `task`
+--
+CREATE TABLE `task` (
+  `taskid` integer NOT NULL auto_increment,
+  `sha256` text NOT NULL,
+  `projectid` integer NOT NULL,
+  INDEX `task_idx_sha256` (`sha256`),
+  INDEX `task_idx_projectid` (`projectid`),
+  PRIMARY KEY (`taskid`),
+  UNIQUE `task_projectid` (`projectid`),
+  UNIQUE `task_sha256` (`sha256`),
+  CONSTRAINT `task_fk_sha256` FOREIGN KEY (`sha256`) REFERENCES `commit_push` (`sha256`),
+  CONSTRAINT `task_fk_projectid` FOREIGN KEY (`projectid`) REFERENCES `project` (`projectid`)
+) ENGINE=InnoDB;
+SET foreign_key_checks=1
\ No newline at end of file
diff --git a/sql/MySQL/deploy/2/001-auto-__VERSION.sql b/sql/MySQL/deploy/2/001-auto-__VERSION.sql
new file mode 100644
index 0000000..e91854a
--- /dev/null
+++ b/sql/MySQL/deploy/2/001-auto-__VERSION.sql
@@ -0,0 +1,18 @@
+-- 
+-- Created by SQL::Translator::Producer::MySQL
+-- Created on Mon Jan 24 21:26:42 2011
+-- 
+;
+SET foreign_key_checks=0;
+--
+-- Table: `dbix_class_deploymenthandler_versions`
+--
+CREATE TABLE `dbix_class_deploymenthandler_versions` (
+  `id` integer NOT NULL auto_increment,
+  `version` varchar(50) NOT NULL,
+  `ddl` text,
+  `upgrade_sql` text,
+  PRIMARY KEY (`id`),
+  UNIQUE `dbix_class_deploymenthandler_versions_version` (`version`)
+);
+SET foreign_key_checks=1
\ No newline at end of file
diff --git a/sql/MySQL/deploy/2/001-auto.sql b/sql/MySQL/deploy/2/001-auto.sql
new file mode 100644
index 0000000..d208773
--- /dev/null
+++ b/sql/MySQL/deploy/2/001-auto.sql
@@ -0,0 +1,47 @@
+-- 
+-- Created by SQL::Translator::Producer::MySQL
+-- Created on Mon Jan 24 21:26:41 2011
+-- 
+;
+SET foreign_key_checks=0;
+--
+-- Table: `project`
+--
+CREATE TABLE `project` (
+  `projectid` integer NOT NULL auto_increment,
+  `name` text NOT NULL,
+  `url` text NOT NULL,
+  `description` text NOT NULL,
+  `owner` text NOT NULL,
+  PRIMARY KEY (`projectid`),
+  UNIQUE `project_name` (`name`)
+) ENGINE=InnoDB;
+--
+-- Table: `commit_push`
+--
+CREATE TABLE `commit_push` (
+  `sha256` text NOT NULL,
+  `content` text NOT NULL,
+  `projectid` integer NOT NULL,
+  `timestamp` datetime NOT NULL,
+  INDEX `commit_push_idx_projectid` (`projectid`),
+  PRIMARY KEY (`sha256`),
+  CONSTRAINT `commit_push_fk_projectid` FOREIGN KEY (`projectid`) REFERENCES `project` (`projectid`)
+) ENGINE=InnoDB;
+--
+-- Table: `task`
+--
+CREATE TABLE `task` (
+  `taskid` integer NOT NULL auto_increment,
+  `sha256` text NOT NULL,
+  `projectid` integer NOT NULL,
+  `running` bool NOT NULL DEFAULT '0',
+  INDEX `task_idx_sha256` (`sha256`),
+  INDEX `task_idx_projectid` (`projectid`),
+  PRIMARY KEY (`taskid`),
+  UNIQUE `task_projectid` (`projectid`),
+  UNIQUE `task_sha256` (`sha256`),
+  CONSTRAINT `task_fk_sha256` FOREIGN KEY (`sha256`) REFERENCES `commit_push` (`sha256`),
+  CONSTRAINT `task_fk_projectid` FOREIGN KEY (`projectid`) REFERENCES `project` (`projectid`)
+) ENGINE=InnoDB;
+SET foreign_key_checks=1
\ No newline at end of file
diff --git a/sql/MySQL/downgrade/2-1/001-auto.sql b/sql/MySQL/downgrade/2-1/001-auto.sql
new file mode 100644
index 0000000..3285916
--- /dev/null
+++ b/sql/MySQL/downgrade/2-1/001-auto.sql
@@ -0,0 +1,12 @@
+-- Convert schema 'sql/_source/deploy/2/001-auto.yml' to 'sql/_source/deploy/1/001-auto.yml':;
+
+;
+BEGIN;
+
+;
+ALTER TABLE task DROP COLUMN running;
+
+;
+
+COMMIT;
+
diff --git a/sql/MySQL/upgrade/1-2/001-auto.sql b/sql/MySQL/upgrade/1-2/001-auto.sql
new file mode 100644
index 0000000..1183d23
--- /dev/null
+++ b/sql/MySQL/upgrade/1-2/001-auto.sql
@@ -0,0 +1,12 @@
+-- Convert schema 'sql/_source/deploy/1/001-auto.yml' to 'sql/_source/deploy/2/001-auto.yml':;
+
+;
+BEGIN;
+
+;
+ALTER TABLE task ADD COLUMN running bool NOT NULL DEFAULT '0';
+
+;
+
+COMMIT;
+
diff --git a/sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql b/sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql
new file mode 100644
index 0000000..43ecfa6
--- /dev/null
+++ b/sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql
@@ -0,0 +1,17 @@
+-- 
+-- Created by SQL::Translator::Producer::PostgreSQL
+-- Created on Mon Jan 24 21:25:06 2011
+-- 
+;
+--
+-- Table: dbix_class_deploymenthandler_versions
+--
+CREATE TABLE "dbix_class_deploymenthandler_versions" (
+  "id" serial NOT NULL,
+  "version" character varying(50) NOT NULL,
+  "ddl" text,
+  "upgrade_sql" text,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "dbix_class_deploymenthandler_versions_version" UNIQUE ("version")
+);
+
diff --git a/sql/PostgreSQL/deploy/1/001-auto.sql b/sql/PostgreSQL/deploy/1/001-auto.sql
new file mode 100644
index 0000000..3f0a076
--- /dev/null
+++ b/sql/PostgreSQL/deploy/1/001-auto.sql
@@ -0,0 +1,63 @@
+-- 
+-- Created by SQL::Translator::Producer::PostgreSQL
+-- Created on Mon Jan 24 21:25:06 2011
+-- 
+;
+--
+-- Table: project
+--
+CREATE TABLE "project" (
+  "projectid" serial NOT NULL,
+  "name" text NOT NULL,
+  "url" text NOT NULL,
+  "description" text NOT NULL,
+  "owner" text NOT NULL,
+  PRIMARY KEY ("projectid"),
+  CONSTRAINT "project_name" UNIQUE ("name")
+);
+
+;
+--
+-- Table: commit_push
+--
+CREATE TABLE "commit_push" (
+  "sha256" text NOT NULL,
+  "content" text NOT NULL,
+  "projectid" integer NOT NULL,
+  "timestamp" timestamp NOT NULL,
+  PRIMARY KEY ("sha256")
+);
+CREATE INDEX "commit_push_idx_projectid" on "commit_push" ("projectid");
+
+;
+--
+-- Table: task
+--
+CREATE TABLE "task" (
+  "taskid" serial NOT NULL,
+  "sha256" text NOT NULL,
+  "projectid" integer NOT NULL,
+  PRIMARY KEY ("taskid"),
+  CONSTRAINT "task_projectid" UNIQUE ("projectid"),
+  CONSTRAINT "task_sha256" UNIQUE ("sha256")
+);
+CREATE INDEX "task_idx_sha256" on "task" ("sha256");
+CREATE INDEX "task_idx_projectid" on "task" ("projectid");
+
+;
+--
+-- Foreign Key Definitions
+--
+
+;
+ALTER TABLE "commit_push" ADD FOREIGN KEY ("projectid")
+  REFERENCES "project" ("projectid") DEFERRABLE;
+
+;
+ALTER TABLE "task" ADD FOREIGN KEY ("sha256")
+  REFERENCES "commit_push" ("sha256") DEFERRABLE;
+
+;
+ALTER TABLE "task" ADD FOREIGN KEY ("projectid")
+  REFERENCES "project" ("projectid") DEFERRABLE;
+
diff --git a/sql/PostgreSQL/deploy/2/001-auto-__VERSION.sql b/sql/PostgreSQL/deploy/2/001-auto-__VERSION.sql
new file mode 100644
index 0000000..348bca5
--- /dev/null
+++ b/sql/PostgreSQL/deploy/2/001-auto-__VERSION.sql
@@ -0,0 +1,17 @@
+-- 
+-- Created by SQL::Translator::Producer::PostgreSQL
+-- Created on Mon Jan 24 21:26:42 2011
+-- 
+;
+--
+-- Table: dbix_class_deploymenthandler_versions
+--
+CREATE TABLE "dbix_class_deploymenthandler_versions" (
+  "id" serial NOT NULL,
+  "version" character varying(50) NOT NULL,
+  "ddl" text,
+  "upgrade_sql" text,
+  PRIMARY KEY ("id"),
+  CONSTRAINT "dbix_class_deploymenthandler_versions_version" UNIQUE ("version")
+);
+
diff --git a/sql/PostgreSQL/deploy/2/001-auto.sql b/sql/PostgreSQL/deploy/2/001-auto.sql
new file mode 100644
index 0000000..da37dac
--- /dev/null
+++ b/sql/PostgreSQL/deploy/2/001-auto.sql
@@ -0,0 +1,64 @@
+-- 
+-- Created by SQL::Translator::Producer::PostgreSQL
+-- Created on Mon Jan 24 21:26:41 2011
+-- 
+;
+--
+-- Table: project
+--
+CREATE TABLE "project" (
+  "projectid" serial NOT NULL,
+  "name" text NOT NULL,
+  "url" text NOT NULL,
+  "description" text NOT NULL,
+  "owner" text NOT NULL,
+  PRIMARY KEY ("projectid"),
+  CONSTRAINT "project_name" UNIQUE ("name")
+);
+
+;
+--
+-- Table: commit_push
+--
+CREATE TABLE "commit_push" (
+  "sha256" text NOT NULL,
+  "content" text NOT NULL,
+  "projectid" integer NOT NULL,
+  "timestamp" timestamp NOT NULL,
+  PRIMARY KEY ("sha256")
+);
+CREATE INDEX "commit_push_idx_projectid" on "commit_push" ("projectid");
+
+;
+--
+-- Table: task
+--
+CREATE TABLE "task" (
+  "taskid" serial NOT NULL,
+  "sha256" text NOT NULL,
+  "projectid" integer NOT NULL,
+  "running" bool DEFAULT '0' NOT NULL,
+  PRIMARY KEY ("taskid"),
+  CONSTRAINT "task_projectid" UNIQUE ("projectid"),
+  CONSTRAINT "task_sha256" UNIQUE ("sha256")
+);
+CREATE INDEX "task_idx_sha256" on "task" ("sha256");
+CREATE INDEX "task_idx_projectid" on "task" ("projectid");
+
+;
+--
+-- Foreign Key Definitions
+--
+
+;
+ALTER TABLE "commit_push" ADD FOREIGN KEY ("projectid")
+  REFERENCES "project" ("projectid") DEFERRABLE;
+
+;
+ALTER TABLE "task" ADD FOREIGN KEY ("sha256")
+  REFERENCES "commit_push" ("sha256") DEFERRABLE;
+
+;
+ALTER TABLE "task" ADD FOREIGN KEY ("projectid")
+  REFERENCES "project" ("projectid") DEFERRABLE;
+
diff --git a/sql/PostgreSQL/downgrade/2-1/001-auto.sql b/sql/PostgreSQL/downgrade/2-1/001-auto.sql
new file mode 100644
index 0000000..3285916
--- /dev/null
+++ b/sql/PostgreSQL/downgrade/2-1/001-auto.sql
@@ -0,0 +1,12 @@
+-- Convert schema 'sql/_source/deploy/2/001-auto.yml' to 'sql/_source/deploy/1/001-auto.yml':;
+
+;
+BEGIN;
+
+;
+ALTER TABLE task DROP COLUMN running;
+
+;
+
+COMMIT;
+
diff --git a/sql/PostgreSQL/upgrade/1-2/001-auto.sql b/sql/PostgreSQL/upgrade/1-2/001-auto.sql
new file mode 100644
index 0000000..3edf5df
--- /dev/null
+++ b/sql/PostgreSQL/upgrade/1-2/001-auto.sql
@@ -0,0 +1,12 @@
+-- Convert schema 'sql/_source/deploy/1/001-auto.yml' to 'sql/_source/deploy/2/001-auto.yml':;
+
+;
+BEGIN;
+
+;
+ALTER TABLE task ADD COLUMN running bool DEFAULT '0' NOT NULL;
+
+;
+
+COMMIT;
+
diff --git a/sql/SQLite/deploy/1/001-auto-__VERSION.sql b/sql/SQLite/deploy/1/001-auto-__VERSION.sql
new file mode 100644
index 0000000..6d6e3fa
--- /dev/null
+++ b/sql/SQLite/deploy/1/001-auto-__VERSION.sql
@@ -0,0 +1,18 @@
+-- 
+-- Created by SQL::Translator::Producer::SQLite
+-- Created on Mon Jan 24 21:25:06 2011
+-- 
+
+;
+BEGIN TRANSACTION;
+--
+-- Table: dbix_class_deploymenthandler_versions
+--
+CREATE TABLE dbix_class_deploymenthandler_versions (
+  id INTEGER PRIMARY KEY NOT NULL,
+  version varchar(50) NOT NULL,
+  ddl text,
+  upgrade_sql text
+);
+CREATE UNIQUE INDEX dbix_class_deploymenthandler_versions_version ON dbix_class_deploymenthandler_versions (version);
+COMMIT
\ No newline at end of file
diff --git a/sql/SQLite/deploy/1/001-auto.sql b/sql/SQLite/deploy/1/001-auto.sql
new file mode 100644
index 0000000..804958b
--- /dev/null
+++ b/sql/SQLite/deploy/1/001-auto.sql
@@ -0,0 +1,42 @@
+-- 
+-- Created by SQL::Translator::Producer::SQLite
+-- Created on Mon Jan 24 21:25:06 2011
+-- 
+
+;
+BEGIN TRANSACTION;
+--
+-- Table: project
+--
+CREATE TABLE project (
+  projectid INTEGER PRIMARY KEY NOT NULL,
+  name text NOT NULL,
+  url text NOT NULL,
+  description text NOT NULL,
+  owner text NOT NULL
+);
+CREATE UNIQUE INDEX project_name ON project (name);
+--
+-- Table: commit_push
+--
+CREATE TABLE commit_push (
+  sha256 text NOT NULL,
+  content text NOT NULL,
+  projectid int NOT NULL,
+  timestamp datetime NOT NULL,
+  PRIMARY KEY (sha256)
+);
+CREATE INDEX commit_push_idx_projectid ON commit_push (projectid);
+--
+-- Table: task
+--
+CREATE TABLE task (
+  taskid INTEGER PRIMARY KEY NOT NULL,
+  sha256 text NOT NULL,
+  projectid int NOT NULL
+);
+CREATE INDEX task_idx_sha256 ON task (sha256);
+CREATE INDEX task_idx_projectid ON task (projectid);
+CREATE UNIQUE INDEX task_projectid ON task (projectid);
+CREATE UNIQUE INDEX task_sha256 ON task (sha256);
+COMMIT
\ No newline at end of file
diff --git a/sql/SQLite/deploy/2/001-auto-__VERSION.sql b/sql/SQLite/deploy/2/001-auto-__VERSION.sql
new file mode 100644
index 0000000..8b1bc1f
--- /dev/null
+++ b/sql/SQLite/deploy/2/001-auto-__VERSION.sql
@@ -0,0 +1,18 @@
+-- 
+-- Created by SQL::Translator::Producer::SQLite
+-- Created on Mon Jan 24 21:26:41 2011
+-- 
+
+;
+BEGIN TRANSACTION;
+--
+-- Table: dbix_class_deploymenthandler_versions
+--
+CREATE TABLE dbix_class_deploymenthandler_versions (
+  id INTEGER PRIMARY KEY NOT NULL,
+  version varchar(50) NOT NULL,
+  ddl text,
+  upgrade_sql text
+);
+CREATE UNIQUE INDEX dbix_class_deploymenthandler_versions_version ON dbix_class_deploymenthandler_versions (version);
+COMMIT
\ No newline at end of file
diff --git a/sql/SQLite/deploy/2/001-auto.sql b/sql/SQLite/deploy/2/001-auto.sql
new file mode 100644
index 0000000..45ac741
--- /dev/null
+++ b/sql/SQLite/deploy/2/001-auto.sql
@@ -0,0 +1,43 @@
+-- 
+-- Created by SQL::Translator::Producer::SQLite
+-- Created on Mon Jan 24 21:26:41 2011
+-- 
+
+;
+BEGIN TRANSACTION;
+--
+-- Table: project
+--
+CREATE TABLE project (
+  projectid INTEGER PRIMARY KEY NOT NULL,
+  name text NOT NULL,
+  url text NOT NULL,
+  description text NOT NULL,
+  owner text NOT NULL
+);
+CREATE UNIQUE INDEX project_name ON project (name);
+--
+-- Table: commit_push
+--
+CREATE TABLE commit_push (
+  sha256 text NOT NULL,
+  content text NOT NULL,
+  projectid int NOT NULL,
+  timestamp datetime NOT NULL,
+  PRIMARY KEY (sha256)
+);
+CREATE INDEX commit_push_idx_projectid ON commit_push (projectid);
+--
+-- Table: task
+--
+CREATE TABLE task (
+  taskid INTEGER PRIMARY KEY NOT NULL,
+  sha256 text NOT NULL,
+  projectid int NOT NULL,
+  running bool NOT NULL DEFAULT '0'
+);
+CREATE INDEX task_idx_sha256 ON task (sha256);
+CREATE INDEX task_idx_projectid ON task (projectid);
+CREATE UNIQUE INDEX task_projectid ON task (projectid);
+CREATE UNIQUE INDEX task_sha256 ON task (sha256);
+COMMIT
\ No newline at end of file
diff --git a/sql/SQLite/downgrade/2-1/001-auto.sql b/sql/SQLite/downgrade/2-1/001-auto.sql
new file mode 100644
index 0000000..763b77b
--- /dev/null
+++ b/sql/SQLite/downgrade/2-1/001-auto.sql
@@ -0,0 +1,47 @@
+-- Convert schema 'sql/_source/deploy/2/001-auto.yml' to 'sql/_source/deploy/1/001-auto.yml':;
+
+;
+BEGIN;
+
+;
+CREATE TEMPORARY TABLE task_temp_alter (
+  taskid INTEGER PRIMARY KEY NOT NULL,
+  sha256 text NOT NULL,
+  projectid int NOT NULL
+);
+
+;
+INSERT INTO task_temp_alter SELECT taskid, sha256, projectid FROM task;
+
+;
+DROP TABLE task;
+
+;
+CREATE TABLE task (
+  taskid INTEGER PRIMARY KEY NOT NULL,
+  sha256 text NOT NULL,
+  projectid int NOT NULL
+);
+
+;
+CREATE INDEX task_idx_sha25602 ON task (sha256);
+
+;
+CREATE INDEX task_idx_projectid02 ON task (projectid);
+
+;
+CREATE UNIQUE INDEX task_projectid02 ON task (projectid);
+
+;
+CREATE UNIQUE INDEX task_sha25602 ON task (sha256);
+
+;
+INSERT INTO task SELECT taskid, sha256, projectid FROM task_temp_alter;
+
+;
+DROP TABLE task_temp_alter;
+
+;
+
+COMMIT;
+
diff --git a/sql/SQLite/upgrade/1-2/001-auto.sql b/sql/SQLite/upgrade/1-2/001-auto.sql
new file mode 100644
index 0000000..1183d23
--- /dev/null
+++ b/sql/SQLite/upgrade/1-2/001-auto.sql
@@ -0,0 +1,12 @@
+-- Convert schema 'sql/_source/deploy/1/001-auto.yml' to 'sql/_source/deploy/2/001-auto.yml':;
+
+;
+BEGIN;
+
+;
+ALTER TABLE task ADD COLUMN running bool NOT NULL DEFAULT '0';
+
+;
+
+COMMIT;
+
diff --git a/sql/_source/deploy/1/001-auto-__VERSION.yml b/sql/_source/deploy/1/001-auto-__VERSION.yml
new file mode 100644
index 0000000..8249355
--- /dev/null
+++ b/sql/_source/deploy/1/001-auto-__VERSION.yml
@@ -0,0 +1,312 @@
+---
+schema:
+  procedures: {}
+  tables:
+    dbix_class_deploymenthandler_versions:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - version
+          match_type: ''
+          name: dbix_class_deploymenthandler_versions_version
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        ddl:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: ddl
+          order: 3
+          size:
+            - 0
+        id:
+          data_type: int
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        upgrade_sql:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: upgrade_sql
+          order: 4
+          size:
+            - 0
+        version:
+          data_type: varchar
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: version
+          order: 2
+          size:
+            - 50
+      indices: []
+      name: dbix_class_deploymenthandler_versions
+      options: []
+      order: 1
+  triggers: {}
+  views: {}
+translator:
+  add_drop_table: 0
+  filename: ~
+  no_comments: 0
+  parser_args:
+    package: &1 !!perl/hash:jitterbug::Schema
+      class_mappings:
+        DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult: __VERSION
+        jitterbug::Schema::Result::Commit: Commit
+        jitterbug::Schema::Result::Project: Project
+        jitterbug::Schema::Result::Task: Task
+      source_registrations:
+        Commit: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            content:
+              data_type: text
+              extra: {}
+            projectid:
+              data_type: int
+              extra: {}
+              is_foreign_key: 1
+            sha256:
+              data_type: text
+              extra: {}
+              is_auto_increment: 0
+            timestamp:
+              _inflate_info:
+                deflate: !!perl/code '{ "DUMMY" }'
+                inflate: !!perl/code '{ "DUMMY" }'
+              data_type: datetime
+              extra: {}
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - sha256
+            - content
+            - projectid
+            - timestamp
+          _primaries: &2
+            - sha256
+          _relationships:
+            project:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Project
+              cond:
+                foreign.projectid: self.projectid
+              source: jitterbug::Schema::Result::Project
+            tasks:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Task
+              cond:
+                foreign.taskid: self.sha256
+              source: jitterbug::Schema::Result::Task
+          _unique_constraints:
+            primary: *2
+          name: commit_push
+          result_class: jitterbug::Schema::Result::Commit
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Commit
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        Project: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            description:
+              data_type: text
+            name:
+              data_type: text
+            owner:
+              data_type: text
+            projectid:
+              data_type: int
+              is_auto_increment: 1
+            url:
+              data_type: text
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - projectid
+            - name
+            - url
+            - description
+            - owner
+          _primaries: &3
+            - projectid
+          _relationships:
+            commits:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Commit
+              cond:
+                foreign.sha256: self.projectid
+              source: jitterbug::Schema::Result::Commit
+            tasks:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Task
+              cond:
+                foreign.taskid: self.projectid
+              source: jitterbug::Schema::Result::Task
+          _unique_constraints:
+            primary: *3
+            project_name:
+              - name
+          name: project
+          result_class: jitterbug::Schema::Result::Project
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Project
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        Task: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            projectid:
+              data_type: int
+              is_foreign_key: 1
+            sha256:
+              data_type: text
+              is_foreign_key: 1
+            taskid:
+              data_type: int
+              is_auto_increment: 1
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - taskid
+            - sha256
+            - projectid
+          _primaries: &4
+            - taskid
+          _relationships:
+            commit:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Commit
+              cond:
+                foreign.sha256: self.sha256
+              source: jitterbug::Schema::Result::Commit
+            project:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Project
+              cond:
+                foreign.projectid: self.projectid
+              source: jitterbug::Schema::Result::Project
+          _unique_constraints:
+            primary: *4
+            task_projectid:
+              - projectid
+            task_sha256:
+              - sha256
+          name: task
+          result_class: jitterbug::Schema::Result::Task
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Task
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        __VERSION: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            ddl:
+              data_type: text
+              is_nullable: 1
+            id:
+              data_type: int
+              is_auto_increment: 1
+            upgrade_sql:
+              data_type: text
+              is_nullable: 1
+            version:
+              data_type: varchar
+              size: 50
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - id
+            - version
+            - ddl
+            - upgrade_sql
+          _primaries: &5
+            - id
+          _relationships: {}
+          _unique_constraints:
+            dbix_class_deploymenthandler_versions_version:
+              - version
+            primary: *5
+          name: dbix_class_deploymenthandler_versions
+          result_class: DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResultSet
+          schema: *1
+          source_name: __VERSION
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+      storage: !!perl/hash:DBIx::Class::Storage::DBI
+        _connect_info:
+          - dbi:SQLite:dbname=jitterbug.db
+        _dbh_gen: 0
+        _dbi_connect_info:
+          - dbi:SQLite:dbname=jitterbug.db
+          - ~
+          - ~
+          - &6
+            AutoCommit: 1
+            PrintError: 0
+            RaiseError: 1
+        _dbic_connect_attributes: *6
+        _in_dbh_do: 0
+        _sql_maker: ~
+        _sql_maker_opts: {}
+        debugobj: !!perl/hash:DBIx::Class::Storage::Statistics {}
+        savepoints: []
+        schema: *1
+        transaction_depth: 0
+    sources:
+      - __VERSION
+  parser_type: SQL::Translator::Parser::DBIx::Class
+  producer_args: {}
+  producer_type: SQL::Translator::Producer::YAML
+  show_warnings: 0
+  trace: 0
+  version: 0.11007
diff --git a/sql/_source/deploy/1/001-auto.yml b/sql/_source/deploy/1/001-auto.yml
new file mode 100644
index 0000000..a237f76
--- /dev/null
+++ b/sql/_source/deploy/1/001-auto.yml
@@ -0,0 +1,511 @@
+---
+schema:
+  procedures: {}
+  tables:
+    commit_push:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - sha256
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - projectid
+          match_type: ''
+          name: commit_push_fk_projectid
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields:
+            - projectid
+          reference_table: project
+          type: FOREIGN KEY
+      fields:
+        content:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: content
+          order: 2
+          size:
+            - 0
+        projectid:
+          data_type: int
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: projectid
+          order: 3
+          size:
+            - 0
+        sha256:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: sha256
+          order: 1
+          size:
+            - 0
+        timestamp:
+          data_type: datetime
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: timestamp
+          order: 4
+          size:
+            - 0
+      indices:
+        - fields:
+            - projectid
+          name: commit_push_idx_projectid
+          options: []
+          type: NORMAL
+      name: commit_push
+      options: []
+      order: 2
+    project:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - projectid
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - name
+          match_type: ''
+          name: project_name
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        description:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: description
+          order: 4
+          size:
+            - 0
+        name:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: name
+          order: 2
+          size:
+            - 0
+        owner:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: owner
+          order: 5
+          size:
+            - 0
+        projectid:
+          data_type: int
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: projectid
+          order: 1
+          size:
+            - 0
+        url:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: url
+          order: 3
+          size:
+            - 0
+      indices: []
+      name: project
+      options: []
+      order: 1
+    task:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - taskid
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - projectid
+          match_type: ''
+          name: task_projectid
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 1
+          expression: ''
+          fields:
+            - sha256
+          match_type: ''
+          name: task_sha256
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 1
+          expression: ''
+          fields:
+            - sha256
+          match_type: ''
+          name: task_fk_sha256
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields:
+            - sha256
+          reference_table: commit_push
+          type: FOREIGN KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - projectid
+          match_type: ''
+          name: task_fk_projectid
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields:
+            - projectid
+          reference_table: project
+          type: FOREIGN KEY
+      fields:
+        projectid:
+          data_type: int
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: projectid
+          order: 3
+          size:
+            - 0
+        sha256:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: sha256
+          order: 2
+          size:
+            - 0
+        taskid:
+          data_type: int
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: taskid
+          order: 1
+          size:
+            - 0
+      indices:
+        - fields:
+            - sha256
+          name: task_idx_sha256
+          options: []
+          type: NORMAL
+        - fields:
+            - projectid
+          name: task_idx_projectid
+          options: []
+          type: NORMAL
+      name: task
+      options: []
+      order: 3
+  triggers: {}
+  views: {}
+translator:
+  add_drop_table: 0
+  filename: ~
+  no_comments: 0
+  parser_args:
+    package: &1 !!perl/hash:jitterbug::Schema
+      class_mappings:
+        DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult: __VERSION
+        jitterbug::Schema::Result::Commit: Commit
+        jitterbug::Schema::Result::Project: Project
+        jitterbug::Schema::Result::Task: Task
+      source_registrations:
+        Commit: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            content:
+              data_type: text
+              extra: {}
+            projectid:
+              data_type: int
+              extra: {}
+              is_foreign_key: 1
+            sha256:
+              data_type: text
+              extra: {}
+              is_auto_increment: 0
+            timestamp:
+              _inflate_info:
+                deflate: !!perl/code '{ "DUMMY" }'
+                inflate: !!perl/code '{ "DUMMY" }'
+              data_type: datetime
+              extra: {}
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - sha256
+            - content
+            - projectid
+            - timestamp
+          _primaries: &2
+            - sha256
+          _relationships:
+            project:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Project
+              cond:
+                foreign.projectid: self.projectid
+              source: jitterbug::Schema::Result::Project
+            tasks:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Task
+              cond:
+                foreign.taskid: self.sha256
+              source: jitterbug::Schema::Result::Task
+          _unique_constraints:
+            primary: *2
+          name: commit_push
+          result_class: jitterbug::Schema::Result::Commit
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Commit
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        Project: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            description:
+              data_type: text
+            name:
+              data_type: text
+            owner:
+              data_type: text
+            projectid:
+              data_type: int
+              is_auto_increment: 1
+            url:
+              data_type: text
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - projectid
+            - name
+            - url
+            - description
+            - owner
+          _primaries: &3
+            - projectid
+          _relationships:
+            commits:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Commit
+              cond:
+                foreign.sha256: self.projectid
+              source: jitterbug::Schema::Result::Commit
+            tasks:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Task
+              cond:
+                foreign.taskid: self.projectid
+              source: jitterbug::Schema::Result::Task
+          _unique_constraints:
+            primary: *3
+            project_name:
+              - name
+          name: project
+          result_class: jitterbug::Schema::Result::Project
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Project
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        Task: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            projectid:
+              data_type: int
+              is_foreign_key: 1
+            sha256:
+              data_type: text
+              is_foreign_key: 1
+            taskid:
+              data_type: int
+              is_auto_increment: 1
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - taskid
+            - sha256
+            - projectid
+          _primaries: &4
+            - taskid
+          _relationships:
+            commit:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Commit
+              cond:
+                foreign.sha256: self.sha256
+              source: jitterbug::Schema::Result::Commit
+            project:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Project
+              cond:
+                foreign.projectid: self.projectid
+              source: jitterbug::Schema::Result::Project
+          _unique_constraints:
+            primary: *4
+            task_projectid:
+              - projectid
+            task_sha256:
+              - sha256
+          name: task
+          result_class: jitterbug::Schema::Result::Task
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Task
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        __VERSION: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            ddl:
+              data_type: text
+              is_nullable: 1
+            id:
+              data_type: int
+              is_auto_increment: 1
+            upgrade_sql:
+              data_type: text
+              is_nullable: 1
+            version:
+              data_type: varchar
+              size: 50
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - id
+            - version
+            - ddl
+            - upgrade_sql
+          _primaries: &5
+            - id
+          _relationships: {}
+          _unique_constraints:
+            dbix_class_deploymenthandler_versions_version:
+              - version
+            primary: *5
+          name: dbix_class_deploymenthandler_versions
+          result_class: DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResultSet
+          schema: *1
+          source_name: __VERSION
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+      storage: !!perl/hash:DBIx::Class::Storage::DBI
+        _connect_info:
+          - dbi:SQLite:dbname=jitterbug.db
+        _dbh_gen: 0
+        _dbi_connect_info:
+          - dbi:SQLite:dbname=jitterbug.db
+          - ~
+          - ~
+          - &6
+            AutoCommit: 1
+            PrintError: 0
+            RaiseError: 1
+        _dbic_connect_attributes: *6
+        _in_dbh_do: 0
+        _sql_maker: ~
+        _sql_maker_opts: {}
+        debugobj: !!perl/hash:DBIx::Class::Storage::Statistics {}
+        savepoints: []
+        schema: *1
+        transaction_depth: 0
+    sources:
+      - Commit
+      - Project
+      - Task
+  parser_type: SQL::Translator::Parser::DBIx::Class
+  producer_args: {}
+  producer_type: SQL::Translator::Producer::YAML
+  show_warnings: 0
+  trace: 0
+  version: 0.11007
diff --git a/sql/_source/deploy/2/001-auto-__VERSION.yml b/sql/_source/deploy/2/001-auto-__VERSION.yml
new file mode 100644
index 0000000..7179e7f
--- /dev/null
+++ b/sql/_source/deploy/2/001-auto-__VERSION.yml
@@ -0,0 +1,316 @@
+---
+schema:
+  procedures: {}
+  tables:
+    dbix_class_deploymenthandler_versions:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - id
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - version
+          match_type: ''
+          name: dbix_class_deploymenthandler_versions_version
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        ddl:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: ddl
+          order: 3
+          size:
+            - 0
+        id:
+          data_type: int
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: id
+          order: 1
+          size:
+            - 0
+        upgrade_sql:
+          data_type: text
+          default_value: ~
+          is_nullable: 1
+          is_primary_key: 0
+          is_unique: 0
+          name: upgrade_sql
+          order: 4
+          size:
+            - 0
+        version:
+          data_type: varchar
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: version
+          order: 2
+          size:
+            - 50
+      indices: []
+      name: dbix_class_deploymenthandler_versions
+      options: []
+      order: 1
+  triggers: {}
+  views: {}
+translator:
+  add_drop_table: 0
+  filename: ~
+  no_comments: 0
+  parser_args:
+    package: &1 !!perl/hash:jitterbug::Schema
+      class_mappings:
+        DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult: __VERSION
+        jitterbug::Schema::Result::Commit: Commit
+        jitterbug::Schema::Result::Project: Project
+        jitterbug::Schema::Result::Task: Task
+      source_registrations:
+        Commit: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            content:
+              data_type: text
+              extra: {}
+            projectid:
+              data_type: int
+              extra: {}
+              is_foreign_key: 1
+            sha256:
+              data_type: text
+              extra: {}
+              is_auto_increment: 0
+            timestamp:
+              _inflate_info:
+                deflate: !!perl/code '{ "DUMMY" }'
+                inflate: !!perl/code '{ "DUMMY" }'
+              data_type: datetime
+              extra: {}
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - sha256
+            - content
+            - projectid
+            - timestamp
+          _primaries: &2
+            - sha256
+          _relationships:
+            project:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Project
+              cond:
+                foreign.projectid: self.projectid
+              source: jitterbug::Schema::Result::Project
+            tasks:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Task
+              cond:
+                foreign.taskid: self.sha256
+              source: jitterbug::Schema::Result::Task
+          _unique_constraints:
+            primary: *2
+          name: commit_push
+          result_class: jitterbug::Schema::Result::Commit
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Commit
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        Project: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            description:
+              data_type: text
+            name:
+              data_type: text
+            owner:
+              data_type: text
+            projectid:
+              data_type: int
+              is_auto_increment: 1
+            url:
+              data_type: text
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - projectid
+            - name
+            - url
+            - description
+            - owner
+          _primaries: &3
+            - projectid
+          _relationships:
+            commits:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Commit
+              cond:
+                foreign.sha256: self.projectid
+              source: jitterbug::Schema::Result::Commit
+            tasks:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Task
+              cond:
+                foreign.taskid: self.projectid
+              source: jitterbug::Schema::Result::Task
+          _unique_constraints:
+            primary: *3
+            project_name:
+              - name
+          name: project
+          result_class: jitterbug::Schema::Result::Project
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Project
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        Task: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            projectid:
+              data_type: int
+              is_foreign_key: 1
+            running:
+              data_type: bool
+              default_value: 0
+            sha256:
+              data_type: text
+              is_foreign_key: 1
+            taskid:
+              data_type: int
+              is_auto_increment: 1
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - taskid
+            - sha256
+            - projectid
+            - running
+          _primaries: &4
+            - taskid
+          _relationships:
+            commit:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Commit
+              cond:
+                foreign.sha256: self.sha256
+              source: jitterbug::Schema::Result::Commit
+            project:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Project
+              cond:
+                foreign.projectid: self.projectid
+              source: jitterbug::Schema::Result::Project
+          _unique_constraints:
+            primary: *4
+            task_projectid:
+              - projectid
+            task_sha256:
+              - sha256
+          name: task
+          result_class: jitterbug::Schema::Result::Task
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Task
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        __VERSION: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            ddl:
+              data_type: text
+              is_nullable: 1
+            id:
+              data_type: int
+              is_auto_increment: 1
+            upgrade_sql:
+              data_type: text
+              is_nullable: 1
+            version:
+              data_type: varchar
+              size: 50
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - id
+            - version
+            - ddl
+            - upgrade_sql
+          _primaries: &5
+            - id
+          _relationships: {}
+          _unique_constraints:
+            dbix_class_deploymenthandler_versions_version:
+              - version
+            primary: *5
+          name: dbix_class_deploymenthandler_versions
+          result_class: DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResultSet
+          schema: *1
+          source_name: __VERSION
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+      storage: !!perl/hash:DBIx::Class::Storage::DBI
+        _connect_info:
+          - dbi:SQLite:dbname=jitterbug.db
+        _dbh_gen: 0
+        _dbi_connect_info:
+          - dbi:SQLite:dbname=jitterbug.db
+          - ~
+          - ~
+          - &6
+            AutoCommit: 1
+            PrintError: 0
+            RaiseError: 1
+        _dbic_connect_attributes: *6
+        _in_dbh_do: 0
+        _sql_maker: ~
+        _sql_maker_opts: {}
+        debugobj: !!perl/hash:DBIx::Class::Storage::Statistics {}
+        savepoints: []
+        schema: *1
+        transaction_depth: 0
+    sources:
+      - __VERSION
+  parser_type: SQL::Translator::Parser::DBIx::Class
+  producer_args: {}
+  producer_type: SQL::Translator::Producer::YAML
+  show_warnings: 0
+  trace: 0
+  version: 0.11007
diff --git a/sql/_source/deploy/2/001-auto.yml b/sql/_source/deploy/2/001-auto.yml
new file mode 100644
index 0000000..f13eec2
--- /dev/null
+++ b/sql/_source/deploy/2/001-auto.yml
@@ -0,0 +1,525 @@
+---
+schema:
+  procedures: {}
+  tables:
+    commit_push:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - sha256
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - projectid
+          match_type: ''
+          name: commit_push_fk_projectid
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields:
+            - projectid
+          reference_table: project
+          type: FOREIGN KEY
+      fields:
+        content:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: content
+          order: 2
+          size:
+            - 0
+        projectid:
+          data_type: int
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: projectid
+          order: 3
+          size:
+            - 0
+        sha256:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: sha256
+          order: 1
+          size:
+            - 0
+        timestamp:
+          data_type: datetime
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: timestamp
+          order: 4
+          size:
+            - 0
+      indices:
+        - fields:
+            - projectid
+          name: commit_push_idx_projectid
+          options: []
+          type: NORMAL
+      name: commit_push
+      options: []
+      order: 2
+    project:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - projectid
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - name
+          match_type: ''
+          name: project_name
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+      fields:
+        description:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: description
+          order: 4
+          size:
+            - 0
+        name:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: name
+          order: 2
+          size:
+            - 0
+        owner:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: owner
+          order: 5
+          size:
+            - 0
+        projectid:
+          data_type: int
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: projectid
+          order: 1
+          size:
+            - 0
+        url:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: url
+          order: 3
+          size:
+            - 0
+      indices: []
+      name: project
+      options: []
+      order: 1
+    task:
+      constraints:
+        - deferrable: 1
+          expression: ''
+          fields:
+            - taskid
+          match_type: ''
+          name: ''
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: PRIMARY KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - projectid
+          match_type: ''
+          name: task_projectid
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 1
+          expression: ''
+          fields:
+            - sha256
+          match_type: ''
+          name: task_sha256
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields: []
+          reference_table: ''
+          type: UNIQUE
+        - deferrable: 1
+          expression: ''
+          fields:
+            - sha256
+          match_type: ''
+          name: task_fk_sha256
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields:
+            - sha256
+          reference_table: commit_push
+          type: FOREIGN KEY
+        - deferrable: 1
+          expression: ''
+          fields:
+            - projectid
+          match_type: ''
+          name: task_fk_projectid
+          on_delete: ''
+          on_update: ''
+          options: []
+          reference_fields:
+            - projectid
+          reference_table: project
+          type: FOREIGN KEY
+      fields:
+        projectid:
+          data_type: int
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: projectid
+          order: 3
+          size:
+            - 0
+        running:
+          data_type: bool
+          default_value: 0
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 0
+          name: running
+          order: 4
+          size:
+            - 0
+        sha256:
+          data_type: text
+          default_value: ~
+          is_nullable: 0
+          is_primary_key: 0
+          is_unique: 1
+          name: sha256
+          order: 2
+          size:
+            - 0
+        taskid:
+          data_type: int
+          default_value: ~
+          is_auto_increment: 1
+          is_nullable: 0
+          is_primary_key: 1
+          is_unique: 0
+          name: taskid
+          order: 1
+          size:
+            - 0
+      indices:
+        - fields:
+            - sha256
+          name: task_idx_sha256
+          options: []
+          type: NORMAL
+        - fields:
+            - projectid
+          name: task_idx_projectid
+          options: []
+          type: NORMAL
+      name: task
+      options: []
+      order: 3
+  triggers: {}
+  views: {}
+translator:
+  add_drop_table: 0
+  filename: ~
+  no_comments: 0
+  parser_args:
+    package: &1 !!perl/hash:jitterbug::Schema
+      class_mappings:
+        DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult: __VERSION
+        jitterbug::Schema::Result::Commit: Commit
+        jitterbug::Schema::Result::Project: Project
+        jitterbug::Schema::Result::Task: Task
+      source_registrations:
+        Commit: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            content:
+              data_type: text
+              extra: {}
+            projectid:
+              data_type: int
+              extra: {}
+              is_foreign_key: 1
+            sha256:
+              data_type: text
+              extra: {}
+              is_auto_increment: 0
+            timestamp:
+              _inflate_info:
+                deflate: !!perl/code '{ "DUMMY" }'
+                inflate: !!perl/code '{ "DUMMY" }'
+              data_type: datetime
+              extra: {}
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - sha256
+            - content
+            - projectid
+            - timestamp
+          _primaries: &2
+            - sha256
+          _relationships:
+            project:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Project
+              cond:
+                foreign.projectid: self.projectid
+              source: jitterbug::Schema::Result::Project
+            tasks:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Task
+              cond:
+                foreign.taskid: self.sha256
+              source: jitterbug::Schema::Result::Task
+          _unique_constraints:
+            primary: *2
+          name: commit_push
+          result_class: jitterbug::Schema::Result::Commit
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Commit
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        Project: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            description:
+              data_type: text
+            name:
+              data_type: text
+            owner:
+              data_type: text
+            projectid:
+              data_type: int
+              is_auto_increment: 1
+            url:
+              data_type: text
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - projectid
+            - name
+            - url
+            - description
+            - owner
+          _primaries: &3
+            - projectid
+          _relationships:
+            commits:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Commit
+              cond:
+                foreign.sha256: self.projectid
+              source: jitterbug::Schema::Result::Commit
+            tasks:
+              attrs:
+                accessor: multi
+                cascade_copy: 1
+                cascade_delete: 1
+                join_type: LEFT
+              class: jitterbug::Schema::Result::Task
+              cond:
+                foreign.taskid: self.projectid
+              source: jitterbug::Schema::Result::Task
+          _unique_constraints:
+            primary: *3
+            project_name:
+              - name
+          name: project
+          result_class: jitterbug::Schema::Result::Project
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Project
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        Task: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            projectid:
+              data_type: int
+              is_foreign_key: 1
+            running:
+              data_type: bool
+              default_value: 0
+            sha256:
+              data_type: text
+              is_foreign_key: 1
+            taskid:
+              data_type: int
+              is_auto_increment: 1
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - taskid
+            - sha256
+            - projectid
+            - running
+          _primaries: &4
+            - taskid
+          _relationships:
+            commit:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Commit
+              cond:
+                foreign.sha256: self.sha256
+              source: jitterbug::Schema::Result::Commit
+            project:
+              attrs:
+                accessor: single
+                is_foreign_key_constraint: 1
+                undef_on_null_fk: 1
+              class: jitterbug::Schema::Result::Project
+              cond:
+                foreign.projectid: self.projectid
+              source: jitterbug::Schema::Result::Project
+          _unique_constraints:
+            primary: *4
+            task_projectid:
+              - projectid
+            task_sha256:
+              - sha256
+          name: task
+          result_class: jitterbug::Schema::Result::Task
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::ResultSet
+          schema: *1
+          source_name: Task
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+        __VERSION: !!perl/hash:DBIx::Class::ResultSource::Table
+          _columns:
+            ddl:
+              data_type: text
+              is_nullable: 1
+            id:
+              data_type: int
+              is_auto_increment: 1
+            upgrade_sql:
+              data_type: text
+              is_nullable: 1
+            version:
+              data_type: varchar
+              size: 50
+          _columns_info_loaded: 0
+          _ordered_columns:
+            - id
+            - version
+            - ddl
+            - upgrade_sql
+          _primaries: &5
+            - id
+          _relationships: {}
+          _unique_constraints:
+            dbix_class_deploymenthandler_versions_version:
+              - version
+            primary: *5
+          name: dbix_class_deploymenthandler_versions
+          result_class: DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult
+          resultset_attributes: {}
+          resultset_class: DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResultSet
+          schema: *1
+          source_name: __VERSION
+          sqlt_deploy_callback: default_sqlt_deploy_hook
+      storage: !!perl/hash:DBIx::Class::Storage::DBI
+        _connect_info:
+          - dbi:SQLite:dbname=jitterbug.db
+        _dbh_gen: 0
+        _dbi_connect_info:
+          - dbi:SQLite:dbname=jitterbug.db
+          - ~
+          - ~
+          - &6
+            AutoCommit: 1
+            PrintError: 0
+            RaiseError: 1
+        _dbic_connect_attributes: *6
+        _in_dbh_do: 0
+        _sql_maker: ~
+        _sql_maker_opts: {}
+        debugobj: !!perl/hash:DBIx::Class::Storage::Statistics {}
+        savepoints: []
+        schema: *1
+        transaction_depth: 0
+    sources:
+      - Commit
+      - Project
+      - Task
+  parser_type: SQL::Translator::Parser::DBIx::Class
+  producer_args: {}
+  producer_type: SQL::Translator::Producer::YAML
+  show_warnings: 0
+  trace: 0
+  version: 0.11007
diff --git a/views/index.tt b/views/index.tt
index 6359157..4e7eba2 100644
--- a/views/index.tt
+++ b/views/index.tt
@@ -2,6 +2,17 @@
   <div id="content">
     <h2>Dashboard</h2>
 
+    <div class="builds-running">
+    : if $runnings {
+      <div class="running-build">
+      The following project is building:
+        : for $runnings -> $running {
+          <a href="<: $uri_base :>/task/<: $running.id :>"><: $running.project :></a>
+        : }
+        </div>
+    : }
+    </div>
+    
     <div class="columns">
 
       <div class="first"> 
@@ -26,13 +37,15 @@
       </div>
 
       <div class="last">
-        <h3>Builds pending</h3>
+        <h3>Builds pending (<: $builds.size :>)</h3>
 
+        <div class="comming-builds">
         <ul>
           : for $builds -> $build {
-          <li><a href="<: $uri_base :>task/<: $build :>"><: $build :></a></li>
+          <li><a href="<: $uri_base :>task/<: $build.id :>"><: $build.project :> (id: <: $build.id :>)</a></li>
           : }
         </ul>
+        </div>
       </div>
 
     </div>
diff --git a/views/task/index.tt b/views/task/index.tt
index 1c1f904..25bdeb9 100644
--- a/views/task/index.tt
+++ b/views/task/index.tt
@@ -1,5 +1,6 @@
 <div id="page">
-<div id="content">
-<h2>Task </h2>
-</div>
+     <div id="content">
+     <h2>Task <: $task.id :></h2>
+     started : <: $task.started_when :>
+     </div>
 </div>