diff options
Diffstat (limited to 'Tools/Release/updateAMReX.py')
-rwxr-xr-x | Tools/Release/updateAMReX.py | 138 |
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.""") |