Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
9af7c57
Migrate conda packaging to rattler-build (v1 recipe format)
ekomarova Aug 17, 2026
4c677df
Merge branch 'master' into rattler-build-migration
ekomarova Aug 18, 2026
9d616be
Fix Windows build: pass GIT_DESCRIBE_NUMBER into rattler-build script…
ekomarova Aug 18, 2026
b15031c
Merge branch 'master' into rattler-build-migration
ekomarova Aug 18, 2026
ee3ec67
Fix build variant for free-threaded Python 3.14t
ekomarova Aug 18, 2026
b2a68e2
Sync recipe.yaml deps with meta.yaml
ekomarova Aug 18, 2026
b2bf4a8
Replace miniconda with rattler-build-action in the build job
ekomarova Aug 18, 2026
939c991
Merge branch 'master' into rattler-build-migration
ekomarova Aug 20, 2026
4e0c6d0
Merge branch 'master' into rattler-build-migration
ekomarova Aug 25, 2026
8ba4cc1
Rename recipe to rattler_recipe to fix internal CI
ekomarova Aug 28, 2026
da53abb
Use hash instead of version to install rattler-build
ekomarova Aug 28, 2026
af48c14
Merge branch 'master' into rattler-build-migration
ekomarova Aug 28, 2026
9321553
Revert build_conda_pkg.yml
ekomarova Aug 28, 2026
d1820fc
Merge branch 'master' into rattler-build-migration
ekomarova Sep 5, 2026
8082a58
Address PR review comments
ekomarova Sep 15, 2026
cbccd6c
Merge branch 'master' into rattler-build-migration
ekomarova Sep 15, 2026
fd282b6
Apply batched suggestions from code review
antonwolfy Oct 1, 2026
3d1b8ba
Merge branch 'master' into rattler-build-migration
antonwolfy Oct 1, 2026
100f3a3
Merge branch 'master' into rattler-build-migration
antonwolfy Oct 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 34 additions & 27 deletions .github/workflows/conda-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ jobs:
shell: ${{ matrix.os == 'windows-2022' && 'cmd /C CALL {0}' || 'bash -el {0}' }}

env:
build-conda-pkg-env: 'environments/build_conda_pkg.yml'
build-env-name: 'build'
python-label: ${{ endsWith(matrix.python_spec, 't') && format('{0}t', matrix.python) || matrix.python }}
python-conda-spec: ${{ matrix.python_spec || matrix.python }}

Expand All @@ -75,46 +73,55 @@ jobs:
persist-credentials: false
fetch-depth: 0

- name: Setup miniconda
id: setup_miniconda
continue-on-error: true
uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1
# rattler-build is a standalone binary with no conda/Python dependency,
# so building conda packages with it doesn't need a full conda
# distribution on the runner - only rattler-build itself needs to be on
# PATH
- name: Setup rattler-build
uses: prefix-dev/rattler-build-action@1ca5f45832f419a46d1326ccc5861d7e14d67c44 # v0.2.39
with:
miniforge-version: latest
use-mamba: 'true'
conda-remove-defaults: 'true'
environment-file: ${{ env.build-conda-pkg-env }}
activate-environment: ${{ env.build-env-name }}

- name: ReSetup miniconda
if: steps.setup_miniconda.outcome == 'failure'
uses: conda-incubator/setup-miniconda@8ee1f361103df19b6f8c8655fd3967a8ecb162d5 # v4.0.1
with:
miniforge-version: latest
use-mamba: 'true'
conda-remove-defaults: 'true'
environment-file: ${{ env.build-conda-pkg-env }}
activate-environment: ${{ env.build-env-name }}
setup-only: true

- name: List installed packages
run: mamba list
- name: Check rattler-build version
run: rattler-build --version

- name: Store conda paths as envs
- name: Store build output paths
shell: bash -el {0}
run: |
echo "CONDA_BLD=$CONDA_PREFIX/conda-bld/${{ runner.os == 'Linux' && 'linux' || 'win' }}-64/" | tr "\\\\" '/' >> "$GITHUB_ENV"
echo "CONDA_BLD=$GITHUB_WORKSPACE/output/${{ runner.os == 'Linux' && 'linux-64' || 'win-64' }}/" >> "$GITHUB_ENV"
echo "WHEELS_OUTPUT_FOLDER=$GITHUB_WORKSPACE${{ runner.os == 'Linux' && '/' || '\\' }}" >> "$GITHUB_ENV"

