Skip to content

Build and test conda-recipe-cf for Intel Python CI - #400

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

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

Conversation

@jharlow-intel

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

Copy link
Copy Markdown
Contributor

Description

Adds what Intel Python CI (gh-ci) needs from mkl_fft: a ci/ directory and a new workflow, .github/workflows/intel-ci.yml. The workflow builds conda-recipe-cf for every platform and Python version the recipe declares, and tests each package in a clean conda-forge environment with ci/test.py. Intel's Jenkins then waits for that run, tests each package again on its own machines, scans it, and for a release tag publishes the packages it tested. Jenkins isn't switched on for mkl_fft yet, so until it is, this only adds a GitHub Actions workflow.

  • ci/matrix.py, ci/build.py, ci/hooks.py: the shared gh-ci scripts, standard library only. Here they look for conda-recipe-cf/ first and build Linux and Windows on GitHub-hosted runners. hooks.py installs the test requirements from ci/config.yml, the way Jenkins does.
  • ci/test.py: runs pytest --pyargs mkl_fft against the installed package and writes a JUnit report.
  • ci/benchmark.py: because benchmarks/ exists, Jenkins runs it once per pull request or tag, with the newest regular Linux package, on a bare-metal benchmarking machine. It runs the asv suite against the installed package: one quick sample of each benchmark on a pull request, a full measurement on a tag. A failing benchmark fails it; nothing compares the timings with a baseline yet.
  • ci/config.yml: the workflow, the artifact names (mkl_fft {platform} Python {python}, as conda-package-cf.yml names them) and the test requirements, pytest, scipy >=1.10 and mkl-service, and the benchmark requirements, psutil, scipy >=1.10 and mkl-service, with asv from PyPI, as conda-forge has no asv for Python 3.15 yet.
  • conda-recipe-cf/conda_build_config.yaml: now lists the Python versions, the ones conda-package-cf.yml builds today, for ci/matrix.py, and numpy: '2'. Without a NumPy variant, conda-build falls back to NumPy 1.26, which has no builds for Python 3.13 and newer. conda-package-cf.yml passes --python and --numpy itself, so it is unaffected.
  • ci/README.md and AGENTS.md notes.

A pull request builds the oldest and the newest regular Python versions on Linux and Windows; pushes to master and tags build them all.

Miniforge is pinned to 26.7.2-0. Miniforge 26.9.4-0, released on 22 October, makes setup-miniconda's conda init fail on Windows runners, and the existing conda-package*.yml workflows, which install latest, hit it too on this pull request.

Overlap with #398. It also sets numpy: '2' in conda_build_config.yaml and drops Python 3.10, so whichever lands second needs a small rebase, and if 3.10 goes it should leave the python: list here too. conda-package-cf.yml and intel-ci.yml now both build conda-recipe-cf; retiring one can be a follow-up.

Verification

  • Tests: this pull request's Intel Python CI run built Linux and Windows for Python 3.10 and 3.15, the oldest and the newest, and ran ci/test.py against each package: 2769 passed on Linux and 2763 on Windows, on both versions.
  • Benchmarks: ci/benchmark.py in quick mode, against an installed mkl_fft, ran all 46 benchmarks and exited 0, with the results under GH_CI_RESULTS.
  • Lint: pre-commit run on every changed file, all hooks passing, and zizmor on intel-ci.yml, no findings.
  • python ci/matrix.py lists 14 builds, Linux and Windows for 3.10 to 3.15 and 3.14t; with --event pull_request it lists 3.10 and 3.15 on both.
  • ci/config.yml loads with gh-ci's own parser.

Not verified

  • The builds a tag or a push to the default branch adds, Python 3.11 to 3.14 and 3.14t; they use the same jobs.
  • The Jenkins side, which isn't enabled for mkl_fft yet, the benchmark cell included.

Adds what Intel Python CI (gh-ci) needs from this repository: ci/ with the
shared matrix, build and test-hook scripts, ci/test.py and ci/config.yml, and
.github/workflows/intel-ci.yml, which builds conda-recipe-cf for every platform
and Python version the recipe declares and tests each package in a clean
conda-forge environment, as Jenkins later does.

conda-recipe-cf/conda_build_config.yaml now declares the Python versions
conda-package-cf.yml builds, for ci/matrix.py, and NumPy 2: without a numpy
variant conda-build falls back to NumPy 1.26, which has no builds for Python
3.13 and newer. conda-package-cf.yml passes --python and --numpy itself, so it
is unaffected.
@jharlow-intel
jharlow-intel marked this pull request as ready for review October 23, 2026 20:42
Copilot AI balanced review requested due to automatic review settings October 23, 2026 20:42

Copilot AI 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.

🔵 Needs a closer look

Full-version builds and the external Jenkins handoff remain unverified and need maintainer validation.

1 open issue
What changed in this PR

Adds GitHub Actions build and test support for mkl_fft’s conda-forge packages, preparing the repository for Intel Python CI’s future Jenkins integration.

Changes:

  • Derives Linux and Windows build matrices from recipe Python variants, limiting pull requests to the two newest regular versions.
  • Adds package-building and isolated testing scripts, with pytest JUnit reporting.
  • Configures artifact naming, pins Miniforge, and documents the CI integration.
File Description
conda-recipe-cf/​conda_build_config.yaml Declares Python variants and NumPy 2.
conda-recipe-cf/​AGENTS.md Documents the recipe’s matrix role.
ci/​test.py Tests the installed package and writes JUnit results.
ci/​README.md Explains CI operation and local usage.
ci/​matrix.py Derives platform and Python build matrices.
ci/​hooks.py Installs artifacts into isolated test environments.
ci/​config.yml Defines workflow, artifact names, and test requirements.
ci/​build.py Builds and collects packages for a selected Python version.
AGENTS.md Adds the Intel Python CI directory reference.
.github/​workflows/​intel-ci.yml Orchestrates matrix generation, builds, and package tests.
.github/​AGENTS.md Documents the workflow and its matrix source.

Review effort: Balanced

Comment thread ci/matrix.py
raise DeclarationError(f"{where}: python must be a list")
values = []
for item in lines[number + 1 :]:
item = _strip_comment(item, where)
A pull request now builds and tests the oldest and the newest regular Python
versions the recipe declares, instead of the two newest, so the oldest supported
Python is tested before a change merges rather than first on a release tag.
Intel's Jenkins tests the same two.
Intel's Jenkins now runs one benchmark cell for a repository with a
benchmarks/ directory, with the newest regular Linux Python's package, on a
bare-metal benchmarking machine, and requires ci/benchmark.py to say how.
It runs the asv suite against the installed package and keeps the results
with the build: one quick sample of each benchmark on a pull request, a full
measurement on a tag. asv comes from PyPI, as conda-forge has no build of it
for Python 3.15 yet.
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.

2 participants