Skip to content

Commit

Permalink
Steal new_version.py from doc-0.16.1
Browse files Browse the repository at this point in the history
  • Loading branch information
franzpoeschel committed Oct 29, 2024
1 parent 7abdd7c commit 205398c
Showing 1 changed file with 71 additions and 15 deletions.
86 changes: 71 additions & 15 deletions new_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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}")
Expand All @@ -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""")
Expand All @@ -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:
Expand All @@ -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.""")

0 comments on commit 205398c

Please sign in to comment.