Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
0cf5bbb
clear out all plugins
psilabs-dev Mar 24, 2026
6dff930
implement plugin registry and plugin operations API
psilabs-dev Mar 24, 2026
cdda0dd
include the registry integration tests
psilabs-dev Mar 24, 2026
adb6db8
remove plugin references to tests
psilabs-dev Mar 24, 2026
dd7b37d
lock all registry writes
psilabs-dev Mar 24, 2026
617ec35
resolve url based on provider type
psilabs-dev Mar 24, 2026
6b8d573
address perlcritic
psilabs-dev Mar 24, 2026
6be8419
move plugins under Managed
psilabs-dev Mar 24, 2026
32b4f4b
pull validation logic out
psilabs-dev Mar 24, 2026
f2bb093
extend validation to existing plugin upload
psilabs-dev Mar 24, 2026
5f2c42f
disclaimer, install does not clear state
psilabs-dev Mar 24, 2026
4365111
implement scan_plugins
psilabs-dev Mar 25, 2026
08cda18
consolidate plugin update API
psilabs-dev Mar 25, 2026
4593944
update registry API endpoint
psilabs-dev Mar 26, 2026
1570eea
require a registry
psilabs-dev Mar 26, 2026
901a59e
name and version are required of a plugin
psilabs-dev Mar 26, 2026
3f2d4d1
make hset in install_plugin atomic to guard against delete_registry
psilabs-dev Mar 26, 2026
bad4d90
add back local plugins
psilabs-dev Mar 29, 2026
84f42d7
skip migration-era redis->del
psilabs-dev Mar 30, 2026
460d64d
dont show internal errors
psilabs-dev Mar 30, 2026
5a2f24e
return 404 if plugin not found
psilabs-dev Mar 31, 2026
78e25d7
fetch registry from redis
psilabs-dev Mar 31, 2026
32048ef
include plugin registry
psilabs-dev Mar 31, 2026
35836ec
add missing import
psilabs-dev Mar 31, 2026
dab14b8
add 404 responses
psilabs-dev Mar 31, 2026
847da3d
add sha256 absence warning
psilabs-dev Mar 31, 2026
6c6d217
reinstate Generic.t
psilabs-dev Mar 31, 2026
8be8f55
implement plugin priority backend
psilabs-dev Mar 31, 2026
1f1a5a2
fix inc mismatch
psilabs-dev Apr 2, 2026
78c10b9
plugin membership responsibility goes to Redis
psilabs-dev Apr 4, 2026
9f8bcac
fix UI functionality
psilabs-dev Apr 6, 2026
72d9a25
add more validation
psilabs-dev Apr 8, 2026
32b5828
git URL must use HTTPS
psilabs-dev Apr 8, 2026
10f03f7
styling
psilabs-dev Apr 8, 2026
7bdee52
require sha256
psilabs-dev Apr 8, 2026
c7be381
dont unlink file on failure (see process_upload)
psilabs-dev Apr 8, 2026
3638afe
dont remove the plugin config if plugin gone
psilabs-dev Apr 9, 2026
3c95f9a
namespaces are case insensitive
psilabs-dev Apr 9, 2026
b572aff
path and type are required
psilabs-dev Apr 9, 2026
286fb07
allow uploading of same sideloaded plugin
psilabs-dev Apr 9, 2026
65d7267
move find_package_conflict and find_namespace_conflict to Utils
psilabs-dev Apr 9, 2026
eb9cca4
ironic... merge conflict in conflict detection
psilabs-dev Apr 10, 2026
ecaaeb5
sideload filename path traversal
psilabs-dev Apr 10, 2026
f7dc6ca
add lock since we have redis now
psilabs-dev Apr 10, 2026
7fdefcc
hdel provenance fields so user config survives reinstall
psilabs-dev Apr 11, 2026
36e9e2a
url-encode to prevent query-string injection
psilabs-dev Apr 11, 2026
6aba20a
validation tweaks
psilabs-dev Apr 11, 2026
9087dcf
disable the registry UI tests
psilabs-dev Apr 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .github/workflows/push-continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ on:
integration_test_ref:
description: 'Integration testing repository git commit hash or branch'
required: true
default: 'dfdcd948cbc6d6bbd2db6620d8499bc8698843e3'
default: 'dev-registry/main'

