Skip to content

Build and test conda packages and wheels - #265

Merged
jharlow-intel merged 1 commit into
masterfrom
ci/intel-python-ci
Nov 9, 2026
Merged

jharlow-intel merged 1 commit into
masterfrom
ci/intel-python-ci

Conversation

@jharlow-intel

@jharlow-intel jharlow-intel commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Adds ci/ and .github/workflows/intel-ci.yml, which build the conda packages for Linux, Windows and Intel macOS and the wheels for Linux and Windows, on every declared Python, and test each in a clean environment.

  • conda-recipe/ is now the only recipe: the conda-forge one that was conda-recipe-cf/. The Intel-channel recipe and conda-package.yml are removed; conda-package-cf.yml stays and keeps its check names. No workflow in this repository builds or tests against the Intel channel any more: conda-package-cf.yml and intel-ci.yml both use conda-forge only.
  • The conda packages and the wheels build Python 3.11 to 3.15 plus 3.14t and 3.15t: the conda list follows the feedstock, plus 3.15t, and the wheels follow the pyproject.toml classifiers, which drop 3.10 here. requires-python still allows 3.10.
  • Wheels build with cibuildwheel, with MSVC on Windows, and leave MKL out. They require mkl from the mkl-devel version the build used up to its next major, through [tool.gh-ci] pin-compatible, which ci/build.py stamps into each wheel. ci/build.py also keeps only the $ORIGIN RPATH and RUNPATH entries of the wheels' ELF files, dropping the isolated build env's absolute path. The Linux wheels are tagged manylinux_2_28, like the mkl wheel. The Linux wheels build with the hardening flags conda-forge's compilers set, -fstack-protector-strong, -D_FORTIFY_SOURCE=2 and -Wl,-z,relro -Wl,-z,now, and ci/build.py refuses a wheel whose ELF files lack full RELRO.
  • In GitHub Actions, conda-build records the source commit in each conda package's info/about.json (remote_url and sha).
  • meson.build adds Library to CMake's search path on Windows, where mkl-devel puts its CMake config.
  • ci/test.py runs pytest --pyargs mkl on the installed package: a conda package in a conda-forge environment, a wheel in a venv made from conda-forge's Python, so mkl/_init_helper.py is what loads MKL on Windows.

Validation: run 42627497027 built and tested the conda packages for 3.11, 3.15 and 3.15t on Linux, Windows and macOS, and the wheels for 3.11, 3.15 and 3.15t on Linux and Windows. Not run yet: the full matrix, which only master and tags build.

@jharlow-intel jharlow-intel self-assigned this Oct 28, 2026
Copilot AI balanced review requested due to automatic review settings October 28, 2026 21:28

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The native-package pipeline requires end-to-end Linux/Windows CI validation of conda solving and runtime loading for 3.14t/3.15t, which remain unverified by standard-library-only checks.

No open issues 🎉

What changed in this PR

Adds GitHub Actions build and package testing for Intel Python CI, preparing mkl-service for Jenkins integration. Jenkins is not yet enabled for this repository.

Changes:

  • Derives Linux and Windows build matrices from the conda-forge recipe, selecting four builds for pull requests and all 16 for master pushes and tags.
  • Adds build and isolated package-test scripts, with pytest results written as JUnit reports.
  • Documents the integration and its configuration.
File Description
conda-recipe-cf/​conda_build_config.yaml Declares Python versions and ABI variants for matrix generation.
ci/​test.py Checks the interpreter and runs installed-package tests with JUnit output.
ci/​README.md Documents CI operation and local commands.
ci/​matrix.py Generates platform and Python matrices from build declarations.
ci/​hooks.py Installs artifacts into clean environments and runs package tests.
ci/​config.yml Defines the workflow, artifact naming, and test requirements.
ci/​build.py Builds packages for a selected Python variant and collects artifacts.
AGENTS.md Adds a pointer to Intel Python CI documentation.
.github/​workflows/​intel-ci.yml Orchestrates matrix generation, builds, artifact uploads, and tests.
.github/​AGENTS.md Documents the workflow and its recipe-derived matrix exception.

Review effort: Balanced

Comment thread conda-recipe-cf/conda_build_config.yaml Resolved
@jharlow-intel
jharlow-intel force-pushed the ci/intel-python-ci branch 2 times, most recently from ee0bbbf to eaaedc1 Compare October 30, 2026 14:43
@jharlow-intel jharlow-intel reopened this Oct 30, 2026
@jharlow-intel
jharlow-intel force-pushed the ci/intel-python-ci branch 4 times, most recently from 0db81d3 to f4c2344 Compare October 30, 2026 15:27
@jharlow-intel
jharlow-intel force-pushed the ci/intel-python-ci branch 2 times, most recently from 926e627 to c484738 Compare November 3, 2026 18:00

@vchamarthi vchamarthi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gh-ci side looks good to me. Scripts match the other three repos, artifact names line up with ci/config.yml, actions are pinned.

The PR description is out of date though. It says the workflow builds conda-recipe-cf (deleted now), Linux and Windows only (macOS and wheels are built too), and that Jenkins isn't on for mkl-service (it's enabled in config/gh-ci.json, dry run). It also doesn't say conda-package.yml and the Intel-channel build are gone, which is the part reviewers need to see. Rest are inline.

