|
|
|
import pathlib
|
|
|
|
import tempfile
|
|
|
|
import typing
|
|
|
|
|
|
|
|
import nox
|
|
|
|
|
|
|
|
|
|
|
|
class RepoCache:
|
|
|
|
"""class for caching checkouts of downstream repos
|
|
|
|
|
|
|
|
By caching the checkouts for downstream test runs,
|
|
|
|
the nox invokation is faster and there is less load
|
|
|
|
on the git server and network.
|
|
|
|
"""
|
|
|
|
|
|
|
|
_checkouts: typing.ClassVar = {}
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def clone(cls, session: nox.Session, repo: str) -> str:
|
|
|
|
"""clones a git repo only once
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
session: the nox session in use
|
|
|
|
repo: a git repo url
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
path to a temporary directory containing the
|
|
|
|
cloned git repo
|
|
|
|
"""
|
|
|
|
tmpdir = cls._checkouts.get(repo, None)
|
|
|
|
|
|
|
|
if tmpdir is None:
|
|
|
|
tmpdir = tempfile.TemporaryDirectory()
|
|
|
|
session.run("git", "clone", repo, tmpdir.name, external=True)
|
|
|
|
cls._checkouts[repo] = tmpdir
|
|
|
|
|
|
|
|
return tmpdir.name
|
|
|
|
|
|
|
|
|
|
|
|
@nox.session(python=["3.9", "3.10", "3.11"])
|
|
|
|
def tests(session):
|
|
|
|
session.install(".[test]")
|
|
|
|
|
|
|
|
session.run("pytest", *session.posargs)
|
|
|
|
|
|
|
|
|
|
|
|
@nox.session(python=["3.10", "3.11"])
|
|
|
|
@nox.parametrize(
|
|
|
|
"repo",
|
|
|
|
[
|
|
|
|
"https://git.sgbio.de/Safeguard/mbp_hyb_calls",
|
|
|
|
],
|
|
|
|
)
|
|
|
|
def downstream(session, repo):
|
|
|
|
tmpdir = RepoCache.clone(session, repo)
|
|
|
|
|
|
|
|
session.install(".")
|
|
|
|
session.install(f"{tmpdir}[test]")
|
|
|
|
|
|
|
|
test_path = pathlib.Path(tmpdir) / "tests"
|
|
|
|
session.run("pytest", test_path)
|