@@ -777,7 +777,15 @@ def test_create_followup_pr_rejects_invalid_branch_prefix(self):
777777
778778 # --- publish-release ---
779779
780- def publish_args (self , version = "1.2.3" , notes = None , bundle_dir = None , release_list = None , check_availability = "true" ):
780+ def publish_args (
781+ self ,
782+ version = "1.2.3" ,
783+ notes = None ,
784+ bundle_dir = None ,
785+ release_list = None ,
786+ additional_assets = "" ,
787+ check_availability = "true" ,
788+ ):
781789 return parse_args (
782790 "publish-release" ,
783791 "--version" , version ,
@@ -786,6 +794,7 @@ def publish_args(self, version="1.2.3", notes=None, bundle_dir=None, release_lis
786794 "--notes-file" , str (notes ),
787795 "--bundle-dir" , str (bundle_dir ),
788796 "--release-list-file" , str (release_list ),
797+ "--additional-assets" , additional_assets ,
789798 "--check-availability" , check_availability ,
790799 )
791800
@@ -835,6 +844,57 @@ def test_publish_release_rechecks_availability_and_creates_release(self):
835844 self .assertNotIn ("debug.txt" , commands )
836845 self .assertIn ("--notes-file" , commands )
837846
847+ def test_publish_release_includes_additional_assets (self ):
848+ log = self .tmp / "commands.log"
849+ notes = self .write ("release-notes.md" , "Generated notes\n " )
850+ bundle_dir = self .tmp / "bundles"
851+ bundle_dir .mkdir ()
852+ self .write ("bundles/pkg.tar.zst" , "bundle" )
853+ docs = self .write ("docs.tar.gz" , "docs" )
854+ release_list = self .write (
855+ "release-bundles.json" ,
856+ json .dumps ([{"name" : "default" , "artifact_file" : "pkg.tar.zst" }]),
857+ )
858+ with self .fake_commands (
859+ env = {"LOG_PATH" : str (log )},
860+ git = 'echo "git:$*" >> "$LOG_PATH"\n ' ,
861+ gh = 'echo "gh:$*" >> "$LOG_PATH"\n ' ,
862+ ):
863+ release .cmd_publish_release (
864+ self .publish_args (
865+ notes = notes ,
866+ bundle_dir = bundle_dir ,
867+ release_list = release_list ,
868+ additional_assets = f"\n { docs } \n " ,
869+ check_availability = "false" ,
870+ )
871+ )
872+ commands = log .read_text (encoding = "utf-8" )
873+ self .assertIn (f"gh:release create 1.2.3 { bundle_dir / 'pkg.tar.zst' } { docs } " , commands )
874+
875+ def test_publish_release_rejects_duplicate_additional_asset_filename (self ):
876+ notes = self .write ("release-notes.md" , "Generated notes\n " )
877+ bundle_dir = self .tmp / "bundles"
878+ bundle_dir .mkdir ()
879+ self .write ("bundles/pkg.tar.zst" , "bundle" )
880+ additional_dir = self .tmp / "additional"
881+ additional_dir .mkdir ()
882+ duplicate = self .write ("additional/pkg.tar.zst" , "duplicate" )
883+ release_list = self .write (
884+ "release-bundles.json" ,
885+ json .dumps ([{"name" : "default" , "artifact_file" : "pkg.tar.zst" }]),
886+ )
887+ with self .assertRaisesRegex (release .ReleaseError , "duplicate release asset filename" ):
888+ release .cmd_publish_release (
889+ self .publish_args (
890+ notes = notes ,
891+ bundle_dir = bundle_dir ,
892+ release_list = release_list ,
893+ additional_assets = str (duplicate ),
894+ check_availability = "false" ,
895+ )
896+ )
897+
838898 def test_publish_release_marks_prerelease (self ):
839899 log = self .tmp / "commands.log"
840900 notes = self .write ("release-notes.md" , "Generated notes\n " )
0 commit comments