Skip to content

Build and test conda packages and wheels for Intel Python CI - #265

Open
jharlow-intel wants to merge 3 commits into
masterfrom
ci/intel-python-ci
Open

jharlow-intel wants to merge 3 commits into
masterfrom
ci/intel-python-ci

Conversation

@jharlow-intel

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

Copy link
Copy Markdown
Collaborator

Adds Intel Python CI (gh-ci): ci/ and .github/workflows/intel-ci.yml 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. Intel's Jenkins then retests the Linux and Windows packages, scans them, and publishes a release tag's tested packages as its GitHub Release; macOS is built and tested in Actions only. Jenkins already runs on mkl-service as a dry run, which posts no statuses and publishes nothing.

  • 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.
  • 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, leave MKL out and require mkl >=2026.2,<2027 through [tool.gh-ci] wheel-requires, which ci/build.py adds to each wheel.
  • 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.

Validation: run 41856390796 built and tested the conda packages for 3.11 and 3.15 on Linux, Windows and macOS, and the wheels for 3.11 and 3.15 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 Outdated
@@ -1,3 +1,13 @@
# Python versions for ci/matrix.py, one per line, without selectors
python:
- "3.10"

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.

conda-forge dropped 3.10 python, and so it's a bit confusing to have 3.10 listed here

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.

I was planning to rely on similar matrix building in #264 where I tried to improve cf testing workflow.
But we should not have 3.10 here then.

@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
Adds what Intel Python CI (gh-ci) needs: 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. Intel's Jenkins tests them again, scans
them, and publishes a release tag's tested packages as its GitHub Release.

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 wheels' run-time requirement on mkl comes from [tool.gh-ci] wheel-requires
in pyproject.toml, which ci/build.py adds to each wheel: in [project] it would
fail the recipe's pip check, as conda-forge's mkl has no pip metadata.

@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.


test:
name: Test ${{ matrix.name }} Python ${{ matrix.python }}
needs: [matrix, build]

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.

If any build leg fails, macOS included, all the test legs get skipped and the run fails. Jenkins needs a green run, so a macOS-only failure would block a tag release even though Jenkins ignores macOS artifacts. Is that intended? Same on test-wheel below.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Good catch on the skipped tests: test and test-wheel now run every leg once the matrix job succeeds, so one failed build no longer hides the other packages' results; the leg whose build failed fails at its download. A macOS-only failure blocking a tag is intended, though. Jenkins releases only from a run that's green everywhere, and a red macOS leg means that tag is broken on macOS, which the feedstock would hit too.

Comment thread .github/workflows/intel-ci.yml Outdated
conda-remove-defaults: "true"

- name: Install conda-build
run: conda install -y -q -n base --override-channels -c conda-forge conda-build

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.

conda-build has no version pin here.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Pinned to 26.9.1, the version the last green run used.

jobs:
matrix:
name: Platforms and Python versions
runs-on: ${{ vars.GH_CI_RUNNER || 'ubuntu-latest' }}

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.

If GH_CI_RUNNER is ever pointed at a self-hosted runner, fork PRs would run on it. Fine today, just keep it in mind.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Agreed. Fork PRs are meant to run, as long as the author is an intel-innersource member, but that check happens in Jenkins: Actions runs every fork PR before Jenkins looks at it. So pointing GH_CI_RUNNER at a self-hosted runner here would need a gate of its own first. Nothing sets it today; every job in the last run was on a GitHub-hosted runner.

- '2026' # [not osx]
# Python versions of conda-forge/mkl-service-feedstock, plus 3.15t; CI builds
# and tests one job per entry, see .github/workflows/conda-build-test.yml
python:

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.

The 3.10 entry is dropped here, but pyproject.toml still lists 3.10 so wheels still build it. Fine if intended, just say so since the Intel conda channel loses 3.10.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Thanks, the wheels drop 3.10 too now: it's out of the pyproject.toml classifiers, which the wheel matrix comes from. requires-python still allows 3.10, so source builds there keep working.

Comment thread conda-recipe/AGENTS.md Outdated
## CI usage
- Built in `.github/workflows/conda-package.yml`
- Artifacts uploaded per Python version and platform
- Built in `.github/workflows/conda-package-cf.yml` (Linux, Windows, macOS) and `.github/workflows/intel-ci.yml` (Linux, Windows)

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.

intel-ci builds macOS too (BUILT_PLATFORMS in ci/matrix.py), so this should say Linux, Windows, macOS.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed.

Comment thread mkl/tests/AGENTS.md Outdated
## CI integration
- Tests run in the `conda-package.yml` and `conda-package-cf.yml` workflows, through `conda build --test`, which runs the `test:` section of `conda-recipe/meta.yaml` or `conda-recipe-cf/meta.yaml`
- Tests run in the `conda-package-cf.yml` workflow, through `conda build --test`, which runs the `test:` section of `conda-recipe/meta.yaml`, and in `intel-ci.yml` through `ci/test.py`, against the conda packages and the wheels
- Test-only dependencies go in `test: requires:` of both recipes; CI installs nothing else

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.

Still says "both recipes", but conda-recipe-cf is gone.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed, and the CI coverage line under it.

Comment thread ci/test.py
"""
Intel Python CI (gh-ci) test for mkl-service.

GitHub Actions, through ci/hooks.py, and Intel's Jenkins both run this with one

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.

This only talks about a conda package, but it tests the wheels too.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Fixed.

test and test-wheel now run whenever the matrix job succeeds, so one failed
build no longer skips every other package's tests; the leg whose build failed
fails at its download. conda-build is pinned to 26.9.1, the version the last
green run used. ci/test.py and the AGENTS.md files now say the wheels are
tested too, that intel-ci.yml builds macOS, and that there is one recipe.
@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 🚀

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