env:
INTEGRATION_TEST_REPOSITORY: ${{ github.event.inputs.integration_test_repository || 'psilabs-dev/aio-lanraragi' }}
INTEGRATION_TEST_REF: ${{ github.event.inputs.integration_test_ref || 'dfdcd948cbc6d6bbd2db6620d8499bc8698843e3' }}
INTEGRATION_TEST_REF: ${{ github.event.inputs.integration_test_ref || 'dev-registry/main' }}

name: "Continuous Integration \U0001F44C\U0001F440"
jobs:
Expand Down Expand Up @@ -86,8 +86,9 @@ jobs:
--image lanraragi:ci \
--staging "$GITHUB_WORKSPACE/staging" \
--playwright \
--dev registry \
--npseed 42 \
-k "not test_double_page_navigation and not test_handler_resource_management"
-k "not test_double_page_navigation and not test_handler_resource_management and not test_plugin_uninstall_ui"
env:
DOCKER_HOST: unix:///var/run/docker.sock

Expand Down Expand Up @@ -216,5 +217,6 @@ jobs:
--windist "$env:GITHUB_WORKSPACE\LANraragi\win-dist" `
--staging "$env:GITHUB_WORKSPACE\staging" `
--playwright `
--dev registry `
--npseed 42 `
-k "not test_double_page_navigation and not test_handler_resource_management"
-k "not test_double_page_navigation and not test_handler_resource_management and not test_plugin_uninstall_ui"
6 changes: 6 additions & 0 deletions lib/LANraragi.pm
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ use LANraragi::Utils::I18NInitializer;

use LANraragi::Model::Search;
use LANraragi::Model::Config;
use LANraragi::Model::Registry;
use LANraragi::Model::Setup qw(first_install_actions);
use LANraragi::Model::Metrics;

Expand Down Expand Up @@ -136,6 +137,11 @@ sub startup {
# through LRR's rotating logger pipeline.
$self->log( get_logger( "Mojolicious", "mojo" ) );

# Reconcile discovered plugins with Redis state.
my $redis_config = $self->LRR_CONF->get_redis_config;
LANraragi::Model::Registry::scan_plugins($redis_config);
$redis_config->quit();

#Plugin listing
my @plugins = get_plugins("metadata");
foreach my $pluginfo (@plugins) {
Expand Down
13 changes: 11 additions & 2 deletions lib/LANraragi/Controller/Api/Other.pm
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package LANraragi::Controller::Api::Other;
use Mojo::Base 'Mojolicious::Controller';

use Mojo::JSON qw(encode_json decode_json);
use Mojo::JSON qw(encode_json decode_json true false);
use Redis;

use LANraragi::Model::Stats;
use LANraragi::Model::Opds;
use LANraragi::Utils::Generic qw(render_api_response);
use LANraragi::Utils::Plugins qw(get_plugin get_plugins use_plugin);
use LANraragi::Utils::Plugins qw(get_plugin get_plugins is_plugin_hidden get_plugin_priority use_plugin);

sub serve_serverinfo {
my $self = shift;
Expand Down Expand Up @@ -90,6 +90,7 @@ sub list_plugins {
my $type = $self->stash('type');

my @plugins = get_plugins($type);
my $redis = $self->LRR_CONF->get_redis_config;

foreach my $plugin (@plugins) {
if ( ref( $plugin->{parameters} ) eq 'HASH' ) {
Expand All @@ -99,8 +100,16 @@ sub list_plugins {
}
$plugin->{parameters} = \@parameters_array;
}

$plugin->{hidden} = is_plugin_hidden( $plugin->{namespace}, $redis ) ? true : false;
$plugin->{priority} = get_plugin_priority( $plugin->{namespace}, $redis );

my $namerds = "LRR_PLUGIN_" . uc( $plugin->{namespace} );
my $registry = $redis->hget( $namerds, "registry" );
$plugin->{registry} = $registry ? $registry : undef;
}

$redis->quit();
$self->render( openapi => \@plugins );
}

Expand Down
Loading