From 03650f39bbef3da49f2a4623da93d0b6b6ce11b7 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Thu, 18 Feb 2021 20:15:52 -0800 Subject: Tool: update AMReX dependency (#1710) * Tool: update AMReX dependency We currently pull the `development` branch of AMReX in CMake builds. This is problematic in central workflows: - checking out a release might not compile - manual intervention is needed by users - builds are not as reproducibile as they could be - CI fails in a surprising wary in WarpX if a temporary bug is lands in AMReX' `development` Instead, we can bump the AMReX requirement periodically in a PR. This migh be the case when we: - need new features or bug fixes - do a release Manual updates guarantee that we see problems with updates from AMReX in the moment they are introduced - during a PR that changes the dependency to AMReX. * Tool: update PICSAR dependency See AMReX' updater description. * Docs: Dependencies & Releases Update and add workflows. * PICSAR & AMReX: Bump Version to HEAD Bump the PICSAR and AMReX versions to the latest head. Executed with: ``` ./Tools/Release/updateAMReX.py ./Tools/Release/updatePICSAR.py ``` * Python Tools: Cleanup * Fix typos Co-authored-by: Luca Fedeli Co-authored-by: Luca Fedeli --- Tools/Release/updateAMReX.py | 138 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100755 Tools/Release/updateAMReX.py (limited to 'Tools/Release/updateAMReX.py') 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.""") -- cgit v1.2.3