diff --git a/new_version.py b/new_version.py index 59f2e4e49d..a261c99add 100755 --- a/new_version.py +++ b/new_version.py @@ -14,13 +14,11 @@ # Maintainer Inputs ########################################################### -print( - """Hi there, this is an openPMD maintainer tool to update the source +print("""Hi there, this is an openPMD maintainer tool to update the source code of openPMD-api to a new version. For it to work, you need write access on the source directory and you should be working in a clean git branch without ongoing -rebase/merge/conflict resolves and without unstaged changes.""" -) +rebase/merge/conflict resolves and without unstaged changes.""") # check source dir # REPO_DIR = Path(__file__).parent.parent.parent.absolute() @@ -40,6 +38,7 @@ VERSION_STR = f"{MAJOR}.{MINOR}.{PATCH}" VERSION_STR_SUFFIX = VERSION_STR + (f"-{SUFFIX}" if SUFFIX else "") +VERSION_STR_SUFFIX_WITH_DOT = VERSION_STR + (f".{SUFFIX}" if SUFFIX else "") print() print(f"Your new version is: {VERSION_STR_SUFFIX}") @@ -51,20 +50,41 @@ for line in f: match = re.search(r"find_package.*openPMD *([^ ]*) *CONFIG\).*", line) if match: - OLD_VERSION_STR = match.group(1) + OLD_VERSION_STR_README = match.group(1) + break + +with open(str(REPO_DIR.joinpath("CMakeLists.txt")), encoding="utf-8") as f: + for line in f: + match = re.search(r"project\(openPMD *VERSION *(.*)\)", line) + if match: + OLD_VERSION_STR_CMAKE = match.group(1) break +OLD_VERSION_TAG = "" +with open(str(REPO_DIR.joinpath("include/openPMD/version.hpp")), + encoding="utf-8") as f: + for line in f: + match = re.search(r'#define OPENPMDAPI_VERSION_LABEL "([^"]+)"', line) + if match: + OLD_VERSION_TAG = match.group(1) + break + +OLD_VERSION_SUFFIX = f"(-{OLD_VERSION_TAG})?" if OLD_VERSION_TAG else "" +# The order of the alternatives is important, since the Regex parser +# should greedily include the old version suffix +OLD_VERSION_STR = \ + f"({re.escape(OLD_VERSION_STR_CMAKE)}{OLD_VERSION_SUFFIX})" + \ + f"|({re.escape(OLD_VERSION_STR_README)})" + print(f"The old version is: {OLD_VERSION_STR}") print() - REPLY = input("Is this information correct? Will now start updating! [y/N] ") print() if REPLY not in ["Y", "y", ""]: print("You did not confirm with 'y', aborting.") sys.exit(1) - # Ask for new ################################################################# print("""We will now run a few sed commands on your source directory.\n""") @@ -86,18 +106,56 @@ f.write(cmakelists_content) -def generic_replace(filename): +def generic_replace(filename, previous, after): filename = str(REPO_DIR.joinpath(filename)) with open(filename, encoding="utf-8") as f: content = f.read() - content = re.sub(re.escape(OLD_VERSION_STR), VERSION_STR, content) + content = re.sub(previous, after, content, flags=re.MULTILINE) with open(filename, "w", encoding="utf-8") as f: f.write(content) -for file in ["docs/source/dev/linking.rst", "README.md"]: - generic_replace(file) +for file in [ + "docs/source/dev/linking.rst", + "README.md", +]: + generic_replace(file, previous=OLD_VERSION_STR, after=VERSION_STR) + +for file in ["CITATION.cff", "test/SerialIOTest.cpp"]: + generic_replace(file, previous=OLD_VERSION_STR, after=VERSION_STR_SUFFIX) + +generic_replace( + "docs/source/index.rst", + previous=r"``0.13.1-[^`]*``", + after=f"``0.13.1-{VERSION_STR}``", +) +setup_py_path = str(REPO_DIR.joinpath("setup.py")) +with open(setup_py_path, encoding="utf-8") as f: + for line in f: + match = re.search(r"version='([^']+)',", line) + if match: + PREVIOUS_PIP_VERSION = match.group(1) + break +generic_replace("setup.py", + previous=PREVIOUS_PIP_VERSION, + after=VERSION_STR_SUFFIX_WITH_DOT) +generic_replace( + ".github/workflows/windows.yml", + previous=f"{PREVIOUS_PIP_VERSION}0?", + after=(f"{VERSION_STR_SUFFIX_WITH_DOT}0" + if SUFFIX else VERSION_STR_SUFFIX_WITH_DOT), +) +generic_replace( + "docs/source/conf.py", + previous=r"^version.*=.*", + after=f"version = u'{VERSION_STR}'", +) +generic_replace( + "docs/source/conf.py", + previous=r"^release.*=.*", + after=f"release = u'{VERSION_STR_SUFFIX}'", +) version_hpp_path = str(REPO_DIR.joinpath("include/openPMD/version.hpp")) with open(version_hpp_path, encoding="utf-8") as f: @@ -122,8 +180,6 @@ def replace(key, value): # Epilogue #################################################################### -print( - """Done. Please check your source, e.g. via +print("""Done. Please check your source, e.g. via git diff -now and commit the changes if no errors occurred.""" -) +now and commit the changes if no errors occurred.""")