aboutsummaryrefslogtreecommitdiff
path: root/Tools/Release/updateAMReX.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Release/updateAMReX.py')
-rwxr-xr-xTools/Release/updateAMReX.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/Tools/Release/updateAMReX.py b/Tools/Release/updateAMReX.py
new file mode 100755
index 000000000..e3557c347
--- /dev/null
+++ b/Tools/Release/updateAMReX.py
@@ -0,0 +1,138 @@
+#!/usr/bin/env python3
+#
+# Copyright 2021 Axel Huebl
+#
+# This file is part of WarpX.
+#
+
+# This file is a maintainer tool to bump the AMReX version that we pull in
+# when building WarpX.
+#
+import datetime
+from pathlib import Path
+import re
+import requests
+import sys
+
+
+# Maintainer Inputs ###########################################################
+
+print("""Hi there, this is a WarpX maintainer tool to update the source
+code of WarpX to a new commit/release of AMReX.
+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.""")
+
+# check source dir
+REPO_DIR = Path(__file__).parent.parent.parent.absolute()
+print(f"\nYour current source directory is: {REPO_DIR}")
+
+REPLY = input("Are you sure you want to continue? [y/N] ")
+print()
+if not REPLY in ["Y", "y"]:
+ print("You did not confirm with 'y', aborting.")
+ sys.exit(1)
+
+
+# Current Versions ############################################################
+
+# AMReX development HEAD
+amrex_gh = requests.get('https://api.github.com/repos/AMReX-Codes/amrex/commits/development')
+amrex_HEAD = amrex_gh.json()["sha"]
+
+# WarpX references to AMReX: cmake/dependencies/AMReX.cmake
+amrex_cmake_path = str(REPO_DIR.joinpath("cmake/dependencies/AMReX.cmake"))
+# branch/commit/tag (git fetcher) version
+# set(WarpX_amrex_branch "development" ...
+amrex_branch = f"unknown (format issue in {amrex_cmake_path})"
+with open(amrex_cmake_path, encoding='utf-8') as f:
+ r_minimal = re.findall(r'.*set\(WarpX_amrex_branch\s+"(.+)"\s+.*',
+ f.read(), re.MULTILINE)
+ if len(r_minimal) >= 1:
+ amrex_branch = r_minimal[0]
+
+# minimal (external) version
+# find_package(AMReX YY.MM CONFIG ...
+amrex_minimal = f"unknown (format issue in {amrex_cmake_path})"
+with open(amrex_cmake_path, encoding='utf-8') as f:
+ r_minimal = re.findall(r'.*find_package\(AMReX\s+(.+)\s+CONFIG\s+.*',
+ f.read(), re.MULTILINE)
+ if len(r_minimal) >= 1:
+ amrex_minimal = r_minimal[0]
+
+
+# Ask for new #################################################################
+
+print("""We will now run a few sed commands on your source directory.
+Please answer the following questions about the version number
+you want to require from AMReX:\n""")
+
+print(f"Currently, WarpX builds against this AMReX commit/branch/sha: {amrex_branch}")
+print(f"AMReX HEAD commit (development branch): {amrex_HEAD}")
+amrex_new_branch = input(f"Update AMReX commit/branch/sha: ").strip()
+if not amrex_new_branch:
+ amrex_new_branch = amrex_branch
+ print(f"--> Nothing entered, will keep: {amrex_branch}")
+print()
+
+print(f"Currently, a pre-installed AMReX is required at least at version: {amrex_minimal}")
+today = datetime.date.today().strftime("%y.%m")
+amrex_new_minimal = input(f"New minimal AMReX version (e.g. {today})? ").strip()
+if not amrex_new_minimal:
+ amrex_new_minimal = amrex_minimal
+ print(f"--> Nothing entered, will keep: {amrex_minimal}")
+
+print()
+print(f"New AMReX commit/branch/sha: {amrex_new_branch}")
+print(f"New minimal AMReX version: {amrex_new_minimal}\n")
+
+REPLY = input("Is this information correct? Will now start updating! [y/N] ")
+print()
+if not REPLY in ["Y", "y"]:
+ print("You did not confirm with 'y', aborting.")
+ sys.exit(1)
+
+
+# Updates #####################################################################
+
+# run_test.sh (used also for Azure Pipelines)
+run_test_path = str(REPO_DIR.joinpath("run_test.sh"))
+with open(run_test_path, encoding='utf-8') as f:
+ run_test_content = f.read()
+ # branch/commit/tag (git fetcher) version
+ # git clone --branch development https://github.com/AMReX-Codes/amrex.git
+ run_test_content = re.sub(
+ r'(.*git\s+clone\s+\-\-branch\s+)(.+)(\s+https://github\.com/AMReX\-Codes/amrex\.git)',
+ r'\g<1>{}\g<3>'.format(amrex_new_branch),
+ run_test_content, flags = re.MULTILINE)
+
+with open(run_test_path, "w", encoding='utf-8') as f:
+ f.write(run_test_content)
+
+# WarpX references to AMReX: cmake/dependencies/AMReX.cmake
+with open(amrex_cmake_path, encoding='utf-8') as f:
+ amrex_cmake_content = f.read()
+
+ # branch/commit/tag (git fetcher) version
+ # set(WarpX_amrex_branch "development" ...
+ amrex_cmake_content = re.sub(
+ r'(.*set\(WarpX_amrex_branch\s+")(.+)("\s+.*)',
+ r'\g<1>{}\g<3>'.format(amrex_new_branch),
+ amrex_cmake_content, flags = re.MULTILINE)
+
+ # minimal (external) version
+ # find_package(AMReX YY.MM CONFIG ...
+ amrex_cmake_content = re.sub(
+ r'(.*find_package\(AMReX\s+)(.+)(\s+CONFIG\s+.*)',
+ r'\g<1>{}\g<3>'.format(amrex_new_minimal),
+ amrex_cmake_content, flags = re.MULTILINE)
+
+with open(amrex_cmake_path, "w", encoding='utf-8') as f:
+ f.write(amrex_cmake_content)
+
+
+# Epilogue ####################################################################
+
+print("""Done. Please check your source, e.g. via
+ git diff
+now and commit the changes if no errors occurred.""")