Skip to content

maturin generate-ci github --pytest: non-x86 architectures stuck on Python 3.10 for pytest #2227

Open
@matt-codecov

Description

@matt-codecov

Bug Description

The problem

I am trying to publish a package with requires-python = ">=3.12" set in pyproject.toml and am having trouble with maturin's generated CI workflow (specifically trying to run pytest).

When the target matrix value is x86 or x86_64, pytest is run with the runner's Python version which, thanks to actions/setup-python, is 3.12. x86 and x86_64 thus work fine for my 3.12-only package.

However, when the target matrix value is anything else, the job uses uraimo/run-on-arch-action to create an Ubuntu 22.04 image of the appropriate architecture to run pytest on. That image installs the latest version of Python in the stock Ubuntu 22.04 apt repository which is 3.10. My package requires 3.12, so the maturin action only built wheels for 3.12, so the job fails with an error like:

Looking in links: dist
  ERROR: Could not find a version that satisfies the requirement codecov_rs (from versions: none)
  ERROR: No matching distribution found for codecov_rs

(link to an actual run)

Workaround

codecov/codecov-rs#55 makes the uraimo/run-on-arch-action step set up the deadsnakes PPA, install Python 3.12 from it, and then set up a virtual env so pip will work. Here's a passing run from a test PR that took this approach.

If that sounds like a good generic solution I can take a crack at opening a PR. Looks like it'd just be some changes in src/ci.rs? It doesn't look like there is a "latest" package in the deadsnakes PPA though so the hardcoded 3.12 version number would need to be updated down the line.

Your maturin version (maturin --version)

1.7.1

Your Python version (python -V)

3.12

Your pip version (pip -V)

pip 24.0

What bindings you're using

pyo3

Does cargo build work?

  • Yes, it works

If on windows, have you checked that you aren't accidentally using unix path (those with the forward slash /)?

  • Yes

Steps to Reproduce

  1. Write a Python package with requires-python = ">=3.12" set in pyproject.toml.
  2. Run maturin generate-ci github --pytest > .github/workflows/publish.yml
  3. Modify .github/workflows/publish.yml to remove Windows/macOS/musllinux, remove the publishing step, and trigger on PR (or however you'd like to test)
  4. Trigger the workflow
  5. Observe that the Linux pytest step passes for x86 and x86_64 (good)
  6. Observe that the Linux pytest step fails for aarch64 and probably other architectures (bad)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions