* Role-based access control. Only admins can create projects. Only
[?]
Nov 26, 2008, 11:25 PM
RU7AQO7U4HCWJNQTR2KRGDLLG24WYD47MWIHREV6SIAPCPDQHAWQCDependencies
- [2]
S66BOMVU* Added authentication. - [3]
M552HLIA* Support variant builds. - [4]
J5UVLXOK* Start of a basic Catalyst web interface. - [5]
X27GNHDV* Basic job info in the database. - [6]
PHX2HIVG* Store info about the build inputs in the build record. - [7]
6BLUKEQ2* Caching of "path" inputs, and fake a revision number for those. - [8]
TQKGQ5R3 - [9]
TLZ2SPBR - [10]
GWCV3TQV* BuildInputs table: link to dependencies, include store paths. - [11]
ZEHSSVFG - [12]
K5BEBWKM - [13]
L2E6EVE2* Merged the Build and Job tables. - [14]
YTZOC7C5* Editing of jobset inputs. - [15]
KOTB7BKV - [16]
YAPITGB3* Boolean inputs. - [17]
3ZCEPLNO - [18]
KFFNFE4D - [19]
B72GLND4 - [20]
DVNWJXWW* Generic declaration of build products. - [21]
CMU3YKOU* Store the release name. - [22]
ZVTSOVHN* Support Subversion checkouts. - [23]
JLDUSNUO* Unify rendering of finished and scheduled builds. - [24]
CLJQCY2X* Store info about all the build actions and allow them to be - [25]
H7CNGK4O* Log evaluation errors etc. in the DB. - [26]
BD3GRK4B* Get rid of "positive failures" and separate log phases. - [27]
TWVSALRL* Allow the maximum number of concurrent builds per platform to be - [28]
GCHNNFZP - [29]
VCOSLZRP - [30]
2AUODJBT - [31]
BVOPAMLS - [32]
SHBLLAVH* More global substitution. - [33]
67P45PY4 - [34]
WYN733ST* Store build duration, handle cached builds. - [35]
IK53RV4V - [36]
JD27RBKM - [37]
7YBYT2LQ - [*]
W6DC6K4I* Happy Javascript hacking. - [*]
UVMFS73T* Some jQuery / CSS hackery. - [*]
PKPWUHUX* Idem. - [*]
US27ZTX5* HydraFrontend -> Hydra. - [*]
N22GPKYT* Put info about logs / build products in the DB.
Change contents
- edit in src/Hydra/hydra.conf at line 16
role_relation userrolesrole_field role - replacement in src/Hydra/lib/Hydra/Controller/Root.pm at line 77
}} - edit in src/Hydra/lib/Hydra/Controller/Root.pm at line 101
return requireLogin($c) if !$c->user_exists; - edit in src/Hydra/lib/Hydra/Controller/Root.pm at line 120
$project->owner(trim($c->request->params->{owner}))if $c->check_user_roles('admin'); - edit in src/Hydra/lib/Hydra/Controller/Root.pm at line 239
if ($subcommand ne "") {return requireLogin($c) if !$c->user_exists;if (!$c->check_user_roles('admin') && $c->user->username ne $project->owner) {return error($c, "Only the project owner or the administrator can perform this operation.");}if ($subcommand eq "edit") {$c->stash->{edit} = 1;}elsif ($subcommand eq "submit" && $isPosted) {$c->model('DB')->schema->txn_do(sub {updateProject($c, $project);});return $c->res->redirect($c->uri_for("/project", trim $c->request->params->{name}));} - replacement in src/Hydra/lib/Hydra/Controller/Root.pm at line 259[3.663]→[3.663:879](∅→∅),[3.879]→[3.1229:1322](∅→∅),[3.88]→[3.952:1253](∅→∅),[3.1322]→[3.952:1253](∅→∅),[3.952]→[3.952:1253](∅→∅)
if ($subcommand eq "edit") {$c->stash->{edit} = 1;} elsif ($subcommand eq "submit" && $isPosted) {$c->model('DB')->schema->txn_do(sub {updateProject($c, $project);});return $c->res->redirect($c->uri_for("/project", trim $c->request->params->{name}));} elsif ($subcommand eq "delete" && $isPosted) {$c->model('DB')->schema->txn_do(sub {$project->delete;});return $c->res->redirect($c->uri_for("/"));} elsif ($subcommand eq "") {} else {return error($c, "Unknown subcommand $subcommand.");elsif ($subcommand eq "delete" && $isPosted) {$c->model('DB')->schema->txn_do(sub {$project->delete;});return $c->res->redirect($c->uri_for("/"));}else {return error($c, "Unknown subcommand $subcommand.");} - edit in src/Hydra/lib/Hydra/Controller/Root.pm at line 301
return requireLogin($c) if !$c->user_exists;if (!$c->check_user_roles('admin')) {return error($c, "Only administrators can create projects.");} - replacement in src/Hydra/lib/Hydra/Schema/Buildinputs.pm at line 39
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:LRcAsbLWbetVw+DCDnv/9w# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:BEl4PIMuykTwqyl7La0pKQ - replacement in src/Hydra/lib/Hydra/Schema/Buildproducts.pm at line 36
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Pu6gWxltfVJJ+9DBiC9bYg# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:uEkpbb6hgGe47sDE7KtLDQ - replacement in src/Hydra/lib/Hydra/Schema/Buildresultinfo.pm at line 32
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:X5GXZRLAaCMl8OKBGjtztw# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:CfJnTtjRXGV5dD/MWbrJxA - replacement in src/Hydra/lib/Hydra/Schema/Builds.pm at line 73
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:h32zqOEGcpXQy7pshiWVMA# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:AFGyXbj7hMxpQxjzgpvrCw - replacement in src/Hydra/lib/Hydra/Schema/Buildschedulinginfo.pm at line 26
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:egegc7kFKTt9cEGuomi0cQ# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:O6brsCdVF4TfvtmI9R+TOA - replacement in src/Hydra/lib/Hydra/Schema/Buildsteps.pm at line 38
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:kFD90OFRM1aqVVCBCh/geA# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:klPmbTcngdzKN+Dzhj8gvw - replacement in src/Hydra/lib/Hydra/Schema/Cachedpathinputs.pm at line 25
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:r/3GaLIIWaX1fh8kfuQp+w# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:vGVYmR4k3kezEwiCGSXZWQ - replacement in src/Hydra/lib/Hydra/Schema/Cachedsubversioninputs.pm at line 23
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:yTp1XcBSQ+6OJvVLugRh1w# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ORooKeTpZBPOQCgosHLGeg - replacement in src/Hydra/lib/Hydra/Schema/Jobsetinputalts.pm at line 36
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:lYdNLENxLW2mtZ2w+jou8w# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ZeFpiIuYHvaFqRSppuUpoA - replacement in src/Hydra/lib/Hydra/Schema/Jobsetinputs.pm at line 46
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Bk/vLWpBjR3ZU0p1KN7KfA# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:/PmcpU0eiLZT+dlUZYyTaQ - replacement in src/Hydra/lib/Hydra/Schema/Jobsets.pm at line 53
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9xvvQg/H0oibycB6B45V5A# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:EGgAWXbhcEC0uBobJMfpUw - edit in src/Hydra/lib/Hydra/Schema/Projects.pm at line 19
"owner",{ data_type => "text", is_nullable => 0, size => undef }, - replacement in src/Hydra/lib/Hydra/Schema/Projects.pm at line 35
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:3YMBhMqCjtpUjoTx4JLTOw# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:jdyfk3vHisJRyE+VNR6dNA - replacement in src/Hydra/lib/Hydra/Schema/Systemtypes.pm at line 19
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:SSKVFeg7ieeLJcF+s1uWWw# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:N/yG0cEhf0Y9Ve9YkdwRfA - file addition: Userroles.pm[41.207]
package Hydra::Schema::Userroles;use strict;use warnings;use base 'DBIx::Class';__PACKAGE__->load_components("Core");__PACKAGE__->table("UserRoles");__PACKAGE__->add_columns("username",{ data_type => "text", is_nullable => 0, size => undef },"role",{ data_type => "text", is_nullable => 0, size => undef },);__PACKAGE__->set_primary_key("username", "role");__PACKAGE__->belongs_to("username", "Hydra::Schema::Users", { username => "username" });# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:f16iU2I/Htdo7mXHvAdwyQ# You can replace this text with custom content, and it will be preserved on regeneration1; - edit in src/Hydra/lib/Hydra/Schema/Users.pm at line 21
__PACKAGE__->has_many("userroles","Hydra::Schema::Userroles",{ "foreign.username" => "self.username" },); - replacement in src/Hydra/lib/Hydra/Schema/Users.pm at line 28
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:BgF6FK+9d7+cc72sp6pfCQ# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:wwRBfogrkKN2QdgmFjcUlA - replacement in src/Hydra/lib/Hydra/Schema.pm at line 11
# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-26 20:02:52# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:jK/9VMZBot2RJwtlHA6QIg# Created by DBIx::Class::Schema::Loader v0.04005 @ 2008-11-27 00:07:44# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:OcrPIHyQBUa+kF79Ltf95g - edit in src/Hydra/lib/Hydra.pm at line 14
Authorization::Roles - file addition: login.tt[42.857]
[% WRAPPER layout.tt title="Login to Hydra" %][% PROCESS common.tt %]<h1>Login</h1>[% IF c.user_exists %]<p>You are already logged in as <tt>[% c.user.username %]</tt>.You can <a href="[% c.uri_for('/logout') %]">logout</a> here.</p>[% ELSE %][% IF errorMsg %]<p class="error">Error: [% errorMsg %]</p>[% END %]<form method="post" action="[% c.uri_for('/login') %]"><table class="layoutTable"><tr><td>Username:</td><td><input type="text" name="username" /></td></tr><tr><td>Password:</td><td><input type="password" name="password" /></td></tr><tr colspan="2"><td><input type="submit" name="login" value="Login" /></td></tr></table></form>[% END %][% END %] - edit in src/Hydra/root/project.tt at line 165
</tr><tr><th>Owner:</th><td><tt>[% INCLUDE maybeEditString param="owner" value=curProject.owner edit=(edit && c.check_user_roles('admin')) %]</tt></td> - edit in src/hydra.sql at line 157
owner text not null,foreign key (owner) references Users(userName) -- ignored by sqlite - edit in src/hydra.sql at line 274[3.5626]
create table UserRoles (userName text not null,role text not null,primary key (userName, role),foreign key (userName) references Users(userName) -- ignored by sqlite);create trigger cascadeUserDeletebefore delete on Usersfor each row begindelete from UserRoles where userName = old.userName;end;