From 5eb44406a908812a68ba98df4343da7ae3e82e73 Mon Sep 17 00:00:00 2001 From: sergiotarxz Date: Tue, 29 Mar 2022 19:18:17 +0200 Subject: [PATCH] Fixing broken integration test and improving the build generation. To avoid the app_id duplicity the app now checks that the given app_id is the same that the repo app_id and fails if it isn't (untested yet) also if the sdk or runtime is installed at operative system level, the installation is skipped to be able to avoid the major source of overhead in the build. The build system has been rethinked so a release can have multiple builds to the same architecture if one was unsuccessful. This may help repositories which choose to release against a branch, if you release against a tag you will probably have to make other release fixing the error anyway. --- lib/Peace/Model/Release.pm | 40 ++++++++++++++++++++------------ web_tests/000001-release-model.t | 1 + 2 files changed, 26 insertions(+), 15 deletions(-) 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',