Skip to content

Commit

Permalink
Merge pull request #1283 from mayeut/test-macos-cp38-arm64
Browse files Browse the repository at this point in the history
feature: allow testing cp38-macosx_arm64 wheel
  • Loading branch information
joerick authored Oct 4, 2022
2 parents 35f2b8d + 9ba7e7e commit c854501
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 1 deletion.
16 changes: 16 additions & 0 deletions .cirrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,19 @@ macos_arm64_task:
- brew install [email protected]
- ln -s python3 /opt/homebrew/opt/[email protected]/bin/python
<<: *RUN_TESTS

macos_arm64_cp38_task:
macos_instance:
image: ghcr.io/cirruslabs/macos-monterey-xcode

env:
PATH: /opt/homebrew/opt/[email protected]/bin:$PATH
PYTEST_ADDOPTS: --run-cp38-universal2 -k 'test_cp38_arm64_testing_universal2_installer or test_arch_auto'
install_pre_requirements_script:
- brew install [email protected]
- ln -s python3 /opt/homebrew/opt/[email protected]/bin/python
- curl -fsSLO https://www.python.org/ftp/python/3.8.10/python-3.8.10-macos11.pkg
- sudo installer -pkg python-3.8.10-macos11.pkg -target /
- rm python-3.8.10-macos11.pkg
- sh "/Applications/Python 3.8/Install Certificates.command"
<<: *RUN_TESTS
10 changes: 9 additions & 1 deletion cibuildwheel/macos.py
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,13 @@ def build(options: Options, tmp_path: Path) -> None:

if build_options.test_command and build_options.test_selector(config.identifier):
machine_arch = platform.machine()
python_arch = call(
"python",
"-sSc",
"import platform; print(platform.machine())",
env=env,
capture_stdout=True,
).strip()
testing_archs: list[Literal["x86_64", "arm64"]]

if config_is_arm64:
Expand Down Expand Up @@ -473,7 +480,8 @@ def build(options: Options, tmp_path: Path) -> None:
# skip this test
continue

if testing_arch == "arm64" and config.identifier.startswith("cp38-"):
is_cp38 = config.identifier.startswith("cp38-")
if testing_arch == "arm64" and is_cp38 and python_arch != "arm64":
log.warning(
unwrap(
"""
Expand Down
6 changes: 6 additions & 0 deletions test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ def pytest_addoption(parser) -> None:
"--run-emulation", action="store_true", default=False, help="run emulation tests"
)
parser.addoption("--run-podman", action="store_true", default=False, help="run podman tests")
parser.addoption(
"--run-cp38-universal2",
action="store_true",
default=False,
help="macOS cp38 uses the universal2 installer",
)


@pytest.fixture(
Expand Down
30 changes: 30 additions & 0 deletions test/test_macos_archs.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,3 +167,33 @@ def test_cp38_arm64_testing(tmp_path, capfd):
expected_wheels = [w for w in ALL_MACOS_WHEELS if "cp38" in w]

assert set(actual_wheels) == set(expected_wheels)


def test_cp38_arm64_testing_universal2_installer(tmp_path, capfd, request):
if not request.config.getoption("--run-cp38-universal2"):
pytest.skip("needs --run-cp38-universal2 option to run")

project_dir = tmp_path / "project"
basic_project.generate(project_dir)

actual_wheels = utils.cibuildwheel_run(
project_dir,
add_env={
"CIBW_BUILD": "cp38-*",
"CIBW_TEST_COMMAND": '''python -c "import platform; print('running tests on ' + platform.machine())"''',
"CIBW_ARCHS": "x86_64,universal2,arm64",
"MACOSX_DEPLOYMENT_TARGET": "11.0",
},
)

captured = capfd.readouterr()

assert "running tests on x86_64" in captured.out
assert "running tests on arm64" in captured.out

warning_message = "While cibuildwheel can build CPython 3.8 universal2/arm64 wheels, we cannot test the arm64 part of them"
assert warning_message not in captured.err

expected_wheels = [w.replace("10_9", "11_0") for w in ALL_MACOS_WHEELS if "cp38" in w]

assert set(actual_wheels) == set(expected_wheels)
6 changes: 6 additions & 0 deletions unit_test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
def pytest_addoption(parser):
parser.addoption("--run-docker", action="store_true", default=False, help="run docker tests")
parser.addoption("--run-podman", action="store_true", default=False, help="run podman tests")
parser.addoption(
"--run-cp38-universal2",
action="store_true",
default=False,
help="macOS cp38 uses the universal2 installer",
)


@pytest.fixture
Expand Down

0 comments on commit c854501

Please sign in to comment.