1+ #! /usr/bin/env python3
2+ import argparse , base64 , common , glob , os , platform , re , subprocess , sys , urllib .request , zipfile
3+
4+ def log_errors (name ):
5+ def wrap (f ):
6+ def result (* args , ** kwargs ):
7+ try :
8+ f (* args , ** kwargs )
9+ except Exception as e :
10+ print (f"{ name } : Failed { e } " )
11+ return result
12+ return wrap
13+
14+ def package (version ):
15+ zip = f"Fira_Code_v{ version } .zip"
16+
17+ print ('Package:' , zip )
18+ with zipfile .ZipFile (zip , 'w' , compression = zipfile .ZIP_DEFLATED , compresslevel = 9 ) as archive :
19+ for f in glob .glob ("distr/**" , recursive = True ):
20+ arcname = f [len ("distr/" ):]
21+ if arcname and not os .path .basename (arcname ).startswith ("." ):
22+ archive .write (f , arcname )
23+
24+ def github_headers ():
25+ if os .environ .get ('GITHUB_BASIC' ):
26+ auth = 'Basic ' + base64 .b64encode (os .environ .get ('GITHUB_BASIC' ).encode ('utf-8' )).decode ('utf-8' )
27+ else :
28+ auth = 'token ' + os .environ .get ('API_TOKEN' )
29+ return {
30+ 'Accept' : 'application/vnd.github.v3+json' ,
31+ 'Authorization' : auth
32+ }
33+
34+ @log_errors ("github_release" )
35+ def github_release (version ):
36+ zip = f"Fira_Code_v{ version } .zip"
37+
38+ data = '{"tag_name":"' + version + '","name":"' + version + '"}'
39+ headers = github_headers ()
40+ resp = urllib .request .urlopen (urllib .request .Request ('https://api.github.com/repos/tonsky/FiraCode/releases' , data = data .encode ('utf-8' ), headers = headers )).read ()
41+ upload_url = re .match ('https://.*/assets' , json .loads (resp .decode ('utf-8' ))['upload_url' ]).group (0 )
42+
43+ print ('github_release: Uploading' , zip , 'to' , upload_url )
44+ headers ['Content-Type' ] = 'application/zip'
45+ headers ['Content-Length' ] = os .path .getsize (zip )
46+ with open (zip , 'rb' ) as data :
47+ urllib .request .urlopen (urllib .request .Request (upload_url + '?name=' + zip , data = data , headers = headers ))
48+
49+ @log_errors ("npm_publish" )
50+ def npm_publish (version ):
51+ print ("npm_publish: Skip" )
52+
53+ @log_errors ("update_homebrew" )
54+ def update_homebrew (version ):
55+ print ("update_homebrew: Skip" ) # Update https://github.com/Homebrew/homebrew-cask-fonts
56+
57+ @log_errors ("update_scoop" )
58+ def update_scoop (version ):
59+ print ("update_scoop: Skip" ) # Update https://github.com/matthewjberger/scoop-nerd-fonts/blob/master/bucket/FiraCode.json
60+
61+ @log_errors ("update_google_fonts" )
62+ def update_google_fonts (version ):
63+ print ("update_google_fonts: Skip" )
64+
65+ if __name__ == '__main__' :
66+ os .chdir (common .root )
67+ version = common .version ()
68+ package (version )
69+ github_release (version )
70+ npm_publish (version )
71+ update_homebrew (version )
72+ update_scoop (version )
73+ update_google_fonts (version )
74+ sys .exit (0 )
0 commit comments