Comment thread .github/workflows/intel-ci.yml Resolved
Comment thread .github/workflows/intel-ci.yml Resolved
Comment thread .github/workflows/intel-ci.yml Resolved
Comment thread conda-recipe/conda_build_config.yaml Resolved
Comment thread conda-recipe/AGENTS.md Resolved
Comment thread mkl/tests/AGENTS.md Resolved
Comment thread ci/test.py Resolved
@jharlow-intel jharlow-intel changed the title Build and test conda-recipe-cf for Intel Python CI Build and test conda packages and wheels for Intel Python CI Nov 4, 2026
@jharlow-intel

Copy link
Copy Markdown
Collaborator Author

Thanks @vchamarthi, I've rewritten the description and the title to match what the PR does now.

@vchamarthi vchamarthi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀

@jharlow-intel jharlow-intel changed the title Build and test conda packages and wheels for Intel Python CI Build and test conda packages and wheels Nov 5, 2026
@jharlow-intel
jharlow-intel force-pushed the ci/intel-python-ci branch 2 times, most recently from 7bba6b0 to 94ceba3 Compare November 5, 2026 21:04

@vchamarthi vchamarthi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks Great!

@antonwolfy antonwolfy added this to the 2.10.0 release milestone Nov 6, 2026

@antonwolfy antonwolfy left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few points inline, none of them blocking. One more for the description: with conda-package.yml and the Intel-channel recipe removed, no public workflow builds or tests against the Intel channel any more (intel-ci.yml uses conda-forge only too). Worth saying that outright.

Comment thread pyproject.toml Resolved
Comment thread ci/hooks.py Resolved
Comment thread ci/matrix.py Resolved
Comment thread ci/matrix.py Resolved
Comment thread AGENTS.md Resolved
Comment thread ci/build.py Resolved
Comment thread pyproject.toml Resolved
Comment thread pyproject.toml Resolved
Comment thread .github/workflows/intel-ci.yml Resolved
Comment thread ci/matrix.py Resolved
Comment thread meson.build Resolved

@antonwolfy antonwolfy left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed the latest push: everything from my last round except the dev upload is addressed, and I resolved those threads. A few small points inline, none of them blocking.

Comment thread ci/matrix.py Resolved
Comment thread ci/build.py Resolved
Comment thread ci/build.py Resolved
Comment thread ci/README.md Resolved
Comment thread pyproject.toml Resolved
Comment thread .github/workflows/intel-ci.yml Resolved

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The native-wheel pipeline’s ELF and loader changes still need build-and-runtime validation for free-threaded 3.14t/3.15t ABIs, as the cited run covers only regular Python 3.11/3.15.

No open issues 🎉

Review effort: Balanced

Comment thread pyproject.toml Resolved
Comment thread ci/build.py Resolved
Comment thread ci/matrix.py Resolved
Comment thread ci/build.py Resolved
Comment thread ci/README.md Resolved
Comment thread .github/workflows/intel-ci.yml Resolved
Adds a ci/ directory and .github/workflows/intel-ci.yml. The workflow builds
conda-recipe/ with conda-build and the wheels with cibuildwheel, for every
platform and Python version the recipe and pyproject.toml declare, and tests
each package in a clean environment with ci/test.py. The test jobs run for
every package that built, even when another build failed. conda-build is
pinned to 26.9.1.

conda-recipe/ is now the only recipe, the conda-forge one that was
conda-recipe-cf/; the Intel-channel recipe and conda-package.yml, which copied
wheels out through WHEELS_OUTPUT_FOLDER, are removed. conda-package-cf.yml
reports the same check names, so the required checks still run. The conda
packages and the wheels both start at Python 3.11.

[build-system] requires mkl-devel, and [tool.gh-ci] pin-compatible maps mkl
to it: ci/build.py adds Requires-Dist mkl >= the mkl-devel version python -m
build installed, < its next major, the way conda's run_exports pin it, and
fails a build that logs no version. It takes METADATA's line ending from the
headers. The repair commands exclude libmkl_rt.so.* and mkl_rt.*.dll, and the
Linux wheels are tagged manylinux_2_28 only, like the mkl wheel.

The Linux wheels build with the hardening flags conda-forge's compilers set:
-fstack-protector-strong, -D_FORTIFY_SOURCE=2 and -Wl,-z,relro -Wl,-z,now.
ci/build.py refuses a wheel whose ELF files lack full RELRO. It keeps an
RPATH or RUNPATH entry only when it is $ORIGIN or a directory under it, as
meson-python keeps the isolated build env's absolute lib directory, and
refuses a file left with none. It rewrites the wheels in scratch, so a
refused wheel never reaches --output, and refuses two built packages with
the same file name, which would overwrite each other there.

conda-build gets --extra-meta remote_url=... sha=... when GitHub Actions
sets GITHUB_SERVER_URL, GITHUB_REPOSITORY and GITHUB_SHA, so each conda
package records the commit it was built from in info/about.json.

ci/hooks.py tests each wheel in a venv made from conda-forge's Python, as pip
users install it. Every python: entry in conda_build_config.yaml names its
ABI, which ci/matrix.py requires. ci/matrix.py reads x86 as any x86 CPU and
osx64 as undefined, as conda-build does, and refuses a conda-build skip that
uses osx64. A pull request also builds and tests the newest free-threaded
version, and every push and tag run gets a concurrency group of its own.

@antonwolfy antonwolfy left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @jharlow-intel for a great improvement, LGTM!

@jharlow-intel
jharlow-intel merged commit 4bad2a1 into master Nov 9, 2026
139 of 150 checks passed
@jharlow-intel
jharlow-intel deleted the ci/intel-python-ci branch November 9, 2026 15:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants