From 79c439022e3b10c6f4ad353866a2b8f2cf35157e Mon Sep 17 00:00:00 2001 From: yseto Date: Fri, 16 Dec 2022 18:11:27 +0900 Subject: [PATCH] added external plugin support --- packaging/config.json | 2 ++ t/plugins.t | 9 ++++++++ tool/gen_mackerel_plugin.pl | 42 ++++++++++++++++++++++++++++++------- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/packaging/config.json b/packaging/config.json index 5f1776e67..a6563b8a9 100644 --- a/packaging/config.json +++ b/packaging/config.json @@ -53,6 +53,8 @@ "uptime", "inode", "h2o" + ], + "external-plugins": [ ] } diff --git a/t/plugins.t b/t/plugins.t index a81272365..a29ffe0b8 100644 --- a/t/plugins.t +++ b/t/plugins.t @@ -19,4 +19,13 @@ for my $plug (@$plugins_to_be_packaged) { ok $plugins{$plug}, "$plug ok"; } +my $external_plugins_to_be_packaged = $config->{'external-plugins'}; +isa_ok $external_plugins_to_be_packaged, 'ARRAY'; + +for my $plug (@$external_plugins_to_be_packaged) { + ok $plug->{name}, "name ok"; + my $name = $plug->{name}; + like $plug->{repository}, qr|^github[.]com/mackerelio/|, "$name repository ok"; +} + done_testing; diff --git a/tool/gen_mackerel_plugin.pl b/tool/gen_mackerel_plugin.pl index 8b367cbf4..6d1169c10 100644 --- a/tool/gen_mackerel_plugin.pl +++ b/tool/gen_mackerel_plugin.pl @@ -27,16 +27,28 @@ sub retrieve_plugins { } sub update_readme { - my @plugins = @_; + my $plugins = shift; + my $external_plugins = shift; my $doc_links = ''; - for my $plug (@plugins) { - $doc_links .= "* [$PLUGIN_PREFIX$plug](./$PLUGIN_PREFIX$plug/README.md)\n" + my %doc_links_lines; + for my $plug (@$plugins) { + $doc_links_lines{$plug} = "* [$PLUGIN_PREFIX$plug](./$PLUGIN_PREFIX$plug/README.md)\n" + } + for my $plug (@$external_plugins) { + my $link = sprintf "https://%s/blob/main/README.md", $plug->{'repository'}; + $doc_links_lines{$plug->{name}} = "* [$PLUGIN_PREFIX$plug->{name}]($link)\n" + } + + for my $key (sort keys %doc_links_lines) { + $doc_links .= $doc_links_lines{$key}; } + replace 'README.md' => sub { my $readme = shift; my $plu_reg = qr/$PLUGIN_PREFIX[-0-9a-zA-Z_]+/; - $readme =~ s!(?:\* \[$plu_reg\]\(\./$plu_reg/README\.md\)\n)+!$doc_links!ms; + my $plu_reg_readme = qr/\.\/$PLUGIN_PREFIX[-0-9a-zA-Z_]+|https:\/\/github\.com\/mackerelio\/[-0-0a-zA-Z_]+\/blob\/main/; + $readme =~ s!(?:\* \[$plu_reg\]\($plu_reg_readme/README\.md\)\n)+!$doc_links!ms; $readme; }; } @@ -100,11 +112,16 @@ sub load_packaging_confg { #### sub subtask { - my @plugins = retrieve_plugins; - update_readme(@plugins); my $config = load_packaging_confg; - update_packaging_specs(sort @{ $config->{plugins} }); - update_packaging_binaries_list(sort @{ $config->{plugins} }); + my @plugins = retrieve_plugins; + update_readme(\@plugins, $config->{'external-plugins'}); + + my @all_plugins = ( + @{ $config->{plugins} }, + map { $_->{name} } @{ $config->{'external-plugins'} }, + ); + update_packaging_specs(sort @all_plugins); + update_packaging_binaries_list(sort @all_plugins); } subtask(); @@ -114,6 +131,7 @@ sub subtask { #### my @plugins = sort @{ load_packaging_confg()->{plugins}}; +my @external_plugins = sort @{ load_packaging_confg()->{'external-plugins'}}; sub resolve_package { my $plug = shift; @@ -131,6 +149,14 @@ sub resolve_package { $case .= sprintf qq[\tcase "%s":\n\t\t%s.Do()\n], $plug, $pkg; $plugs .= sprintf qq[\t"%s",\n], $plug; } +for my $pluginfo (@external_plugins) { + my $plug = $pluginfo->{name}; + my $pkg = "mp$plug"; + $pkg =~ s/-//g; + $imports .= sprintf qq[\t"%s/lib"\n], $pluginfo->{repository}; + $case .= sprintf qq[\tcase "%s":\n\t\t%s.Do()\n], $plug, $pkg; + $plugs .= sprintf qq[\t"%s",\n], $plug; +} my $mackerel_plugin_gen = qq!// Code generated by "tool/gen_mackerel_plugin.pl"; DO NOT EDIT package main