Skip to content

Commit

Permalink
Add option for creating clean staging environments
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Jan 9, 2025
1 parent 602bf45 commit 27ac4be
Showing 1 changed file with 129 additions and 117 deletions.
246 changes: 129 additions & 117 deletions staging/start.pl
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,23 @@
use Mojo::File qw(curfile path);
use Mojo::Pg;
use Mojo::Server;
use Mojo::Util qw(getopt);

my $dir = path(__FILE__)->sibling('do_not_commit');
die "Staging project already exists.\n" if -e $dir;

die <<'EOF' unless my $postgres = shift;
getopt 'clean' => \my $clean;

die <<'EOF' unless my $postgres = $ARGV[0];
PostgreSQL connection string required. You need an already existing but empty
database, and we will create seed data for you.
# Staging environment with example reports
perl staging/start.pl postgresql://tester:testing@/test
# Staging environment with license patterns but no reports
perl staging/start.pl postgresql://tester:testing@/test --clean
EOF
my $pg = Mojo::Pg->new($postgres);
$pg->db->query('drop schema if exists cavil_staging cascade');
Expand All @@ -24,24 +31,6 @@
my $checkouts = $dir->child('legal-bot')->make_path->realpath;
my $cache = $dir->child('cache')->make_path->realpath;

# Test checkouts
my $tests = [
['perl-Mojolicious', 'c7cfdab0e71b0bebfdf8b2dc3badfecd'],
['ceph-image', '5fcfdab0e71b0bebfdf8b5cc3badfecf'],
['go1.16-devel-container', 'ffcfdab0e71b1bebfdf8b5cc3badfeca'],
['harbor-helm', '4fcfdab0e71b0bebfdf8b5cc3badfec4']
];
for my $co (@$tests) {
my $checkout = $checkouts->child(@$co)->make_path;
my $test = $dir->child('..', '..', 't', 'legal-bot', @$co)->realpath;
$_->copy_to($checkout->child($_->basename)) for $test->list->each;
}

# Second copy of perl-Mojolicious test checkout (different checksum but same content)
my $test = $dir->child('..', '..', 't', 'legal-bot', 'perl-Mojolicious', 'c7cfdab0e71b0bebfdf8b2dc3badfecd')->realpath;
my $checkout = $checkouts->child('perl-Mojolicious', 'c7cfdab0e71b0bebfdf8b2dc3bad1234')->make_path;
$_->copy_to($checkout->child($_->basename)) for $test->list->each;

