1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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.""")
|