summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/jitterbug.pm32
-rw-r--r--lib/jitterbug/Builder.pm5
-rw-r--r--lib/jitterbug/Hook.pm125
-rw-r--r--lib/jitterbug/Schema.pm2
-rw-r--r--lib/jitterbug/Schema/Result/Task.pm11
-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--t/003_hook_route.t213
-rw-r--r--views/index.tt17
-rw-r--r--views/task/index.tt7
33 files changed, 2587 insertions, 84 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/Builder.pm b/lib/jitterbug/Builder.pm
index a5f0cbb..deb4c5b 100644
--- a/lib/jitterbug/Builder.pm
+++ b/lib/jitterbug/Builder.pm
@@ -3,6 +3,7 @@ package jitterbug::Builder;
use strict;
use warnings;
+use DateTime;
use YAML qw/LoadFile Dump/;
use JSON;
use File::Path qw/rmtree/;
@@ -85,7 +86,9 @@ sub run_task {
my $desc = JSON::decode_json( $task->commit->content );
my $conf = $self->{'conf'};
- $desc->{'build'}{'start_time'} = time();
+ my $dt = DateTime->now();
+ $task->update({started_when => $dt});
+ $desc->{'build'}{'start_time'} = $dt->epoch;
debug("Build Start");
my $report_path = dir(
diff --git a/lib/jitterbug/Hook.pm b/lib/jitterbug/Hook.pm
index 87cfba2..fe27921 100644
--- a/lib/jitterbug/Hook.pm
+++ b/lib/jitterbug/Hook.pm
@@ -19,29 +19,21 @@ post '/' => sub {
$payload = from_json($payload);
my $repo = $payload->{repository}->{name};
+ my $ref = $payload->{ref};
+
+ if ( !_authorized_branch( $repo, $ref ) ) {
+ debug("this branch is not authorized");
+ status 200;
+ return;
+ }
my $project = schema->resultset('Project')->find( { name => $repo } );
+ $project = _create_new_project( $repo, $payload ) if !$project;
- if ( !$project ) {
- debug("need to create a new project");
- try {
- schema->txn_do(
- sub {
- $project = schema->resultset('Project')->create(
- {
- name => $repo,
- url => $payload->{repository}->{url},
- description =>
- $payload->{repository}->{description},
- owner => to_json($payload->{repository}->{owner}),
- }
- );
- }
- );
- }
- catch {
- error($_);
- };
+ if ( !_slot_available_for_task( $project->id ) ) {
+ debug("task already present for this project");
+ status 200;
+ return;
}
my $last_commit = pop @{ $payload->{commits} };
@@ -49,15 +41,85 @@ post '/' => sub {
$last_commit->{pusher} = $payload->{pushed};
$last_commit->{ref} = $payload->{ref};
+ _insert_commit($last_commit, $project);
+ _insert_new_task( $last_commit, $project );
+
+ debug("hook accepted");
+
+ { updated => $repo };
+};
+
+sub _authorized_branch {
+ my ($repo, $ref) = @_;
+ my $jtbg_conf = setting 'jitterbug';
+ my $branches_conf = $jtbg_conf->{branches};
+
+ foreach my $name ($repo, 'jt_global') {
+ if ( defined $branches_conf->{$name} ) {
+ return 0 if _should_skip( $ref, $branches_conf->{$name} );
+ }
+ }
+ return 1;
+}
+
+sub _should_skip {
+ my ( $ref, $conf ) = @_;
+ foreach my $br_name (@$conf) {
+ return 1 if $ref =~ m!^refs/heads/$br_name!;
+ }
+ return 0;
+}
+
+sub _create_new_project {
+ my ($repo, $payload) = @_;
+
+ debug("need to create a new project");
+
+ my $project;
+ try {
+ schema->txn_do(
+ sub {
+ $project = schema->resultset('Project')->create(
+ {
+ name => $repo,
+ url => $payload->{repository}->{url},
+ description => $payload->{repository}->{description},
+ owner => to_json( $payload->{repository}->{owner} ),
+ }
+ );
+ }
+ );
+ }
+ catch {
+ error($_);
+ };
+ return $project;
+}
+
+sub _slot_available_for_task {
+ my $project_id = shift;
+
+ # is there already a task for this project, and could we stack ?
+ my $jtbg_settings = setting('jitterbug') || {};
+ my $stack_option = $jtbg_settings->{options}->{stack_tasks};
+ my $total_task =
+ schema->resultset('Task')->search( { projectid => $project_id } )->count;
+
+ ( $total_task && !$stack_option) ? return 0 : return 1;
+}
+
+sub _insert_commit {
+ my ($commit, $project) = @_;
+
try {
schema->txn_do(
sub {
schema->resultset('Commit')->create(
{
- sha256 => $last_commit->{id},
- content => to_json($last_commit),
+ sha256 => $commit->{id},
+ content => to_json($commit),
projectid => $project->projectid,
- timestamp => $last_commit->{timestamp},
+ timestamp => $commit->{timestamp},
}
);
}
@@ -66,22 +128,25 @@ post '/' => sub {
catch {
error($_);
};
+}
+sub _insert_new_task {
+ my ( $commit, $project ) = @_;
try {
schema->txn_do(
sub {
schema->resultset('Task')->create(
- {sha256 => $last_commit->{id}, projectid => $project->projectid}
+ {
+ sha256 => $commit->{id},
+ projectid => $project->projectid
+ }
);
}
);
- }catch{
+ }
+ catch {
error($_);
};
-
- debug("hook accepted");
-
- { updated => $repo };
-};
+}
1;
diff --git a/lib/jitterbug/Schema.pm b/lib/jitterbug/Schema.pm
index 5014c12..c671d78 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 = '4';
+
__PACKAGE__->load_namespaces();
1;
diff --git a/lib/jitterbug/Schema/Result/Task.pm b/lib/jitterbug/Schema/Result/Task.pm
index e63e101..ad880d8 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,10 +13,18 @@ __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');
-__PACKAGE__->add_unique_constraint( [qw/projectid/] );
__PACKAGE__->add_unique_constraint( [qw/sha256/] );
__PACKAGE__->belongs_to(
project => 'jitterbug::Schema::Result::Project',
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/t/003_hook_route.t b/t/003_hook_route.t
index 72a841f..11c7af4 100644
--- a/t/003_hook_route.t
+++ b/t/003_hook_route.t
@@ -1,44 +1,173 @@
-use Test::More tests => 1;
+use Test::More tests => 13;
use strict;
use warnings;
-ok 1;
-#use jitterbug;
-#use JSON;
-#use YAML qw/LoadFile/;
-#use Dancer::Test;
-#use Dancer::Config qw/setting/;
-
-#my $content = LoadFile('t/data/test.yaml');
-
-#setting jitterbug => { namespace => 'jitterbug_test' };
-
-#route_exists [ POST => '/hook/' ], 'a route handle is defined for /';
-
-#my $response;
-
-#{
- #$response = dancer_response( POST => '/hook', );
- #is $response->{status}, 200, '200 with empty post';
-#}
-
-#{
- #my $payload = "payload=" . JSON::encode_json($content);
- ##open my $in, '<', \$payload;
-
- ##$ENV{'CONTENT_LENGTH'} = length($payload);
- ##$ENV{'CONTENT_TYPE'} = 'application/x-www-form-urlencoded';
- ##$ENV{'psgi.input'} = $in;
-
- #$response = dancer_response(
- #POST => '/hook/',
- #{
- #headers =>
- #[ 'Content-Type' => 'application/x-www-form-urlencoded' ],
- #body => $payload
- #}
- #);
-##use YAML::Syck; warn Dump $response;
- #is $response->{status}, 200;
- #is_deeply JSON::decode_json( $response->{content} ),
- #{ updated => 'Dancer' };
-#}
+
+use jitterbug;
+use jitterbug::Schema;
+
+use JSON;
+use YAML qw/LoadFile Dump/;
+
+use File::Spec;
+use File::Temp qw/tempdir/;
+
+use Dancer::Test;
+use Dancer::Config qw/setting/;
+
+my $content = LoadFile('t/data/test.yaml');
+
+my $db_dir = tempdir( CLEANUP => 1 );
+my $db_file = File::Spec->catfile( $db_dir, 'jitterbug.db' );
+my $dsn = 'dbi:SQLite:dbname=' . $db_file;
+my $schema = jitterbug::Schema->connect($dsn);
+$schema->deploy;
+
+setting plugins => {
+ DBIC => {
+ schema => {
+ skip_automake => 1,
+ pckg => "jitterbug::Schema",
+ connect_info => [$dsn]
+ }
+ }
+};
+
+route_exists [ POST => '/hook/' ], 'a route handle is defined for /';
+
+my $response;
+
+{
+ $response = dancer_response( POST => '/hook', );
+ is $response->{status}, 200, '200 with empty post';
+}
+
+{
+ my $rs = $schema->resultset('Project')->find( { name => 'Dancer' } );
+ ok !defined $rs, 'no project dancer yet';
+
+ $response = dancer_response(
+ POST => '/hook/',
+ {
+ headers =>
+ [ 'Content-Type' => 'application/x-www-form-urlencoded' ],
+ body => _generate_post_request($content),
+ }
+ );
+
+ is $response->{status}, 200, 'status OK with payload';
+ is_deeply JSON::decode_json( $response->{content} ),
+ { updated => 'Dancer' }, 'response OK with payload';
+
+ $rs = $schema->resultset('Project')->find( { name => 'Dancer' } );
+ ok $rs, 'project exists in DB';
+ is $rs->name, 'Dancer', 'project\'s name is good';
+
+ is $schema->resultset('Task')->search()->count(), 1, 'one task created';
+}
+
+{
+ $schema->resultset('Project')->search()->delete();
+ $schema->resultset('Task')->search()->delete();
+
+ # testing with invalid global branch
+ setting jitterbug => { branches => { jt_global => ['foo'], }, };
+ $content->{ref} = 'refs/heads/foo';
+ $response = dancer_response(
+ POST => '/hook/',
+ {
+ headers =>
+ [ 'Content-Type' => 'application/x-www-form-urlencoded' ],
+ body => _generate_post_request($content),
+ }
+ );
+ is $schema->resultset('Task')->search()->count(), 0, 'no task created since this branch is forbiden';
+}
+
+{
+ $schema->resultset('Project')->search()->delete();
+ $schema->resultset('Task')->search()->delete();
+
+ # testing with invalid global branch
+ setting jitterbug => { branches => { Dancer => ['foo'], }, };
+ $content->{ref} = 'refs/heads/foo';
+ $response = dancer_response(
+ POST => '/hook/',
+ {
+ headers =>
+ [ 'Content-Type' => 'application/x-www-form-urlencoded' ],
+ body => _generate_post_request($content),
+ }
+ );
+ is $schema->resultset('Task')->search()->count(), 0, 'no task created since this branch is forbiden';
+}
+
+{
+ $schema->resultset('Project')->search()->delete();
+ $schema->resultset('Task')->search()->delete();
+
+ # this branch is forbiden for another project
+ setting jitterbug => { branches => { jitterbug => ['foo'], }, };
+ $content->{ref} = 'refs/heads/foo';
+ $response = dancer_response(
+ POST => '/hook/',
+ {
+ headers =>
+ [ 'Content-Type' => 'application/x-www-form-urlencoded' ],
+ body => _generate_post_request($content),
+ }
+ );
+ is $schema->resultset('Task')->search()->count(), 1, 'one task created since this branch is authorized for this project';
+}
+
+{
+ $schema->resultset('Project')->search()->delete();
+ $schema->resultset('Task')->search()->delete();
+
+ # this branch is forbiden for another project
+ setting jitterbug => { options => { stack_tasks => 0 } };
+ for ( 1 .. 2 ) {
+ $content->{commits}->[0]->{id} = $_;
+ $response = dancer_response(
+ POST => '/hook/',
+ {
+ headers =>
+ [ 'Content-Type' => 'application/x-www-form-urlencoded' ],
+ body => _generate_post_request($content),
+ }
+ );
+ }
+ is $schema->resultset('Task')->search()->count(), 1,
+ 'can\'t stack tasks for this project';
+}
+
+{
+ $schema->resultset('Project')->search()->delete();
+ $schema->resultset('Task')->search()->delete();
+
+ # this branch is forbiden for another project
+ setting jitterbug => { options => { stack_tasks => 1 } };
+ for ( 1 .. 2 ) {
+ $content->{commits}->[0]->{id} = $_;
+ $response = dancer_response(
+ POST => '/hook/',
+ {
+ headers =>
+ [ 'Content-Type' => 'application/x-www-form-urlencoded' ],
+ body => _generate_post_request($content),
+ }
+ );
+ }
+ is $schema->resultset('Task')->search()->count(), 2,
+ 'can stack tasks for this project';
+}
+
+sub _generate_post_request {
+ my $content = shift;
+ my $payload = "payload=" . JSON::encode_json($content);
+ open my $in, '<', \$payload;
+
+ $ENV{'CONTENT_LENGTH'} = length($payload);
+ $ENV{'CONTENT_TYPE'} = 'application/x-www-form-urlencoded';
+ $ENV{'psgi.input'} = $in;
+ return $payload;
+}
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>