From 19f2a437919944e739dcb0a4aed1b3c823b7aec2 Mon Sep 17 00:00:00 2001 From: Kaitlyn Parkhurst Date: Tue, 13 Sep 2022 15:42:07 -0700 Subject: [PATCH] Add minion support. --- Web/cpanfile | 1 + Web/lib/MJB/Web.pm | 12 ++++++++++++ Web/lib/MJB/Web/Tasks/CreateBlog.pm | 17 +++++++++++++++++ Web/lib/MJB/Web/Tasks/DeployBlog.pm | 18 ++++++++++++++++++ Web/lib/MJB/Web/Tasks/PurgeBlog.pm | 15 +++++++++++++++ 5 files changed, 63 insertions(+) create mode 100644 Web/lib/MJB/Web/Tasks/CreateBlog.pm create mode 100644 Web/lib/MJB/Web/Tasks/DeployBlog.pm create mode 100644 Web/lib/MJB/Web/Tasks/PurgeBlog.pm diff --git a/Web/cpanfile b/Web/cpanfile index a2cd2ee..a018675 100644 --- a/Web/cpanfile +++ b/Web/cpanfile @@ -1,3 +1,4 @@ +requires 'Minion'; requires 'Mojolicious'; requires 'Mojo::Pg'; requires 'Mojo::File'; diff --git a/Web/lib/MJB/Web.pm b/Web/lib/MJB/Web.pm index e82cc32..f83721d 100644 --- a/Web/lib/MJB/Web.pm +++ b/Web/lib/MJB/Web.pm @@ -21,6 +21,13 @@ sub startup ($self) { return state $db = MJB::DB->connect($config->{database}->{mjb}); }); + # Minion Plugin & Tasks + $self->plugin( Minion => { Pg => $self->config->{database}->{minion} } ); + + $self->minion->add_task( create_blog => 'MJB::Web::Task::CreateBlog' ); + $self->minion->add_task( purge_blog => 'MJB::Web::Task::PurgeBlog' ); + $self->minion->add_task( deploy_blog => 'MJB::Web::Task::DeployBlog' ); + # Standard router. my $r = $self->routes->under( '/' => sub ($c) { @@ -61,6 +68,11 @@ sub startup ($self) { return undef; }); + # Minion Admin Panel + $self->plugin( 'Minion::Admin' => { + route => $admin->under('/minion' => sub ($c) { return 1; } ), + }); + # General Informational Pages $r->get ( '/' )->to( 'Root#index' )->name('show_homepage' ); $r->get ( '/about' )->to( 'Root#about' )->name('show_about' ); diff --git a/Web/lib/MJB/Web/Tasks/CreateBlog.pm b/Web/lib/MJB/Web/Tasks/CreateBlog.pm new file mode 100644 index 0000000..6fbba5d --- /dev/null +++ b/Web/lib/MJB/Web/Tasks/CreateBlog.pm @@ -0,0 +1,17 @@ +package MJB::Web::Tasks::CreateBlog; +use Mojo::Base 'Minion::Job', -signatures; +use Mojo::File qw( curfile ); +use File::Copy::Recursive qw( dircopy ); +use IPC::Run3; + +sub run ( $job, $blog_id ) { + my $blog = $job->app->db->blog( $blog_id ); + + # Create clone of standard jekyll blog in repos/user_id/blog_id + + # Set the git configuration for the clone so that it goes to gitea. + # TODO: add gitea user with ssh key? + +} + +1; diff --git a/Web/lib/MJB/Web/Tasks/DeployBlog.pm b/Web/lib/MJB/Web/Tasks/DeployBlog.pm new file mode 100644 index 0000000..d0da9b2 --- /dev/null +++ b/Web/lib/MJB/Web/Tasks/DeployBlog.pm @@ -0,0 +1,18 @@ +package MJB::Web::Tasks::DeployBlog; +use Mojo::Base 'Minion::Job', -signatures; +use Mojo::File qw( curfile ); +use File::Copy::Recursive qw( dircopy ); +use IPC::Run3; + +sub run ( $job, $blog_id ) { + my $blog = $job->app->db->blog( $blog_id ); + + # Check out the blog repo to a build area. + + # Build the blog with the jekyll builder in podman + + # Use ansible to deploy the blog to the web servers. + +} + +1; diff --git a/Web/lib/MJB/Web/Tasks/PurgeBlog.pm b/Web/lib/MJB/Web/Tasks/PurgeBlog.pm new file mode 100644 index 0000000..1b2e244 --- /dev/null +++ b/Web/lib/MJB/Web/Tasks/PurgeBlog.pm @@ -0,0 +1,15 @@ +package MJB::Web::Tasks::CreateBlog; +use Mojo::Base 'Minion::Job', -signatures; +use Mojo::File qw( curfile ); +use File::Copy::Recursive qw( dircopy ); +use IPC::Run3; + +sub run ( $job, $blog_id ) { + my $blog = $job->app->db->blog( $blog_id ); + + # Remove the blog from gitea storage + + # Delete the blog from the web servers +} + +1;