Merge pull request #3278 from davidhewitt/ffi-check-ci
decouple pyo3-ffi-check from MSRV
This commit is contained in:
commit
1d56cfef47
|
@ -136,10 +136,10 @@ jobs:
|
||||||
- '.github/workflows/build.yml'
|
- '.github/workflows/build.yml'
|
||||||
|
|
||||||
- name: Run pyo3-ffi-check
|
- name: Run pyo3-ffi-check
|
||||||
run: nox -s ffi-check
|
|
||||||
# pypy 3.7 and 3.8 are not PEP 3123 compliant so fail checks here, nor
|
# pypy 3.7 and 3.8 are not PEP 3123 compliant so fail checks here, nor
|
||||||
# is pypy 3.9 on windows
|
# is pypy 3.9 on windows
|
||||||
if: ${{ steps.ffi-changes.outputs.changed == 'true' && inputs.rust == 'stable' && inputs.python-version != 'pypy3.7' && inputs.python-version != 'pypy3.8' && !(inputs.python-version == 'pypy3.9' && contains(inputs.os, 'windows')) }}
|
if: ${{ steps.ffi-changes.outputs.changed == 'true' && inputs.rust == 'stable' && inputs.python-version != 'pypy3.7' && inputs.python-version != 'pypy3.8' && !(inputs.python-version == 'pypy3.9' && contains(inputs.os, 'windows')) }}
|
||||||
|
run: nox -s ffi-check
|
||||||
|
|
||||||
|
|
||||||
- name: Test cross compilation
|
- name: Test cross compilation
|
||||||
|
|
|
@ -179,8 +179,6 @@ harness = false
|
||||||
[workspace]
|
[workspace]
|
||||||
members = [
|
members = [
|
||||||
"pyo3-ffi",
|
"pyo3-ffi",
|
||||||
"pyo3-ffi-check",
|
|
||||||
"pyo3-ffi-check/macro",
|
|
||||||
"pyo3-build-config",
|
"pyo3-build-config",
|
||||||
"pyo3-macros",
|
"pyo3-macros",
|
||||||
"pyo3-macros-backend",
|
"pyo3-macros-backend",
|
||||||
|
|
66
noxfile.py
66
noxfile.py
|
@ -34,7 +34,7 @@ def test_rust(session: nox.Session):
|
||||||
|
|
||||||
_run_cargo_test(session)
|
_run_cargo_test(session)
|
||||||
_run_cargo_test(session, features="abi3")
|
_run_cargo_test(session, features="abi3")
|
||||||
if not "skip-full" in session.posargs:
|
if "skip-full" not in session.posargs:
|
||||||
_run_cargo_test(session, features="full")
|
_run_cargo_test(session, features="full")
|
||||||
_run_cargo_test(session, features="abi3 full")
|
_run_cargo_test(session, features="abi3 full")
|
||||||
|
|
||||||
|
@ -49,11 +49,10 @@ def test_py(session: nox.Session) -> None:
|
||||||
@nox.session(venv_backend="none")
|
@nox.session(venv_backend="none")
|
||||||
def coverage(session: nox.Session) -> None:
|
def coverage(session: nox.Session) -> None:
|
||||||
session.env.update(_get_coverage_env())
|
session.env.update(_get_coverage_env())
|
||||||
_run(session, "cargo", "llvm-cov", "clean", "--workspace", external=True)
|
_run_cargo(session, "llvm-cov", "clean", "--workspace")
|
||||||
test(session)
|
test(session)
|
||||||
_run(
|
_run_cargo(
|
||||||
session,
|
session,
|
||||||
"cargo",
|
|
||||||
"llvm-cov",
|
"llvm-cov",
|
||||||
"--package=pyo3",
|
"--package=pyo3",
|
||||||
"--package=pyo3-build-config",
|
"--package=pyo3-build-config",
|
||||||
|
@ -64,7 +63,6 @@ def coverage(session: nox.Session) -> None:
|
||||||
"--codecov",
|
"--codecov",
|
||||||
"--output-path",
|
"--output-path",
|
||||||
"coverage.json",
|
"coverage.json",
|
||||||
external=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,7 +74,8 @@ def fmt(session: nox.Session):
|
||||||
|
|
||||||
@nox.session(name="fmt-rust", venv_backend="none")
|
@nox.session(name="fmt-rust", venv_backend="none")
|
||||||
def fmt_rust(session: nox.Session):
|
def fmt_rust(session: nox.Session):
|
||||||
_run(session, "cargo", "fmt", "--all", "--check", external=True)
|
_run_cargo(session, "fmt", "--all", "--check")
|
||||||
|
_run_cargo(session, "fmt", *_FFI_CHECK, "--all", "--check")
|
||||||
|
|
||||||
|
|
||||||
@nox.session(name="fmt-py")
|
@nox.session(name="fmt-py")
|
||||||
|
@ -96,19 +95,14 @@ def _clippy(session: nox.Session, *, env: Dict[str, str] = None) -> bool:
|
||||||
env = env or os.environ
|
env = env or os.environ
|
||||||
for feature_set in _get_feature_sets():
|
for feature_set in _get_feature_sets():
|
||||||
try:
|
try:
|
||||||
_run(
|
_run_cargo(
|
||||||
session,
|
session,
|
||||||
"cargo",
|
|
||||||
"clippy",
|
"clippy",
|
||||||
*feature_set,
|
*feature_set,
|
||||||
"--all-targets",
|
"--all-targets",
|
||||||
"--workspace",
|
"--workspace",
|
||||||
# linting pyo3-ffi-check requires docs to have been built or
|
|
||||||
# the macros will error; doesn't seem worth it on CI
|
|
||||||
"--exclude=pyo3-ffi-check",
|
|
||||||
"--",
|
"--",
|
||||||
"--deny=warnings",
|
"--deny=warnings",
|
||||||
external=True,
|
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -136,20 +130,14 @@ def check_all(session: nox.Session) -> None:
|
||||||
|
|
||||||
def _check(env: Dict[str, str]) -> None:
|
def _check(env: Dict[str, str]) -> None:
|
||||||
nonlocal success
|
nonlocal success
|
||||||
env = env or os.environ
|
|
||||||
for feature_set in _get_feature_sets():
|
for feature_set in _get_feature_sets():
|
||||||
try:
|
try:
|
||||||
_run(
|
_run_cargo(
|
||||||
session,
|
session,
|
||||||
"cargo",
|
|
||||||
"check",
|
"check",
|
||||||
*feature_set,
|
*feature_set,
|
||||||
"--all-targets",
|
"--all-targets",
|
||||||
"--workspace",
|
"--workspace",
|
||||||
# linting pyo3-ffi-check requires docs to have been built or
|
|
||||||
# the macros will error; doesn't seem worth it on CI
|
|
||||||
"--exclude=pyo3-ffi-check",
|
|
||||||
external=True,
|
|
||||||
env=env,
|
env=env,
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -313,9 +301,8 @@ def docs(session: nox.Session) -> None:
|
||||||
rustdoc_flags.append(session.env.get("RUSTDOCFLAGS", ""))
|
rustdoc_flags.append(session.env.get("RUSTDOCFLAGS", ""))
|
||||||
session.env["RUSTDOCFLAGS"] = " ".join(rustdoc_flags)
|
session.env["RUSTDOCFLAGS"] = " ".join(rustdoc_flags)
|
||||||
|
|
||||||
_run(
|
_run_cargo(
|
||||||
session,
|
session,
|
||||||
"cargo",
|
|
||||||
*toolchain_flags,
|
*toolchain_flags,
|
||||||
"doc",
|
"doc",
|
||||||
"--lib",
|
"--lib",
|
||||||
|
@ -324,7 +311,6 @@ def docs(session: nox.Session) -> None:
|
||||||
"--no-deps",
|
"--no-deps",
|
||||||
"--workspace",
|
"--workspace",
|
||||||
*cargo_flags,
|
*cargo_flags,
|
||||||
external=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -339,8 +325,6 @@ def format_guide(session: nox.Session):
|
||||||
|
|
||||||
for path in Path("guide").glob("**/*.md"):
|
for path in Path("guide").glob("**/*.md"):
|
||||||
session.log("Working on %s", path)
|
session.log("Working on %s", path)
|
||||||
content = path.read_text()
|
|
||||||
|
|
||||||
lines = iter(path.read_text().splitlines(True))
|
lines = iter(path.read_text().splitlines(True))
|
||||||
new_lines = []
|
new_lines = []
|
||||||
|
|
||||||
|
@ -387,9 +371,8 @@ def format_guide(session: nox.Session):
|
||||||
|
|
||||||
@nox.session(name="address-sanitizer", venv_backend="none")
|
@nox.session(name="address-sanitizer", venv_backend="none")
|
||||||
def address_sanitizer(session: nox.Session):
|
def address_sanitizer(session: nox.Session):
|
||||||
_run(
|
_run_cargo(
|
||||||
session,
|
session,
|
||||||
"cargo",
|
|
||||||
"+nightly",
|
"+nightly",
|
||||||
"test",
|
"test",
|
||||||
"--release",
|
"--release",
|
||||||
|
@ -402,7 +385,6 @@ def address_sanitizer(session: nox.Session):
|
||||||
"RUSTDOCFLAGS": "-Zsanitizer=address",
|
"RUSTDOCFLAGS": "-Zsanitizer=address",
|
||||||
"ASAN_OPTIONS": "detect_leaks=0",
|
"ASAN_OPTIONS": "detect_leaks=0",
|
||||||
},
|
},
|
||||||
external=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -479,15 +461,9 @@ def set_minimal_package_versions(session: nox.Session):
|
||||||
# possible version, so that this matches what CI will resolve to.
|
# possible version, so that this matches what CI will resolve to.
|
||||||
for project in projects:
|
for project in projects:
|
||||||
if project is None:
|
if project is None:
|
||||||
_run(session, "cargo", "update", external=True)
|
_run_cargo(session, "update")
|
||||||
else:
|
else:
|
||||||
_run(
|
_run_cargo(session, "update", f"--manifest-path={project}/Cargo.toml")
|
||||||
session,
|
|
||||||
"cargo",
|
|
||||||
"update",
|
|
||||||
f"--manifest-path={project}/Cargo.toml",
|
|
||||||
external=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
for project in projects:
|
for project in projects:
|
||||||
lock_file = Path(project or "") / "Cargo.lock"
|
lock_file = Path(project or "") / "Cargo.lock"
|
||||||
|
@ -521,22 +497,21 @@ def set_minimal_package_versions(session: nox.Session):
|
||||||
# supported on MSRV
|
# supported on MSRV
|
||||||
for project in projects:
|
for project in projects:
|
||||||
if project is None:
|
if project is None:
|
||||||
_run(session, "cargo", "metadata", silent=True, external=True)
|
_run_cargo(session, "metadata", silent=True)
|
||||||
else:
|
else:
|
||||||
_run(
|
_run_cargo(
|
||||||
session,
|
session,
|
||||||
"cargo",
|
|
||||||
"metadata",
|
"metadata",
|
||||||
f"--manifest-path={project}/Cargo.toml",
|
f"--manifest-path={project}/Cargo.toml",
|
||||||
silent=True,
|
silent=True,
|
||||||
external=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@nox.session(name="ffi-check")
|
@nox.session(name="ffi-check")
|
||||||
def ffi_check(session: nox.Session):
|
def ffi_check(session: nox.Session):
|
||||||
session.run("cargo", "doc", "-p", "pyo3-ffi", "--no-deps", external=True)
|
_run_cargo(session, "doc", *_FFI_CHECK, "-p", "pyo3-ffi", "--no-deps")
|
||||||
_run(session, "cargo", "run", "-p", "pyo3-ffi-check", external=True)
|
_run_cargo(session, "clippy", "--workspace", "--all-targets", *_FFI_CHECK)
|
||||||
|
_run_cargo(session, "run", *_FFI_CHECK)
|
||||||
|
|
||||||
|
|
||||||
@lru_cache()
|
@lru_cache()
|
||||||
|
@ -618,6 +593,10 @@ def _run(session: nox.Session, *args: str, **kwargs: Any) -> None:
|
||||||
print("::endgroup::", file=sys.stderr)
|
print("::endgroup::", file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
def _run_cargo(session: nox.Session, *args: str, **kwargs: Any) -> None:
|
||||||
|
_run(session, "cargo", *args, **kwargs, external=True)
|
||||||
|
|
||||||
|
|
||||||
def _run_cargo_test(
|
def _run_cargo_test(
|
||||||
session: nox.Session,
|
session: nox.Session,
|
||||||
*,
|
*,
|
||||||
|
@ -639,7 +618,7 @@ def _run_cargo_test(
|
||||||
|
|
||||||
|
|
||||||
def _run_cargo_publish(session: nox.Session, *, package: str) -> None:
|
def _run_cargo_publish(session: nox.Session, *, package: str) -> None:
|
||||||
_run(session, "cargo", "publish", f"--package={package}", external=True)
|
_run_cargo(session, "publish", f"--package={package}")
|
||||||
|
|
||||||
|
|
||||||
def _run_cargo_set_package_version(
|
def _run_cargo_set_package_version(
|
||||||
|
@ -686,3 +665,6 @@ suppress_build_script_link_lines=true
|
||||||
|
|
||||||
for version in PYPY_VERSIONS:
|
for version in PYPY_VERSIONS:
|
||||||
_job_with_config("PyPy", version)
|
_job_with_config("PyPy", version)
|
||||||
|
|
||||||
|
|
||||||
|
_FFI_CHECK = ("--manifest-path", "pyo3-ffi-check/Cargo.toml")
|
||||||
|
|
|
@ -13,5 +13,10 @@ path = "../pyo3-ffi"
|
||||||
features = ["extension-module"] # A lazy way of skipping linking in most cases (as we don't use any runtime symbols)
|
features = ["extension-module"] # A lazy way of skipping linking in most cases (as we don't use any runtime symbols)
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
bindgen = "0.65.1"
|
bindgen = "0.66.1"
|
||||||
pyo3-build-config = { path = "../pyo3-build-config" }
|
pyo3-build-config = { path = "../pyo3-build-config" }
|
||||||
|
|
||||||
|
[workspace]
|
||||||
|
members = [
|
||||||
|
"macro"
|
||||||
|
]
|
||||||
|
|
|
@ -11,4 +11,4 @@ proc-macro = true
|
||||||
glob = "0.3"
|
glob = "0.3"
|
||||||
quote = "1"
|
quote = "1"
|
||||||
proc-macro2 = "1"
|
proc-macro2 = "1"
|
||||||
scraper = "0.12"
|
scraper = "0.17"
|
||||||
|
|
|
@ -78,7 +78,8 @@ fn main() {
|
||||||
non_camel_case_types,
|
non_camel_case_types,
|
||||||
non_upper_case_globals,
|
non_upper_case_globals,
|
||||||
dead_code,
|
dead_code,
|
||||||
improper_ctypes
|
improper_ctypes,
|
||||||
|
clippy::all
|
||||||
)]
|
)]
|
||||||
mod bindings {
|
mod bindings {
|
||||||
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
|
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
|
||||||
|
|
Loading…
Reference in New Issue