Remove the "releases" feature
We haven't used this in many years (it was really only used for nix and patchelf releases).
This commit is contained in:
@ -554,35 +554,6 @@ sub bump : Chained('buildChain') PathPart('bump') {
|
||||
}
|
||||
|
||||
|
||||
sub add_to_release : Chained('buildChain') PathPart('add-to-release') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
my $build = $c->stash->{build};
|
||||
|
||||
requireProjectOwner($c, $build->project);
|
||||
|
||||
my $releaseName = trim $c->request->params->{name};
|
||||
|
||||
my $release = $build->project->releases->find({name => $releaseName});
|
||||
|
||||
error($c, "This project has no release named `$releaseName'.") unless $release;
|
||||
|
||||
error($c, "This build is already a part of release `$releaseName'.")
|
||||
if $release->releasemembers->find({build => $build->id});
|
||||
|
||||
foreach my $output ($build->buildoutputs) {
|
||||
error($c, "This build is no longer available.") unless isValidPath $output->path;
|
||||
registerRoot $output->path;
|
||||
}
|
||||
|
||||
$release->releasemembers->create({build => $build->id, description => $build->description});
|
||||
|
||||
$c->flash->{successMsg} = "Build added to project <tt>$releaseName</tt>.";
|
||||
|
||||
$c->res->redirect($c->uri_for($self->action_for("build"), $c->req->captures));
|
||||
}
|
||||
|
||||
|
||||
sub get_info : Chained('buildChain') PathPart('api/get-info') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
my $build = $c->stash->{build};
|
||||
|
@ -130,42 +130,6 @@ sub view_GET {
|
||||
}
|
||||
|
||||
|
||||
sub release : Chained('evalChain') PathPart('release') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
my $eval = $c->stash->{eval};
|
||||
|
||||
requireProjectOwner($c, $c->stash->{project});
|
||||
|
||||
my @builds = $eval->builds;
|
||||
|
||||
my $releaseName;
|
||||
$releaseName ||= $_->releasename foreach @builds;
|
||||
|
||||
# If no release name has been defined by any of the builds, compose one of the project name and evaluation id
|
||||
$releaseName = $eval->get_column('project') . "-" . $eval->id unless defined $releaseName;
|
||||
|
||||
my $release;
|
||||
|
||||
$c->model('DB')->schema->txn_do(sub {
|
||||
|
||||
$release = $c->stash->{project}->releases->create(
|
||||
{ name => $releaseName
|
||||
, timestamp => time
|
||||
});
|
||||
|
||||
foreach my $build (@builds) {
|
||||
$release->releasemembers->create(
|
||||
{ build => $build->id
|
||||
, description => $build->description
|
||||
}) if $build->buildstatus == 0;
|
||||
}
|
||||
});
|
||||
|
||||
$c->res->redirect($c->uri_for($c->controller('Release')->action_for('view'),
|
||||
[$c->stash->{project}->name, $release->name]));
|
||||
}
|
||||
|
||||
|
||||
sub create_jobset : Chained('evalChain') PathPart('create-jobset') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
my $eval = $c->stash->{eval};
|
||||
|
@ -29,8 +29,6 @@ sub project_GET {
|
||||
$c->stash->{template} = 'project.tt';
|
||||
|
||||
$c->stash->{jobsets} = [jobsetOverview($c, $c->stash->{project})];
|
||||
$c->stash->{releases} = [$c->stash->{project}->releases->search({},
|
||||
{order_by => ["timestamp DESC"]})];
|
||||
|
||||
$self->status_ok($c, entity => $c->stash->{project});
|
||||
}
|
||||
@ -182,35 +180,4 @@ sub get_builds : Chained('projectChain') PathPart('') CaptureArgs(0) {
|
||||
}
|
||||
|
||||
|
||||
sub create_release : Chained('projectChain') PathPart('create-release') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
requireProjectOwner($c, $c->stash->{project});
|
||||
$c->stash->{template} = 'edit-release.tt';
|
||||
$c->stash->{create} = 1;
|
||||
}
|
||||
|
||||
|
||||
sub create_release_submit : Chained('projectChain') PathPart('create-release/submit') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
requireProjectOwner($c, $c->stash->{project});
|
||||
|
||||
my $releaseName = $c->request->params->{name};
|
||||
|
||||
my $release;
|
||||
$c->model('DB')->schema->txn_do(sub {
|
||||
# Note: $releaseName is validated in updateRelease, which will
|
||||
# abort the transaction if the name isn't valid.
|
||||
$release = $c->stash->{project}->releases->create(
|
||||
{ name => $releaseName
|
||||
, timestamp => time
|
||||
});
|
||||
Hydra::Controller::Release::updateRelease($c, $release);
|
||||
});
|
||||
|
||||
$c->res->redirect($c->uri_for($c->controller('Release')->action_for('view'),
|
||||
[$c->stash->{project}->name, $release->name]));
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
@ -1,81 +0,0 @@
|
||||
package Hydra::Controller::Release;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use base 'Catalyst::Controller';
|
||||
use Hydra::Helper::Nix;
|
||||
use Hydra::Helper::CatalystUtils;
|
||||
|
||||
|
||||
sub release : Chained('/') PathPart('release') CaptureArgs(2) {
|
||||
my ($self, $c, $projectName, $releaseName) = @_;
|
||||
|
||||
$c->stash->{project} = $c->model('DB::Projects')->find($projectName)
|
||||
or notFound($c, "Project $projectName doesn't exist.");
|
||||
|
||||
$c->stash->{release} = $c->stash->{project}->releases->find({name => $releaseName})
|
||||
or notFound($c, "Release $releaseName doesn't exist.");
|
||||
}
|
||||
|
||||
|
||||
sub view : Chained('release') PathPart('') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
$c->stash->{template} = 'release.tt';
|
||||
$c->stash->{members} = [$c->stash->{release}->releasemembers->search({},
|
||||
{order_by => ["description"]})];
|
||||
}
|
||||
|
||||
|
||||
sub updateRelease {
|
||||
my ($c, $release) = @_;
|
||||
|
||||
my $releaseName = trim $c->request->params->{name};
|
||||
error($c, "Invalid release name: $releaseName")
|
||||
unless $releaseName =~ /^$relNameRE$/;
|
||||
|
||||
$release->update(
|
||||
{ name => $releaseName
|
||||
, description => trim $c->request->params->{description}
|
||||
});
|
||||
|
||||
$release->releasemembers->delete;
|
||||
foreach my $param (keys %{$c->request->params}) {
|
||||
next unless $param =~ /^member-(\d+)-description$/;
|
||||
my $buildId = $1;
|
||||
my $description = trim $c->request->params->{"member-$buildId-description"};
|
||||
$release->releasemembers->create({ build => $buildId, description => $description });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub edit : Chained('release') PathPart('edit') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
requireProjectOwner($c, $c->stash->{project});
|
||||
$c->stash->{template} = 'edit-release.tt';
|
||||
$c->stash->{members} = [$c->stash->{release}->releasemembers->search({},
|
||||
{order_by => ["description"]})];
|
||||
}
|
||||
|
||||
|
||||
sub submit : Chained('release') PathPart('submit') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
requireProjectOwner($c, $c->stash->{project});
|
||||
|
||||
if (($c->request->params->{action} || "") eq "delete") {
|
||||
$c->model('DB')->schema->txn_do(sub {
|
||||
$c->stash->{release}->delete;
|
||||
});
|
||||
$c->res->redirect($c->uri_for($c->controller('Project')->action_for('project'),
|
||||
[$c->stash->{project}->name]));
|
||||
} else {
|
||||
$c->model('DB')->schema->txn_do(sub {
|
||||
updateRelease($c, $c->stash->{release});
|
||||
});
|
||||
$c->res->redirect($c->uri_for($self->action_for("view"),
|
||||
[$c->stash->{project}->name, $c->stash->{release}->name]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1;
|
@ -529,21 +529,6 @@ __PACKAGE__->belongs_to(
|
||||
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "CASCADE" },
|
||||
);
|
||||
|
||||
=head2 releasemembers
|
||||
|
||||
Type: has_many
|
||||
|
||||
Related object: L<Hydra::Schema::ReleaseMembers>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->has_many(
|
||||
"releasemembers",
|
||||
"Hydra::Schema::ReleaseMembers",
|
||||
{ "foreign.build" => "self.id" },
|
||||
undef,
|
||||
);
|
||||
|
||||
=head2 aggregates
|
||||
|
||||
Type: many_to_many
|
||||
@ -573,8 +558,8 @@ __PACKAGE__->many_to_many(
|
||||
);
|
||||
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2020-02-06 12:34:25
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:EEXlcKN/ydXJ129vT0jTUw
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2020-05-06 12:32:57
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:3IyFj/9Zf/hvmhBY4U/IBQ
|
||||
|
||||
__PACKAGE__->has_many(
|
||||
"dependents",
|
||||
|
@ -247,36 +247,6 @@ __PACKAGE__->has_many(
|
||||
undef,
|
||||
);
|
||||
|
||||
=head2 releasemembers
|
||||
|
||||
Type: has_many
|
||||
|
||||
Related object: L<Hydra::Schema::ReleaseMembers>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->has_many(
|
||||
"releasemembers",
|
||||
"Hydra::Schema::ReleaseMembers",
|
||||
{ "foreign.project" => "self.name" },
|
||||
undef,
|
||||
);
|
||||
|
||||
=head2 releases
|
||||
|
||||
Type: has_many
|
||||
|
||||
Related object: L<Hydra::Schema::Releases>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->has_many(
|
||||
"releases",
|
||||
"Hydra::Schema::Releases",
|
||||
{ "foreign.project" => "self.name" },
|
||||
undef,
|
||||
);
|
||||
|
||||
=head2 starredjobs
|
||||
|
||||
Type: has_many
|
||||
@ -303,8 +273,8 @@ Composing rels: L</projectmembers> -> username
|
||||
__PACKAGE__->many_to_many("usernames", "projectmembers", "username");
|
||||
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2020-02-06 12:22:36
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:pcF/8351zyo9VL6N5eimdQ
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2020-05-06 12:32:57
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:dEIVgrFGilPfITprs6nYuA
|
||||
|
||||
my %hint = (
|
||||
columns => [
|
||||
@ -316,7 +286,6 @@ my %hint = (
|
||||
"owner"
|
||||
],
|
||||
relations => {
|
||||
releases => "name",
|
||||
jobsets => "name"
|
||||
}
|
||||
);
|
||||
|
@ -1,141 +0,0 @@
|
||||
use utf8;
|
||||
package Hydra::Schema::ReleaseMembers;
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader
|
||||
# DO NOT MODIFY THE FIRST PART OF THIS FILE
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Hydra::Schema::ReleaseMembers
|
||||
|
||||
=cut
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use base 'DBIx::Class::Core';
|
||||
|
||||
=head1 COMPONENTS LOADED
|
||||
|
||||
=over 4
|
||||
|
||||
=item * L<Hydra::Component::ToJSON>
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->load_components("+Hydra::Component::ToJSON");
|
||||
|
||||
=head1 TABLE: C<releasemembers>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->table("releasemembers");
|
||||
|
||||
=head1 ACCESSORS
|
||||
|
||||
=head2 project
|
||||
|
||||
data_type: 'text'
|
||||
is_foreign_key: 1
|
||||
is_nullable: 0
|
||||
|
||||
=head2 release_
|
||||
|
||||
data_type: 'text'
|
||||
is_foreign_key: 1
|
||||
is_nullable: 0
|
||||
|
||||
=head2 build
|
||||
|
||||
data_type: 'integer'
|
||||
is_foreign_key: 1
|
||||
is_nullable: 0
|
||||
|
||||
=head2 description
|
||||
|
||||
data_type: 'text'
|
||||
is_nullable: 1
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->add_columns(
|
||||
"project",
|
||||
{ data_type => "text", is_foreign_key => 1, is_nullable => 0 },
|
||||
"release_",
|
||||
{ data_type => "text", is_foreign_key => 1, is_nullable => 0 },
|
||||
"build",
|
||||
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
|
||||
"description",
|
||||
{ data_type => "text", is_nullable => 1 },
|
||||
);
|
||||
|
||||
=head1 PRIMARY KEY
|
||||
|
||||
=over 4
|
||||
|
||||
=item * L</project>
|
||||
|
||||
=item * L</release_>
|
||||
|
||||
=item * L</build>
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->set_primary_key("project", "release_", "build");
|
||||
|
||||
=head1 RELATIONS
|
||||
|
||||
=head2 build
|
||||
|
||||
Type: belongs_to
|
||||
|
||||
Related object: L<Hydra::Schema::Builds>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->belongs_to(
|
||||
"build",
|
||||
"Hydra::Schema::Builds",
|
||||
{ id => "build" },
|
||||
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "NO ACTION" },
|
||||
);
|
||||
|
||||
=head2 project
|
||||
|
||||
Type: belongs_to
|
||||
|
||||
Related object: L<Hydra::Schema::Projects>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->belongs_to(
|
||||
"project",
|
||||
"Hydra::Schema::Projects",
|
||||
{ name => "project" },
|
||||
{ is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" },
|
||||
);
|
||||
|
||||
=head2 release
|
||||
|
||||
Type: belongs_to
|
||||
|
||||
Related object: L<Hydra::Schema::Releases>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->belongs_to(
|
||||
"release",
|
||||
"Hydra::Schema::Releases",
|
||||
{ name => "release_", project => "project" },
|
||||
{ is_deferrable => 0, on_delete => "CASCADE", on_update => "CASCADE" },
|
||||
);
|
||||
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2020-02-06 12:22:36
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:k4z2YeB4gRAeAP6hmR93sQ
|
||||
|
||||
1;
|
@ -1,125 +0,0 @@
|
||||
use utf8;
|
||||
package Hydra::Schema::Releases;
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader
|
||||
# DO NOT MODIFY THE FIRST PART OF THIS FILE
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Hydra::Schema::Releases
|
||||
|
||||
=cut
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use base 'DBIx::Class::Core';
|
||||
|
||||
=head1 COMPONENTS LOADED
|
||||
|
||||
=over 4
|
||||
|
||||
=item * L<Hydra::Component::ToJSON>
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->load_components("+Hydra::Component::ToJSON");
|
||||
|
||||
=head1 TABLE: C<releases>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->table("releases");
|
||||
|
||||
=head1 ACCESSORS
|
||||
|
||||
=head2 project
|
||||
|
||||
data_type: 'text'
|
||||
is_foreign_key: 1
|
||||
is_nullable: 0
|
||||
|
||||
=head2 name
|
||||
|
||||
data_type: 'text'
|
||||
is_nullable: 0
|
||||
|
||||
=head2 timestamp
|
||||
|
||||
data_type: 'integer'
|
||||
is_nullable: 0
|
||||
|
||||
=head2 description
|
||||
|
||||
data_type: 'text'
|
||||
is_nullable: 1
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->add_columns(
|
||||
"project",
|
||||
{ data_type => "text", is_foreign_key => 1, is_nullable => 0 },
|
||||
"name",
|
||||
{ data_type => "text", is_nullable => 0 },
|
||||
"timestamp",
|
||||
{ data_type => "integer", is_nullable => 0 },
|
||||
"description",
|
||||
{ data_type => "text", is_nullable => 1 },
|
||||
);
|
||||
|
||||
=head1 PRIMARY KEY
|
||||
|
||||
=over 4
|
||||
|
||||
=item * L</project>
|
||||
|
||||
=item * L</name>
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->set_primary_key("project", "name");
|
||||
|
||||
=head1 RELATIONS
|
||||
|
||||
=head2 project
|
||||
|
||||
Type: belongs_to
|
||||
|
||||
Related object: L<Hydra::Schema::Projects>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->belongs_to(
|
||||
"project",
|
||||
"Hydra::Schema::Projects",
|
||||
{ name => "project" },
|
||||
{ is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },
|
||||
);
|
||||
|
||||
=head2 releasemembers
|
||||
|
||||
Type: has_many
|
||||
|
||||
Related object: L<Hydra::Schema::ReleaseMembers>
|
||||
|
||||
=cut
|
||||
|
||||
__PACKAGE__->has_many(
|
||||
"releasemembers",
|
||||
"Hydra::Schema::ReleaseMembers",
|
||||
{
|
||||
"foreign.project" => "self.project",
|
||||
"foreign.release_" => "self.name",
|
||||
},
|
||||
undef,
|
||||
);
|
||||
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2020-02-06 12:22:36
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:b4M/tHOhsy234tgTf+wqjQ
|
||||
|
||||
1;
|
Reference in New Issue
Block a user