From 1d32409f560f8a53e8473620bc9a8afc32034297 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Wed, 13 Jul 2022 14:03:40 -0400 Subject: [PATCH] add command validate --- lib/App/Changelord.pm | 1 + lib/App/Changelord/Command/Validate.pm | 39 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 lib/App/Changelord/Command/Validate.pm diff --git a/lib/App/Changelord.pm b/lib/App/Changelord.pm index 3c8361d..bf0d8a7 100644 --- a/lib/App/Changelord.pm +++ b/lib/App/Changelord.pm @@ -59,5 +59,6 @@ sub run($self) { } subcommand 'schema' => 'App::Changelord::Command::Schema'; +subcommand 'validate' => 'App::Changelord::Command::Validate'; 'end of App::Changeman'; diff --git a/lib/App/Changelord/Command/Validate.pm b/lib/App/Changelord/Command/Validate.pm new file mode 100644 index 0000000..f86181c --- /dev/null +++ b/lib/App/Changelord/Command/Validate.pm @@ -0,0 +1,39 @@ +package App::Changelord::Command::Validate; + +use 5.36.0; + +use Moo; +use CLI::Osprey; + +use Path::Tiny; +use JSON; +use YAML::XS; +use JSON::Schema::Modern; + +option json => ( + is => 'ro', + default => 0, + doc => 'output schema as json', +); + +sub run($self) { + local $YAML::XS::Boolean = 'boolean'; + + my $schema = path(__FILE__)->sibling('changelog-schema.yml')->slurp; + + my $result = JSON::Schema::Modern->new( + output_format => 'detailed', + )->evaluate( + $self->parent_command->changelog, + YAML::XS::Load($schema), + ); + + return say "woo, changelog is valid!" if( $result eq 'valid' ); + + + print $result; + die "\n"; + +} + +'end of App::Changelog::Command::Validate';