From 45605291eff0216a8d0b4e1d22dde4a3d69cbb15 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 20:53:24 +0100 Subject: load tasks and display them on the dashboard --- lib/jitterbug.pm | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/jitterbug.pm b/lib/jitterbug.pm index c876cb6..2da9e09 100644 --- a/lib/jitterbug.pm +++ b/lib/jitterbug.pm @@ -9,9 +9,16 @@ 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 }; +}; + +sub _get_projects { my @projects = (); @@ -41,7 +48,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; -- cgit v1.2.3 From cfdb6f235e3b32541a1743c47fbfe17c957116d2 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 20:53:54 +0100 Subject: add pending status to the schema (TODO: need a script to migrate the schema) --- lib/jitterbug/Schema/Result/Task.pm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/jitterbug/Schema/Result/Task.pm b/lib/jitterbug/Schema/Result/Task.pm index e63e101..331deb4 100644 --- a/lib/jitterbug/Schema/Result/Task.pm +++ b/lib/jitterbug/Schema/Result/Task.pm @@ -12,6 +12,10 @@ __PACKAGE__->add_columns( data_type => 'int', is_foreign_key => 1, }, + running => { + data_type => 'bool', + default_value => 0, + }, ); __PACKAGE__->set_primary_key('taskid'); -- cgit v1.2.3 From 7b63d950c4dd122777fcd8a1aab9b01f3d46208f Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 20:54:06 +0100 Subject: we want a find, not a search here --- lib/jitterbug/Task.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); -- cgit v1.2.3 From c7680d8612049a826f3e17389ae9f74ac33a7df5 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 20:54:14 +0100 Subject: update templates and css --- public/css/style.css | 4 +++- views/index.tt | 4 +++- views/task/index.tt | 6 +++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/public/css/style.css b/public/css/style.css index fdd5d32..00defda 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -233,10 +233,12 @@ 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} + .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/views/index.tt b/views/index.tt index 6359157..f82aa5e 100644 --- a/views/index.tt +++ b/views/index.tt @@ -28,11 +28,13 @@

Builds pending

+
+
diff --git a/views/task/index.tt b/views/task/index.tt index 1c1f904..baa76bf 100644 --- a/views/task/index.tt +++ b/views/task/index.tt @@ -1,5 +1,5 @@
-
-

Task

-
+
+

Task <: $task.id :>

