Skip to content

Commit be9d636

Browse files
committed
.
1 parent 6585823 commit be9d636

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

scripts/split_tox_gh_actions/split_tox_gh_actions.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,18 @@
2626

2727
from jinja2 import Environment, FileSystemLoader
2828

29-
VERSION_REGEX = re.compile(r"v{?[0-9.]+.*}?|latest")
29+
TOXENV_REGEX = re.compile(
30+
r"""
31+
{?(?P<py_versions>(py\d+\.\d+,?)+)}?
32+
-(?P<framework>[a-z](?:[a-z_]|-(?!v{?\d|latest))*[a-z0-9])
33+
(?:-(
34+
(v{?(?P<framework_versions>[0-9.]+[0-9a-z,.]*}?))
35+
|
36+
(?P<framework_versions_latest>latest)
37+
))?
38+
""",
39+
re.VERBOSE,
40+
)
3041

3142
OUT_DIR = Path(__file__).resolve().parent.parent.parent / ".github" / "workflows"
3243
TOX_FILE = Path(__file__).resolve().parent.parent.parent / "tox.ini"
@@ -211,33 +222,26 @@ def parse_tox():
211222
line = line.strip().lower()
212223

213224
try:
214-
# Parse tox environment definitions.
215-
# The format is pythonversions-integrationname-integrationversions.
216-
# Some valid examples:
217-
# {pyX.Y,pyX.Z}-integrationname-vA.B.C
218-
# {pyX.Y,pyX.Z}-integrationname-v{A.B.C}
219-
# {pyX.Y,pyX.Z}-integrationname
220-
# No that integrationname can also contain dashes, which makes this a
221-
# bit more annoying.
222-
raw_python_versions = line.split("-")[0]
223-
framework_versions = line.rsplit("-", maxsplit=1)[-1]
224-
framework = line[
225-
len(raw_python_versions) + 1 : -(len(framework_versions) + 1)
226-
]
227-
if not VERSION_REGEX.match(framework_versions):
228-
(raw_python_versions, framework) = line.split("-")
229-
framework_versions = []
225+
# parse tox environment definition
226+
parsed = TOXENV_REGEX.match(line)
227+
if not parsed:
228+
print(f"ERROR reading line {line}")
229+
raise ValueError("Failed to parse tox environment definition")
230+
231+
groups = parsed.groupdict()
232+
raw_python_versions = groups["py_versions"]
233+
framework = groups["framework"]
234+
framework_versions_latest = groups.get("framework_versions_latest") or False
230235

231236
# collect python versions to test the framework in
232-
raw_python_versions = set(
233-
raw_python_versions.replace("{", "").replace("}", "").split(",")
234-
)
235-
if "latest" in framework_versions:
237+
raw_python_versions = set(raw_python_versions.split(","))
238+
if framework_versions_latest:
236239
py_versions_latest[framework] |= raw_python_versions
237240
else:
238241
py_versions_pinned[framework] |= raw_python_versions
239242

240-
except ValueError:
243+
except Exception:
244+
raise
241245
print(f"ERROR reading line {line}")
242246
parsed_correctly = False
243247

0 commit comments

Comments
 (0)