diff --git a/lib/Peace/Model/Release.pm b/lib/Peace/Model/Release.pm index fa48b4b..11935b5 100644 --- a/lib/Peace/Model/Release.pm +++ b/lib/Peace/Model/Release.pm @@ -51,15 +51,16 @@ use List::AllUtils qw/any/; ); sub generate_build { - my $self = shift; - my %params = $validator->(@_); - my $arch = $params{arch}; - my $application = $self->application; + my $self = shift; + my %params = $validator->(@_); + my $arch = $params{arch}; + my $application = $self->application; say "Building @{[$application->name]} for $arch..."; my ( $merged_output, $exit ) = tee_merged { my $flatpak_builder_file = $application->flatpak_builder_file; say -"$flatpak_builder_file directory portions should not be .., . or empty string", return 1 +"$flatpak_builder_file directory portions should not be .., . or empty string", + return 1 if any { $_ eq '..' or $_ eq '.' or $_ eq '' } File::Spec->splitdir($flatpak_builder_file); my $dir = Path::Tiny->tempdir; @@ -68,28 +69,37 @@ use List::AllUtils qw/any/; Path::Tiny->new( $ENV{HOME} )->child('.peace-apps'); local $ENV{HOME} = $dir; say "TEMP_HOME: $dir"; - system 'git', 'clone', $application->git_repo, $clone_dir and return 1; + system 'git', 'clone', $application->git_repo, $clone_dir + and return 1; say "CLONE_DIR: $clone_dir"; my $current_dir = pushd $clone_dir; my $flatpak_data = $self->_parse_flatpak_builder_file; my $app_id = $flatpak_data->{"app-id"}; + say "$app_id is not the provided app_id ($application->app_id)", + return 1 + if $app_id ne $application->app_id; say "APP_ID: $app_id"; - my $sdk = $flatpak_data->{sdk}; + my $sdk = $flatpak_data->{sdk}; say "SDK: $sdk"; - my $runtime = $flatpak_data->{runtime}; + my $runtime = $flatpak_data->{runtime}; say "RUNTIME: $runtime"; + my %installed_apps = map { (join(',',[split "\t"]->@[1,4]) => 1) } split "\n", `flatpak list`; system 'flatpak', '--user', 'list' and return 1; system 'flatpak', '--user', 'remote-add', '--if-not-exists', - 'remote', $application->flatpak_repo and return 1; + 'remote', $application->flatpak_repo + and return 1; say $sdk; - system 'flatpak', '--user', 'install', '--arch', $arch, '-y', - "$sdk" and return 1; + exists $installed_apps{"$sdk,$arch"} or system 'flatpak', '--user', 'install', '--arch', $arch, '-y', + "$sdk" + and return 1; say $runtime; - system 'flatpak', '--user', 'install', '--arch', $arch, '-y', - "$runtime" and return 1; + exists $installed_apps{"$runtime,$arch"} or system 'flatpak', '--user', 'install', '--arch', $arch, '-y', + "$runtime" + and return 1; system 'flatpak-builder', '--arch', $arch, '--install', '--user', - 'build', $application->flatpak_builder_file, $app_id and return 1; + 'build', $application->flatpak_builder_file, $app_id + and return 1; $output_dir = $output_dir->child( $self->uuid ); $output_dir->mkpath; return system 'flatpak', 'build-bundle', '--arch', $arch, @@ -102,7 +112,7 @@ use List::AllUtils qw/any/; $success = 0; } return { - output => $merged_output, + output => $merged_output, success => $success, }; } diff --git a/web_tests/000001-release-model.t b/web_tests/000001-release-model.t index b980dbb..8755d36 100644 --- a/web_tests/000001-release-model.t +++ b/web_tests/000001-release-model.t @@ -18,6 +18,7 @@ use Peace::Model::Release; description => 'Stub', url => 'https://gitea.sergiotarxz.freemyip.com/sergiotarxz/mangareader', developer => $developer, + app_id => 'me.sergiotarxz.openmg', price => '99', git_repo => 'https://gitea.sergiotarxz.freemyip.com/sergiotarxz/mangareader',