package App::Changelord::Command::Add; use 5.36.0; use Moo; use CLI::Osprey desc => 'add a change to the changelog'; use PerlX::Maybe; use Path::Tiny; use App::Changelord::Command::Init; has changelog => ( is => 'lazy' ); sub _build_changelog ($self) { $self->parent_command->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->parent_command->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; } 'end of App::Changelog::Command::Add';