8
8
"""
9
9
import json
10
10
import os
11
+ import re
11
12
import shutil
12
13
import subprocess
13
14
import sys
16
17
from typing import Any , Dict , List , Union , Tuple , Optional
17
18
from urllib import request
18
19
20
+ SUB_VERSION = 1
21
+ RELEASE_NOTES = """- Fixed the library version in the pom #3 (thanks to @gavlyukovskiy for spotting this)"""
22
+
19
23
HELP = """
20
24
Usage:
21
25
. python3 releaser.py <command> ... <command> [release or current if not present]
41
45
CACHE_TIME = 60 * 60 * 24 # one day
42
46
43
47
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 } /pom-{ 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 } </version>" , pom_content , count = 1 )
59
+ pom_content = re .sub (r"<project.vversion>.*</project.vversion>" , f"<project.vversion>{ release } </project.vversion>" , pom_content , count = 1 )
60
+ pom_content = re .sub (r"<project.subversion>.*</project.subversion>" , f"<project.subversion>{ SUB_VERSION } </project.subversion>" , pom_content , count = 1 )
61
+ pom_content = re .sub (r"<project.platform>.*</project.platform>" , f"<project.platform>{ platform } </project.platform>" , pom_content , count = 1 )
62
+ pom_content = re .sub (r"<project.suffix>.*</project.suffix>" , f"<project.suffix>{ suffix } </project.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 } /pom.xml" , f"{ folder } /pom_all.xml"
67
+
68
+
69
+
44
70
def execute (args : Union [List [str ], str ]):
45
71
subprocess .check_call (args , cwd = CURRENT_DIR , shell = isinstance (args , str ), stdout = subprocess .DEVNULL )
46
72
@@ -134,7 +160,7 @@ def download_release(release: str):
134
160
135
161
136
162
def release_target_file (release : str , platform : str ):
137
- return f"{ CURRENT_DIR } /releases/ap-loader-{ release } -{ platform } .jar"
163
+ return f"{ CURRENT_DIR } /releases/ap-loader-{ release } -{ SUB_VERSION } - { platform } .jar"
138
164
139
165
140
166
def build_release (release : str ):
@@ -143,15 +169,15 @@ def build_release(release: str):
143
169
os .makedirs (release_folder , exist_ok = True )
144
170
download_release (release )
145
171
for platform in get_release_platforms (release ):
146
- release_file = f"ap-loader-{ release } -{ platform } -full.jar"
147
- dest_release_file = f"{ release_folder } /ap-loader-{ release } -{ platform } .jar"
172
+ release_file = f"ap-loader-{ release } -{ SUB_VERSION } - { platform } -full.jar"
173
+ dest_release_file = f"{ release_folder } /ap-loader-{ release } -{ SUB_VERSION } - { platform } .jar"
148
174
print (f"Build release for { platform } " )
149
- execute (f"mvn -Dproject.versionPlatform ={ release } - { platform } package assembly:single" )
175
+ execute (f"mvn -Dproject.vversion ={ release } -Dproject.subrelease= { SUB_VERSION } -Dproject.platform= { platform } package assembly:single" )
150
176
shutil .copy (f"{ CURRENT_DIR } /target/{ release_file } " , dest_release_file )
151
177
all_target = release_target_file (release , "all" )
152
178
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 } /target/ap-loader-{ release } -all-full.jar" , 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 } /target/ap-loader-{ release } -{ SUB_VERSION } - all-full.jar" , all_target )
155
181
156
182
157
183
def build_tests (release : str ):
@@ -266,9 +292,10 @@ def test_release(release: str):
266
292
267
293
268
294
def deploy_maven_platform (release : str , platform : str , snapshot : bool ):
269
- print (f"Deploy { release } for { platform } to maven" )
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 } for { platform } to maven" )
296
+ poms = prepare_poms (release , platform , snapshot )
297
+ pom = poms [1 ] if platform == "all" else poms [0 ]
298
+ cmd = f"mvn -Dproject.vversion={ release } -Dproject.subrelease={ SUB_VERSION } -Dproject.platform={ platform } " \
272
299
f"-Dproject.suffix='{ '-SNAPSHOT' if snapshot else '' } ' -f { pom } clean deploy"
273
300
try :
274
301
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):
280
307
281
308
282
309
def 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 '' } " )
284
311
for platform in get_release_platforms (release ):
285
312
deploy_maven_platform (release , platform , snapshot )
286
313
deploy_maven_platform (release , "all" , snapshot )
287
314
288
315
289
316
def get_changelog (release : str ) -> str :
290
317
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 } ) " \
292
320
f"by [Andrei Pangin](https://github.com/apangin). " \
293
321
f"The source code linked below should be ignored._\n \n { get_release_info (release )} "
294
322
295
323
296
324
def deploy_github (release : str ):
297
325
changelog = get_changelog (release )
298
326
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' ]} "
300
328
prerelease = get_release (release )["prerelease" ]
301
- print (f"Deploy { release } ({ title } ) to GitHub" )
302
- if not os .path .exists (f"{ CURRENT_DIR } /releases/ap-loader-{ release } -all.jar" ):
329
+ print (f"Deploy { release } - { SUB_VERSION } ({ title } ) to GitHub" )
330
+ if not os .path .exists (f"{ CURRENT_DIR } /releases/ap-loader-{ release } -{ SUB_VERSION } - all.jar" ):
303
331
build_release (release )
304
332
with tempfile .TemporaryDirectory () as d :
305
333
changelog_file = f"{ d } /CHANGELOG.md"
@@ -310,20 +338,20 @@ def deploy_github(release: str):
310
338
platform_paths = []
311
339
for platform in get_release_platforms (release ) + ["all" ]:
312
340
path = f"{ d } /ap-loader-{ platform } .jar"
313
- shutil .copy (f"{ releases_dir } /ap-loader-{ release } -{ platform } .jar" , path )
341
+ shutil .copy (f"{ releases_dir } /ap-loader-{ release } -{ SUB_VERSION } - { platform } .jar" , path )
314
342
platform_paths .append (path )
315
343
316
344
flags_str = f"-F { changelog_file } -t '{ title } ' { '--latest' if is_latest else '' } " \
317
345
f" { '--prerelease' if prerelease else '' } "
318
346
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 } "
320
348
try :
321
349
subprocess .check_call (cmd , shell = True , cwd = CURRENT_DIR , stdout = subprocess .DEVNULL ,
322
350
stderr = subprocess .DEVNULL )
323
351
except subprocess .CalledProcessError :
324
352
# this is either a real problem or it means that the release already exists
325
353
# in the latter case, we can just update it
326
- cmd = f"gh release edit { release } { flags_str } ; gh release upload { release } { paths_str } --clobber"
354
+ cmd = f"gh release edit { release } - { SUB_VERSION } { flags_str } ; gh release upload { release } - { SUB_VERSION } { paths_str } --clobber"
327
355
try :
328
356
subprocess .check_call (cmd , shell = True , cwd = CURRENT_DIR , stdout = subprocess .DEVNULL ,
329
357
stderr = subprocess .DEVNULL )
0 commit comments