@@ -595,6 +595,10 @@ async fn post_build_processing(
595595 . filter_map ( |f| fs:: metadata ( f) . ok ( ) . map ( |m| m. len ( ) ) )
596596 . sum ( ) ;
597597
598+ let pkg_provides = metadata
599+ . as_ref ( )
600+ . and_then ( |m| m. get_package_provides ( pkg_name_dir) ) ;
601+
598602 let json_path = pkg_dir. join ( format ! ( "{}.json" , pkg_name_dir) ) ;
599603 if json_path. exists ( ) {
600604 if let Err ( e) = update_json_metadata (
@@ -608,6 +612,7 @@ async fn post_build_processing(
608612 checksum_bsum. as_deref ( ) ,
609613 binary_size,
610614 Some ( ghcr_total_size) ,
615+ pkg_provides,
611616 ) {
612617 warn ! ( "Failed to update JSON metadata: {}" , e) ;
613618 }
@@ -690,109 +695,75 @@ async fn post_build_processing(
690695 }
691696
692697 let default_pkg_name = pkg_name. unwrap_or ( & pkg_family) . to_string ( ) ;
693- let binaries_to_push: Vec < String > = {
694- let packages = metadata
695- . as_ref ( )
696- . map ( |m| m. get_provided_packages ( ) )
697- . unwrap_or_default ( ) ;
698- if !packages. is_empty ( ) && packages != vec ! [ default_pkg_name. clone( ) ] {
699- info ! ( "Using packages from provides: {:?}" , packages) ;
700- packages
701- } else {
702- info ! (
703- "No packages from provides, using pkg name: {}" ,
704- default_pkg_name
705- ) ;
706- vec ! [ default_pkg_name. clone( ) ]
707- }
708- } ;
698+ let packages_to_push: Vec < String > = metadata
699+ . as_ref ( )
700+ . map ( |m| m. get_provided_packages ( ) )
701+ . unwrap_or_else ( || vec ! [ default_pkg_name. clone( ) ] ) ;
702+
703+ if packages_to_push. len ( ) > 1
704+ || packages_to_push
705+ . first ( )
706+ . map_or ( true , |p| p != & default_pkg_name)
707+ {
708+ info ! ( "Using packages from provides: {:?}" , packages_to_push) ;
709+ }
709710
710- for binary_name in & binaries_to_push {
711- let sanitized_binary_name = sanitize_oci_name ( binary_name ) ;
711+ for pkg_name_item in & packages_to_push {
712+ let sanitized_pkg_name = sanitize_oci_name ( pkg_name_item ) ;
712713 let owner = base_repo. split ( '/' ) . next ( ) . unwrap_or ( base_repo) ;
713714 let full_repo = if let Some ( ref custom_base) =
714715 metadata. as_ref ( ) . and_then ( |m| m. ghcr_pkg . as_ref ( ) )
715716 {
716- format ! ( "{}/{}/{}" , owner, custom_base, sanitized_binary_name )
717+ format ! ( "{}/{}/{}" , owner, custom_base, sanitized_pkg_name )
717718 } else {
718719 format ! (
719720 "{}/{}/{}/{}" ,
720- base_repo, pkg_family, recipe_name, sanitized_binary_name
721+ base_repo, pkg_family, recipe_name, sanitized_pkg_name
721722 )
722723 } ;
723- info ! ( "Pushing {} to {}" , binary_name, full_repo) ;
724-
725- let mut files_to_push: Vec < PathBuf > = Vec :: new ( ) ;
726- let mut main_binary_path: Option < PathBuf > = None ;
724+ info ! ( "Pushing {} to {}" , pkg_name_item, full_repo) ;
727725
728- let packages = metadata
726+ let pkg_provides : Vec < String > = metadata
729727 . as_ref ( )
730- . map ( |m| m. get_provided_packages ( ) )
731- . unwrap_or_default ( ) ;
732- if packages. len ( ) <= 1
733- && packages. first ( ) . map_or ( true , |p| p == & default_pkg_name)
734- {
735- files_to_push = all_files. clone ( ) ;
736- main_binary_path = all_files
737- . iter ( )
738- . find ( |p| {
739- p. file_name ( ) . and_then ( |n| n. to_str ( ) ) == Some ( binary_name. as_ref ( ) )
740- } )
741- . cloned ( ) ;
742- } else {
743- let binary_path = outdir. join ( binary_name) ;
744- if binary_path. exists ( ) {
745- files_to_push. push ( binary_path. clone ( ) ) ;
746- main_binary_path = Some ( binary_path) ;
747- }
728+ . and_then ( |m| m. get_package_provides ( pkg_name_item) )
729+ . map ( |p| p. to_vec ( ) )
730+ . unwrap_or_else ( || vec ! [ pkg_name_item. clone( ) ] ) ;
748731
749- for ext in & [
750- "json" ,
751- "png" ,
752- "svg" ,
753- "desktop" ,
754- "appdata.xml" ,
755- "metainfo.xml" ,
756- ] {
757- let assoc_file = outdir. join ( format ! ( "{}.{}" , binary_name, ext) ) ;
758- if assoc_file. exists ( ) {
759- files_to_push. push ( assoc_file) ;
760- }
761- }
732+ let main_binary_name = pkg_provides
733+ . iter ( )
734+ . find ( |p| !p. starts_with ( '@' ) )
735+ . map ( |p| {
736+ p. split ( "=>" )
737+ . next ( )
738+ . unwrap_or ( p)
739+ . split ( "==" )
740+ . next ( )
741+ . unwrap_or ( p)
742+ . split ( ':' )
743+ . next ( )
744+ . unwrap_or ( p)
745+ . to_string ( )
746+ } )
747+ . unwrap_or_else ( || pkg_name_item. clone ( ) ) ;
762748
763- for file in & all_files {
764- let name = file. file_name ( ) . and_then ( |n| n. to_str ( ) ) . unwrap_or ( "" ) ;
765- let ext = file. extension ( ) . and_then ( |e| e. to_str ( ) ) . unwrap_or ( "" ) ;
766- if matches ! ( name, "CHECKSUM" | "SBUILD" | "LICENSE" )
767- || matches ! ( ext, "log" | "version" )
768- {
769- if !files_to_push. contains ( file) {
770- files_to_push. push ( file. clone ( ) ) ;
771- }
772- }
773- }
774- }
749+ let main_binary_path = all_files
750+ . iter ( )
751+ . find ( |p| p. file_name ( ) . and_then ( |n| n. to_str ( ) ) == Some ( & main_binary_name) )
752+ . cloned ( ) ;
775753
776- if files_to_push. is_empty ( ) {
777- warn ! ( "No files found for {}" , binary_name) ;
778- continue ;
779- }
754+ let mut files_to_push = all_files. clone ( ) ;
780755
781756 let mut binaries_to_sign: Vec < PathBuf > = Vec :: new ( ) ;
782757 if let Some ( ref bin_path) = main_binary_path {
783758 binaries_to_sign. push ( bin_path. clone ( ) ) ;
784759 }
785760
786- for extra_bin in metadata
787- . as_ref ( )
788- . map ( |m| m. get_binaries ( ) )
789- . unwrap_or_default ( )
790- {
791- let extra_path = outdir. join ( & extra_bin) ;
792- if extra_path. exists ( ) && !binaries_to_sign. contains ( & extra_path) {
793- binaries_to_sign. push ( extra_path. clone ( ) ) ;
794- if !files_to_push. contains ( & extra_path) {
795- files_to_push. push ( extra_path) ;
761+ for provide in & pkg_provides {
762+ if provide. starts_with ( '@' ) {
763+ let bin_name = provide. strip_prefix ( '@' ) . unwrap ( ) ;
764+ let bin_path = outdir. join ( bin_name) ;
765+ if bin_path. exists ( ) && !binaries_to_sign. contains ( & bin_path) {
766+ binaries_to_sign. push ( bin_path) ;
796767 }
797768 }
798769 }
@@ -829,30 +800,31 @@ async fn post_build_processing(
829800 . filter_map ( |f| fs:: metadata ( f) . ok ( ) . map ( |m| m. len ( ) ) )
830801 . sum ( ) ;
831802
832- let json_path = outdir. join ( format ! ( "{}.json" , binary_name ) ) ;
803+ let json_path = outdir. join ( format ! ( "{}.json" , main_binary_name ) ) ;
833804 let meta_pkg_name = metadata
834805 . as_ref ( )
835806 . map ( |m| m. pkg . as_str ( ) )
836- . unwrap_or ( binary_name ) ;
807+ . unwrap_or ( pkg_name_item ) ;
837808 if json_path. exists ( ) {
838809 if let Err ( e) = update_json_metadata (
839810 & json_path,
840811 meta_pkg_name,
841- binary_name ,
812+ & main_binary_name ,
842813 & full_repo,
843814 & tag,
844815 bsum. as_deref ( ) ,
845816 shasum. as_deref ( ) ,
846817 checksum_bsum. as_deref ( ) ,
847818 binary_size,
848819 Some ( ghcr_total_size) ,
820+ Some ( & pkg_provides) ,
849821 ) {
850822 warn ! ( "Failed to update JSON metadata: {}" , e) ;
851823 }
852824 }
853825
854826 let annotations = PackageAnnotations {
855- pkg : binary_name . to_string ( ) ,
827+ pkg : main_binary_name . clone ( ) ,
856828 pkg_id : metadata
857829 . as_ref ( )
858830 . map ( |m| m. pkg_id . clone ( ) )
@@ -904,11 +876,11 @@ async fn post_build_processing(
904876 & annotations,
905877 ) {
906878 Ok ( target) => {
907- info ! ( "Pushed {} to {}" , binary_name , target) ;
879+ info ! ( "Pushed {} to {}" , pkg_name_item , target) ;
908880 pushed_urls. push ( target) ;
909881 }
910882 Err ( e) => {
911- error ! ( "Failed to push {}: {}" , binary_name , e) ;
883+ error ! ( "Failed to push {}: {}" , pkg_name_item , e) ;
912884 push_success = false ;
913885 }
914886 }
0 commit comments