mirror of
https://github.com/fastfloat/fast_float.git
synced 2025-12-06 16:56:57 +08:00
adding release script
This commit is contained in:
parent
2f3ed44e06
commit
9befad4626
111
script/release.py
Executable file
111
script/release.py
Executable file
@ -0,0 +1,111 @@
|
||||
#!/usr/bin/env python3
|
||||
########################################################################
|
||||
# Generates a new release.
|
||||
########################################################################
|
||||
import sys
|
||||
import re
|
||||
import subprocess
|
||||
import io
|
||||
import os
|
||||
import fileinput
|
||||
if sys.version_info < (3, 0):
|
||||
sys.stdout.write("Sorry, requires Python 3.x or better\n")
|
||||
sys.exit(1)
|
||||
|
||||
def colored(r, g, b, text):
|
||||
return "\033[38;2;{};{};{}m{} \033[38;2;255;255;255m".format(r, g, b, text)
|
||||
|
||||
def extractnumbers(s):
|
||||
return tuple(map(int,re.findall("(\d+)\.(\d+)\.(\d+)",str(s))[0]))
|
||||
|
||||
def toversionstring(major, minor, rev):
|
||||
return str(major)+"."+str(minor)+"."+str(rev)
|
||||
|
||||
def topaddedversionstring(major, minor, rev):
|
||||
return str(major)+str(minor).zfill(3)+str(rev).zfill(3)
|
||||
print("Calling git rev-parse --abbrev-ref HEAD")
|
||||
pipe = subprocess.Popen(["git", "rev-parse", "--abbrev-ref", "HEAD"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
branchresult = pipe.communicate()[0].decode().strip()
|
||||
|
||||
if(branchresult != "main"):
|
||||
print(colored(255, 0, 0, "We recommend that you release on main, you are on '"+branchresult+"'"))
|
||||
|
||||
ret = subprocess.call(["git", "remote", "update"])
|
||||
|
||||
if(ret != 0):
|
||||
sys.exit(ret)
|
||||
print("Calling git log HEAD.. --oneline")
|
||||
pipe = subprocess.Popen(["git", "log", "HEAD..", "--oneline"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
uptodateresult = pipe.communicate()[0].decode().strip()
|
||||
|
||||
if(len(uptodateresult) != 0):
|
||||
print(uptodateresult)
|
||||
sys.exit(-1)
|
||||
|
||||
pipe = subprocess.Popen(["git", "rev-parse", "--show-toplevel"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
maindir = pipe.communicate()[0].decode().strip()
|
||||
scriptlocation = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
print("repository: "+maindir)
|
||||
|
||||
pipe = subprocess.Popen(["git", "describe", "--abbrev=0", "--tags"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
versionresult = pipe.communicate()[0].decode().strip()
|
||||
|
||||
print("last version: "+versionresult )
|
||||
try:
|
||||
currentv = extractnumbers(versionresult)
|
||||
except:
|
||||
currentv = [0,0,0]
|
||||
if(len(sys.argv) != 2):
|
||||
nextv = (currentv[0],currentv[1], currentv[2]+1)
|
||||
print ("please specify version number, e.g. "+toversionstring(*nextv))
|
||||
sys.exit(-1)
|
||||
try:
|
||||
newversion = extractnumbers(sys.argv[1])
|
||||
print(newversion)
|
||||
except:
|
||||
print("can't parse version number "+sys.argv[1])
|
||||
sys.exit(-1)
|
||||
|
||||
print("checking that new version is valid")
|
||||
if(newversion[0] != currentv[0]):
|
||||
assert newversion[0] == currentv[0] + 1
|
||||
assert newversion[1] == 0
|
||||
assert newversion[2] == 0
|
||||
elif (newversion[1] != currentv[1]):
|
||||
assert newversion[1] == currentv[1] + 1
|
||||
assert newversion[2] == 0
|
||||
else :
|
||||
assert newversion[2] == currentv[2] + 1
|
||||
|
||||
atleastminor= (currentv[0] != newversion[0]) or (currentv[1] != newversion[1])
|
||||
|
||||
|
||||
|
||||
newmajorversionstring = str(newversion[0])
|
||||
mewminorversionstring = str(newversion[1])
|
||||
newrevversionstring = str(newversion[2])
|
||||
newversionstring = str(newversion[0]) + "." + str(newversion[1]) + "." + str(newversion[2])
|
||||
cmakefile = maindir + os.sep + "CMakeLists.txt"
|
||||
|
||||
|
||||
for line in fileinput.input(cmakefile, inplace=1, backup='.bak'):
|
||||
line = re.sub('project\(fast_float VERSION \d+\.\d+\.\d+ LANGUAGES CXX\)','project(fast_float VERSION '+newmajorversionstring+'.'+mewminorversionstring+'.'+newrevversionstring+" LANGUAGES CXX)", line.rstrip())
|
||||
print(line)
|
||||
|
||||
print("modified "+cmakefile+", a backup was made")
|
||||
|
||||
|
||||
readmefile = maindir + os.sep + "README.md"
|
||||
|
||||
|
||||
for line in fileinput.input(readmefile, inplace=1, backup='.bak'):
|
||||
line = re.sub('https://github.com/fastfloat/fast_float/releases/download/v(\d+\.\d+\.\d+)/fast_float.h','https://github.com/fastfloat/fast_float/releases/download/v'+newmajorversionstring+'.'+mewminorversionstring+'.'+newrevversionstring+'/fast_float.h', line.rstrip())
|
||||
print(line)
|
||||
|
||||
print("modified "+readmefile+", a backup was made")
|
||||
print("Please run the tests before issuing a release. \n")
|
||||
print("to issue release, enter \n git commit -a && git push && git tag -a v"+toversionstring(*newversion)+" -m \"version "+toversionstring(*newversion)+"\" && git push --tags \n")
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user