package App::Changelord::Command::Add; use 5.36.0; use Moo; use CLI::Osprey desc => 'add a change to the NEXT release', description_pod => <<'END'; Add a change entry to the NEXT release. END use PerlX::Maybe; use Path::Tiny; use App::Changelord::Command::Init; with 'App::Changelord::Role::Changelog'; # TODO validate the type option type => ( format => 's', doc => 'type of change', is => 'ro', ); option ticket => ( format => 's', doc => 'associated ticket', is => 'ro', ); sub is_next($self,$release) { my $version = $release->{version}; return !$version || $version eq 'NEXT'; } sub next_release($self) { my $changelog = $self->changelog; my $release = $changelog->{releases}[0]; unless( $self->is_next($release) ) { unshift $changelog->{releases}->@*, $release = { version => 'NEXT', changes => [], }; } return $release; } sub save_changelog($self) { my $src = $self->source; path($src)->spew( App::Changelord::Command::Init::serialize_changelog($self) ); } sub run ($self) { my $version = $self->next_release; push $version->{changes}->@*, { maybe type => $self->type, maybe ticket => $self->ticket, desc => join ' ', @ARGV, }; $self->save_changelog; say "change added to the changelog"; } 'end of App::Changelog::Command::Add';