App-gqmt

 view release on metacpan or  search on metacpan

lib/App/gqmt.pm  view on Meta::CPAN

# -*- mode: cperl; eval: (follow-mode) -*-
#

package App::gqmt;

use strict;
use warnings;
use diagnostics;

use Data::Printer caller_info => 1, print_escapes => 1, output => 'stdout', class => { expand => 2 },
  caller_message => "DEBUG __FILENAME__:__LINE__ ";
use Getopt::Long  qw(:config no_ignore_case gnu_getopt auto_help auto_version);
use Pod::Man;
use Pod::Usage    qw(pod2usage);
use File::Basename;
use HTTP::Request ();
use LWP::UserAgent;
use JSON;
use Time::Piece;
use Template;

my  @PROGARG = ($0, @ARGV);
our $VERSION = '1.02';

sub new {
  my $class = shift;
  my $self =
    bless {
	   _progname => fileparse($0),
	   _progargs => [$0, @ARGV],
	   _option   => { d                => 0,
			  colored          => 0,
			  rows_number      => 100,
			  age              => 60*60*24*14,
			  versions_to_hold => 2,
			  url              => 'https://api.github.com/graphql',
			  single_iteration => 0,
			  http_timeout     => 180,
			  pkg         => {
					  alpine    => 1,
					  api       => 1,
					  app       => 1,
					  scheduler => 1,
					 },
			  re          =>  {
					   default   => '^(?:docker-base-layer|develop|release|master|v[0-9]+\.[0-9]+\.[0-9]+)$',
					   alpine    => '^(?:docker-base-layer|develop|release|master|v[0-9]+\.[0-9]+\.[0-9]+)$',
					   api       => '^(?:docker-base-layer|develop|release|master|v[0-9]+\.[0-9]+\.[0-9]+)$',
					   app       => '^(?:docker-base-layer|develop|qa|release|master|v[0-9]+\.[0-9]+\.[0-9]+)$',
					   scheduler => '^(?:docker-base-layer|develop|release|master|v[0-9]+\.[0-9]+\.[0-9]+)$',
					  },
			},
	  }, $class;

  GetOptions (
	      'a|age=i'             => \$self->{_option}{age},
	      'U|url=s'             => \$self->{_option}{url},
	      'u|user=s'            => \$self->{_option}{user},
	      'T|token=s'           => \$self->{_option}{token},
	      'R|repository=s'      => \$self->{_option}{repo},
	      'P|package=s'         => \$self->{_option}{package},
	      'package-regex=s'     => \$self->{_option}{package_regex},
	      'n|dry-run'           => \$self->{_option}{dry_run},
	      'N|rows-number=i'     => \$self->{_option}{rows_number},
	      'versions-to-hold=i'  => \$self->{_option}{versions_to_hold},
	      'http-timeout=i'      => \$self->{_option}{http_timeout},
	      'C|colored'           => \$self->{_option}{colored},
	      'D|delete'            => \$self->{_option}{delete},
	      's|single-iteration'  => \$self->{_option}{single_iteration},
	      't|query-template=s'  => \$self->{_option}{query_template},
	      'v|package-version=s' => \$self->{_option}{v},

	      'h|help'              => sub { pod2usage(-exitval => 0, -verbose => 2); exit 0 },
	      'd|debug+'            => \$self->{_option}{d},
	      'V|version'           => sub { print "$self->{_progname}, version $VERSION\n"; exit 0 },
	     );

  pod2usage(-exitval => 0, -verbose => 2, -msg => "\nERROR: repository owner not provided, option -u\n\n")
    if ! $self->{_option}{user};

  pod2usage(-exitval => 0, -verbose => 2, -msg => "\nERROR: query template file does not exist, option -t\n\n")
    if defined $self->{_option}{query_template} && ! -e $self->{_option}{query_template};

  pod2usage(-exitval => 2, -verbose => 2, -msg => "\nERROR: access token is not provided, option -T\n\n" )
    if ! $self->{_option}{token};

  pod2usage(-exitval => 2, -verbose => 2, -msg => "\nERROR: repository name is not provided, option -R\n\n" )
    if ! $self->{_option}{repo};

  pod2usage(-exitval => 2, -verbose => 2, -msg => "\nERROR: package name not provided, option -P\n\n")
    if ! $self->{_option}{package};

  # pod2usage(-exitval => 2, -verbose => 2, -msg => "\nERROR: not supported package\n\n")
  #   if $self->{_option}{package} && ! exists $self->{_option}{pkg}{$self->{_option}{package}};



( run in 2.213 seconds using v1.01-cache-2.11-cpan-99c4e6809bf )