Repository navigation
Build and test conda packages and wheels for Intel Python CI - #265
jharlow-intel wants to merge 3 commits into
Conversation
There was a problem hiding this comment.
🔵 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
| @@ -1,3 +1,13 @@ | |||
| # Python versions for ci/matrix.py, one per line, without selectors | |||
| python: | |||
| - "3.10" | |||
There was a problem hiding this comment.
conda-forge dropped 3.10 python, and so it's a bit confusing to have 3.10 listed here
There was a problem hiding this comment.
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.
ee0bbbf to
eaaedc1
Compare
0db81d3 to
f4c2344
Compare
f4c2344 to
926e627
Compare
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.
926e627 to
c484738
Compare
vchamarthi
left a comment
There was a problem hiding this comment.
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] |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
| conda-remove-defaults: "true" | ||
|
|
||
| - name: Install conda-build | ||
| run: conda install -y -q -n base --override-channels -c conda-forge conda-build |
There was a problem hiding this comment.
conda-build has no version pin here.
There was a problem hiding this comment.
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' }} |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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: |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
| ## 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) |
There was a problem hiding this comment.
intel-ci builds macOS too (BUILT_PLATFORMS in ci/matrix.py), so this should say Linux, Windows, macOS.
| ## 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 |
There was a problem hiding this comment.
Still says "both recipes", but conda-recipe-cf is gone.
There was a problem hiding this comment.
Fixed, and the CI coverage line under it.
| """ | ||
| Intel Python CI (gh-ci) test for mkl-service. | ||
|
|
||
| GitHub Actions, through ci/hooks.py, and Intel's Jenkins both run this with one |
There was a problem hiding this comment.
This only talks about a conda package, but it tests the wheels too.
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.
|
Thanks @vchamarthi, I've rewritten the description and the title to match what the PR does now. |
Adds Intel Python CI (gh-ci):
ci/and.github/workflows/intel-ci.ymlbuild 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 wasconda-recipe-cf/. The Intel-channel recipe andconda-package.ymlare removed;conda-package-cf.ymlstays and keeps its check names.pyproject.tomlclassifiers, which drop 3.10 here.requires-pythonstill allows 3.10.mkl >=2026.2,<2027through[tool.gh-ci] wheel-requires, whichci/build.pyadds to each wheel.meson.buildaddsLibraryto CMake's search path on Windows, where mkl-devel puts its CMake config.ci/test.pyrunspytest --pyargs mklon 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
masterand tags build.