github.com/mackerelio/mackerel-agent-plugins@v0.89.3/tool/packagize.pl (about)

     1  #!/usr/bin/env perl
     2  use 5.014;
     3  use warnings;
     4  use utf8;
     5  use autodie;
     6  use File::Spec;
     7  use File::Basename 'basename';
     8  use File::Copy 'move';
     9  
    10  my $plugin_dir = $ARGV[0];
    11  
    12  my $package_name = $plugin_dir =~ s/^mackerel-plugin-//r;
    13     $package_name = "mp$package_name";
    14     $package_name =~ s/-//g;
    15  
    16  my $libdir = File::Spec->catfile($plugin_dir, 'lib');
    17  if (-e $libdir) {
    18      warn "$libdir already exists\n";
    19      exit;
    20  }
    21  mkdir $libdir;
    22  
    23  for my $file (glob "$plugin_dir/*") {
    24      if ($file =~ /\.md$/ || $file eq 'lib') {
    25          next;
    26      }
    27      if ($file =~ /\.go$/) {
    28          my $content = slurp_utf8($file);
    29          $content =~ s/^package main$/package $package_name/ms;
    30          $content =~ s!func main\(\) \{!// Do the plugin\nfunc Do() {!ms;
    31          $content =~ s!^// main\n!!ms;
    32          spew_utf8($file, $content);
    33      }
    34      my $base = basename $file;
    35      my $dst = "$plugin_dir/lib/$base";
    36      move $file, $dst;
    37  }
    38  my $main = qq[package main
    39  
    40  import "github.com/mackerelio/mackerel-agent-plugins/$plugin_dir/lib"
    41  
    42  func main() {
    43  \t$package_name.Do()
    44  }
    45  ];
    46  spew_utf8("$plugin_dir/main.go", $main);
    47  
    48  sub slurp_utf8 {
    49      my $file = shift;
    50      return do {
    51          local $/;
    52          open my $fh, '<:encoding(UTF-8)', $file;
    53          <$fh>
    54      };
    55  }
    56  
    57  sub spew_utf8 {
    58      my ($file, $content) = @_;
    59      open my $fh, '>:encoding(UTF-8)', $file;
    60      print $fh $content;
    61  }