- name: Compute version from git describe
shell: bash -el {0}
run: |
DESCRIBE=$(git describe --tags --long)
echo "GIT_DESCRIBE_TAG=$(echo "$DESCRIBE" | sed -E 's/-[0-9]+-g[0-9a-f]+$//')" >> "$GITHUB_ENV"
Comment thread
ekomarova marked this conversation as resolved.
echo "GIT_DESCRIBE_NUMBER=$(echo "$DESCRIBE" | sed -E 's/^.*-([0-9]+)-g[0-9a-f]+$/\1/')" >> "$GITHUB_ENV"

- name: Compute rattler-build arguments
shell: bash -el {0}
run: |
read -ra RATTLER_CHANNELS <<< "$(echo "${{ env.channels-list }}" | sed 's/--override-channels//')"
echo "RATTLER_BUILD_ARGS=--no-include-recipe --test skip --channel-priority disabled --target-platform ${{ runner.os == 'Linux' && 'linux-64' || 'win-64' }} --variant-config conda-recipe/conda_build_config.yaml --variant \"python=${{ env.python-conda-spec }}\" --variant numpy=2 ${RATTLER_CHANNELS[*]}" >> "$GITHUB_ENV"

- name: Build conda package
id: build_conda_pkg
continue-on-error: true
run: conda-build --no-test --python "${{ env.python-conda-spec }}" --numpy 2.0 ${{ env.channels-list }} conda-recipe
uses: prefix-dev/rattler-build-action@1ca5f45832f419a46d1326ccc5861d7e14d67c44 # v0.2.39
with:
recipe-path: conda-recipe/rattler_recipe.yaml
build-args: ${{ env.RATTLER_BUILD_ARGS }}
upload-artifact: false
env:
MAX_BUILD_CMPL_MKL_VERSION: '2027.0a0'

