61 lines
1.0 KiB
Perl
61 lines
1.0 KiB
Perl
|
package App::Changelord;
|
||
|
|
||
|
use 5.36.0;
|
||
|
|
||
|
use Moo;
|
||
|
use CLI::Osprey;
|
||
|
use YAML;
|
||
|
|
||
|
option source => (
|
||
|
is => 'ro',
|
||
|
default => 'CHANGELOG.yml',
|
||
|
);
|
||
|
|
||
|
option 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;
|
||
|
}
|
||
|
|
||
|
'end of App::Changeman';
|