my $online = Mojo::URL->new($postgres)->query([search_path => ['cavil_staging', 'public']])->to_unsafe_string;
my $conf = $dir->child('cavil.conf')->spew(<<"EOF");
{
Expand All @@ -68,117 +57,140 @@
# Seed licenses and patterns
$app->sync->load(curfile->dirname->sibling('lib', 'Cavil', 'resources', 'license_patterns.jsonl')->to_string);

# Fill instance with test data
unless ($clean) {

# Test checkouts
my $tests = [
['perl-Mojolicious', 'c7cfdab0e71b0bebfdf8b2dc3badfecd'],
['ceph-image', '5fcfdab0e71b0bebfdf8b5cc3badfecf'],
['go1.16-devel-container', 'ffcfdab0e71b1bebfdf8b5cc3badfeca'],
['harbor-helm', '4fcfdab0e71b0bebfdf8b5cc3badfec4']
];
for my $co (@$tests) {
my $checkout = $checkouts->child(@$co)->make_path;
my $test = $dir->child('..', '..', 't', 'legal-bot', @$co)->realpath;
$_->copy_to($checkout->child($_->basename)) for $test->list->each;
}

# Second copy of perl-Mojolicious test checkout (different checksum but same content)
my $test
= $dir->child('..', '..', 't', 'legal-bot', 'perl-Mojolicious', 'c7cfdab0e71b0bebfdf8b2dc3badfecd')->realpath;
my $checkout = $checkouts->child('perl-Mojolicious', 'c7cfdab0e71b0bebfdf8b2dc3bad1234')->make_path;
$_->copy_to($checkout->child($_->basename)) for $test->list->each;

# "perl-Mojolicious" example data
my $user_id = $app->users->find_or_create(login => 'test_bot')->{id};
my $pkgs = $app->packages;
my $mojo_id = my $pkg_id = $pkgs->add(
name => 'perl-Mojolicious',
checkout_dir => 'c7cfdab0e71b0bebfdf8b2dc3badfecd',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'devel:languages:perl',
package => 'perl-Mojolicious',
srcmd5 => 'bd91c36647a5d3dd883d490da2140401',
priority => 5
);
$pkgs->imported($pkg_id);
my $mojo = $pkgs->find($pkg_id);
$mojo->{external_link} = 'obs#456712';
$pkgs->update($mojo);
$pkgs->unpack($pkg_id);
$pkg_id = $pkgs->add(
name => 'perl-Mojolicious',
checkout_dir => 'c7cfdab0e71b0bebfdf8b2dc3bad1234',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'devel:languages:perl',
package => 'perl-Mojolicious',
srcmd5 => 'bd91c36647a5d3dd883d490da2141234',
priority => 5
);
$pkgs->imported($pkg_id);
$mojo = $pkgs->find($pkg_id);
$mojo->{external_link} = 'obs#456713';
$pkgs->update($mojo);
$pkgs->unpack($pkg_id);
my $user_id = $app->users->find_or_create(login => 'test_bot')->{id};
my $pkgs = $app->packages;
my $mojo_id = my $pkg_id = $pkgs->add(
name => 'perl-Mojolicious',
checkout_dir => 'c7cfdab0e71b0bebfdf8b2dc3badfecd',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'devel:languages:perl',
package => 'perl-Mojolicious',
srcmd5 => 'bd91c36647a5d3dd883d490da2140401',
priority => 5
);
$pkgs->imported($pkg_id);
my $mojo = $pkgs->find($pkg_id);
$mojo->{external_link} = 'obs#456712';
$pkgs->update($mojo);
$pkgs->unpack($pkg_id);
$pkg_id = $pkgs->add(
name => 'perl-Mojolicious',
checkout_dir => 'c7cfdab0e71b0bebfdf8b2dc3bad1234',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'devel:languages:perl',
package => 'perl-Mojolicious',
srcmd5 => 'bd91c36647a5d3dd883d490da2141234',
priority => 5
);
$pkgs->imported($pkg_id);
$mojo = $pkgs->find($pkg_id);
$mojo->{external_link} = 'obs#456713';
$pkgs->update($mojo);
$pkgs->unpack($pkg_id);

# "ceph-image" example data
$pkg_id = $pkgs->add(
name => 'ceph-image',
checkout_dir => '5fcfdab0e71b0bebfdf8b5cc3badfecf',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'filesystems:ceph',
package => 'ceph-image',
srcmd5 => '4d91c36647a5d355883d490da2140404',
priority => 5
);
$pkgs->imported($pkg_id);
my $ceph = $pkgs->find($pkg_id);
$ceph->{external_link} = 'obs#913219';
$pkgs->update($ceph);
$pkgs->unpack($pkg_id);
$pkg_id = $pkgs->add(
name => 'ceph-image',
checkout_dir => '5fcfdab0e71b0bebfdf8b5cc3badfecf',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'filesystems:ceph',
package => 'ceph-image',
srcmd5 => '4d91c36647a5d355883d490da2140404',
priority => 5
);
$pkgs->imported($pkg_id);
my $ceph = $pkgs->find($pkg_id);
$ceph->{external_link} = 'obs#913219';
$pkgs->update($ceph);
$pkgs->unpack($pkg_id);

# "go1.16-devel-container" example data
$pkg_id = $pkgs->add(
name => 'go1.16-devel-container',
checkout_dir => 'ffcfdab0e71b1bebfdf8b5cc3badfeca',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'devel:kubic:containers',
package => 'go1.16-devel-container',
srcmd5 => 'dd91c36647a5d356883d490da2140412',
priority => 5
);
$pkgs->imported($pkg_id);
my $go = $pkgs->find($pkg_id);
$go->{external_link} = 'obs#881323';
$pkgs->update($go);
$pkgs->unpack($pkg_id);
$pkg_id = $pkgs->add(
name => 'go1.16-devel-container',
checkout_dir => 'ffcfdab0e71b1bebfdf8b5cc3badfeca',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'devel:kubic:containers',
package => 'go1.16-devel-container',
srcmd5 => 'dd91c36647a5d356883d490da2140412',
priority => 5
);
$pkgs->imported($pkg_id);
my $go = $pkgs->find($pkg_id);
$go->{external_link} = 'obs#881323';
$pkgs->update($go);
$pkgs->unpack($pkg_id);

# "harbor-helm" example data
$pkg_id = $pkgs->add(
name => 'harbor-helm',
checkout_dir => '4fcfdab0e71b0bebfdf8b5cc3badfec4',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'just:a:test',
package => 'harbor-helm',
srcmd5 => 'abc1c36647a5d356883d490da2140def',
priority => 5,
embargoed => 1
);
$pkgs->imported($pkg_id);
my $harbor = $pkgs->find($pkg_id);
$harbor->{external_link} = 'obs#123456';
$pkgs->update($harbor);
$pkgs->unpack($pkg_id);

# Extra packages to fill up the backlog
for my $i (1 .. 21) {
my $pkg_id = $pkgs->add(
name => "just-a-test-$i.0",
checkout_dir => '404fdab0e71b0bebfdf8b2dc3badf404',
$pkg_id = $pkgs->add(
name => 'harbor-helm',
checkout_dir => '4fcfdab0e71b0bebfdf8b5cc3badfec4',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'home:kraih',
package => "just-a-test-$i.0",
srcmd5 => '4041c36647a5d3dd883d490da2140404',
priority => 5
project => 'just:a:test',
package => 'harbor-helm',
srcmd5 => 'abc1c36647a5d356883d490da2140def',
priority => 5,
embargoed => 1
);
my $pkg = $pkgs->find($pkg_id);
$pkg->{external_link} = "test#$i";
$pkgs->update($pkg);
}
$pkgs->imported($pkg_id);
my $harbor = $pkgs->find($pkg_id);
$harbor->{external_link} = 'obs#123456';
$pkgs->update($harbor);
$pkgs->unpack($pkg_id);

$app->minion->perform_jobs;
# Extra packages to fill up the backlog
for my $i (1 .. 21) {
my $pkg_id = $pkgs->add(
name => "just-a-test-$i.0",
checkout_dir => '404fdab0e71b0bebfdf8b2dc3badf404',
api_url => 'https://api.opensuse.org',
requesting_user => $user_id,
project => 'home:kraih',
package => "just-a-test-$i.0",
srcmd5 => '4041c36647a5d3dd883d490da2140404',
priority => 5
);
my $pkg = $pkgs->find($pkg_id);
$pkg->{external_link} = "test#$i";
$pkgs->update($pkg);
}

# Update products
my $products = $app->products;
my $factory_id = $products->find_or_create('openSUSE:Factory')->{id};
my $leap_id = $products->find_or_create('openSUSE:Leap:15.0')->{id};
$products->update($factory_id, [$mojo_id]);
$products->update($leap_id, [$mojo_id]);
my $products = $app->products;
my $factory_id = $products->find_or_create('openSUSE:Factory')->{id};
my $leap_id = $products->find_or_create('openSUSE:Leap:15.0')->{id};
$products->update($factory_id, [$mojo_id]);
$products->update($leap_id, [$mojo_id]);
}

$app->minion->perform_jobs;

print <<"EOF";
Staging project created, use the CAVIL_CONF environment variable.
Expand Down

0 comments on commit 27ac4be

Please sign in to comment.