88""" 
99import  json 
1010import  os 
11+ import  re 
1112import  shutil 
1213import  subprocess 
1314import  sys 
1617from  typing  import  Any , Dict , List , Union , Tuple , Optional 
1718from  urllib  import  request 
1819
20+ SUB_VERSION  =  1 
21+ RELEASE_NOTES  =  """- Fixed the library version in the pom #3 (thanks to @gavlyukovskiy for spotting this)""" 
22+ 
1923HELP  =  """ 
2024Usage: 
2125 .   python3 releaser.py <command> ... <command> [release or current if not present] 
4145CACHE_TIME  =  60  *  60  *  24   # one day 
4246
4347
48+ def  prepare_poms (release : str , platform : str , snapshot : bool  =  True ) ->  Tuple [str , str ]:
49+     """ Prepare the POMs for the given release and platform """ 
50+     folder  =  f"{ CACHE_DIR } { release } { platform }  
51+     os .makedirs (folder , exist_ok = True )
52+     for  pom  in  ["pom.xml" , "pom_all.xml" ]:
53+         pom_file  =  f"{ CURRENT_DIR } { pom }  
54+         dest_pom  =  f"{ folder } { pom }  
55+         with  open (pom_file ) as  f :
56+             pom_content  =  f .read ()
57+             suffix  =  "-SNAPSHOT"  if  snapshot  else  "" 
58+             pom_content  =  re .sub (r"<version>.*</version>" , f"<version>{ release } { SUB_VERSION } { platform } { suffix }  , pom_content , count  =  1 )
59+             pom_content  =  re .sub (r"<project.vversion>.*</project.vversion>" , f"<project.vversion>{ release }  , pom_content , count  =  1 )
60+             pom_content  =  re .sub (r"<project.subversion>.*</project.subversion>" , f"<project.subversion>{ SUB_VERSION }  , pom_content , count  =  1 )
61+             pom_content  =  re .sub (r"<project.platform>.*</project.platform>" , f"<project.platform>{ platform }  , pom_content , count  =  1 )
62+             pom_content  =  re .sub (r"<project.suffix>.*</project.suffix>" , f"<project.suffix>{ suffix }  , pom_content , count  =  1 )
63+             pom_content  =  pom_content .replace ("${basedir}" , "${basedir}/../.." )
64+             with  open (dest_pom , "w" ) as  f2 :
65+                 f2 .write (pom_content )
66+     return  f"{ folder }  , f"{ folder }  
67+ 
68+ 
69+ 
4470def  execute (args : Union [List [str ], str ]):
4571    subprocess .check_call (args , cwd = CURRENT_DIR , shell = isinstance (args , str ), stdout = subprocess .DEVNULL )
4672
@@ -134,7 +160,7 @@ def download_release(release: str):
134160
135161
136162def  release_target_file (release : str , platform : str ):
137-     return  f"{ CURRENT_DIR } { release } { platform }  
163+     return  f"{ CURRENT_DIR } { release } { SUB_VERSION } - { platform }  
138164
139165
140166def  build_release (release : str ):
@@ -143,15 +169,15 @@ def build_release(release: str):
143169    os .makedirs (release_folder , exist_ok = True )
144170    download_release (release )
145171    for  platform  in  get_release_platforms (release ):
146-         release_file  =  f"ap-loader-{ release } { platform }  
147-         dest_release_file  =  f"{ release_folder } { release } { platform }  
172+         release_file  =  f"ap-loader-{ release } { SUB_VERSION } - { platform }  
173+         dest_release_file  =  f"{ release_folder } { release } { SUB_VERSION } - { platform }  
148174        print (f"Build release for { platform }  )
149-         execute (f"mvn -Dproject.versionPlatform ={ release } - { platform }  )
175+         execute (f"mvn -Dproject.vversion ={ release }  -Dproject.subrelease= { SUB_VERSION }  -Dproject.platform= { platform }  )
150176        shutil .copy (f"{ CURRENT_DIR } { release_file }  , dest_release_file )
151177    all_target  =  release_target_file (release , "all" )
152178    print ("Build release for all" )
153-     execute (f"mvn -Dproject.versionPlatform ={ release } - all package assembly:single -f pom_all.xml" )
154-     shutil .copy (f"{ CURRENT_DIR } { release }  , all_target )
179+     execute (f"mvn -Dproject.vversion ={ release }  -Dproject.subrelease= { SUB_VERSION }  -Dproject.platform= all package assembly:single -f pom_all.xml" )
180+     shutil .copy (f"{ CURRENT_DIR } { release } { SUB_VERSION } - all-full.jar" , all_target )
155181
156182
157183def  build_tests (release : str ):
@@ -266,9 +292,10 @@ def test_release(release: str):
266292
267293
268294def  deploy_maven_platform (release : str , platform : str , snapshot : bool ):
269-     print (f"Deploy { release } { platform }  )
270-     pom  =  "pom_all.xml"  if  platform  ==  "all"  else  "pom.xml" 
271-     cmd  =  f"mvn -Dproject.versionPlatform='{ release } { platform }   \
295+     print (f"Deploy { release } { SUB_VERSION } { platform }  )
296+     poms  =  prepare_poms (release , platform , snapshot )
297+     pom  =  poms [1 ] if  platform  ==  "all"  else  poms [0 ]
298+     cmd  =  f"mvn -Dproject.vversion={ release } { SUB_VERSION } { platform }   \
272299          f"-Dproject.suffix='{ '-SNAPSHOT'  if  snapshot  else  '' } { pom }  
273300    try :
274301        subprocess .check_call (cmd , shell = True , cwd = CURRENT_DIR , stdout = subprocess .DEVNULL ,
@@ -280,26 +307,27 @@ def deploy_maven_platform(release: str, platform: str, snapshot: bool):
280307
281308
282309def  deploy_maven (release : str , snapshot : bool  =  True ):
283-     print (f"Deploy { release } { ' snapshot'  if  snapshot  else  '' }  )
310+     print (f"Deploy { release } - { SUB_VERSION } { ' snapshot'  if  snapshot  else  '' }  )
284311    for  platform  in  get_release_platforms (release ):
285312        deploy_maven_platform (release , platform , snapshot )
286313    deploy_maven_platform (release , "all" , snapshot )
287314
288315
289316def  get_changelog (release : str ) ->  str :
290317    url  =  get_release (release )["html_url" ]
291-     return  f"_Copied from the wrapped [async-profiler release]({ url }   \
318+     return  f"## ap-loader v{ SUB_VERSION } \n \n { RELEASE_NOTES } \n \n "  \
319+            f"_The following is copied from the wrapped [async-profiler release]({ url }   \
292320           f"by [Andrei Pangin](https://github.com/apangin). "  \
293321           f"The source code linked below should be ignored._\n \n { get_release_info (release )}  
294322
295323
296324def  deploy_github (release : str ):
297325    changelog  =  get_changelog (release )
298326    is_latest  =  release  ==  get_most_recent_release ()
299-     title  =  f"Loader for { release } { get_release (release )['name' ]}  
327+     title  =  f"Loader for { release }  (v { SUB_VERSION } ) : { get_release (release )['name' ]}  
300328    prerelease  =  get_release (release )["prerelease" ]
301-     print (f"Deploy { release } { title }  )
302-     if  not  os .path .exists (f"{ CURRENT_DIR } { release }  ):
329+     print (f"Deploy { release } - { SUB_VERSION } { title }  )
330+     if  not  os .path .exists (f"{ CURRENT_DIR } { release } { SUB_VERSION } - all.jar" ):
303331        build_release (release )
304332    with  tempfile .TemporaryDirectory () as  d :
305333        changelog_file  =  f"{ d }  
@@ -310,20 +338,20 @@ def deploy_github(release: str):
310338        platform_paths  =  []
311339        for  platform  in  get_release_platforms (release ) +  ["all" ]:
312340            path  =  f"{ d } { platform }  
313-             shutil .copy (f"{ releases_dir } { release } { platform }  , path )
341+             shutil .copy (f"{ releases_dir } { release } { SUB_VERSION } - { platform }  , path )
314342            platform_paths .append (path )
315343
316344        flags_str  =  f"-F { changelog_file } { title } { '--latest'  if  is_latest  else  '' }   \
317345                    f" { '--prerelease'  if  prerelease  else  '' }  
318346        paths_str  =  " " .join (f'"{ p }   for  p  in  platform_paths )
319-         cmd  =  f"gh release create { release } { flags_str } { paths_str }  
347+         cmd  =  f"gh release create { release } - { SUB_VERSION } { flags_str } { paths_str }  
320348        try :
321349            subprocess .check_call (cmd , shell = True , cwd = CURRENT_DIR , stdout = subprocess .DEVNULL ,
322350                                  stderr = subprocess .DEVNULL )
323351        except  subprocess .CalledProcessError :
324352            # this is either a real problem or it means that the release already exists 
325353            # in the latter case, we can just update it 
326-             cmd  =  f"gh release edit { release } { flags_str } { release } { paths_str }  
354+             cmd  =  f"gh release edit { release } - { SUB_VERSION } { flags_str } { release } - { SUB_VERSION } { paths_str }  
327355            try :
328356                subprocess .check_call (cmd , shell = True , cwd = CURRENT_DIR , stdout = subprocess .DEVNULL ,
329357                                      stderr = subprocess .DEVNULL )
0 commit comments