Skip to content
Open
80 changes: 53 additions & 27 deletions .github/workflows/conda-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,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 @@ -73,46 +71,74 @@ jobs:
with:
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@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"
echo "GIT_DESCRIBE_NUMBER=$(echo "$DESCRIBE" | sed -E 's/^.*-([0-9]+)-g[0-9a-f]+$/\1/')" >> "$GITHUB_ENV"

# rattler-build looks for build.bat on Windows (build.sh/build.bat is the
# symmetric naming it expects), while conda-build is still used for this
# recipe in non-GitHub CI and required bld.bat.
# Keep bld.bat as the single real source file and
# just copy it under the name rattler-build needs, so both build systems
# keep working off the same script without maintaining two duplicates
- name: Prepare build.bat for rattler-build
if: runner.os == 'Windows'
shell: bash -el {0}
run: cp conda-recipe/bld.bat conda-recipe/build.bat

- 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
shell: bash -el {0}
run: |
read -ra RATTLER_CHANNELS <<< "$(echo "${{ env.channels-list }}" | sed 's/--override-channels//')"
rattler-build build \
--recipe conda-recipe \
--no-include-recipe \
--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[@]}"
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
shell: bash -el {0}
run: |
read -ra RATTLER_CHANNELS <<< "$(echo "${{ env.channels-list }}" | sed 's/--override-channels//')"
rattler-build build \
--recipe conda-recipe \
--no-include-recipe \
--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[@]}"
env:
MAX_BUILD_CMPL_MKL_VERSION: '2027.0a0'

Expand Down
121 changes: 121 additions & 0 deletions conda-recipe/recipe.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
schema_version: 1

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:
env:
WHEELS_OUTPUT_FOLDER: ${{ env.get("WHEELS_OUTPUT_FOLDER", default="") }}
OVERRIDE_INTEL_IPO: ${{ env.get("OVERRIDE_INTEL_IPO", default="") }}
# 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*"
- "*/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('dpcpp-cpp-rt', lower_bound='x.x', upper_bound='x') }}
- ${{ 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
# building with Intel DPC++ and do not import the MSVC runtime DLLs
- if: win
then: vc14_runtime
- if: win
then: ucrt

tests:
- script:
- python -c "import dpnp; print(dpnp.__version__)"
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
3 changes: 1 addition & 2 deletions environments/build_conda_pkg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,4 @@ name: Build DPNP conda package
channels:
- conda-forge
dependencies:
- conda-build=25.11.1
- conda-verify=3.4.2
- rattler-build
Loading