+
-- cgit v1.2.3 From 672eac1ffb7aaf62c651ee63cf069c8826dfca41 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 21:29:11 +0100 Subject: add version to our schema --- lib/jitterbug/Schema.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/jitterbug/Schema.pm b/lib/jitterbug/Schema.pm index 5014c12..5b42275 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 = '2'; + __PACKAGE__->load_namespaces(); 1; -- cgit v1.2.3 From d769fb38e0acab6b3ff6c43652a5fc422acafb55 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 21:31:16 +0100 Subject: script to migrate/upgrade dbix schema --- scripts/upgrade_db.pl | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 scripts/upgrade_db.pl 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"; -- cgit v1.2.3 From a63bd2e0d7d87d48cadcc42cf2f0a89e4cb58756 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 21:31:59 +0100 Subject: don't ignore .sql files --- .gitignore | 3 +- sql/_source/deploy/1/001-auto-__VERSION.yml | 312 +++++++++++++++++ sql/_source/deploy/1/001-auto.yml | 511 +++++++++++++++++++++++++++ sql/_source/deploy/2/001-auto-__VERSION.yml | 316 +++++++++++++++++ sql/_source/deploy/2/001-auto.yml | 525 ++++++++++++++++++++++++++++ 5 files changed, 1665 insertions(+), 2 deletions(-) create mode 100644 sql/_source/deploy/1/001-auto-__VERSION.yml create mode 100644 sql/_source/deploy/1/001-auto.yml create mode 100644 sql/_source/deploy/2/001-auto-__VERSION.yml create mode 100644 sql/_source/deploy/2/001-auto.yml diff --git a/.gitignore b/.gitignore index 87ae7ae..7eb4e9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ logs/* -*.db -*.sql \ No newline at end of file +*.db \ No newline at end of file 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 -- cgit v1.2.3 From 0e615cf95a4fe198eed9ce125804767d1f38d80f Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 21:32:25 +0100 Subject: add sql schema for various version --- sql/MySQL/deploy/1/001-auto-__VERSION.sql | 18 ++++++++ sql/MySQL/deploy/1/001-auto.sql | 46 ++++++++++++++++++ sql/MySQL/deploy/2/001-auto-__VERSION.sql | 18 ++++++++ sql/MySQL/deploy/2/001-auto.sql | 47 +++++++++++++++++++ sql/MySQL/downgrade/2-1/001-auto.sql | 12 +++++ sql/MySQL/upgrade/1-2/001-auto.sql | 12 +++++ sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql | 17 +++++++ sql/PostgreSQL/deploy/1/001-auto.sql | 63 +++++++++++++++++++++++++ sql/PostgreSQL/deploy/2/001-auto-__VERSION.sql | 17 +++++++ sql/PostgreSQL/deploy/2/001-auto.sql | 64 ++++++++++++++++++++++++++ sql/PostgreSQL/downgrade/2-1/001-auto.sql | 12 +++++ sql/PostgreSQL/upgrade/1-2/001-auto.sql | 12 +++++ sql/SQLite/deploy/1/001-auto-__VERSION.sql | 18 ++++++++ sql/SQLite/deploy/1/001-auto.sql | 42 +++++++++++++++++ sql/SQLite/deploy/2/001-auto-__VERSION.sql | 18 ++++++++ sql/SQLite/deploy/2/001-auto.sql | 43 +++++++++++++++++ sql/SQLite/downgrade/2-1/001-auto.sql | 47 +++++++++++++++++++ sql/SQLite/upgrade/1-2/001-auto.sql | 12 +++++ 18 files changed, 518 insertions(+) create mode 100644 sql/MySQL/deploy/1/001-auto-__VERSION.sql create mode 100644 sql/MySQL/deploy/1/001-auto.sql create mode 100644 sql/MySQL/deploy/2/001-auto-__VERSION.sql create mode 100644 sql/MySQL/deploy/2/001-auto.sql create mode 100644 sql/MySQL/downgrade/2-1/001-auto.sql create mode 100644 sql/MySQL/upgrade/1-2/001-auto.sql create mode 100644 sql/PostgreSQL/deploy/1/001-auto-__VERSION.sql create mode 100644 sql/PostgreSQL/deploy/1/001-auto.sql create mode 100644 sql/PostgreSQL/deploy/2/001-auto-__VERSION.sql create mode 100644 sql/PostgreSQL/deploy/2/001-auto.sql create mode 100644 sql/PostgreSQL/downgrade/2-1/001-auto.sql create mode 100644 sql/PostgreSQL/upgrade/1-2/001-auto.sql create mode 100644 sql/SQLite/deploy/1/001-auto-__VERSION.sql create mode 100644 sql/SQLite/deploy/1/001-auto.sql create mode 100644 sql/SQLite/deploy/2/001-auto-__VERSION.sql create mode 100644 sql/SQLite/deploy/2/001-auto.sql create mode 100644 sql/SQLite/downgrade/2-1/001-auto.sql create mode 100644 sql/SQLite/upgrade/1-2/001-auto.sql 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; + -- cgit v1.2.3 From 696b319385daa88837af21de1b3a2a3c3c3619ea Mon Sep 17 00:00:00 2001 From: franck cuny Date: Mon, 24 Jan 2011 21:46:43 +0100 Subject: display current build if any --- lib/jitterbug.pm | 3 ++- views/index.tt | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/jitterbug.pm b/lib/jitterbug.pm index 2da9e09..1bf3aab 100644 --- a/lib/jitterbug.pm +++ b/lib/jitterbug.pm @@ -15,7 +15,8 @@ get '/' => sub { my $projects = _get_projects(); my ( $builds, $runnings ) = _get_builds(); - template 'index', { projects => $projects, builds => $builds }; + template 'index', + { projects => $projects, builds => $builds, runnings => $runnings }; }; sub _get_projects { diff --git a/views/index.tt b/views/index.tt index f82aa5e..d657f48 100644 --- a/views/index.tt +++ b/views/index.tt @@ -2,6 +2,15 @@