- name: ReBuild conda package
if: steps.build_conda_pkg.outcome == 'failure'
run: conda-build --no-test --python "${{ env.python-conda-spec }}" --numpy 2.0 ${{ env.channels-list }} conda-recipe
uses: prefix-dev/rattler-build-action@1ca5f45832f419a46d1326ccc5861d7e14d67c44 # v0.2.39
with:
recipe-path: conda-recipe/rattler_recipe.yaml
build-args: ${{ env.RATTLER_BUILD_ARGS }}
upload-artifact: false
env:
MAX_BUILD_CMPL_MKL_VERSION: '2027.0a0'

Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ This release is compatible with NumPy 2.5.
* Added `dpnp.broadcast` class implementation [#2901](https://github.com/IntelPython/dpnp/pull/2901)
* Added the `ndmax` keyword to `dpnp.array` for compatibility with NumPy [#3044](https://github.com/IntelPython/dpnp/pull/3044)
* Added `UsmNDArray_RemoveQueueRef` C API function to release a queue reference obtained from `UsmNDArray_GetQueueRef` [#3042](https://github.com/IntelPython/dpnp/pull/3042)
* Added a `rattler-build`-compatible conda recipe (`conda-recipe/rattler_recipe.yaml`) alongside the existing `conda-build` recipe [#3031](https://github.com/IntelPython/dpnp/pull/3031)

### Changed

Expand Down
2 changes: 1 addition & 1 deletion conda-recipe/bld.bat
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ set "TBB_ROOT_HINT=%PREFIX%/Library"
set "DPL_ROOT_HINT=%PREFIX%/Library"

REM Overriding IPO is useful for building in resources constrained VMs (public CI)
if DEFINED OVERRIDE_INTEL_IPO (
if not "%OVERRIDE_INTEL_IPO%"=="" (
set "CMAKE_ARGS=%CMAKE_ARGS% -DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=FALSE"
)

Expand Down
130 changes: 130 additions & 0 deletions conda-recipe/rattler_recipe.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
schema_version: 1
Comment thread
ekomarova marked this conversation as resolved.

context:
max_compiler_and_mkl_version: ${{ env.get("MAX_BUILD_CMPL_MKL_VERSION", default="2027.0a0") }}
required_compiler_version: ${{ env.get("MIN_BUILD_CMPL_VERSION", default="2026.1.1") }}
required_mkl_version: "2026.0"
required_dpctl_version: 0.23.0dev0

package:
name: dpnp
version: ${{ env.get("GIT_DESCRIBE_TAG") }}

source:
path: ..

build:
number: ${{ env.get("GIT_DESCRIBE_NUMBER") }}
script:
file: ${{ "bld.bat" if win else "build.sh" }}
env:
WHEELS_OUTPUT_FOLDER: ${{ env.get("WHEELS_OUTPUT_FOLDER", default="") }}
OVERRIDE_INTEL_IPO: ${{ env.get("OVERRIDE_INTEL_IPO", default="") if win else "" }}
# conda-build used to forward GIT_DESCRIBE_NUMBER into the build script
# automatically; rattler-build does not, so bld.bat's
# `wheel tags --remove --build %GIT_DESCRIBE_NUMBER%` was silently
# getting an empty value on Windows, which made that command fail and
# broke the wheel install step further down the script.
GIT_DESCRIBE_NUMBER: ${{ env.get("GIT_DESCRIBE_NUMBER") }}
dynamic_linking:
missing_dso_allowlist:
- "*DPCTLSyclInterface*"
- if: win
then: "*/dpnp_backend_c.dll"

requirements:
host:
- python
- pip >=25.0
- pybind11 >=3.0.2
- python-build>=1.2.2
- cmake>=3.31.6
- cython>=3.1.0
- dpctl >=${{ required_dpctl_version }}
- if: not win
then: ninja>=1.11.1
- numpy
- scikit-build>=0.18.1
- setuptools>=79.0.1
- wheel>=0.45.1
- versioneer ==0.29
# versioneer dependency
- if: match(python, "<3.11")
then: tomli
# Do not use pyproject.toml for setting dependencies on OneAPI packages
- mkl-devel-dpcpp >=${{ required_mkl_version }},<${{ max_compiler_and_mkl_version }}
- onedpl-devel
- tbb-devel
- if: win
then: opencl-headers >=2025.06.13
build:
- ${{ compiler('cxx') }}
- ${{ stdlib('c') }}
- ${{ compiler('dpcpp') }} >=${{ required_compiler_version }},<${{ max_compiler_and_mkl_version }}
run:
- python
- ${{ pin_compatible('dpctl', lower_bound='x.x.x', upper_bound=None) }}
- ${{ pin_compatible('intel-sycl-rt', lower_bound='x.x', upper_bound='x') }}
- ${{ pin_compatible('intel-cmplr-lib-rt', lower_bound='x.x', upper_bound='x') }}
- ${{ pin_compatible('mkl', lower_bound='x.x', upper_bound='x') }}
- ${{ pin_compatible('onemkl-sycl-blas', lower_bound='x.x', upper_bound='x') }}
- ${{ pin_compatible('onemkl-sycl-dft', lower_bound='x.x', upper_bound='x') }}
- ${{ pin_compatible('onemkl-sycl-lapack', lower_bound='x.x', upper_bound='x') }}
- ${{ pin_compatible('onemkl-sycl-rng', lower_bound='x.x', upper_bound='x') }}
- ${{ pin_compatible('onemkl-sycl-vm', lower_bound='x.x', upper_bound='x') }}
- numpy
- if: linux
then: ocl-icd-system
- if: win
then: khronos-opencl-icd-loader
ignore_run_exports:
by_name:
- dpctl
- numpy
- python
Comment thread
antonwolfy marked this conversation as resolved.
# leaked from mkl-devel-dpcpp; drags in unused onemkl-sycl-{datafitting,sparse,stats}
- mkl-dpcpp
# building with Intel DPC++ and do not import the MSVC runtime DLLs
- if: win
then: vc14_runtime
- if: win
then: ucrt

tests:
- script:
- pip check
- python -c "import dpnp; print(dpnp.__version__)"
Comment thread
ekomarova marked this conversation as resolved.
- python -m dpctl -f
requirements:
run:
- pip
- script: ${{ "run_test.bat" if win else "run_test.sh" }}
requirements:
run:
- pytest
- setuptools
- if: match(python, "<3.14")
then: scipy

about:
license: BSD-3-Clause
license_file: LICENSE.txt
summary: Data Parallel Extension for NumPy
description: |
<strong>LEGAL NOTICE: Use of this software package is subject to the
software license agreement (as set forth above, in the license section of
the installed Conda package and/or the README file) and all notices,
disclaimers or license terms for third party or open source software
included in or with the software.</strong>
<br/><br/>
EULA: <a href="https://opensource.org/licenses/BSD-3-Clause" target="_blank">BSD-3-Clause</a>
<br/><br/>


homepage: https://github.com/IntelPython/dpnp

extra:
recipe-maintainers:
- antonwolfy
- vlad-perevezentsev
- ndgrigorian
Loading