App-Changelord/lib/App/Changelord.pm

65 lines
1.2 KiB
Perl

package App::Changelord;
use 5.36.0;
use Moo;
use CLI::Osprey;
use YAML;
option source => (
is => 'ro',
doc => 'changelog yaml file',
default => 'CHANGELOG.yml',
);
has changelog => (
lazy => 1,
is => 'ro',
default => sub($self) {
return YAML::LoadFile($self->source)
}
);
sub as_markdown($self) {
my $changelog = $self->changelog;
my $output = "# Changelog";
$output .= " for " . $changelog->{project}{name}
if $changelog->{project}{name};
$output .= "\n\n";
my $n = 0;
$output .= join "\n", map { $self->render_release($_, $n++) } $changelog->{releases}->@*;
return $output;
}
sub render_release($self, $release, $n=0) {
# it's a string? Okay then!
return $release unless ref $release;
my $version = $release->{version} || ( $n ? '???' : 'NEXT' );
my $date = $release->{date};
my $output = '';
$output .= "## $version";
$output .= " ($date)" if $date;
return $output;
}
sub run($self) {
no warnings 'utf8';
print $self->as_markdown;
}
subcommand 'schema' => 'App::Changelord::Command::Schema';
subcommand 'validate' => 'App::Changelord::Command::Validate';
'end of App::Changeman';