Skip to content

Add conda-forge only build and test workflow - #3035

Draft
antonwolfy wants to merge 12 commits into
masterfrom
add-conda-forge-package-workflow
Draft

Add conda-forge only build and test workflow#3035
antonwolfy wants to merge 12 commits into
masterfrom
add-conda-forge-package-workflow

Conversation

@antonwolfy

@antonwolfy antonwolfy commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

This PR adds a Conda package (conda-forge) workflow that builds and tests dpnp using its build/runtime dependencies (compiler, oneMKL, dpctl and NumPy) resolved purely from conda-forge with --override-channels. It validates that dpnp works when built and installed solely from conda-forge, independently of the Intel channel.

The workflow relies on a dedicated conda-recipe-cf recipe:

  • pins the compiler and oneMKL to conda-forge builds (gxx 15 / sysroot 2.28 / NumPy 2);
  • lists cmake and ninja under requirements/build and keeps the remaining host dependencies in sync with pyproject.toml;
  • always relies on the conda-forge OpenCL ICD loaders (ocl-icd-system on Linux, khronos-opencl-icd-loader on Windows).

Build and test stages follow the same naming and structure as the existing Conda package workflow: a build matrix over Python 3.10-3.14 (including the free-threaded builds), retry-on-failure test runs, separate tensor tests, and OpenCL CPU driver registration on Windows.

  • Have you provided a meaningful PR description?
  • Have you added a test, reproducer or referred to an issue with a reproducer?
  • Have you tested your changes locally for CPU and GPU devices?
  • Have you made sure that new changes do not introduce compiler warnings?
  • Have you checked performance impact of proposed changes?
  • Have you added documentation for your changes, if necessary?
  • Have you added your changes to the changelog?

@antonwolfy antonwolfy self-assigned this Aug 20, 2026
@antonwolfy antonwolfy added this to the 0.21.0 release milestone Aug 20, 2026
@antonwolfy
antonwolfy force-pushed the add-conda-forge-package-workflow branch from cc38c04 to 8a4f416 Compare August 20, 2026 11:59
@github-actions

Copy link
Copy Markdown
Contributor

View rendered docs @ https://intelpython.github.io/dpnp/pull/3035/index.html

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Array API standard conformance tests for dpnp=0.21.0dev5=py314ha0e2e8e_17 ran successfully.
Passed: 1375
Failed: 0
Skipped: 7

@coveralls

coveralls commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

Coverage Status

coverage: 78.477%. remained the same — add-conda-forge-package-workflow into master

Add a 'Conda package (conda-forge)' workflow with a dedicated
conda-recipe-cf recipe that builds and tests dpnp using compiler,
oneMKL, dpctl and NumPy dependencies resolved solely from conda-forge.
The host dependency on dpctl was missing, so find_package(Dpctl) had
nothing to locate in the build environment.
A free-threaded (cp314t) dpctl is not yet available on conda-forge, so
the free-threaded build/test entries fail to solve. Remove them from the
build, test_linux and test_windows matrices with a TODO to restore them
once conda-forge ships a free-threaded dpctl.
…pe-cf

conda-forge folds the Intel compiler runtime libraries (libircmt.lib on
Windows, libirc.a on Linux) into the build-only dpcpp_impl package, so they
land in the build prefix and are off the linker's default search path. Add
that directory via LIB (Windows) / LIBRARY_PATH (Linux) so icx can link.
dpctl.get_devices() returns a list in dpctl < 0.23 and a tuple from 0.23
onwards, so gate the tuple-equality assertion with with_requires.
Everything in this lane comes from conda-forge, so the Intel-channel
set-intel-ocl-icd-registry.ps1 helper and cl.cfg are never present. Drop the
dead branches and keep only the manual ICD-loader registration of intelocl64.dll.
Intel internal validation scans every recipe meta.yaml in the source tree
and requires the LEGAL NOTICE / EULA block in about/description, so keep it
in sync with conda-recipe/meta.yaml.
dpctl 0.23 changed get_devices() and SyclDevice.create_sub_devices() to
return tuples instead of lists. Gate the affected tensor tests with
with_requires so they skip on older dpctl (e.g. conda-forge 0.22.1).
@antonwolfy
antonwolfy force-pushed the add-conda-forge-package-workflow branch from e1b3b3c to 9fb2988 Compare August 21, 2026 10:16
Unify the two test jobs into a single matrix job (ubuntu-latest,
windows-2022) using bash for both OSes, keeping only Set Swap Space
(Linux) and the OpenCL CPU driver registration (Windows) OS-specific.
Also drop the unused cmd-only steps carried over from the legacy layout.
Move the build and test jobs into a reusable workflow_call workflow
(conda-build-test.yml) parameterized by runner, conda subdir, channels
and recipe dir. Reduce conda-package-cf.yml to thin per-OS callers with
a concurrency group replacing the cancel-workflow action.
github.workspace and $CONDA are backslash paths on Windows that bash
mangles. Use workspace-relative paths for the channel/version/repo dirs
and convert $CONDA via cygpath before sourcing conda in the retry steps.
Under Git Bash on Windows the mamba wrapper mangles the -c ./channel
argument ('hannel' is not recognized), while conda parses it correctly.
Switch install/list to conda; keep use-mamba for the libmamba solver.
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