Dashboard

+
+ : if $runnings { + The following projects are building: + : for $runnings -> $running { + <: $running.project :> + : } + : } +
+
@@ -26,7 +35,7 @@
-

Builds pending

+

Builds pending (<: $builds.size :>)

    -- cgit v1.2.3 From 207eb36a76f53e35fbbbb9ef5f5ed7e1ddae8c59 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 13 Feb 2011 13:56:53 +0100 Subject: prepare to update schema again --- lib/jitterbug/Schema.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jitterbug/Schema.pm b/lib/jitterbug/Schema.pm index 5b42275..f47d7e9 100644 --- a/lib/jitterbug/Schema.pm +++ b/lib/jitterbug/Schema.pm @@ -1,7 +1,7 @@ package jitterbug::Schema; use base qw/DBIx::Class::Schema/; -our $VERSION = '2'; +our $VERSION = '3'; __PACKAGE__->load_namespaces(); -- cgit v1.2.3 From afca829e55239b89a195c1035e8e5b40ca86e011 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 13 Feb 2011 13:57:13 +0100 Subject: column started_when: datetime when the build started --- lib/jitterbug/Schema/Result/Task.pm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/jitterbug/Schema/Result/Task.pm b/lib/jitterbug/Schema/Result/Task.pm index 331deb4..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', @@ -13,8 +14,13 @@ __PACKAGE__->add_columns( is_foreign_key => 1, }, running => { - data_type => 'bool', - default_value => 0, + data_type => 'bool', + default_value => 0, + }, + started_when => { + data_type => 'datetime', + is_nullable => 1, + datetime_undef_if_invalid => 1 }, ); -- cgit v1.2.3 From 37dae747364370453e0d54d1b2a7aec289f71a4b Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 13 Feb 2011 13:58:10 +0100 Subject: update templates to show informations about running tasks --- public/css/style.css | 1 + views/index.tt | 4 +++- views/task/index.tt | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/public/css/style.css b/public/css/style.css index 00defda..d22b898 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -234,6 +234,7 @@ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",m .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%;} diff --git a/views/index.tt b/views/index.tt index d657f48..4e7eba2 100644 --- a/views/index.tt +++ b/views/index.tt @@ -4,10 +4,12 @@
    : if $runnings { - The following projects are building: +
    + The following project is building: : for $runnings -> $running { <: $running.project :> : } +
    : }
    diff --git a/views/task/index.tt b/views/task/index.tt index baa76bf..25bdeb9 100644 --- a/views/task/index.tt +++ b/views/task/index.tt @@ -1,5 +1,6 @@

    Task <: $task.id :>

    + started : <: $task.started_when :>
    -- cgit v1.2.3 From b0957451e9763bc5bde74de5556d54619897d292 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 13 Feb 2011 14:22:44 +0100 Subject: use DateTime --- lib/jitterbug/Builder.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/jitterbug/Builder.pm b/lib/jitterbug/Builder.pm index a836f70..e2d97e7 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/; -- cgit v1.2.3 From 75ee0947cd6eb427dd5dad728276483305aeb668 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 13 Feb 2011 14:25:17 +0100 Subject: that's why we want datetime --- lib/jitterbug/Builder.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/jitterbug/Builder.pm b/lib/jitterbug/Builder.pm index e2d97e7..1f201e2 100644 --- a/lib/jitterbug/Builder.pm +++ b/lib/jitterbug/Builder.pm @@ -86,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( -- cgit v1.2.3 From 6e662082746507eadd10ec8bcd870a770c777134 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 13 Feb 2011 15:54:10 +0100 Subject: add configuration option to skip some branches; add tests for the Hook --- lib/jitterbug/Hook.pm | 111 +++++++++++++++++++++++--------- t/003_hook_route.t | 171 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 209 insertions(+), 73 deletions(-) diff --git a/lib/jitterbug/Hook.pm b/lib/jitterbug/Hook.pm index 87cfba2..bf483d5 100644 --- a/lib/jitterbug/Hook.pm +++ b/lib/jitterbug/Hook.pm @@ -19,45 +19,91 @@ post '/' => sub { $payload = from_json($payload); my $repo = $payload->{repository}->{name}; + my $ref = $payload->{ref}; + + my $authorized = _authorized_branch( $repo, $ref ); + if ( !$authorized ) { + debug("this branch is not authorized"); + status 200; + return; + } my $project = schema->resultset('Project')->find( { name => $repo } ); - 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($_); - }; - } + $project = _create_new_project($repo, $payload) if !$project; my $last_commit = pop @{ $payload->{commits} }; $last_commit->{compare} = $payload->{compare}; $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 _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 +112,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/t/003_hook_route.t b/t/003_hook_route.t index 72a841f..8327755 100644 --- a/t/003_hook_route.t +++ b/t/003_hook_route.t @@ -1,44 +1,131 @@ -use Test::More tests => 1; +use Test::More tests => 11; 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'; +} + +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; +} -- cgit v1.2.3 From e03879fe743957c24949000d078f4ffe0d2ef02c Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 13 Feb 2011 16:20:09 +0100 Subject: inside the hook, we check if we can add more than one task for this project the schema is updated to remove the constraint --- lib/jitterbug/Hook.pm | 22 +++++++++++++++++++--- lib/jitterbug/Schema.pm | 2 +- lib/jitterbug/Schema/Result/Task.pm | 1 - 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/jitterbug/Hook.pm b/lib/jitterbug/Hook.pm index bf483d5..fe27921 100644 --- a/lib/jitterbug/Hook.pm +++ b/lib/jitterbug/Hook.pm @@ -21,16 +21,20 @@ post '/' => sub { my $repo = $payload->{repository}->{name}; my $ref = $payload->{ref}; - my $authorized = _authorized_branch( $repo, $ref ); - if ( !$authorized ) { + 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; - $project = _create_new_project($repo, $payload) if !$project; + if ( !_slot_available_for_task( $project->id ) ) { + debug("task already present for this project"); + status 200; + return; + } my $last_commit = pop @{ $payload->{commits} }; $last_commit->{compare} = $payload->{compare}; @@ -92,6 +96,18 @@ sub _create_new_project { 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) = @_; diff --git a/lib/jitterbug/Schema.pm b/lib/jitterbug/Schema.pm index f47d7e9..c671d78 100644 --- a/lib/jitterbug/Schema.pm +++ b/lib/jitterbug/Schema.pm @@ -1,7 +1,7 @@ package jitterbug::Schema; use base qw/DBIx::Class::Schema/; -our $VERSION = '3'; +our $VERSION = '4'; __PACKAGE__->load_namespaces(); diff --git a/lib/jitterbug/Schema/Result/Task.pm b/lib/jitterbug/Schema/Result/Task.pm index 2eaed62..ad880d8 100644 --- a/lib/jitterbug/Schema/Result/Task.pm +++ b/lib/jitterbug/Schema/Result/Task.pm @@ -25,7 +25,6 @@ __PACKAGE__->add_columns( ); __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', -- cgit v1.2.3 From 932c7e9f0ddd47db4d8384dba9a692ffdb046b0c Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sun, 13 Feb 2011 16:20:14 +0100 Subject: add more tests --- t/003_hook_route.t | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/t/003_hook_route.t b/t/003_hook_route.t index 8327755..11c7af4 100644 --- a/t/003_hook_route.t +++ b/t/003_hook_route.t @@ -1,4 +1,4 @@ -use Test::More tests => 11; +use Test::More tests => 13; use strict; use warnings; @@ -119,6 +119,48 @@ my $response; 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); -- cgit v1.2.3