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 PICSAR 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 PICSAR.
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 ############################################################
# PICSAR development HEAD
PICSAR_gh = requests.get('https://api.github.com/repos/ECP-WarpX/picsar/commits/development')
PICSAR_HEAD = PICSAR_gh.json()["sha"]
# WarpX references to PICSAR: cmake/dependencies/PICSAR.cmake
PICSAR_cmake_path = str(REPO_DIR.joinpath("cmake/dependencies/PICSAR.cmake"))
# branch/commit/tag (git fetcher) version
# set(WarpX_picsar_branch "development" ...
PICSAR_branch = f"unknown (format issue in {PICSAR_cmake_path})"
with open(PICSAR_cmake_path, encoding='utf-8') as f:
r_minimal = re.findall(r'.*set\(WarpX_picsar_branch\s+"(.+)"\s+.*',
f.read(), re.MULTILINE)
if len(r_minimal) >= 1:
PICSAR_branch = r_minimal[0]
# minimal (external) version
# find_package(PICSAR YY.MM CONFIG ...
PICSAR_minimal = f"unknown (format issue in {PICSAR_cmake_path})"
with open(PICSAR_cmake_path, encoding='utf-8') as f:
r_minimal = re.findall(r'.*find_package\(PICSAR\s+(.+)\s+CONFIG\s+.*',
f.read(), re.MULTILINE)
if len(r_minimal) >= 1:
PICSAR_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 PICSAR:\n""")
print(f"Currently, WarpX builds against this PICSAR commit/branch/sha: {PICSAR_branch}")
print(f"PICSAR HEAD commit (development branch): {PICSAR_HEAD}")
PICSAR_new_branch = input(f"Update PICSAR commit/branch/sha: ").strip()
if not PICSAR_new_branch:
PICSAR_new_branch = PICSAR_branch
print(f"--> Nothing entered, will keep: {PICSAR_branch}")
print()
print(f"Currently, a pre-installed PICSAR is required at least at version: {PICSAR_minimal}")
today = datetime.date.today().strftime("%y.%m")
PICSAR_new_minimal = input(f"New minimal PICSAR version (e.g. {today})? ").strip()
if not PICSAR_new_minimal:
PICSAR_new_minimal = PICSAR_minimal
print(f"--> Nothing entered, will keep: {PICSAR_minimal}")
print()
print(f"New PICSAR commit/branch/sha: {PICSAR_new_branch}")
print(f"New minimal PICSAR version: {PICSAR_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/PICSAR-Codes/PICSAR.git
run_test_content = re.sub(
r'(.*git\s+clone\s+\-\-branch\s+)(.+)(\s+https://github\.com/ECP\-WarpX/picsar\.git)',
r'\g<1>{}\g<3>'.format(PICSAR_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 PICSAR: cmake/dependencies/PICSAR.cmake
with open(PICSAR_cmake_path, encoding='utf-8') as f:
PICSAR_cmake_content = f.read()
# branch/commit/tag (git fetcher) version
# set(WarpX_picsar_branch "development" ...
PICSAR_cmake_content = re.sub(
r'(.*set\(WarpX_picsar_branch\s+")(.+)("\s+.*)',
r'\g<1>{}\g<3>'.format(PICSAR_new_branch),
PICSAR_cmake_content, flags = re.MULTILINE)
# minimal (external) version
# find_package(PICSAR YY.MM CONFIG ...
PICSAR_cmake_content = re.sub(
r'(.*find_package\(PICSAR\s+)(.+)(\s+CONFIG\s+.*)',
r'\g<1>{}\g<3>'.format(PICSAR_new_minimal),
PICSAR_cmake_content, flags = re.MULTILINE)
with open(PICSAR_cmake_path, "w", encoding='utf-8') as f:
f.write(PICSAR_cmake_content)
# Epilogue ####################################################################
print("""Done. Please check your source, e.g. via
git diff
now and commit the changes if no errors occurred.""")
|